基于讯为开发板 - iTOP-4412 POP 1G Elite(精英板)的 UBoot 使用笔记。
- UBoot version: iTop4412_uboot_20151119.tar.gz, Based on u-boot-2010.03.
- Linux version1: iTop4412_Kernel_3.0_20160811.tar.gz, Based on v3.0.15.
- Linux version2: linux-4.19.323
启动日志
1 | OK |
存储情况
板载 EMMC
1 | iTOP-4412 $ mmcinfo 0 |
TF 卡
在 Ubuntu 上使用更完整的 fdisk
(fdisk from util-linux 2.34) 进行查看:
1 | iTOP-4412 $ mmcinfo 1 |
除了正常的分区以外,2048 - 34964 还预留了约 16MB 的未分区区域,用于原始数据的读写(dd@Ubuntu, mmc@UBoot)。
除此以外,1 - 2048 这约 1MB 的区域,同样可以用于原始数据的读写,一般用于放置 UBoot,因为除了第一个 block 默认用于放置 mbr 分区表,加载程序会从此开始读指令。
U-Boot 常用命令
?/help
要使用完整的 help,需要修复一个Bug:
1 | --- a/iTop4412_uboot/common/cmd_help.c |
获取全部的简要帮助信息:
1 | iTOP-4412 $ help |
获取特定指令的详细信息:
1 | iTOP-4412 $ help base |
环境变量相关
bdinfo
1 | # bdinfo - print Board Info structure |
arch_number 在 include/configs/itop_4412_android.h
的 MACH_TYPE
定义。
printenv
1 | iTOP-4412 $ help printenv |
从代码中直接修改 bootcmd
的方法:
1 | --- a/iTop4412_uboot/board/samsung/smdkc210/smdkc210.c |
setenv
1 | iTOP-4412 $ help setenv |
saveenv
将环境变量保存到持久存储。
给 mmc 分区
1 | # 2GB TF card test example. |
fdisk
1 | iTOP-4412 $ help fdisk |
后 3 个参数,分别指代 sys,user,cache 的大小,如果不指定:
- 对于 device 0:分别默认为 1G,1G,300M,分区标志为 0x83。
- 对于 device 1,分别默认为 1G,300M,300M,分区标志为 0x83。
多余的存储空间,将作自动分为一个盘,分区标志为 0x0C。
需要注意的是,多余的空间默认是 p1,然后才是顺序的参数指定的大小。
分区标志(partition_Id):
- 0x05:扩展分区
- 0x07:HPFS/NTFS分区
- 0x83:Linux分区
- 0x0B:FAT32分区
- 0x0C:FAT32分区
- 0x0F:扩展分区
- 0x1C:隐藏的FAT32分区
- 0xEE:GPT分区
fatformat
1 | iTOP-4412 $ help fatformat |
ext3format
1 | iTOP-4412 $ help ext3format |
在 Ubuntu 系统下,可以使用 mkfs.ext3 来实现同样的功能。
1 | mkfs.ext3 /dev/sdxp # x 代表 device_num, p 代表 partition_num |
mkfs 命令簇包含以下格式的文件系统格式化处理:
1 | mkfs.bfs mkfs.exfat mkfs.ext4 mkfs.minix mkfs.reiserfs |
读写存储
mmc
1 | iTOP-4412 $ help mmc |
block_size = 512 Byte
read:从 mmc 的 block_start 位置读 count 个 block 到 内存地址。
write:从内存地址读 count 个 block,写入 mmc 的 block_start 位置。
mem_addr, block_start, block_count 用 16 进制数表示。
fatload
从 TF 卡加载,并启动内核:
1 | iTOP-4412 $ help fatload |
sdfuse
快捷地将 TF 卡的文件写入 MMC0(板载MMC)的工具。将对应的文件放入到 TF 卡的 FAT 磁盘的 /sdupdate
文件夹下,就可以开始烧写了。
1 | iTOP-4412 $ sdfuse flashall |
默认使用哪个mmc启动,就写入哪个mmc。
详情:
1 | iTOP-4412 $ sdfuse flash ramdisk ramdisk-uboot.img |
movi
1 | iTOP-4412 $ help movi |
从最后 2 条可以看出,movi 最终调用的是 mmc,比 mmc 提供了更便捷的读取 u-boot、kernel、rootfs 的方法。
启动命令
boot/bootd
boot default, run ‘bootcmd’.
bootm
1 | iTOP-4412 $ help bootm |
go
一般用于调试裸机程序。
1 | iTOP-4412 $ help go |
启动 Kernel
v3.0.15
将编译好的 zImage、system.img 放到 TF 卡的 /sdupdate。
1 | iTOP-4412 $ sdfuse flash kernel zImage |
v4.19.323
1 | # @Ubuntu, TF card display as /dev/sdb. |
由于使用了设备树文件作为启动项,为了支持传入 dtb,需要修改以下代码:
(主要作用是把 ramdisk 屏蔽,把 dtb 的地址传给 Kernel。由于 ramdisk 被屏蔽了,所以地址 0x42000000 其实只起一个占位作用。)
1 | --- a/iTop4412_uboot/include/configs/itop_4412_android.h |