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作为一个通用的软件平台,可以适应用户不同的方案。通过给出一个对应的配置,用户的方案就可以自动运行,而不需要修改系统里面的代码或参数。
licheetoolspackchipssun50iw2p1configs目录下包含了各个方案的硬件板级配置文件及开机logo,定制移植时,可复制公版作为方案配置,根据方案的原理图和各个模块的实际使用情况进行修改。
每个配置方案都由两个文件sys_config.fex和sys_par
tition.fex来定义。sys_config.fex是对方案板一些相关功能的配置文件,一些模块功能的使能、关闭,以及一些参数的设置都可以通过修改该文件实现。sys_partition.fex描述了分区配置信息。
此处以NanoPi-NEO2为例说明配置方案的添加。
NanoPi-NEO2采用了Allwinner H5处理器,芯片代号为sun50iw2p1,在toolspackchipssun50iw2p1configs目录下,新建NanoPi-NEO2文件夹作为NanoPi-NEO2的方案配置目录。
拷贝licheetoolspackchipssun50iw2p1configscheetah-p1sys_partition.fex文件到NanoPi-NEO2目录。
拷贝licheetoolspackchipssun50iw2p1configscheetah-p1boardsys_config_nanopi-neo2.fex文件到NanoPi-NEO2目录,并命名为sys_config.fex。
2.2. 编译ubootuboot放在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:
0. sun50iw1p1
1. sun50iw2p1
2. sun8iw11p1
3. sun8iw6p1
4. sun8iw7p1
5. sun8iw8p1
6. sun9iw1p1
Choice: 1
选择linux平台。
All available platforms:
0. android
1. dragonboard
2. linux
3. eyeseelinux
Choice: 2
选择NanoPi-NEO2方案板
All available boards:
0. cheetah-cmcc-p1
1. cheetah-p1
2. cheetah-perf
3. NanoPi-NEO2
Choice: 3
配置完成后,会在目录中生成.buildconfig的配置文件并开始编译linux内核。
再次编译内核只需键入./build.sh即可。
2.4. 打包编译完成后,用./build.sh pack进行打包生成镜像。
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目录。