荔枝派 Zero (LicheePi Zero) 编译记录
依赖
1. 交叉编译器
-
笔者使用的 --> https://www.linaro.org/downloads/ 笔者使用最新版本为7.4.1
u-boot
1. 获取并修改源码
git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-current
修改以下文件
-
删除发行版启动指令:
u-boot/include/configs/sunxi-common.h
搜索#include <config_distro_bootcmd.h>
并注释 -
修改
u-boot/include/configs/sunxi-common.h
#define CONFIG_EXTRA_ENV_SETTINGS \ CONSOLE_ENV_SETTINGS \ MEM_LAYOUT_ENV_SETTINGS \ DFU_ALT_INFO_RAM \ "fdtfile=" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \ "console=ttyS0,115200\0" \ BOOTCMD_SUNXI_COMPAT \ BOOTENV
删除最后一行BOOTENV
-
修改
u-boot/include/configs/sun8i.h
添加启动参数#undef CONFIG_BOOTCOMMAND #define CONFIG_BOOTCOMMAND \ "load mmc 0:1 0x41000000 zImage; " \ "load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero.dtb; " \ "bootz 0x41000000 - 0x41800000;" #define CONFIG_BOOTARGS \ "console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 " \ "earlyprintk rw vt.global_cursor_default=0"
2. 编译
cd u-boot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_800x480LCD_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
完成后生成文件u-boot/u-boot-sunxi-with-spl.bin
.
Kernel
参考:http://zero.lichee.pro/系统开发/kernel_build.html
1. 修改并编译
git clone https://github.com/Lichee-Pi/linux.git
cd linux
make ARCH=arm licheepi_zero_defconfig
make ARCH=arm menuconfig
# 修改 原本为 <M> Lowlevel LCD controls
Device Drivers --->
Graphics support --->
-*- Backlight & LCD device support --->
<*> Lowlevel LCD controls
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
编译完成后,设备树位于linux/arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dtb
内核位于linux/arch/arm/boot/zImage
rootfs
参考:http://zero.lichee.pro/系统开发/buildroot.html
1. 下载源码
wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz
tar xvf buildroot-2017.08.tar.gz
2. 修改
cd buildroot-2017.08/
make menuconfig
-
Target options --->
Target Architecture (ARM (little endian)) ---> Target Binary Format (ELF) ---> Target Architecture Variant (cortex-A7) ---> Target ABI (EABIhf) ---> Floating point strategy (VFPv4-D16) ---> ARM instruction set (ARM) --->
-
Toolchain --->
- 使用外部编译链
Toolchain type (External toolchain) --->
- 自定义编译器
Toolchain (Custom toolchain) --->
- 使用预安装好的编译器
Toolchain origin (Pre-installed toolchain) --->
- 指定预安装编译器根目录
(/home/socbis/LicheePi/gcc) Toolchain path
- 指定编译器前缀
(arm-linux-gnueabihf) Toolchain prefix
- 指定编译器版本
External toolchain gcc version (6.x) --->
- 没看懂,使用4.10.x时正确
External toolchain kernel headers series (4.10.x) --->
- 指定C库
External toolchain C library (glibc/eglibc) --->
- 使用外部编译链
make后生成 output/images/rootfs.tar
制作镜像并启动
参考:https://blog.csdn.net/zhvngchvng/article/details/108042455
1. 格式化SD
准备空SD卡一张,做以下分区。< !!! 请使用 fdisk -l 确认设备的容量,盘符 >
root@socbis:/home/socbis/LicheePi/u-boot# fdisk /dev/sdb
# 略...
命令(输入 m 获取帮助): n
分区类型
p 主分区 (0个主分区,0个扩展分区,4空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p): p
分区号 (1-4, 默认 1):
第一个扇区 (2048-31116287, 默认 2048):
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-31116287, 默认 31116287): +32M
创建了一个新分区 1,类型为“Linux”,大小为 32 MiB。
分区 #1 包含一个 vfat 签名。
您想移除该签名吗? 是[Y]/否[N]: n
命令(输入 m 获取帮助): n
分区类型
p 主分区 (1个主分区,0个扩展分区,3空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p): p
分区号 (2-4, 默认 2):
第一个扇区 (67584-31116287, 默认 67584):
上个扇区,+sectors 或 +size{K,M,G,T,P} (67584-31116287, 默认 31116287):
创建了一个新分区 2,类型为“Linux”,大小为 14.8 GiB。
命令(输入 m 获取帮助): w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
root@socbis:/home/socbis/LicheePi/u-boot# fdisk -l
...
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 67583 65536 32M 83 Linux
/dev/sdb2 67584 31116287 31048704 14.8G 83 Linux
格式化两个新分区:
root@socbis:/home/socbis/LicheePi/u-boot# mkfs.vfat /dev/sdb1
mkfs.fat 4.1 (2017-01-24)
root@socbis:/home/socbis/LicheePi/u-boot# mkfs.ext4 /dev/sdb2
mke2fs 1.44.1 (24-Mar-2018)
2. 写入系统
-
u-boot
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
-
kernel
sudo mount /dev/sdb1 /mnt/temp cd <linux_kernel__root_dir> sudo cp arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dtb /mnt/temp sudo cp arch/arm/boot/zImage /mnt/temp sudo umount /mnt/temp
-
rootfs
sudo mount /dev/sdb2 /mnt/temp cd <buildroot_root_dir> cd output/images/ tar xvf rootfs.tar rm rootfs.tar sudo cp * /mnt/temp/ -frd sudo umount /mnt/temp
在我尝试将
rootfs.tar
复制到/mnt/temp
后再进行tar xvf rootfs.tar
时发现所以链接文件会在解压后失效,原因不知。
插入SD到LicheePi并启动,完成