荔枝派-linux内核编译

一、 获取Linux内核源码

1
2
3
4
git clone https://github.com/Lichee-Pi/linux.git

# 默认是zero-4.10.y分支
# zero-4.13.y 对网卡支持较好

源码切换到分支 zero-4.13.y

!!!文件大小大概有 2.54G

二、 内核选项配置

执行 make ARCH=arm menuconfig 打开内核配置菜单

menuconfigHome

进入 Device Drivers > Memory Technology Device (MTD) support 选项

menuconfigDeviceMTD

确保选择上 TMD<*> Command line partition table parsing 支持,该项目用来解析uboot传递过来的flash分区信息;以及SPI-NOR 设备的支持。

menuconfigDeviceMTD-sub

添加对jffs2文件系统的支持,路径在 File systems > Miscellaneous filesystems ‣ Journalling Flash File System v2 (JFFS2) support

menuconfigJffs2File

三、修改设备树文件,使其支持 SPI Flash

修改设备树文件

1
vim arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts

添加 SPI 节点配置

1
2
3
4
5
6
7
8
9
10
11
&spi0 {
status ="okay";

xt25f128b:xt25f128b@0 {
compatible = "jedec,spi-nor";
reg = <0x0>;
spi-max-frequency = <50000000>;
#address-cells = <1>;
#size-cells = <1>;
};
};

xt25f128b 此型号必须是在 drivers/mtd/spi-nor/spi-nor.c 中支持的spi设备

修改 drivers/mtd/spi-nor/spi-nor.c 文件

1
vim drivers/mtd/spi-nor/spi-nor.c

添加以下代码

1
{ "xt25f128b", INFO(0x0b4018, 0, 64 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },

spiFlash

四、 内核编译

!!! 此命令将会还原以上的 menuconfig 的一系列配置 如果还原需要重新 make ARCH=arm menuconfig 来配置 make ARCH=arm licheepi_zero_defconfig

1
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

或者使用 -jn 来加速编译 n = 参与编译的内核个数

1
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4

编译需要话较长的时间!!!

镜像编译完成后 在 arch/arm/boot/ 文件夹下生成 zImage 文件

1
2
gongyu@gongyu-VirtualBox:~/Lichee_Pi/linux$ ls arch/arm/boot/
bootp compressed dts Image install.sh Makefile zImage

编译错误

错误信息1

1
error New address family defined, please update secclass_map.

zimageCompileError1

(1)、修改 vim scripts/selinux/mdp/mdp.c 文件

注释掉 #include <sys/socket.h>

zimageCompileError1pass

(2)、修改 im security/selinux/include/classmap.h 文件

添加 #include <linux/socket.h>

zimageCompileError1pass2

错误信息2

1
fatal error: openssl/opensslv.h: No such file or directory

zimageCompileError2

需要安装 OpenSSL 开发包

1
sudo apt-get install libssl-dev

错误信息3

1
没有规则可制作目标“debian/canonical-revoked-certs.pem”,由“certs/x509_revocation_list” 需求。 停止。

zimageCompileError3

编辑 .config 配置文件 vim .config

清空这两项配置

1
2
3
4
5
6
7
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"

to

CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""

生成 dtbs

1
2
3
4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

# arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dtb
# arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dtb

dtb文件在 arch/arm/boot/dts/

zImage在arch/arm/boot/

生成内核模块 驱动模块(@TODO)

1
2
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules_install

驱动模块在 out/ 目录下

------------- END ---- 感谢您的阅读 -------------