我正在使用帶有NAND閃存的i.MX35 Freescale主板。我正嘗試從內核升級u-boot。我在網上搜索,但我沒有得到太多的細節從i.MX51內核升級u-boot
這是可能做到這一點,我該怎麼做呢? 有人可以提供必要的命令和程序來做到這一點嗎?
我正在使用帶有NAND閃存的i.MX35 Freescale主板。我正嘗試從內核升級u-boot。我在網上搜索,但我沒有得到太多的細節從i.MX51內核升級u-boot
這是可能做到這一點,我該怎麼做呢? 有人可以提供必要的命令和程序來做到這一點嗎?
如果不知道更多關於內核配置的信息,就很難給出建議。
由於看起來您是從NAND啓動系統,因此我認爲您的內核是由mtd支持構建的 - 儘管系統完全可能從NAND啓動u-boot,然後是內核和根文件系統從別的地方。
我的經驗是使用帶有Micron NAND閃存的OMAP2主板,但一般步驟應該相同。除了試用它之外,似乎沒有特別好的文檔來源。
1:運氣好的話,你的NAND被分區,mtd子系統被編譯到你的內核子系統中,它發現NAND上的分區(大小在內核引導線上指定,或者在你的主板上編程指定-文件)。
在在啓動控制檯你可能會看到這樣的內容:警告:一些這方面的記錄可能被禁用]
[ 1.670471] Creating 5 MTD partitions on "omap2-nand.0":
[ 1.676086] 0x000000000000-0x000000020000 : "xload"
[ 1.684814] 0x000000020000-0x0000000a0000 : "barebox"
[ 1.692626] 0x0000000a0000-0x0000000c0000 : "bareboxenv"
[ 1.700622] 0x0000000c0000-0x0000004c0000 : "kernel"
[ 1.709899] 0x0000004c0000-0x000040000000 : "root"
請注意,我在這裏使用OMAP2系統,具有Barebox而不是U形-boot,但同樣適用。這裏我們有主加載分區xload
,主引導程序barebox
,非易失性存儲器(bareboxenv
),內核和根文件系統。
2:如果是這樣,你會發現有每個分區有/dev
[email protected]:~# ls /dev/
block mtd4 tty11 tty49
bus mtd4ro tty12 tty52
char mtdblock0 tty13 tty50
console mtdblock1 tty14 tty51
core mtdblock2 tty15 tty520
cpu_dma_latency mtdblock3 tty16 tty53trl
disk mtdblock4 tty17 tty54om
一個dev文件的mtdblock
文件的原始塊設備對應的分區在步驟1
3 :您可以使用mtdinfo -a
更多信息:
....
Name: barebox
Type: nand
Eraseblock size: 131072 bytes, 128.0 KiB
Amount of eraseblocks: 4 (524288 bytes, 512.0 KiB)
Minimum input/output unit size: 2048 bytes
Sub-page size: 2048 bytes
OOB size: 64 bytes
Character device major/minor: 90:2
Bad blocks are allowed: true
Device is writable: true
....
4:您可以刪除一個分區(例如塊1):
mtd_debug erase /dev/mtdblock1 0x0 0x8000
兩個地址的從塊的開始和長度補償,以清除
5:圖像複製到新擦除閃存
cp <uboot_image> /dev/mtdblock1
這似乎爲我工作,這可能令人驚訝,雖然大多數NAND閃存具有非常具體的編程大小 - 儘管這些可能是塊的多個。
mtd_debug
還提供了read
和write
動詞 - 它們完全符合您的想象。我曾與這些不太成功比cp
這顯然不用說,你想要一個替代罩設置(可能是MMC卡),方便和驗證嘗試此之前的工作,因爲你的系統可能無法啓動後,如果閃存編程沒有工作。
對我而言已經出錯並且已經證明是痛苦的事情已經在分區中使用了不同的ECC算法。閃存的第一對擦除單元通常保證更加穩健,並且將使用SoC支持的掩膜PROM中最小的初始加載程序。這可能不是你在設備的其他部分使用的東西 - 當然不是我使用的美光部件。
這將意味着引導加載程序和內核可能無法讀取和寫入對方的分區而無需進行某些修改。
你想用'mtd utils'來做這個嗎? –