分析小米内核Github链接
Analysis of alioth-r-oss
该版本对应的链接
通过前面的学习我们知道,当为一个特定的平台构建Linux内核时,通常是以一个特定的defconfig为基础来进行内核配置。该平台的defconfig包含了为该平台正确配置内核的所有Linux kconfig设置(功能、默认系统参数等)。Defconfig文件通常存储在内核树中的arch/*/configs/
。
进入alioth-r-oss
,有很多文件夹这些文件夹分别是什么意思呢?通过调研我们知道了:
arch:不同平台体系相关代码
block:块设备驱动
certs:与认证和签名相关代码
crypto:内核常用加密、压缩算法等代码
documentation:描述模块功能和协议规范
drivers:驱动程序(USB总线、PCI总线、显卡驱动等)
firmware:二进制固件
fs:虚拟文件系统代码
include:内核代码依赖的绝大部分头文件
init:内核初始化代码,联系到内存各组件入口
ipc:进程间通信实现,比如共享内存、信号量、匿名管道等
kernel:内核核心代码,包括进程管理、IRQ、时间等
lib:C标准库的子集
mm:内存管理相关实现
net:网络协议代码,比如TCP、IPv6、WiFi、以太网实现等
samples:内核示例代码
scripts:编译和配置内核所需脚本;perl/bash
security:内核安全模型相关代码,如selinux
sound:声卡驱动代码
tools:与内核交互/开发工具
usr:用户打包和压缩内核的实现代码
virt:/kvm虚拟化目录相关支持实现
首先进入相应的文件夹
arch/*/
deconfigs存储在arch/*/configs
中,这里的*
是通配符,那么arch
文件夹下的所有内容应该都是包含/configs/deconfig
。
Analysis of arm64
果然,在这里存在一个名为deconfig
的文件。该文件列出了内核配置要求。
多打开几个文件可以发现,凡是带有deconfig
字样的文件,内容都是一些内核配置信息。
Analysis of cappu-n-oss
该版本对应链接
进入该版本文件夹后,会发现Pad内核文件比手机的内核文件多了一个文件夹Android/configs
通过查看安卓官网我们知道:
这个目录中的文件是用来作为Android内核配置的基础的。内核配置的基础。所有设备都应该启用android-base.cfg中的选项。虽然不是强制性的,但android-recommended.cfg中的选项可以启用高级的安卓功能。
假设你的设备已经有了一个简约的defconfig,一个可能的方法是启用这些选项的方法是。(根据官网的说法,该脚本语句正是生成内核配置
的语句)
ARCH=<arch> scripts/kconfig/merge_config.sh <path_to>/<device>_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg
这将产生一个.config,然后可以用来保存一个新的defconfig或编译一个启用了Android功能的新内核。
因为没有一个工具可以一致地生成这些配置片段。让我们把它们按字母排序,而不是随机的。
提取内核配置
通过查阅资料,我发现了两种提取内核配置的方法。这两种方法都利用了extract-ikconfig
脚本。
第一种
利用bzImage
./scripts/extract-ikconfig /path/bzImage > /path/config
第二种
利用vmlinux
./scripts/extract-ikconfig /path/vmlinux
报错
在使用这两种方法时,我们要确保内核配置文件CONFIG_IKCONFIG=y
,不然就会出现下图中的错误。
CONFIG_IKCONFIG 在何处
进入到 .config
文件中
只有该配置选项打开,我们才能提取内核配置文件。
先手动添加试试
我使用语句 make menuconfig arch=arm64
加载了arm64的config,现在开始执行编译安装:
make -j8
make modules_install
make install
又是漫长的2个小时
完成上面步骤后我们可以执行命令./scripts/extract-ikconfig /path/vmlinux > config_test
成功获取了内核配置。
由于我自行修改了linux-5.0.5目录下的.config
,并且使用了arm64下的配置文件,现在还不能确定自行修改.config有没有作用,因为我没有修改Makefile嘛
。