这是我有关如何构建和运行定制内核的说明。
获取资源
Linus Torvalds的树是[1]。
在[2]上将其标记为“主线”。
要克隆它,请使用[1]中的信息:
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
现在转到
linux/dir并在master分支上签出(我们需要使用最新的更改作为开发的起点):
$ cd linux$ git checkout master
在实际开发之前,请不要忘记更新您的分支:
$ git pull --rebase
建造
我的机器上的内核版本:
$ uname -r3.16.0-4-amd64
要从我的机器上运行的系统获取配置:
$ cp /boot/config-`uname -r` ./.config
要更新配置(使用默认答案),我使用了下一个命令:
$ make olddefconfig
要禁用(不构建)当前系统中未加载的模块:
$ make localmodconfig
要用默认答案回答所有问题,我只是单击
Enter直到完成(实际上只是两次)。
接下来,我做了:
$ make menuconfig
然后选择下一个配置选项:
CONFIG_LOCALVERSION_AUTO=yCONFIG_LOCALVERSION="-joe"
设置ccache和构建环境:
$ ccache -C$ ccache -M 4G$ export CC="ccache gcc"
构建内核(使用
ccache):
$ reset$ make -j4$ make -j4 modules
构建的内核映像为:
arch/x86_64/boot/bzImage
正在安装
为内核安装模块:
$ sudo make modules_install
安装新内核:
$ sudo make install
已安装的模块位于
/lib/modules/*-joe/kernel/。
已安装的内核文件位于
/boot/*joe*:
- config-*joe*- initrd.img-*joe*- System.map-*joe*- vmlinuz-*joe*
update-grub是作为
make install脚本的一部分运行的,因此无需手动运行。
注意 :
modules_install必须在 之前
运行
install,因为
install使用模块填充initramfs映像需要规则。检查
/boot/initrd.img-*joe*文件大小:必须大于等于15
MiB(如果较小,则可能是模块不在其中)。
启动定制的内核
通常,自定义内核的版本应大于发行版内核的版本,因此默认情况下应运行自定义内核。如果否,请继续阅读。
重新启动,转到GRUB,选择下一个条目:
-> Advanced options for Debian GNU/Linux -> Debian GNU/Linux, with Linux 4.0.0-rc7-joe-00061-g3259b12
使您的发行版内核默认加载
由于视频可能无法在您的自定义内核中运行(为此必须重建视频驱动程序),因此您可能希望GRUB在默认情况下加载make distro内核。
为此,只需编辑
/etc/default/grub文件:
$ sudo vim /etc/default/grub
换线
GRUB_DEFAULT=0
至
GRUB_DEFAULT="1>3"
其中的
"1>3"意思是:-转到GRUB中的第二行,输入-并使用第四行启动。
运行之后:
$ sudo update-grub
注意:不要编辑
/boot/grub/grub.cfg文件,因为它是自动生成的,并且在每个
update-grub命令后都会被替换。
删除自定义内核
如果您不再需要自定义内核,则可能要删除它。要删除已安装的内核,请执行下一步。
删除所有安装到/ boot的文件:
$ sudo rm -f *joe*
卸下所有已安装的模块:
$ sudo rm -rf /lib/modules/*joe*
更新GRUB:
$ sudo update-grub
清理内置内核
如果您不需要进行增量构建,而是想要进行清理构建(例如,您签出了另一个版本),则可能要先清理生成的文件:
$ make -j4 distclean
链接
[1]
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
[2] https://kernel.org/
[3]
http://kernelnewbies.org/FAQ/KernelCompilation



