OpenHarmony 2.0 Canary u-boot 的编译流程 原创 精华

liangkz_梁开祝
发布于 2021-9-14 19:36
浏览
7收藏

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的编译模块。

OpenHarmony 2.0 Canary u-boot 的编译流程-鸿蒙开发者社区

 

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。

 

 

 

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
12
收藏 7
回复
举报
2条回复
按时间正序
/
按时间倒序
liangkz_梁开祝
liangkz_梁开祝

## 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");

回复
2021-9-14 19:45:01
Anzia
Anzia

前人栽树,后人乘凉。感谢楼主的分享与总结!

回复
2021-9-15 23:54:28
回复
    相关推荐