U-Boot:修订间差异
第25行: | 第25行: | ||
=== SPI Nor Flash === | === SPI Nor Flash === | ||
采用SPI接口。若未说明,本人一般使用容量大于等于16MBytes的Nor Flash。 | 采用SPI接口。若未说明,本人一般使用容量大于等于16MBytes的Nor Flash。 | ||
Nor Flash的烧录方式根据SOC的不同而不同,具体如下: | |||
*对于全志SOC而言,可进入FEL模式采用[[Xfel]]烧录。 | |||
由于Nor Flash容量较小,一般分区使用固定分区,即没有任何分区表与磁盘信息存储在介质上,直接在代码或配置(如[[Devicetree|设备树dts]])中写死分区信息数据。 | 由于Nor Flash容量较小,一般分区使用固定分区,即没有任何分区表与磁盘信息存储在介质上,直接在代码或配置(如[[Devicetree|设备树dts]])中写死分区信息数据。 | ||
==== 分区 ==== | |||
默认情况下(u-boot默认设置),采用以下分区: | |||
{| class="wikitable" | {| class="wikitable" | ||
!起始地址 | !起始地址 | ||
!大小(字节) | !大小(字节) | ||
第44行: | 第47行: | ||
|0x10000(64KBytes) | |0x10000(64KBytes) | ||
|u-boot-env | |u-boot-env | ||
|u-boot的env数据,可保存一些u-boot使用的环境变量,可保存修改后的启动行为。 | |u-boot的env数据,可保存一些u-boot使用的环境变量,可保存修改后的启动行为。 | ||
|- | |- | ||
|0x100000 | |0x100000 | ||
第51行: | 第54行: | ||
|剩余位置,可继续划分分区。 | |剩余位置,可继续划分分区。 | ||
|} | |} | ||
====移植提示==== | |||
SPI Nor Flash使用条件: | |||
==== 移植提示 ==== | |||
SPI Nor Flash使用条件: | |||
* SOC支持从SPI Nor Flash启动。 | *SOC支持从SPI Nor Flash启动。 | ||
* u-boot已经移植有对应SOC的spi驱动。 | *u-boot已经移植有对应SOC的spi驱动。 | ||
配置SPI Nor Flash的支持如下: | 配置SPI Nor Flash的支持如下: | ||
* 配置[[Kconfig]]。<syntaxhighlight lang="text" line="1"> | *配置[[Kconfig]]。<syntaxhighlight lang="text" line="1"> | ||
启用属于MTD设备的SPI Nor Flash | 启用属于MTD设备的SPI Nor Flash | ||
Kconfig路径: > Device Drivers > MTD Support > SPI Flash Support | Kconfig路径: > Device Drivers > MTD Support > SPI Flash Support | ||
第73行: | 第72行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
* 配置[[Devicetree|设备树]](同Linux一样)。<syntaxhighlight lang="dts" line="1"> | *配置[[Devicetree|设备树]](同Linux一样)。<syntaxhighlight lang="dts" line="1"> | ||
/*以下代码主要用于启用spi0上的flash*/ | /*以下代码主要用于启用spi0上的flash*/ | ||
&spi0 { | &spi0 { | ||
第85行: | 第84行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
若u-boot需要使用spl则需要在spl中启用spi nor flash支持,具体配置如下: | 若u-boot需要使用spl则需要在spl中启用spi nor flash支持,具体配置如下: | ||
* 配置[[Kconfig]]。<syntaxhighlight lang="text" line="1"> | *配置[[Kconfig]]。<syntaxhighlight lang="text" line="1"> | ||
启用属于MTD设备的SPI Nor Flash的SPL支持 | 启用属于MTD设备的SPI Nor Flash的SPL支持 | ||
Kconfig路径: > Device Drivers > MTD Support > SPI Flash Support | Kconfig路径: > Device Drivers > MTD Support > SPI Flash Support | ||
第100行: | 第99行: | ||
如需操作mtd设备,需要在 <code>> Command line interface > Device access commands</code>使能<code>CONFIG_CMD_MTD</code>以启用mtd命令。 | 如需操作mtd设备,需要在 <code>> Command line interface > Device access commands</code>使能<code>CONFIG_CMD_MTD</code>以启用mtd命令。 | ||
== Env== | ==Env== | ||
注意:若未特殊说明,此说明仅适用于截至编辑时的u-boot,不包括旧版u-boot。 | 注意:若未特殊说明,此说明仅适用于截至编辑时的u-boot,不包括旧版u-boot。 | ||
2023年8月5日 (六) 07:45的版本
源代码
主要
https://source.denx.de/u-boot/u-boot
备用
https://github.com/u-boot/u-boot.git
说明
通用引导加载器。通常用于加载Linux。
启动介质
注意:若未特殊说明,此说明仅适用于截至编辑时的u-boot,不包括旧版u-boot。
SD卡/TF卡
采用MMC接口,常见于各种开发板。
通常会有一个完整的镜像,采用MBR磁盘分区或者GPT磁盘分区,包含一个FAT分区及若干个其他分区,U-boot的启动脚本与Linux内核放在FAT分区。可使用以下方式烧录:
- dd:在Linux或其他(类)unix中可使用dd命令直接将镜像写入SD卡/TF卡。
- win32diskimager:在windows下可使用此工具写入镜像文件。
对于本人而言,除了开发板厂商提供的方式,本人还可使用Buildroot产生镜像。
SPI Nor Flash
采用SPI接口。若未说明,本人一般使用容量大于等于16MBytes的Nor Flash。
Nor Flash的烧录方式根据SOC的不同而不同,具体如下:
- 对于全志SOC而言,可进入FEL模式采用Xfel烧录。
由于Nor Flash容量较小,一般分区使用固定分区,即没有任何分区表与磁盘信息存储在介质上,直接在代码或配置(如设备树dts)中写死分区信息数据。
分区
默认情况下(u-boot默认设置),采用以下分区:
起始地址 | 大小(字节) | 名称 | 说明 |
---|---|---|---|
0 | 0xF0000(960KBytes) | u-boot | u-boot二进制代码所在位置 |
0xF0000 | 0x10000(64KBytes) | u-boot-env | u-boot的env数据,可保存一些u-boot使用的环境变量,可保存修改后的启动行为。 |
0x100000 | - | - | 剩余位置,可继续划分分区。 |
移植提示
SPI Nor Flash使用条件:
- SOC支持从SPI Nor Flash启动。
- u-boot已经移植有对应SOC的spi驱动。
配置SPI Nor Flash的支持如下:
- 配置Kconfig。
启用属于MTD设备的SPI Nor Flash Kconfig路径: > Device Drivers > MTD Support > SPI Flash Support 选中CONFIG_SPI_FLASH并CONFIG_BOOTDEV_SPI_FLASH且选中需要支持的Nor Flash。 启用SPI驱动设备(只需要选中对应SOC的驱动) Kconfig路径:> Device Drivers > SPI Support
- 配置设备树(同Linux一样)。
/*以下代码主要用于启用spi0上的flash*/ &spi0 { flash@0 { compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <40000000>; }; };
若u-boot需要使用spl则需要在spl中启用spi nor flash支持,具体配置如下:
- 配置Kconfig。
启用属于MTD设备的SPI Nor Flash的SPL支持 Kconfig路径: > Device Drivers > MTD Support > SPI Flash Support 选中CONFIG_SPL_SPI_FLASH_MTD。 在SPL中选中MTD支持 Kconfig路径: > SPL configuration options 选中SPL_MTD_SUPPORT。
有些spi nor flash的jedec id可能不在u-boot的支持列表中,可能需要手动向drivers/mtd/spi/spi-nor-ids.c中添加需要支持的id。
如需操作mtd设备,需要在 > Command line interface > Device access commands
使能CONFIG_CMD_MTD
以启用mtd命令。
Env
注意:若未特殊说明,此说明仅适用于截至编辑时的u-boot,不包括旧版u-boot。
Env表示环境变量,很多u-boot的操作及脚本都靠环境变量调控。
环境变量主要有以下方式生成:
- Kconfig配置生成。
- 直接文件生成。
默认情况下使用Kconfig配置生成默认Env,默认环境变量具体定义的头文件/目录/机制如下:
- include/env_default.h文件:定义默认的环境变量与Kconfig配置的关系。
- include/configs目录:各个SOC厂商的配置头文件,一般使用
CFG_EXTRA_ENV_SETTINGS
宏定义在厂商头文件定义厂商自己的环境变量。
直接使用文件生成默认Env的机制如下:
- 厂商的配置文件:默认目录为
board/<vendor>/<board>/
,文件名可以由CONFIG_ENV_SOURCE_FILE
或SYS_BOARD
指定,后缀名为.env。 - 外部的配置文件:使用
CONFIG_USE_DEFAULT_ENV_FILE
使能,使用CONFIG_DEFAULT_ENV_FILE
指定位置。