一、 获取Linux内核源码
1 | git clone https://github.com/Lichee-Pi/linux.git |
源码切换到分支 zero-4.13.y
!!!文件大小大概有 2.54G
二、 内核选项配置
执行 make ARCH=arm menuconfig
打开内核配置菜单
进入 Device Drivers > Memory Technology Device (MTD) support
选项
确保选择上 TMD
的 <*> Command line partition table parsing
支持,该项目用来解析uboot传递过来的flash分区信息;以及SPI-NOR 设备的支持。
添加对jffs2文件系统的支持,路径在 File systems > Miscellaneous filesystems ‣ Journalling Flash File System v2 (JFFS2) support
三、修改设备树文件,使其支持 SPI Flash
修改设备树文件
1 | vim arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts |
添加 SPI 节点配置
1 | &spi0 { |
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) },
四、 内核编译
!!! 此命令将会还原以上的 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 | gongyu@gongyu-VirtualBox:~/Lichee_Pi/linux$ ls arch/arm/boot/ |
编译错误
错误信息1
1 | error New address family defined, please update secclass_map. |
(1)、修改 vim scripts/selinux/mdp/mdp.c
文件
注释掉 #include <sys/socket.h>
(2)、修改 im security/selinux/include/classmap.h
文件
添加 #include <linux/socket.h>
错误信息2
1 | fatal error: openssl/opensslv.h: No such file or directory |
需要安装 OpenSSL 开发包
1 | sudo apt-get install libssl-dev |
错误信息3
1 | 没有规则可制作目标“debian/canonical-revoked-certs.pem”,由“certs/x509_revocation_list” 需求。 停止。 |
编辑 .config
配置文件 vim .config
清空这两项配置
1 | CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem" |
生成 dtbs
1 | make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs |
dtb文件在 arch/arm/boot/dts/
zImage在arch/arm/boot/
生成内核模块 驱动模块(@TODO)
1 | make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 INSTALL_MOD_PATH=out modules |
驱动模块在 out/
目录下