NotePublic/Software/Development/System/Linux/Kernel/Linux_Kernel_开发总结.md

1.6 KiB
Raw Blame History

Linux Kernel 开发总结

1. 编译 Kernel

1.1. 常用命令

配置内核时一定要加 ARCH 参数,否则可能出现错误配置。

# 通过 arch/arm64/configs/xxx_defconfig 生成 .config
make ARCH=arm64 xxx_defconfig
# 通过 .config 生成 ./defconfig
make ARCH=arm64 savedefconfig
# 进入 menuconfig 对内和进行配置。
make ARCH=arm64 menuconfig
# 指定 LOCALVERSION详见《内核版本添加字符》 并以 n 个进程进行编译。
make LOCALVERSION="" -j<n>
# 编译独立内核模块并安装到指定目录下。
make modules_install INSTALL_MOD_PATH=<target dir>
# 清除之前编译的可执行文件及配置文件。
make clean
# 类似 make clean但同时也将configure生成的文件全部删除掉包括Makefile。
make distclean

1.2. make menuconfig 常用快捷键

  • /:搜索;
  • shift+<关键字>:在当前页面快速查找带有<关键字>的配置项。

2. 独立模块的编译

有些模块在开发时往往独立于内核进行组织和编译,其编译方法如下:

# 独立于内核源码编译内核外部模块,-C 指定内核源码目录必须已经编译过M 指定外部模块所在源码目录
make -C <kernel source dir> M=<modules dir> modules
# 清除外部模块的编译结果
make -C <kernel source dir> M=<modules dir> clean

以上命令经常以下列形式写入到 Makefile 中:

all:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean