最近开始往linux内核方向研究,苦于目前找到的资料与我个人学习习惯不同,所以就一遍啃骨头一遍整理思路,尝试整理一条适合自己的学习路线。
学习之前先整理下手头的资源吧
一个内核新人社区,有很多不错的东西https://kernelnewbies.org/
linux内核官方网站 https://www.kernel.org/
内核本质上也是一系列代码,因此绝不能脱离程序来学内核。为了对内核有一个大体的了解,先动手安装一下内核是个不错的选择。
首先去官方网站下载你想研究的内核版本,然后解压。内核中有一个Documentation的文件夹,里面就有各个模块的文档。
在内核源码目录(例如linux-X.X.X)下,复制一下本地的内核配置文件用来编译
cp /boot/config-`uname -r`* .config
然后make一下config
最简单的就是
make olddefconfig
据说使用下面的配置会快一点,能快多少我也不太清楚
make localmodconfig
然后
就可以make了,直接make
如果cpu有X个核的话可以 make -jX 从而加快一点速度
我自己虚拟机单核编译了4个小时
编译会在每个模块下生成对应的.ko文件,就是内核模块了
编译完成后需要把它们安装到本地
sudo make modules_install install
安装过程比编译会快很多,安装完之后需要对引导程序进行配置
sudo vim /etc/default/grub
如果这个文件里有下面两行内容的话,直接注释掉
GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true
然后进行如下修改
GRUB_TIMEOUT=10 GRUB_TIMEOUT_STYLE=menu
修改完毕后运行下面的指令刷新配置,然后重启来加载新内核
sudo update-grub2
使用uname -a就可以发现已经更换新内核了