AM335x emmc启动修改记录

我们用的uboot编译使用BBB板的,linux镜像是使用Ti的ti-processor-sdk-linux-am335x-evm-06.03.00.106。在系统启动时,emmc启动失败,自动转到网络启动

1.原因分析
检查环境变量,printenv打印出所有uboot环境变量。
boot 和run boot的区别。通过测试过程中发现,boot是uboot自动会调用的启动函数或功能。run boot是运行uboot中的环境变量boot。boot会读取bootcmd,然后从其中的顺序开始执行。
boot->bootcmd->distro_bootcmd->bootcmd_legacy_mmc->boot(此处有问题,不适用于我们环境,改为mmcboot)
而在boot中会查找fdtfile ,image。并读取uEnv.txt。boot中的配置是遵照BBB镜像的命名方式和启动配置的。我们板子在这里就出错了。所以改将boot改成mmcboot直接跳转到mmcboot启动。一旦启动失败会跳到网络启动。
而后mmcboot->run mmcloados查找设备树文件出错,无法加载启动内核。所以uboot更改环境变量两处:
mmcloados=run args_mmc; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then setenv fdtdir ${bootdir}/dtbs; if run loadfdt; then if test -n ${uname_r}; then bootz ${loadaddr} r d a d d r : {rdaddr}: rdaddr:{rdsize} ${fdtaddr}; else bootz ${loadaddr} - ${fdtaddr}; fi; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
bootcmd_legacy_mmc1=gpio clear 56; gpio clear 55; gpio clear 54; gpio set 53; setenv devtype mmc; setenv mmcdev 1; setenv bootpart 1:1 ; run mmcboot

uboot启动参数分析:
https://www.cnblogs.com/lh03061238/p/11143511.html
2.emmc启动修改
修改默认环境变量,需要更到uboot源代码。
找到:/u-boot/include/environment/ti/mmc.h,把mmcloados增加之前提到的设备树地址设置。
找到:/u-boot/include/configs/am335x_evm.h,把BOOTENV_DEV_LEGACY_MMC(devtypeu, devtypel, instance) 中的run boot改为run mmcboot。这个地方比较难找,环境变量是用宏扩展出来的。
编译,烧写就OK了。

3.emmc 分区
以太网启动linux后
查找emmc设备 ls /dev/mm* 能查到系统已经接入了emmc,然后就可以进行分区了。https://blog.csdn.net/sunjing_/article/details/90178045,暂不格式化,见下一节。这节的格式化命令是摘抄记录,不适用于我们。
fdisk /dev/mmcblk1

Command (m for help): m —输入m获取fdisk工具的使用说明
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition’s system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help): n —输入n创建新的分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended

Select (default p): p —输入p创建primary分区
Partition number (1-4, default 1): 1 —输入分区号
First sector (2048-31116287, default 2048): —输入该分区的起始地址,回车使用默认值
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-31116287, default 31116287): 10000000 —输入该分区的结束地址

Command (m for help): n —创建第二个分区
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (10000001-31116287, default 10000001):
Using default value 10000001
Last sector, +sectors or +size{K,M,G} (10000001-31116287, default 31116287): 20000000

Command (m for help): n —创建第三个分区
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
Partition number (1-4, default 3): 3
First sector (20000001-31116287, default 20000001):
Using default value 20000001
Last sector, +sectors or +size{K,M,G} (20000001-31116287, default 31116287):
Using default value 31116287

Command (m for help): p —打印mmcblk1的分区情况

Disk /dev/sdb: 15.9 GB, 15931539456 bytes
64 heads, 32 sectors/track, 15193 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00090a89

Device Boot Start End Blocks Id System
/dev/sdb1 2048 10000000 4998976+ 83 Linux
/dev/sdb2 10000001 20000000 5000000 83 Linux
/dev/sdb3 20000001 31116287 5558143+ 83 Linux

Command (m for help): t —修改分区的系统类型
Partition number (1-4): 1 —选择要修改的分区号
Hex code (type L to list codes): l —打印可设置的系统类型

0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext’d (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 ❤️ 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Hex code (type L to list codes): c —设置第一分区为W95 FAT32 (LBA)格式
Changed system type of partition 1 to c (W95 FAT32 (LBA))

Command (m for help): t
Partition number (1-4): 2 —修改第二分区的系统类型
Hex code (type L to list codes): c
Changed system type of partition 2 to c (W95 FAT32 (LBA))

Command (m for help): t
Partition number (1-4): 3 —修改第三分区的系统类型
Hex code (type L to list codes): c
Changed system type of partition 3 to c (W95 FAT32 (LBA))

Command (m for help): p —打印mmcblk1的分区情况

Disk /dev/sdb: 15.9 GB, 15931539456 bytes
64 heads, 32 sectors/track, 15193 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00090a89

Device Boot Start End Blocks Id System
/dev/sdb1 2048 10000000 4998976+ c W95 FAT32 (LBA)
/dev/sdb2 10000001 20000000 5000000 c W95 FAT32 (LBA)
/dev/sdb3 20000001 31116287 5558143+ c W95 FAT32 (LBA)

Command (m for help): w —保存分区设置并退出
The partition table has been altered!

Calling ioctl() to re-read partition table.

执行:mkdosfs /dev/mmcblk1p1 —将/dev/mmcblk1p1格式化为FAT32格式

使用mount命令进行分区挂载

4.emmc格式化
因为uboot底下ext4分区不支持metadata_csum和64位特性,以格式化使用如下命令:

mkfs.ext4 -L rootfs -O   ^metadata_csum,^64bit ${DISK}p4
说明如下:
格式化 eMMC
Format Partition:
With mkfs.ext4 1.43, we need to make sure metadata_csum and 64bit ext4 features are disabled.
U-Boot 2019.10
Unsupported feature metadata_csum found, not writing.
  
** Unable to write /uboot.env from mmc0:4 **
mkfs.ext4 >= 1.43
for: DISK=/dev/mmcblk0
sudo mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}p4
  
for: DISK=/dev/sdX
sudo mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}4
mkfs.ext4 <= 1.42
for: DISK=/dev/mmcblkX
sudo mkfs.ext4 -L rootfs ${DISK}p4
  
for: DISK=/dev/sdX
sudo mkfs.ext4 -L rootfs ${DISK}4

至此,emmc分区,格式化完成。

5.文件系统烧写:
本文使用ti的PSDK自动的文件系统,直接解压到emmc中即可。
执行:tar xfvp tisdk-rootfs-image-am335x-evm.tar.xz -C /run/media/mmcblk1p1,直接将压缩的文件系统解压到emmc中即可。解压完后,把boot目录的MLO,uboot.img,boot.env,zImage和/dts/*.dtb替换为最新的就可以了。
文件系统打包:tar -cvzf linux_rootfs.tar.gz .。把根目录下所有文件打包进linux_rootfs.tar.gz,更新别的板子或还原的时候,直接解压出来即可。
emmc操作完记得sync敲两遍。之前遇到过指令执行完了,以为结束重新了,结果最后的文件有问题,没有同步写入到emmc中。

本文烧写系统的思想来源于:https://www.cnblogs.com/BigOBlue/p/8513067.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值