查看“︁U-Boot”︁的源代码
←
U-Boot
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
== 源代码 == === 主要 === 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卡。 * [https://sourceforge.net/projects/win32diskimager win32diskimager]:在windows下可使用此工具写入镜像文件。 对于本人而言,除了开发板厂商提供的方式,本人还可使用[[Buildroot]]产生镜像。 ===== 移植提示 ===== 如需操作mmc设备,需要在 <code>> Command line interface > Device access commands</code>使能 <code>CONFIG_CMD_MMC</code>以启用mmc命令。 === SPI Nor Flash === 采用SPI接口。若未说明,本人一般使用容量大于等于16MBytes的Nor Flash。 Nor Flash的烧录方式根据SOC的不同而不同,具体如下: *对于全志SOC而言,可进入FEL模式采用[[Xfel]]烧录。 由于Nor Flash容量较小,一般分区使用固定分区,即没有任何分区表与磁盘信息存储在介质上,直接在代码或配置(如[[Devicetree|设备树dts]])中写死分区信息数据。 ==== 分区 ==== MTD设备的分区使用环境变量决定,具体如下: {| class="wikitable" !环境变量名称 !u-boot中的注释 !说明 |- |partition |'partition' - keeps current partition identifier <nowiki>*</nowiki> <nowiki>*</nowiki> partition := <part-id> <nowiki>*</nowiki> <part-id> := <dev-id>,part_num |相当于其它分区表的激活分区。 dev-id同mtdids中的dev-id。 |- |mtdids |'mtdids' - linux kernel mtd device id <-> u-boot device id mapping <nowiki>*</nowiki> <nowiki>*</nowiki> mtdids=<idmap>[,<idmap>,...] <nowiki>*</nowiki> <nowiki>*</nowiki> <idmap> := <dev-id>=<mtd-id> <nowiki>*</nowiki> <dev-id> := 'nand'|'nor'|'onenand'|'spi-nand'<dev-num> <nowiki>*</nowiki> <dev-num> := mtd device number, 0... <nowiki>*</nowiki> <mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name) |mtd设备id列表。 dev-id的格式是固定(如第一个nor flash的dev-id为nor0)。 此环境变量相当于将mtd设备与linux中的标签对应,使得mtdparts可以直接传给Linux内核。 |- |mtdparts |'mtdparts' - partition list <nowiki>*</nowiki> <nowiki>*</nowiki> mtdparts=[mtdparts=]<mtd-def>[;<mtd-def>...] <nowiki>*</nowiki> <nowiki>*</nowiki> <mtd-def> := <mtd-id>:<part-def>[,<part-def>...] <nowiki>*</nowiki> <mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name) <nowiki>*</nowiki> <part-def> := <size>[@<offset>][<name>][<ro-flag>] <nowiki>*</nowiki> <size> := standard linux memsize OR '-' to denote all remaining space <nowiki>*</nowiki> <offset> := partition start offset within the device <nowiki>*</nowiki> <name> := '(' NAME ')' <nowiki>*</nowiki> <ro-flag> := when set to 'ro' makes partition read-only (not used, passed to kernel) |mtd设备分区表。 |} u-boot的mtd分区信息可以通过内核命令行传给启用了命令行传MTD分区参数的[[Linux]]内核,但更加常见的使用[[Devicetree|设备树dts]]传MTD分区参数给[[Linux]]内核。 u-boot中mtd分区的例子如下:<syntaxhighlight lang="c++" line="1"> /* * Examples: * * 1 NOR Flash, with 1 single writable partition: * mtdids=nor0=edb7312-nor * mtdparts=[mtdparts=]edb7312-nor:- * * 1 NOR Flash with 2 partitions, 1 NAND with one * mtdids=nor0=edb7312-nor,nand0=edb7312-nand * mtdparts=[mtdparts=]edb7312-nor:256k(ARMboot)ro,-(root);edb7312-nand:-(home) * */ </syntaxhighlight>默认分区信息的[[Kconfig]]在启用mtdparts命令时可填写,如下: {| class="wikitable" !Kconfig项 !环境变量项 |- |CONFIG_MTDIDS_DEFAULT |mtdids |- |CONFIG_MTDPARTS_DEFAULT |mtdparts |} ===== 全志SOC ===== 默认情况下(u-boot在全志SOC默认设置),采用以下分区: {| class="wikitable" !起始地址 !大小(字节) !名称 !说明 |- |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]]。<syntaxhighlight lang="text" line="1"> 启用属于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 </syntaxhighlight> *配置[[Devicetree|设备树]](同Linux一样)。<syntaxhighlight lang="dts" line="1"> /*以下代码主要用于启用spi0上的flash*/ &spi0 { flash@0 { compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <40000000>; }; }; </syntaxhighlight> 若u-boot需要使用spl则需要在spl中启用spi nor flash支持,具体配置如下: *配置[[Kconfig]]。<syntaxhighlight lang="text" line="1"> 启用属于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。 </syntaxhighlight> 有些spi nor flash的jedec id可能不在u-boot的支持列表中,可能需要手动向drivers/mtd/spi/spi-nor-ids.c中添加需要支持的id。 如需操作mtd设备,需要在 <code>> Command line interface > Device access commands</code>使能<code>CONFIG_CMD_MTD</code>以启用mtd命令。 如需使用mtd分区,需要在<code>> Command line interface > Filesystem commands</code>使能<code>CONFIG_CMD_MTDPARTS</code> 以启用mtdparts命令。 ==Env== 注意:若未特殊说明,此说明仅适用于截至编辑时的u-boot,不包括旧版u-boot。 Env表示环境变量,很多u-boot的操作及脚本都靠环境变量调控。 默认环境变量主要有以下方式生成: *[[Kconfig]]配置生成。 *直接文件生成。 默认情况下使用[[Kconfig]]配置生成默认Env,默认环境变量具体定义的头文件/目录/机制如下: *include/env_default.h文件:定义默认的环境变量与Kconfig配置的关系。 *include/configs目录:各个SOC厂商的配置头文件,一般使用<code>CFG_EXTRA_ENV_SETTINGS</code>宏定义在厂商头文件定义厂商自己的环境变量。 直接使用文件生成默认Env的机制如下: *厂商的配置文件:默认目录为<code>board/<vendor>/<board>/</code>,文件名可以由<code>CONFIG_ENV_SOURCE_FILE</code>或<code>SYS_BOARD</code>指定,后缀名为.env。 *外部的配置文件:使用<code>CONFIG_USE_DEFAULT_ENV_FILE</code>使能,使用<code>CONFIG_DEFAULT_ENV_FILE</code>指定位置。 ==官方资料== 网站:https://www.denx.de/project/u-boot/
返回
U-Boot
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息