2020-07-27 10:21:13 +08:00
|
|
|
|
# Linux Kernel 开发总结
|
|
|
|
|
|
2020-07-27 10:39:56 +08:00
|
|
|
|
## 1. 编译 Kernel
|
|
|
|
|
|
|
|
|
|
### 1.1. 常用命令
|
2020-04-15 17:06:57 +08:00
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2020-07-27 10:21:13 +08:00
|
|
|
|
# 通过 arch/arm64/configs/xxx_defconfig 生成 .config
|
|
|
|
|
make ARCH=arm64 xxx_defconfig
|
|
|
|
|
# 通过 .config 生成 ./defconfig
|
|
|
|
|
make ARCH=arm64 savedefconfig
|
|
|
|
|
# 进入 menuconfig 对内和进行配置。
|
2020-04-15 17:06:57 +08:00
|
|
|
|
make menuconfig
|
2020-07-27 10:21:13 +08:00
|
|
|
|
# 指定 LOCALVERSION(详见《内核版本添加字符》) 并以 n 个进程进行编译。
|
2020-05-13 11:32:00 +08:00
|
|
|
|
make LOCALVERSION="" -j<n>
|
2020-07-27 10:21:13 +08:00
|
|
|
|
# 编译独立内核模块并安装到指定目录下。
|
2020-04-15 17:06:57 +08:00
|
|
|
|
make modules_install INSTALL_MOD_PATH=<target dir>
|
2020-07-27 10:21:13 +08:00
|
|
|
|
# 清除之前编译的可执行文件及配置文件。
|
2020-04-15 17:06:57 +08:00
|
|
|
|
make clean
|
2020-07-27 10:21:13 +08:00
|
|
|
|
# 类似 make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。
|
|
|
|
|
make distclean
|
2020-07-27 10:33:54 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-07-27 10:39:56 +08:00
|
|
|
|
### 1.2. make menuconfig 常用快捷键
|
|
|
|
|
|
|
|
|
|
* /:搜索;
|
|
|
|
|
* shift+<关键字>:在当前页面快速查找带有<关键字>的配置项。
|
|
|
|
|
|
|
|
|
|
## 2. 独立模块的编译
|
2020-07-27 10:21:13 +08:00
|
|
|
|
|
2020-07-27 10:33:54 +08:00
|
|
|
|
有些模块在开发时往往独立于内核进行组织和编译,其编译方法如下:
|
|
|
|
|
|
|
|
|
|
```bash
|
2020-07-27 10:21:13 +08:00
|
|
|
|
# 独立于内核源码编译内核外部模块,-C 指定内核源码目录(必须已经编译过),M 指定外部模块所在源码目录
|
|
|
|
|
make -C <kernel source dir> M=<modules dir> modules
|
2020-07-27 10:33:54 +08:00
|
|
|
|
# 清除外部模块的编译结果
|
|
|
|
|
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
|
2020-04-15 17:06:57 +08:00
|
|
|
|
```
|