内核编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#查看当前内核版本
uname -a

#源码获取
sudo apt-get install linux-source
cd /usr/src
tar xvf linux-source-*.tar.bz2
cd linux-source-*

#补丁应用
patch -p1 < /path/to/patch.diff
#`-p1`选项可能需要根据补丁文件的格式进行调整。

#编译一些老版本时,config文件差异比较大, 解决方法是使用一些老版本的pve kernel 的配置文件
# http://mirrors.ustc.edu.cn/proxmox/debian/dists/bullseye/pve-no-subscription/binary-amd64/
#wget 下载好以后,dpkg -i 安装,之后copy对应的内核config文件进行编译

make menuconfig #或者oldconfig,本质是配置/usr/src/config
make -j$(nproc)
#根据 .config 配置文件编译内核、内核模块和其他必要的文件,生成内核镜像(vmlinuz)和其他相关的文件
#编译过程中可能出现每包头文件或者其他错误,可能是版本原因,针对报错解决即可

#内核安装
#安装过程可能会出现头文件报错或者缺库、或安装完成后缺库,只需要apt安装对应的库就好,make过程中会自动hook

#安装内核模块(在运行时可以加载或卸载的模块)
#从编译输出的目录(如 lib/modules/<kernel_version>/),并执行 depmod 来生成模块依赖关系
sudo make modules_install

#内核镜像(如 vmlinuz)、配置文件(如 config)、符号表文件(如 System.map)和 initrd 镜像安装到 /boot 目录
sudo make install

#更新启动引导程序
sudo update-grup

关于配置选项相关操作,参考::star::star:Linux 内核动手编译实用指南

KGDB配置

编译选项

image-20241230163152546

参考资料KGDB原理分析及远程挂载调试ARM64内核

内核启动参数

1
kgdboc=ttyS0,115200 kgdbwait kgdbtcp=192.168.1.2:1234
  • kgdboc=ttyS0,115200:设置串口调试(可选)
  • kgdbwait:启动时等待调试器连接
  • kgdbtcp=192.168.1.2:1234:被调试主机的IP和端口

永久修改:/etc/default/grubGRUB_CMDLINE_LINUX变量

proxmox-boot-tool

proxmox-boot-tool,一个脚本,设置启动内核、增删内核等,使用设置grub内核启动参数的方式不一定生效的情况下可以使用这个工具。

proxmox-boot-tool

1
git clone https://git.proxmox.com/git/proxmox-kernel-helper.git

之后 make deb会在当前路径下生成对应的deb包,apt install安装后可以正常使用/usr/sbin/proxmox-boot-tool

参考链接:

https://kernelnewbies.org/KernelBuild


本站由 Zane Jiang 使用 Stellar 1.33.1 主题创建,一款很棒的 Hexo 主题!

总访问 次 || 本页访问
总访客 人 || 本页访客