
Copyright © Ingenic Semiconductor Co. Ltd 2020. All rights reserved.
Release history
| Date | Revision | Change |
|---|---|---|
| 2020.12.7 | 1.0 | First release |
| 2022.12.20 | 2.0 |
u-boot简介
u-boot功能
U-Boot 是为嵌入式平台提供的开放源代码的引导程序,可引导包括linux内核在内的多种嵌入式操作系统,支持诸如mips、arm、powerpc等多种处理器架构,它提供串行口、以太网等多种下载方式,提供 NOR 和 NAND 闪存和环境变量管理等功能,支持网络协议栈、JFFS2/EXT2/FAT文件系统,同时还支持多种设备驱动如MMC/SD 卡、USB 设备、LCD 驱动等。
注意:文中所提的Nor没有特殊说明,均指SPI Nor Flash
Nand 没有特殊说明,均指SPI Nand Flash
u-boot引导流程
Halley5平台u-boot引导流程如下图所示:

1. bootrom ---> spl ---> u-boot ---> kernel ---> rootfs,该方式需要u-boot引导kernel
2. bootrom ---> spl ---> kernel ---> rootfs,该方式不需要u-boot,由spl直接引导kernel
u-boot源码目录介绍
| api | 存放uboot提供的接口函数 |
| arch | 体系结构相关文件 |
| board | 板级相关文件 |
| common | 通用的代码,以各种命令为主 |
| disk | 磁盘分区相关代码 |
| doc | 介绍文档 |
| drivers | 驱动程序相关代码 |
| examples | 示例程序 |
| fs | 文件系统代码,支持常见的嵌入式文件系统 |
| include | 头文件 |
| lib | 通用库文件 |
| nand_spl | nand flash启动相关代码 |
| net | 网络相关代码 |
| post | Power On Self Test,上电自检程序 |
| spl | spl相关代码 |
| test | 测试代码 |
| tools | 辅助工具,用于编译和检查uboot目标文件 |
u-boot配置
当前Halley5平台,决定u-boot配置的文件主要有:
1. u-boot/boards.cfg
2. u-boot/include/configs/x2000_halley5.h
两个文件共同作用决定最终生成的烧录镜像的配置。
boards.cfg文件说明
boards.cfg是u-boot中最基础的配置文件,用于区分不同厂家的不同板级的配置。该文件中每一行表示一个具体的板级配置,格式均相同,具体如下表所示:
| Target | ARCH | CPU | Board name | Vendor | SoC | Options |
| 目标名称 | 架构名称 | 处理器名称 | 板级名称 | 厂商名称 | Soc名称 | 附加选项 |
其中每一个配置项说明如下:
1. Target:作为该种配置的一个标志;
2. ARCH、CPU、Board name、Vendor、SoC:主要用于Makefile编译时选择代码目录,比如u-boot/include/configs目录下有许多配置文件,选择x2000_halley5.h便是通过Board name确定的;
3. Options:每一种配置之间的主要区别,u-boot会为附加选项中的每个字段前面加上“CONFIG_”前缀并导出为全局可用的宏定义,这些宏定义会进一步决定其他的配置,目前主要是x2000_halley5.h中的配置。
默认配置
Halley5 共支持八种默认编译配置,如下表所示:
| x2000_halley5_uImage_msc2 | 该配置支持从sd卡启动linux内核镜像uImageCONFIG_SPL_JZMMC_SUPPORT:spl中的mmc相关配置CONFIG_ENV_IS_IN_MMC:环境变量存储相关配置CONFIG_GPT_CREATOR:分区相关配置CONFIG_JZ_MMC_MSC2:msc控制器相关配置CONFIG_SPL_PARAMS_FIXER: 改变CPM频率 |
| x2000_halley5_uImage_msc0 | 该配置支持从emmc启动linux内核镜像uImageCONFIG_SPL_JZMMC_SUPPORT:spl中的mmc相关配置CONFIG_ENV_IS_IN_MMC:环境变量存储相关配置CONFIG_GPT_CREATOR:分区相关配置CONFIG_JZ_MMC_MSC0:msc控制器相关配置CONFIG_SPL_PARAMS_FIXER: 改变CPM频率 |
| x2000_halley5_uImage_sfc_nand | 该配置支持从nand flash启动linux内核镜像uImageCONFIG_SPL_SFC_NAND:sfc nand flash相关配置CONFIG_MTD_SFCNAND:sfc nand flash驱动编译配置CONFIG_SPL_PARAMS_FIXER: 改变CPM频率 |
| x2000_halley5_uImage_sfc_nor | 该配置支持从nor flash启动linux内核镜像uImageCONFIG_SPL_SFC_NOR:sfc nor flash相关配置CONFIG_ENV_IS_IN_SFC:环境变量存储相关配置CONFIG_MTD_SFCNOR:sfc nor flash驱动编译相关配置CONFIG_SPL_PARAMS_FIXER: 改变CPM频率 |
| x2000_halley5_xImage_sfc_nand_ota | 该配置支持从nand flash启动linux内核镜像xImageCONFIG_SPL_SFC_NAND:sfc nand flash相关配置CONFIG_MTD_SFCNAND:sfc nand flash驱动编译相关配置CONFIG_SPL_OS_BOOT:spl直接启动linux内核镜像相关配置CONFIG_OTA_VERSION30:ota升级相关配置 |
| x2000_halley5_xImage_msc2_ota | 该配置支持从sd卡启动linux内核镜像xImageCONFIG_SPL_JZMMC_SUPPORT:spl中的mmc相关配置CONFIG_ENV_IS_IN_MMC:环境变量存储相关配置CONFIG_GPT_CREATOR:分区相关配置CONFIG_JZ_MMC_MSC2:msc控制器相关配置CONFIG_SPL_PARAMS_FIXER: 初始化CPM时钟CONFIG_OTA_VERSION30:ota升级相关配置CONFIG_SPL_PARAMS_FIXER: 改变CPM频率 |
| x2000_halley5_xImage_sfc_nand | 该配置支持从nand flash启动linux内核镜像xImageCONFIG_SPL_SFC_NAND:sfc nand flash相关配置CONFIG_MTD_SFCNAND:sfc nand flash驱动编译相关配置CONFIG_SPL_OS_BOOT:spl直接启动linux内核镜像相关配置CONFIG_SPL_PARAMS_FIXER: 改变CPM频率 |
| x2000_halley5_xImage_sfc_nor | 该配置支持从nor flash启动linux内核镜像xImageCONFIG_SPL_SFC_NOR:sfc nor flash相关配置CONFIG_MTD_SFCNOR:sfc nor flash驱动编译相关配置CONFIG_SPL_OS_BOOT:spl直接启动linux内核镜像相关配置CONFIG_ENV_IS_IN_SFC:环境变量存储相关配置CONFIG_SPL_PARAMS_FIXER:改变CPM频率 |
自定义配置
可根据实际需要,在每种板级配置中增删相应的字段或者新添加一个新的板级配置。
下面以添加一个新的板级配置x2000_halley5_uImage_msc0为例进行介绍:
1. 在boards.cfg文件中新起一行,按照该文件的格式要求,先确定第一个配置项为x2000_halley5_uImage_msc0,第二到第六个配置项可参考现存的板级配置,一般都是比较固定的;
2. 主要是附加选项的配置,如果对Halley5平台的u-boot整体配置不是很了解的话,可以先参考现存配置,比如这里可以参考x2000_halley5_uImage_msc2,将JZ_MMC_MSC2改为JZ_MMC_MSC0,这样会选择MSC0相关的配置,其他的保持一致即可;
3. 如果想更加细致的修改附加选项,建议先整体阅读一遍该文档,尤其是第二章关于配置的介绍,在了解了Halley5平台的u-boot整体配置后,再进行修改会更加游刃有余。
x2000_halley5.h配置文件说明
x2000_halley5.h为u-boot中针对halley5平台核心的配置文件,该配置文件主要包含以下内容:
• 系统时钟配置
• Cache大小配置
• DDR 配置
• SFC/MSC/GMAC/LCD等驱动相关配置
• u-boot built-in 命令
系统时钟配置
默认配置
当前系统时钟配置如下:
自定义配置
1. PLL锁相环频率配置,可根据需要进行配置
2. CPU、DDR频率配置,其中CPU的频率需要与选择的PLL频率成倍数关系,并且最高支持 1.5GHz, 同时DDR的频率也需要与选择的PLL频率成倍数关系
3. AHB总线频率配置
DDR 配置
SFC 驱动配置
spl阶段驱动
驱动文件位置:common/spl
uboot阶段驱动文件
位置:drivers/mtd/devices/jz_sfc_v2
配置说明
1. sfc控制器gpio引脚功能配置
2. sfc nand flash配置,如果定义CONFIG_SPL_SFC_NAND,则nand相关的配置会被打开:
3. sfc nor flash配置,如果定义CONFIG_SPL_SFC_NOR,则nor相关的配置会被打开:
默认配置
1. 使用nand flash启动,在boards.cfg文件的x2000_halley5_uImage_sfc_nand配置和x2000_halley5_xImage_sfc_nand配置中导出了CONFIG_SPL_SFC_NAND。
2. 使用nor flash启动,在boards.cfg文件的x2000_halley5_uImage_sfc_nor配置中导出了CONFIG_SPL_SFC_NOR。
自定义配置
1. sfc控制器gpio引脚,可根据硬件连接情况进行选择
2. nand flash配置
a.sfc控制器速率,注意最终的速率为该宏定义4分频之后的结果
b.数据传输线宽,定义该宏定义为4线,否则为1线
c.nand flash分区参数存储在nand flash中的偏移
d.nand flash页大小和块大小,根据具体的nand flash型号确定
e.是否使用内置分区参数,定义则使用,否则不使用
3. nor flash配置
a.SFC控制器时钟速率,注意最终的速率为该宏定义4分频之后的结果
b.数据传输线宽,定义该宏定义为4线,否则为1线
c.nor flash分区参数存储在nor flash中的偏移
d.nor flash硬件参数存储在nor flash中的偏移
e.是否使用内置分区参数,定义则使用,否则不使用
MSC 驱动配置
spl阶段驱动文件
驱动文件位置:common/spl
uboot阶段驱动文件
位置: drivers/mmc
配置说明
1. MSC0配置,如果定义CONFIG_JZ_MMC_MSC0,则MSC0相关的配置会被打开:
2. MSC1配置,如果定义CONFIG_JZ_MMC_MSC1,则MSC1相关的配置会被打开:
3. MSC2配置,如果定义CONFIG_JZ_MMC_MSC2,则MSC2相关的配置会被打开:
默认配置
使用sd卡启动,在boards.cfg文件的x2000_halley5_uImage_msc2配置中导出了CONFIG_JZ_MMC_MSC2,即当前默认使用MSC2配置。
自定义配置
MSC0、MSC1、MSC2每种配置中,均可以自定义如下配置:
1. 数据传输位数,MSC0最多支持8位,MSC1最多支持4位,MSC2最多支持4位
2. 是否打开DEBUG 信息
分区表介绍
sd卡启动的u-boot镜像中包含有分区表的信息,在编译u-boot镜像的最后,有如下输出信息:
可以看到,在最终生成的u-boot镜像前面加入了mbr-gpt.bin,该文件为按照GPT分区标准生成的分区数据,用于将u-boot镜像烧录到sd卡后,可直接在PC端识别出分区信息,而不必再利用分区工具对sd卡进行分区操作。
该分区数据mbr-gpt.bin中包括了具体的分区信息,下面介绍分区信息,关于MBR与GPT分区标准相关内容,可参考5.2MBR/GPT分区表。
在u-boot/board/ingenic/x2000_halley5/partitions.tab中存放有具体的分区信息:
当我们把镜像烧录到sd卡后,在PC端使用fdisk命令可看到如下分区信息:
设备 Start 末尾 扇区 Size 类型
该分区信息与上述partitions.tab文件中的内容完全一致。
GMAC 网络驱动配置
驱动文件
位置: drivers/net
配置说明
1. ip地址相关
2. 网口工作模式选择,需要按照实际连接的网络phy芯片进行选择
3. gmac控制器选择
默认配置
1. 当前默认选择gmac1控制器:
2. 当前默认选择RGMII网口工作模式:
自定义配置
1. 当前u-boot只同时支持一个gmac控制器工作,根据实际硬件配置,控制器可选择gmac0或者gmac1。
2. 根据实际速度需要,工作模式可选择RGMII或者RMII,其中RGMII支持10/100/1000兆的总线接口速度,RMII支持10兆和100兆的总线接口速度。
LCD驱动配置
驱动文件
位置:drivers/video/jz_lcd
配置说明
屏幕驱动参考u-boot/drivers/video/jz_lcd/lcd_panel/lcd_fw050.c
1.在板级配置文件(u-boot/include/configs/x2000_halley5.h)中打开LCD配置
2.配置使用的驱动
3.定义屏幕需要使用的gpio 例如rst、vdd_en、背光等,根据需求定义,以fw050为例
4.如果是mipi屏,添加mipi配置,使其配置dsi和phy
5.如果使用pwm控制背光,使能pwm以及配置pwm参数
6.修改显示的logo (u-boot/tools/Makefile)

