• Analysis of Xiaomi Kernel(Updating)


    分析小米内核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= scripts/kconfig/merge_config.sh /_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg
    
    • 1

    这将产生一个.config,然后可以用来保存一个新的defconfig或编译一个启用了Android功能的新内核。

    因为没有一个工具可以一致地生成这些配置片段。让我们把它们按字母排序,而不是随机的。
    在这里插入图片描述

    提取内核配置

    通过查阅资料,我发现了两种提取内核配置的方法。这两种方法都利用了extract-ikconfig脚本。

    第一种

    利用bzImage

    ./scripts/extract-ikconfig /path/bzImage > /path/config
    
    • 1
    第二种

    利用vmlinux

    ./scripts/extract-ikconfig /path/vmlinux
    
    • 1
    报错

    在使用这两种方法时,我们要确保内核配置文件CONFIG_IKCONFIG=y,不然就会出现下图中的错误。
    在这里插入图片描述

    CONFIG_IKCONFIG 在何处

    进入到 .config文件中

    在这里插入图片描述
    只有该配置选项打开,我们才能提取内核配置文件。
    先手动添加试试
    在这里插入图片描述
    我使用语句 make menuconfig arch=arm64 加载了arm64的config,现在开始执行编译安装:

    make -j8
    make modules_install
    make install
    
    • 1
    • 2
    • 3

    又是漫长的2个小时
    完成上面步骤后我们可以执行命令./scripts/extract-ikconfig /path/vmlinux > config_test成功获取了内核配置。
    在这里插入图片描述
    在这里插入图片描述

    由于我自行修改了linux-5.0.5目录下的.config,并且使用了arm64下的配置文件,现在还不能确定自行修改.config有没有作用,因为我没有修改Makefile嘛

  • 相关阅读:
    Linux - 还不懂 gdb 调试器?(调试软件)
    【第38篇】MixConv:混合深度卷积核
    【Python基础】字典和函数拓展
    leetcode top100 (9)找到字符串中所有字母异位词
    CLion搭建Qt开发环境,并解决目录重构问题(最新版)
    OpenAI乱局幕后大佬浮出水面:Quora联合创始人
    网络协议-语义、语法和时序
    系统kafka不消费-topic问题
    实验3 字符串类型
    C++常用标准算法
  • 原文地址:https://blog.csdn.net/weixin_43898134/article/details/127762311