Allwinner H5提供了Lichee Linux BSP,其主要由brandy、buildroot、linux-3.10、tools这几个目录组成,能够实现Linux系统的开发构建。

1. Lichee目录结构

1.1. brandy目录

02_Linux内核编译运行 - 图1

arm-trusted-firmware-1.0为TrustZone软件参考实现,提供了一个可信、安全的执行环境。

basic_loader为boot0的源码,芯片上电启动后,最先运行boot0的代码,然后再加载其它bootloader(如uboot)。

pack_tools为各个打包工具源码。

toolchain为交叉编译器存放目录路径,32位的uboot交叉编译工具链以及64位内核交叉编译工具链应放在该目录。

u-boot-2014.07为uboot源码,包括了H5的boot0源码。

1.2. buildroot目录

buildroot目录主要管理包之间的依赖关系,包含各个Lichee编译脚本,管理BSP的编译。

1.3. linux-3.10目录

linux-3.10目录为Allwinner平台内核源码。

1.4. tool目录

tool目录为打包目录,与打包相关的脚本和工具,以及BSP的配置都放在该目录。

2. Lichee编译

进入lichee目录,lichee编译包括uboot的编译,linux内核的编译,打包生成镜像这三个步骤。把交叉编译工具链gcc-linaro-aarch64.tar.xz和gcc-linaro-arm-4.6.3.tar.xz复制到/lichee/brandy/toolchain目录。

2.1. 方案板配置

Lichee作为一个通用的软件平台,可以适应用户不同的方案。通过给出一个对应的配置,用户的方案就可以自动运行,而不需要修改系统里面的代码或参数。

\lichee\tools\pack\chips\sun50iw2p1\configs目录下包含了各个方案的硬件板级配置文件及开机logo,定制移植时,可复制公版作为方案配置,根据方案的原理图和各个模块的实际使用情况进行修改。

每个配置方案都由两个文件sys_config.fex和sys_partition.fex来定义。sys_config.fex是对方案板一些相关功能的配置文件,一些模块功能的使能、关闭,以及一些参数的设置都可以通过修改该文件实现。sys_partition.fex描述了分区配置信息。

此处以NanoPi-NEO2为例说明配置方案的添加。

NanoPi-NEO2采用了Allwinner H5处理器,芯片代号为sun50iw2p1,在\tools\pack\chips\sun50iw2p1\configs目录下,新建NanoPi-NEO2文件夹作为NanoPi-NEO2的方案配置目录。

拷贝lichee\tools\pack\chips\sun50iw2p1\configs\cheetah-p1\sys_partition.fex文件到NanoPi-NEO2目录。

拷贝lichee\tools\pack\chips\sun50iw2p1\configs\cheetah-p1\board\sys_config_nanopi-neo2.fex文件到NanoPi-NEO2目录,并命名为sys_config.fex。

拷贝lichee\linux-3.10\arch\arm64\boot\dts\sun50iw2p1-cheetah-p1.dts一份复本,并命名为sun50iw2p1- NanoPi-NEO2.dts,这是方案的设备树文件。

2.2. 编译uboot

uboot放在brandy目录,在brandy有一个build.sh的uboot编译脚本。进入/lichee/brandy目录,键入命令编译boot0和uboot。

./build.sh-p sun50iw2p1

2.3. 编译linux内核

进入lichee目录,键入./build.sh config进行平台的编译配置。

选择sun50iw2p1芯片。

Welcome to mkscript setup progress

All available chips:

  1. sun50iw1p1

  2. sun50iw2p1

  3. sun8iw11p1

  4. sun8iw6p1

  5. sun8iw7p1

  6. sun8iw8p1

  7. sun9iw1p1

Choice: 1

选择linux平台。

All available platforms:

  1. android

  2. dragonboard

  3. linux

  4. eyeseelinux

Choice: 2

选择NanoPi-NEO2方案板

All available boards:

  1. cheetah-cmcc-p1

  2. cheetah-p1

  3. cheetah-perf

  4. NanoPi-NEO2

Choice: 3

配置完成后,会在目录中生成.buildconfig的配置文件并开始编译linux内核。

再次编译内核只需键入./build.sh即可。

2.4. 打包

编译完成后,用./build.sh pack进行打包生成镜像。打包工具会自动向boot0和uboot填充相应的镜像头,uboot加入二进制dtb设备树文件等等。

3. 烧写

3.1. boot0的烧写

用dd命令把生成的boot0镜像烧写进sd卡开头8k位置。

dd bs=1k seek=8 if=./tools/pack/out/boot0_sdcard.fex of=/dev/sdb

3.2. uboot的烧写

用dd命令把生成的uboot镜像烧写进sd卡16400k位置。

dd bs=1k seek=16400 if=./tools/pack/out/boot_package.fex of=/dev/sdb

3.3. kernel的烧写

在PC端把生成的boot.img替换掉sd卡里的boot.img。boot.img在/lichee/out/sun50iw2p1/linux/common目录。

02_Linux内核编译运行 - 图2