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

51 lines
1.6 KiB
Markdown
Raw Normal View History

# 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<n>
# 编译独立内核模块并安装到指定目录下。
make modules_install INSTALL_MOD_PATH=<target dir>
# 清除之前编译的可执行文件及配置文件。
make clean
# 类似 make clean但同时也将configure生成的文件全部删除掉包括Makefile。
make distclean
```
### 1.2. make menuconfig 常用快捷键
* /:搜索;
* shift+<关键字>:在当前页面快速查找带有<关键字>的配置项。
## 2. 独立模块的编译
有些模块在开发时往往独立于内核进行组织和编译,其编译方法如下:
```bash
# 独立于内核源码编译内核外部模块,-C 指定内核源码目录必须已经编译过M 指定外部模块所在源码目录
make -C <kernel source dir> M=<modules dir> modules
# 清除外部模块的编译结果
make -C <kernel source dir> M=<modules dir> 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
```