一、下载Lichee官方指定Linux仓库及分支
git clone --depth=1 -b f1c100s-480272lcd-test https://github.com/Icenowy/linux.git
二、配置Linux
1、下载 .config 文件,放入源码主目录进行替换 (若下载时文件名有变,请重命名回 .config );
https://fdvad021asfd8q.oss-cn-hangzhou.aliyuncs.com/migrate/.config2、make ARCH=arm menuconfig
如图所示
SPI-Flash的支持
进入 Device Drivers -> SPI support,将 Allwinner A10 SoCs SPI controller取消勾选,然后勾上下面的Allwinner A31 SPI Controller。这是为了修正配置文件中SPI驱动不正确的问题。
勾上并进入 Device Drivers -> Memory Technology Device (MTD) support,选上下面两项:
- Command line partitioning table parsing #为了解析内核参数传过来的分区信息,如果用设备树应该可以不选
- Caching block device access to MTD devices #为了生成/dev/mtdblock*设备,不选会在启动的时候卡在 watiting for device /dev/mtdblock*
File systems > Miscellaneous filesystems
添加对JFFS2文件系统的支持
如下图
保存并退出
打开drivers/mtd/spi-nor/spi-nor.c,检查自己的flash型号的参数是否含有SECT_4K,如果有则改为0
如下图
最后修改设备树文件中的分区信息,可以参考前面官方教程里面的dts修改章节。
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins_a>;
status = "okay";
spi-max-frequency = <50000000>;
flash: w25q128@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "winbond,w25q128", "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <50000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;partition@0 {
label = "u-boot";
reg = <0x000000 0x100000>;
read-only;
};partition@100000 {
label = "dtb";
reg = <0x100000 0x10000>;
read-only;
};partition@110000 {
label = "kernel";
reg = <0x110000 0x400000>;
read-only;
};partition@510000 {
label = "rootfs";
reg = <0x510000 0xAF0000>;
};
};
};
};
四、编译
执行编译命令
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8
经过编译
在linux/arch/arm/boot/zImage的目录生成 kernel镜像
在linux//arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb生成设备树编译文件
至此,Linux编译完成