私はam335xベースのカスタムボード用のファームウェア(MLO、u-boot.img、uImage(ver 3.12)、dtb、rootfs.tar.gz)プログラミングスクリプトを書いています。
ルートファイルシステムはeMMCに配置されます。ボードがプログラミングステーションから最初に起動すると、ファームウェアプログラミングスクリプトはnfsrootフォルダにあるinitスクリプトの1つとして実行されます。
デフォルトでは、スクリプト
1. eMMC パーティション
2. 最初のパーティションの生の領域に MLO、u-boot.img、uImage、dtb を作成し
ます
。 gz。
現在、スクリプトには2つの問題があります。一つは、カーネルメモリ領域をバックアップする問題です。
スクリプトの問題
- sfdiskは/ devディレクトリで使用できないパーティションに関連するパーティションデバイスファイルを生成しますが、7つ以上のパーティション(論理パーティションを含む)を作成することはできません。
これは私が使用する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コピー、u-boot.img、uImage、およびdtbコピーが2つあります。
ddを使用して何度も更新しようとした後、uImageが最初にコピーしたメモリ領域が破損し、マザーボード上のそのパーティションのイメージが破損していると文句を言います。
eMMCに摩耗平準化とエラー修正メカニズムを処理するコントローラがある場合、コアが格納されているメモリ領域はどのように破損しますか?
上記の問題に対する提案/アイデア/ポインタはありますか?