OpenHarmony 2.0 Canary u-boot 的编译流程 原创 精华
OpenHarmony 2.0 Canary u-boot 的编译流程
liangkz 2021.09.14
u-boot在鸿蒙系统中的作用就不说了,这里只简单看一下鸿蒙系统中u-boot代码的编译步骤流程。
u-boot的源代码部署在://device/hisilicon/third_party/uboot/u-boot-2020.01/ 目录下,编译鸿蒙系统时,并没有去编译uboot,而是直接使用预编译的bin。
命令行切换到u-boot源码目录下,执行:
$make menuconfig
注意,如提示“'make menuconfig' requires the ncurses libraries.”,则需要先安装ncurses库:
$sudo apt install libncurses5-dev
再执行 make menuconfig
可以打开uboot的配置界面如下,可以根据需要定制uboot的编译模块。
1. 为小型系统(LiteOS_A内核和Linux内核)编译u-boot
适配LiteOS_A内核的小型系统,预编译好的 u-boot-hi3516dv300.bin 程序【注意备份好该文件】,部署在 //device/hisilicon/hispark_taurus/sdk_liteos/uboot/out/boot/ 目录下,该目录下还有README文档,打开看一下:
u-boot-hi3516dv300.bin is obtained by compiling u-boot-2020.01 in hi35xx\third_party\uboot and reg_info_hi3516dv300.bin in hi35xx\hi3516dv300\uboot\reg.
u-boot-hi3516dv300.bin complies with the overall protocol of u-boot-2020.01. For details, see the README file in hi35xx\third_party\uboot\u-boot-2020.01\Licenses.
The toolchain used for compiling u-boot-hi3516dv300.bin is the GCC toolchain downloaded from the open-source community. The version is gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2.
For details, visit https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads.
这是关于编译u-boot的简单说明,u-boot-hi3516dv300.bin 是由u-boot源代码和 reg/reg_info_hi3516dv300.bin 一起编译生成的,编译需要gcc-arm-none-eabi-7-2017-q4-major-linux 工具链。
所以需要到上述网站链接去找到 gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 并下载到本地,压缩包拷贝到 //prebuilts/gcc/linux-x86/arm/ 目录下,解压出来即可。
命令行下切换到//device/hisilicon/hispark_taurus/sdk_liteos/uboot/目录下,执行:
$make all
就可以根据当前目录下的Makefile文件的描述逐步编译u-boot了,感兴趣的小伙伴可以去分析一下这个Makefile。
编译输出在 //device/hisilicon/third_party/uboot/u-boot-2020.01/ 目录下,u-boot-hi3516dv300.bin 被拷贝到 //device/hisilicon/hispark_taurus/sdk_liteos/uboot/out/boot/ 目录下覆盖原有的 u-boot-hi3516dv300.bin。
适配Linux内核的小型系统, u-boot-hi3516dv300.bin 是共用上面适配LiteOS_A内核那个的,所以//device/hisilicon/hispark_taurus/sdk_linux/uboot/ 目录下并没有 out/uboot/目录,只有 Makefile和 reg/reg_info_hi3516dv300.bin,这两个文件与 sdk_liteos目录下的同名文件是一模一样的。
在这个目录下执行:
$make all
也可以编译出新的 out/uboot/u-boot-hi3516dv300.bin。
2. 标准系统的u-boot
标准系统的预编译u-boot-hi3516dv300_emmc.bin,部署在 //device/hisilicon/hi3516dv300/sdk_linux/open_source/bin/ 目录下,上级目录,并没有Makefile和 reg/reg_info_xxx.bin,所以看起来目前暂不支持自主编译 u-boot-hi3516dv300_emmc.bin。
## Booting kernel from Legacy Image at 80000000 ...
Image Name: Linux-5.10.57
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 5056204 Bytes = 4.8 MiB
Load Address: 80008000
Entry Point: 80008000
Loading Kernel Image
Starting kernel ...
Booting Linux on physical CPU 0x0
上述启动的log中:
//device/hisilicon/third_party/uboot/u-boot-2020.01/common/bootm.c: line732
printf("## Booting kernel from Legacy Image at %08lx ...\n",
img_addr);
//device/hisilicon/third_party/uboot/u-boot-2020.01/arch/arm/lib/bootm.c: line107
printf("\nStarting kernel ...%s\n\n", fake ?
"(fake run for tracing)" : "arm");
前人栽树,后人乘凉。感谢楼主的分享与总结!