栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

开发/调试linux内核最有效,最优雅的方法是什么

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

开发/调试linux内核最有效,最优雅的方法是什么

这是我有关如何构建和运行定制内核的说明。

获取资源

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
命令后都会被替换。

删除自定义内核

如果您不再需要自定义内核,则可能要删除它。要删除已安装的内核,请执行下一步。

  1. 删除所有安装到/ boot的文件:

    $ sudo rm -f *joe*
  2. 卸下所有已安装的模块:

    $ sudo rm -rf /lib/modules/*joe*
  3. 更新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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409041.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号