u-boot built-in命令配置
默认配置
当前默认支持如下命令:
自定义配置
下面以新建一个简单的hello命令为例介绍如何在u-boot中自定义命令。
1. 在common目录下,新建一个文件cmd_hello.c,输入如下代码:
上述代码中,U_BOOT_CMD为u-boot新建命令使用的宏定义,一共有6个参数,具体介绍如下:
a.第一个参数:该命令的名称
b.第二个参数:该命令的参数的个数
c.第三个参数:按下enter键后是否重复执行该命令
d.第四个参数:该命令对应的回调函数
e.第五个参数:该命令的短帮助信息
f.第六个参数:该命令的长帮助信息
2. 在common/Makefile中添加编译选项:
COBJS-y += cmd_hello.o
3. 重新编译u-boot即可
内核传参说明
u-boot编译
u-boot的编译分为两种,两种的特点如下:
| 编译方式 | 特点 |
|---|---|
| 工程顶层目录编译 | 依赖配合君正SDK 板级配置。适合基于君正SDK的开发方式 |
| u-boot源码目录编译 | 直接按照u-boot的标准编译方式进行,适合需要自定义u-boot的配置,脱离君正SDK的开发方式。 |
工程顶层目录编译
编译SFC Nand启动镜像
该启动镜像对应x2000_halley5_uImage_sfc_nand配置。
1. 在工程顶层目录下执行如下命令,导入编译halley5平台所需的环境变量:
2. 执行lunch命令选择需要编译镜像的类型:
a.如果是halley5 v20开发板,根据需要在以下配置中进行选择:
1.x2000halley5.v20_nand_4.4.94-eng
7.x2000halley5.v20_nand_5.10-eng
b.如果是halley5 v30开发板,根据需要在以下配置中进行选择:
10.x2000halley5.v30_nand_4.4.94-eng
13.x2000halley5.v30_nand_5.10-eng
3. 执行make uboot-clean清除上次编译产生的中间产物:
4. 执行make uboot进行编译:
5. 等待编译完成,在工程目录/out/product/x2000halley5/image目录下便会生成uboot镜像文件,该镜像即可直接进行烧录。
编译SFC Nor启动镜像
该启动镜像对应x2000_halley5_uImage_sfc_nor配置。
1. 在工程顶层目录下执行如下命令,导入编译halley5平台所需的环境变量:
2. 执行lunch命令选择需要编译镜像的类型:
a.如果是halley5 v20开发板,根据需要在以下配置中进行选择:
2.x2000halley5.v20_nor_4.4.94-eng
8.x2000halley5.v20_nor_5.10-eng
b.如果是halley5 v30开发板,根据需要在以下配置中进行选择:
11.x2000halley5.v30_nor_4.4.94-eng
14.x2000halley5.v30_nor_5.10-eng
3. 执行make uboot-clean清除上次编译产生的中间产物:
4. 执行make uboot进行编译:
5. 等待编译完成,在工程目录/out/product/x2000halley5/image目录下便会生成uboot镜像文件,该镜像即可直接进行烧录。
编译SD卡启动镜像
该启动镜像对应x2000_halley5_uImage_msc2配置。
1. 在工程顶层目录下执行如下命令,导入编译halley5平台所需的环境变量:
2. 执行lunch命令选择需要编译镜像的类型:
a.如果是halley5 v20开发板,根据需要在以下配置中进行选择:
3.x2000halley5.v20_msc_4.4.94-eng
9.x2000halley5.v20_msc_5.10-eng
b.如果是halley5 v30开发板,根据需要在以下配置中进行选择:
12.x2000halley5.v30_msc_4.4.94-eng
15.x2000halley5.v30_msc_5.10-eng
3. 执行make uboot-clean清除上次编译产生的中间产物:
4. 执行make uboot进行编译:
5. 等待编译完成,在工程目录/out/product/x2000halley5/image目录下便会生成uboot镜像文件,该镜像即可直接进行烧录。
u-boot源码目录编译
1. 在工程顶层目录下执行如下命令,导入编译halley5平台所需的环境变量:
2. 执行lunch命令选择需要编译镜像的类型, 这里只是为了导入交叉编译工具环境,如果只编译 u-boot可以随意选择:
3. 之后进入u-boot目录,执行make distclean清除上次编译产生的中间产物:
执行make xxxxxx -jN命令进行编译,xxxxxx为具体的板级配置名称,需要根据编译的启动 镜像来决定,详细介绍请参考2.1 boards.cfg文件说明。当前共支持4种板级配置,具体如下表所示:
| x2000_halley5_uImage_msc2 | 该配置支持从sd卡启动linux内核镜像uImage |
| x2000_halley5_uImage_sfc_nand | 该配置支持从nand flash启动linux内核镜像uImage |
| x2000_halley5_uImage_sfc_nor | 该配置支持从nor flash启动linux内核镜像uImage |
| x2000_halley5_xImage_sfc_nand | 该配置支持从nand flash启动linux内核镜像xImage |
比如,编译从nand flash启动uImage的启动镜像,执行如下命令:
其中-jN为使用多线程编译,可以加快编译速度,具体的N值需要根据使用的PC决定。
4. 编译好之后,会在u-boot工程顶层目录下生成u-boot-with-spl-mbr-gpt.bin,该文件便是最终生成的镜像文件,可以直接进行烧录。
u-boot应用与内核接口
u-boot常用命令
进入 uboot 的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前 uboot 所支持的命令。
现以sfc nand flash启动为例,支持的命令如下图所示:


