我正在为基于 am335x 的定制板编写固件(MLO、u-boot.img、uImage(ver 3.12)、dtb、rootfs.tar.gz)编程脚本。
根文件系统将被放置到eMMC上。当板在编程站首次启动时,固件编程脚本作为 nfsroot 文件夹中的 init 脚本之一运行。
基本上是脚本
1. 对 eMMC 进行分区
2. 在第一个分区的原始区域写入 MLO、u-boot.img、uImage、dtb
3. 然后将其他分区格式化为 ext4 和
4. 挂载 ext4 分区并提取 rootfs .tar.gz。
现在脚本有两个问题,一个是备份内核内存区域问题。
脚本问题
- 我无法创建超过 7 个分区(包括逻辑分区),尽管 sfdisk 创建与分区相关的分区设备文件在 /dev 目录中不可用
这是我使用的 sfdisk 命令
#Partition emmc
sfdisk -D -H 255 -S 63 -C 467 /dev/mmcblk0 -uM << EOF
,32,C,*
,200,L
,200,L
,,E
,100,L
,60,L
,200,L
;1269,L
;
EOF
当我列出分区 fdisk/sfdisk 报告 8 个分区,但我没有看到与第 8 个分区相关的分区文件。
这是 fdisk 的输出,
# fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 3841 MB, 3841982464 bytes
255 heads, 63 sectors/track, 467 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 1 5 40131 c Win95 FAT32 (LBA)
/dev/mmcblk0p2 6 31 208845 83 Linux
/dev/mmcblk0p3 32 57 208845 83 Linux
/dev/mmcblk0p4 58 467 3293325 5 Extended
/dev/mmcblk0p5 58 70 104391 83 Linux
/dev/mmcblk0p6 71 78 64228+ 83 Linux
/dev/mmcblk0p7 79 104 208813+ 83 Linux
/dev/mmcblk0p8 105 266 1301233+ 83 Linux
/dev/mmcblk0p9 267 467 1614501 83 Linux
- 有时,分区 eMMC 设备文件(/dev/mmcblk0p2、/dev/mmcblk0p3 等)后不会出现,mkfs 实用程序无法格式化分区且固件刷新失败。
eMMC内存问题
eMMC 的第一个分区的类型为“Win95 FAT32 (LBA)” 我们不会格式化该分区并将其用作原始分区。
该分区中有 3 个 MLO 副本、2 个 u-boot.img、uImage 和 dtb 副本。
现在,在尝试使用 dd 多次刷新后,uImage 第一个复制内存区域已损坏,并且主板抱怨该分区中的图像已损坏。
现在,如果 eMMC 具有处理磨损均衡和纠错机制的控制器,那么存储内核的内存区域是如何损坏的?
对上述问题有任何建议/想法/指示吗?