如何定制Linux内核?

2022-10-06 20:18:01 浏览数 (1)

上篇文章我们讲述了如何定制Linux外围文件系统,本文我们来讲讲如何定制Linux内核。

思路

  1. 对照windows硬件设备管理器检视设备配置:CPU、硬盘控制器、网络控制器、USB控制器(HID、Mass storage);
  2. 先将裁完的内核搭配原文件系统观察系统能否启动,能启动后再换成自制文件系统;
  3. 不一次性裁完,一个模块一个模块裁,每裁完一个模块编译一次观察系统是否能够启动;
  4. 先裁确定的部分,不确定的模块先不裁,将确定的都裁完后,再单独将不确定的选项添加进去进行编译,观察系统能否启动。

Step1

下载最新的稳定版Linux kernel src。

Step2

解压之后输入下列命令进行配置:

代码语言:javascript复制
make menuconfig

部分模块选择:

64位的系统64位的系统
任何人均可访问swap任何人均可访问swap
程序通信程序通信
selinux加载时所需要的设置selinux加载时所需要的设置
将.config内核配置文件放入内核中将.config内核配置文件放入内核中
支持开机加载RAM disk支持开机加载RAM disk
支持动态模块加载支持动态模块加载
电源全关电源全关
socket要选socket要选
TCPTCP
DHCP支持DHCP支持
因为windows网卡是qualcomm的(如下图),所以要以上两个驱动因为windows网卡是qualcomm的(如下图),所以要以上两个驱动
可以看到我的windows网卡是qualcomm的可以看到我的windows网卡是qualcomm的
选中之后才会加载usb-storage.ko模块选中之后才会加载usb-storage.ko模块
存储媒介的驱动存储媒介的驱动
fat、vfat文件支持fat、vfat文件支持
ntfs文件支持ntfs文件支持
设置语言,如果设置错误,U盘读不出设置语言,如果设置错误,U盘读不出
以上三项是语言模块,如果不选上,则语言设置成简体中文和utf8也没用,因为根本没有这个模块以上三项是语言模块,如果不选上,则语言设置成简体中文和utf8也没用,因为根本没有这个模块
内核调试,包括将调试信息打印到显示屏上内核调试,包括将调试信息打印到显示屏上
加密机制加密机制
加密机制加密机制

Step3

配置好之后会生成.config文件,然后输入命令(用4个处理器同时编译):

代码语言:javascript复制
make –j4

进行编译,等待编译完成后,输入命令:

代码语言:javascript复制
make modules_install

/lib/modules/目录下生成内核版本的模块驱动,拷贝到bootmini/lib/modules/对应目录下。然后输入命令:

代码语言:javascript复制
make install

生成编译完成的内核,拷贝到/boot目录下,并修改/boot/grub/grub.conf中小系统对应的内核,即可利用新编译的内核启动。

真机效果

1. 网络功能(ifconfig 和 ping)

ifconfig ifconfig
pingping

2. 系统支持通过ssh方式访问其他机器

总结

  1. 裁剪内核的过程中首先应该把完全能够确定要或不要的模块删掉或加进内核,再慢慢将不确定的模块少量甚至单独加进去,编译安装观察是否能够重启,否则一次性全部裁完发现kernel panic了完全不知道哪里错了。
  2. 万一kernel panic了,解决方案是重开一个虚拟机,将原系统的硬盘挂载到新开的虚拟机里,就可以看到原系统的文件系统了。
原系统的根目录原系统的根目录

0 人点赞