对于每一个命令,还可以执行“help 命令名称”获取该命令具体的使用说明,如下图所示:

下面介绍一些常用的命令:
| printenv | 打印当前环境变量 |
| setenv | 设置环境变量,格式:setenv name value …,表示将name 变量设置成value值;如果没有这个参数,表示删除该变量 |
| saveenv | 保存环境变量到存储设备中 |
| sleep | 延迟执行,格式:sleepN,可以延迟N秒钟执行 |
| bootm | 从内存的指定地址处启动内核镜像。格式:bootm addr,参数是镜像在内存中的地址 |
| md | 读内存数据,格式:md [.b, .w, .l] address [# of objects],第一个参数表示一次读取的数据单位(b:8位,w:16位,l:32位),第二个参数address表示要读取的内存起始地址,第三个参数表示从address开始读取的数据个数 |
| nand erase | 擦除nand flash,格式:nand erase addr1 count,第一个参数是offset,第二个参数是擦除字节数 |
| nand write | 将内存数据写入nand flash,格式:nand write addr offset count,第一个参数是写入基地址,第二个参数是偏移地址,第三个参数是写入字节数 |
| nand read | 将nand flash的数据读取到内存,格式:nand read addr offset count,第一个参数是读取的nand flash地址,第二个参数是内存位置偏移,第三个参数是读取字节数 |
| cp | 在内存中复制数据,格式:cp source target count,第一个参数是源地址,第二个参数是目的地址,第三个参数是复制数目 |
| cmp | 比较内存中的数据,格式:cmp addr1 addr2 count,第一个参数是内存地址一,第二个参数是内存地址二,第三个是比较长度(单位是字节数除以4,以WORDS为单位) |
| crc32 | 计算校验值,格式:crc32 address count [addr],第一个参数是需校验的起始地址,第二个参数是校验的数据字节数,第三个参数是保存校验值的地址 |
u-boot内核传参说明
linux内核在启动之前,需要知道当前硬件的一些必要的参数,比如可使用的内存大小、使用的串口设备、根文件系统所在的设备及分区等。关于以上的启动参数,linux内核已经定义好了一系列规则,负责启动它的bootloader需要遵守这些规则来传递启动参数。方便的是,u-boot已经帮我们做好了大部分工作,它提供了一个环境变量bootargs,我们只需要按照规定的格式将必要的启动参数设置给bootargs即可。
具体的,我们可以通过在x2000_halley5.h中将启动参数设置给宏定义CONFIG_BOOTARGS。
在x2000_halley5.h中,根据加载内核时挂载的文件系统的不同均有对应的启动参数,它们有一些共有的内容,在x2000_halley5.h中定义如下:
具体说明如下:
1. console=ttyS3,115200表示串口使用/dev/ttyS3这个设备,波特率为115200
2. mem=128M@0x0表示可使用的内存总大小为128MB,起始地址为0x0
启动参数中特有的部分请见下文。
u-boot加载内核挂载网络文件系统
网络文件系统一般用于开发时调试使用,当前在x2000_halley5.h中的参考启动参数如下:
具体说明如下:
1. ip=192.168.10.207:192.168.10.1:192.168.10.1:255.255.255.0表示客户端(开发板)ip地址为192.168.10.207,服务端ip地址为192.168.10.1,网关ip地址为 192.168.10.1,子网掩码ip地址为255.255.255.0
2. nfsroot=192.168.4.13:/home/nfsroot/fpga/user/pzqi/rootfs-tst表示服务端ip地址为 192.168.4.13,挂载到的服务端目录为/home/nfsroot/fpga/user/pzqi/rootfs-tst
3. rw表示挂载的文件系统可读写
注意:如果kernel配置了双网络控制器,需要在ip项中指定启动网络文件系统的设备:
u-boot加载内核挂载jffs2文件系统
该启动参数对应x2000_halley5_uImage_sfc_nor配置,当前在x2000_halley5.h中的启动参数如下:
具体说明如下:
1. ip=off表示不使用网络文件系统
2. init=/linuxrc表示init进程使用的是根目录下的linuxrc
3. rootfstype=jffs2表示根文件系统格式为jffs2
4. root=/dev/mtdblock2表示存放根文件系统的设备为/dev/mtdblock2,对应着nor flash编号为2的分区
5. rw表示挂载的文件系统可读写
u-boot加载内核挂载ext4文件系统
该启动参数对应x2000_halley5_uImage_msc2配置,当前在x2000_halley5.h中的启动参数如下:
具体说明如下:
1. rootfstype=ext4表示根文件系统格式为ext4
2. root=/dev/mmcblk0p7表示存放根文件系统的设备为/dev/mmcblk0p7,对应着当前系统第 一个emmc或sd设备的编号为7的分区
3. rootdelay=3表示等待3秒再挂载根文件系统
4. rw表示挂载的文件系统可读写
u-boot加载内核挂载ubifs文件系统
该启动参数对应x2000_halley5_uImage_sfc_nand配置,当前在x2000_halley5.h中的启动参数如下:
具体说明如下:
1. ip=off表示不使用网络文件系统启动
2. init=/linuxrc表示init进程使用的是根目录下的linuxrc
3. ubi.mtd=2 root=ubi0:rootfs ubi.mtd=3 rootfstype=ubifs rw表示当前nand flash编号为2和3的分区使用的是ubifs文件系统,并且根文件系统以可读写的方式挂载在了编号为2的分区上。
u-boot加载内核镜像
u-boot通过tftp或者fastboot方式加载内核镜像可省去烧录kernel镜像的过程,直接将内核镜像加载到内存,使用该方式在开发过程中非常便于调试使用。
uboot通过tftp加载内核镜像
tftp方式可通过网络将kernel镜像直接下载到内存,所以注意使用该方式需要u-boot支持网络。
1. uboot只支持一个gmac控制器工作,需要在x2000_halley5.h中配置选择的控制器和对应控制器的接口模式:
1. PC服务器端配置
2. 开发板端配置
a.进入uboot命令行模式,根据网络情况设置ip地址:
b.将需要的uImage放入PC服务器文件夹下,执行以下命令将uImage下载到内存 0x80800000位置处:
c.启动uImage:
uboot通过fastboot命令加载内核镜像
fastboot方式是使用usb端口把kernel镜像下载到内存并启动的命令,只用于调试使用,不支持android fastboot 其他功能。
1. PC端使用以下命令安装fastboot应用程序:
2. 进入uboot命令行模式,输入fastboot命令:
3. 在PC端存放kernel镜像的路径下执行以下命令:
4. 命令执行成功后,即可将kernel镜像下载到内存并启动。
u-boot通过串口加载内核镜像
串口方式是通过串口将kernel镜像直接下载到内存,注意该方式传输速度会较慢,请根据实际情况选择。
1. 进入u-boot命令行模式,执行如下命令:
2. 先按住ctrl键不放,接着按住a键,再同时放开两个按键,最后按一下s键,可以看到如下图所示画面:

3. 然后会出现如下图所示画面,这里可以选择需要传输的文件,↑↓键进行移动,双敲空格键进入目录,单敲空格键选择文件,回车键确认选择。
我们选择需要传输的kernel镜像:


Ingenic tools介绍
Ingenic tools是君正厂商添加在u-boot内的工具集合。
DDR参数相关
源码位置:u-boot/tools/ingenic-tools/
这里主要用于生成相应的DDR参数,然后写到u-boot镜像的指定位置,以此进行区分。
MBR/GPT分区表
源码位置:u-boot/tools/ingenic-tools/ ├── gpt.bin ├── gpt_creator.c ├── gpt_tab_to_c.sh ├── mbr_creator.c ├── mbr-of-gpt.bin ├── mk-gpt-xboot.sh
GPT和MBR均是关于硬盘分区的标准。
MBR:Master Boot Record,主分区引导记录,记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息。
GPT:Globally Unique Identifier Partition Table,GUID分区表,是源自UEFI标准的一种较新的磁盘分区表结构的标准。与MBR分区方案相比,GPT提供了更加灵活的磁盘分区机制。
这里文件的作用是按照GPT和MBR的标准生成对应的分区数据。
nand/nor flash相关
源码位置:u-boot/tools/ingenic-tools/
1. 保存有各种nand flash的硬件参数,用于spl中的sfc驱动使用
2. 保存nand flash和nor flash的分区参数,区别于由烧录工具写入分区参数,最终会由kernel中的sfc驱动读取并生成对应的mtd分区,如有需要可自行更改
3. 用于写入nand flash和nor flash的分区参数到u-boot镜像中的指定位置 ├── sfc_nand_builtin_params.c ├── sfc_nor_builtin_params.c
其他
源码位置:u-boot/tools/ingenic-tools/
1. 用于生成sfc控制器的硬件timing参数
2. 用于sfc boot时生成spl前面的头部数据,为bootom加载spl作校验用
3. x2000快速启动时使用,用于生成spl env参数
参考文档
1. u-boot/README
2. kernel-4.4.94/Documentation/kernel-parameters.txt