linux kernel编译,大致可分为几个步骤:
1. 获取想要编译的目标版本源码。
源码获取地址:https://www.kernel.org/
以下载linux-2.6.32.63.tar.xz为例。
2. 解压缩源码。将kernel的源码压缩文件上传到自己编译机器上,通过tar命令进行解压。
命令格式:tar xvf linux-2.6.32.63.tar.xz
解压结果会在当前路径生成一个linux-2.6.32.63的目录。
3. 准备.config文件。可以使用make oldconfig,或make menuconfig命令在当前目录生成编译所需的.config文件。
又或者是进入到arch/x86_64/目录下,拷贝KConfig文件出来,再重命名成.config均可。
4. 编辑配置.config文件,选择想要编译进vmlinux的modules。
5. 执行make -j4命令多线程编译。编译完成之后,会生成bzImage文件,这是压缩过后的vmlinux内核映像文件。
6. 执行make modules_install,会将编译完成的modules添加到/lib/modules/2.6.32.63对应内核的目录。
7. 执行make install,会自动生成initrd文件,以及重新配置/boot/grub/menu.lst文件,将自己编译的内核添加到系统启动选项中。
至此,编译一个版本的内核就完成了。
-------------------------------------------------分 割 线-------------------------------------------------
如果,想要编译此版本的驱动,或想要添加默认没有的模组。两种方式可行。
1. 通过修改.config文件,将需要的驱动或模组开关打开,比如,想要增加gfs2的modules。编辑CONFIG_GFS2=m。
2. 进入到对应驱动的目录下,执行命令make /lib/modules/linux-xxx/build M=$PWD modules进行编译。
编译出对应的ko文件之后,通过make -C modules_install将modules添加进该内核版本的/lib/modules/linux-xxxx目录下,在必要时通过insmod <xx>.ko的方式,加载到系统当中。另外modprobe命令也相当的好用,因为modprobe会自动解决modules加载时的依赖。