以下是有关如何构建和运行自定义内核的说明.
获取来源
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 -r
3.16.0-4-amd64
要从我的机器上运行的系统获取配置:
$cp /boot/config-`uname -r` ./.config
要更新我的配置(使用默认答案),我使用了下一个命令:
$make olddefconfig
要禁用(不构建)当前系统中未加载的模块:
$make localmodconfig
要使用默认答案回答所有问题,我只需单击Enter直到完成
(实际上只有两次).
接下来我做了:
$make menuconfig
并选择了下一个配置选项:
CONFIG_LOCALVERSION_AUTO=y
CONFIG_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必须在安装之前运行,因为使用模块填充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的第二行,输入
– 并使用第4行启动.
这次运行之后:
$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
链接