[Linux笔记]内核裁剪

文章目录

1、Linux内核裁剪

目标:

  1. 不使用make menuconfig,增加/减少Linux内核编译输出的模块
  2. 搞清楚Kconfig.configxxx_defconfigMakefile之间的关系

1.1.1、加载开发板默认配置

将 arch/arm/configs/100ask_imx6ull_defconfig 复制到 Linux项目的根目录下,并重命名为为 .config

bash 复制代码
$ make 100ask_imx6ull_defconfig
  1. 如果要在100ask_imx6ull_defconfig的配置基础上添加自己的配置可以👇
  2. 在相应的目录下编写驱动程序,例如在drivers/input/misc/下编写100ask_adxl345-spi.c
  3. drivers/input/misc/下找到Kconfig文件并修改
bash 复制代码
...
config INPUT_ADXL34X
	tristate "Analog Devices ADXL34x Three-Axis Digital Accelerometer"
	default n
	help
	  Say Y here if you have a Accelerometer interface using the
	  ADXL345/6 controller, and your board-specific initialization
	  code includes that in its table of devices.

	  This driver can use either I2C or SPI communication to the
	  ADXL345/6 controller.  Select the appropriate method for
	  your system.

	  If unsure, say N (but it's safe to say "Y").

	  To compile this driver as a module, choose M here: the
	  module will be called adxl34x.
	  
...

config INPUT_ADXL34x_MOD
    tristate "100ask SPI bus connection"
    depends on INPUT_ADXL34X && SPI
    default m
    help
        Say Y here if you have ADXL345/6 hooked to a SPI bus.

        To compile this driver as a module, choose M here: the
        module will be called 100ask_adxl34x-spi.
...

make menuconfig的GUI界面勾选编译选项后,会修改.config的编译配置

bash 复制代码
$ make menuconfig

被make menuconfig修改后的.config文件如下

bash 复制代码
...
CONFIG_INPUT_ADXL34X=y
...
CONFIG_INPUT_ADXL34x_MOD=m
...

👆这些变量名都会在编译时被读取到Kconfig同级目录的Makefile中,例如drivers/input/misc/的Makefile如下所示

bash 复制代码
...
obj-$(CONFIG_INPUT_ADXL34X)		+= adxl34x.o
...
obj-$(CONFIG_INPUT_ADXL34x_MOD)         += 100ask_adxl345-spi.o
...

1.1.4、把修改后的.config保存成新的xxx_defconfig

这里的xxx_defconfig == 100ask_imx6ull_defconfig

bash 复制代码
$ make savedefconfig
$ mv defconfig arch/arm/configs/my_name_defconfig

1.1.5、编译

bash 复制代码
# 如果obj-m, 则👇即可
make modules
# 如果obj-y, 则👇即可
make zImage

1.1.3章节中,直接手工修改.config文件即可

2、总结

  1. xxx_defconfig:文件用于记录配置好的编译配置
  2. .config:内核当前的编译配置,存在于内核的顶层目录,在make xxx_defconfig后出现,从 arch/.../configs/xxx_defconfig 生成 .config
  3. make menuconfig:修改.config,手动编辑 .config 可替代 menuconfig
  4. Kconfig:定义make menuconfig的菜单项
  5. Kconfig同级目录的Makefile:读取.config中的CONFIG_XXX变量来决定编译行为,通过 obj- $ (CONFIG_XXX) 响应配置
相关推荐
千寻xun6 小时前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议
donoot7 小时前
Linux系统下图书馆级电子书全自动标准化分类整理完整实施方案
大数据·linux·运维·电子书管理
Felix-lxd8 小时前
Ubuntu 22.04 配置 Nginx
linux·nginx·ubuntu
Tim_Van9 小时前
在 CentOS 7 中安装 Chromium 的完整步骤
linux·运维·chrome·centos
2023自学中9 小时前
C++ 内存追踪器
linux·c++
啵啵鱼爱吃小猫咪11 小时前
Ubuntu 20.04 + ROS Noetic 源码安装 libfranka 0.8.0 和 franka_ros 0.8.0 完整教程
linux·运维·ubuntu
Piko61411 小时前
锐捷 VSU 虚拟化堆叠配置
运维·网络·笔记
ljs64827395112 小时前
Linux运维实操:vi编辑器永久配置静态IP(CentOS系列)
linux·运维·编辑器
dddwjzx12 小时前
嵌入式Linux C应用编程入门——高级I/O
linux·嵌入式
AOwhisky12 小时前
Python 学习笔记(第三期)——流程控制:条件判断与循环结构
运维·笔记·python·学习·云原生·流程控制·循环