##### 编译过程

```
make mrproper	# 清除中间文件和配置文件
make menuconfig ARCH=riscv
	# SoC selection选QEMU Virt Machine
	
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j4		# 生成vmlinux内核文件，双核CPU可用-j4参数提高编译速度
make modules	# 编译可加载模块
sudo make modules_install	# 将模块安装到标准模块目录中,位于/lib/modules中
sudo make install	# 安装内核,即将镜像文件和符号表文件放入/boot目录
```

##### 引导内核

```
update-grub	# 更新启动菜单
在/etc/default/grub中确保GRUB_TIMEOUT非0
在/etc/grub.d/30_os-prober中确保timeout值与GRUB_TIMEOUT的值一致
```

#### 内核编译配置

```
# 所有的make XXXconfig都是通过Config.in经由不同脚本解释器产生.config文件
# 选择方式：*将功能编译进内核，[空白]不编译该功能，M将功能编译为模块。
```

##### 通用设置

```sh
Local version	# 内核显示的版本信息，可以用uname -a命令看到。
Automatically append version information to the version string
	# 自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持
Kernel compression mode	# 内核镜像要采用的压缩格式
Support for paging of anonymous memory	# 使用交换分区或交换文件来做虚拟内存，必选
System V IPC	# 进程间通信，必选
POSIX Message Queues	# 消息队列，建议选上

```

##### 处理器类型与属性

```
Processor family	# 指定CPU的类型，用于优化目的。"Core 2/newer Xeon"用于core2及更新的Intel CPU。“Generic-x86-64”用于通用的x86-64 CPU。
Supported processor vendors	# 内核将会包含哪个x86供应商的支持代码
```



##### 电源管理与ACPI

##### 总线的选项

##### 二进制模拟

##### 固件驱动

##### 虚拟化

##### 通用架构依赖

##### 启用可加载模块

##### 启用块层

```sh
# 块设备支持,使用硬盘/USB/SCSI设备者必选这选项使得块设备可以从内核移除。如果不选，那么 blockdev 文件将不可用，一些文件系统比如 ext3 将不可用。这个选项会禁止 SCSI 字符设备和 USB 储存设备，如果它们使用不同的块设备。选Y，除非你知道你不需要挂载硬盘和其他类似的设备。不过此项无可选项
```



##### IO调度器

##### 可执行文件的格式

##### 内存管理

##### 网络支持

##### 设备驱动

##### 文件系统

##### 安全设置

##### 加密API

##### 库例程

##### 内核开发

#### 问题记录

1. make menuconfig产生了一个fatal error,提示找不到curses.h，安装libncurses5-dev可解决此问题。
1. make xconfig提示Could not find Qt via pkg-config. 安装qttools5-dev可解决此问题。