系统构建
- U-Boot
- Linux
- rootfs
U-Boot移植
获取源码
- 码云
$ git clone https://gitee.com/cnfu/LicheePi_u-boot.git -b v3s-current
- GitHub
$ git clon https://gitee.com/cnfu/LicheePi_u-boot.git -b v3s-current
推荐使用码云下载,速度比较快。
配置编译
- 如果需要从SD卡启动,需要配置 /include/configs/sun8i.h 如下:
#define CONFIG_BOOTCOMMAND "setenv bootm_boot_mode sec; "
"load mmc 0:1 0x41000000 zImage; "
"load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb; "
"bootz 0x41000000 - 0x41800000;"
#define CONFIG_BOOTARGS "console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default=0"
注意:添加在 #include <configs/sunxi-common.h> 之前位置。添加后如果报错,把换行符去掉试试。
-
代码作用:
- setenv bootm_boot_mode sec; //设置 boot模式为sec
- load mmc 0:1 0x41000000 zImage; //加载zImage到ram中
- load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb; //加载设备树文件到ram中
- bootz 0x41000000 - 0x41800000; //引导linux从指定地址运行
- #define CONFIG_BOOTARGS “console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default=0” //设置linux控制台串口参数,注意串口选择如果和uboot不一致,会看不到linux运行信息,让你感觉一直卡在starting kernal。
配置bootcmd内容,从SD卡读取Zimage,设备树文件复制到ram指定地址中,然后引导程序从指定地址开始运行。
-
配置uboot选项,编译
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_480x272LCD_defconfig
$ make -j12 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
执行完成后即可生成uboot文件,最终使用的是 u-boot-sunxi-with-spl.bin文件。生成的u-boot-sunxi-with-spl.bin文件在uboot根目录下。
Linux
获取源码
- 码云
$ git clone https://gitee.com/cnfu/LicheePi_linux.git -b zero-4.13.y
- GitHub
$ git clone https://github.com/Lichee-Pi/linux.git -b zero-4.13.y
配置编译
- 生成配置文件:
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- licheepi_zero_defconfig
-
编译内核:
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
-
编译设备树:
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
-
提取文件
我们需要生成的文件时:zImage和sun8i-v3s-licheepi-zero-dock.dtb。
zImage文件位置:/arch/arm/boot/
设备树文件位置:/arch/arm/boot/dts/
rootfs
获取源码
https://buildroot.org/downloads/buildroot-2017.08.1.tar.gz
配置编译
- 用此链接下载配置文件,解压重命名为.config放到buildroot根目录下。
https://whycan.cn/files/members/4/buildroot-v3s-20171122.zip
- 输入指令编译rootfs
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
制作TF卡启动盘
磁盘分区
- 准备工作:将前面生成的 u-boot-sunxi-with-spl.bin ,zImage, sun8i-v3s-licheepi-zero-dock.dtb, rootfs.tar文件提取出来,将TF卡插入读卡器,接入PC格式化。
- 插入USB读卡器+TF卡,打开gparted,删除TF卡所有分区。
- 将u-boot写入SD卡8K偏移处。
$ sudo dd if=u-boot-sunxi-with-spl_480800.bin of=/dev/sdc bs=1024 seek=8
- 建立第一个分区,大小32MB,格式FAT16,命名为kernal。并将zImage, sun8i-v3s-licheepi-zero-dock.dtb拷贝到此分区。
$ sudo cp -i zImage /media/book/KERNAL
$ sudo cp -i sun8i-v3s-licheepi-zero-dock.dtb /media/book/KERNAL
- 建立第二个分区,命名为root,用尽剩余空间,格式为ext4,把rootfs.tar解压到该分区根目录。
sudo tar -xvf rootfs.tar -C /media/book/root
- 将TF卡弹出,插入荔枝派,接入串口,上电即可启动。
- 测试LCD,随机花屏
cat /dev/urandom > /dev/fb0