# Linux Kernel 开发总结 ## 1. 编译 Kernel ### 1.1. 常用命令 配置内核时一定要加 ARCH 参数,否则可能出现错误配置。 ```bash # 通过 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 # 编译独立内核模块并安装到指定目录下。 make modules_install INSTALL_MOD_PATH= # 清除之前编译的可执行文件及配置文件。 make clean # 类似 make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。 make distclean ``` ### 1.2. make menuconfig 常用快捷键 * /:搜索; * shift+<关键字>:在当前页面快速查找带有<关键字>的配置项。 ## 2. 独立模块的编译 有些模块在开发时往往独立于内核进行组织和编译,其编译方法如下: ```bash # 独立于内核源码编译内核外部模块,-C 指定内核源码目录(必须已经编译过),M 指定外部模块所在源码目录 make -C M= modules # 清除外部模块的编译结果 make -C M= clean ``` 以上命令经常以下列形式写入到 Makefile 中: ```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 ```