簡體   English   中英

在i.MX51中從內核升級u-boot

[英]Upgrade the u-boot from Kernel in i.MX51

我正在研發帶有NAND閃存的i.MX35飛思卡爾主板。 我正在嘗試從內核升級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 ,主引導加載程序bareboxbarebox非易失性存儲( bareboxenv ),內核和根文件系統。

2:如果是這樣,你會發現每個分區都有/dev的dev文件

root@fk-00A0DE4648fe:~# 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

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:您可以擦除分區(例如block1):

mtd_debug erase /dev/mtdblock1 0x0 0x8000

這兩個地址是從塊的開始和擦除的長度的偏移量

5:將圖像復制到新擦除的閃光燈

cp <uboot_image> /dev/mtdblock1

這似乎對我有用,這可能是令人驚訝的,雖然大多數NAND閃存具有非常特定的編程大小 - 盡管這些可能是塊的倍數。

mtd_debug還提供readwrite動詞-這正是做你想象的東西。 我用這些比用cp獲得的成功更少

顯然毋庸置疑,你想要一個備用的引導安排(大概是MMC卡),並且在嘗試之前驗證它是否正常工作,因為如果flash編程不起作用,你的系統很可能無法啟動。

對我來說錯誤並且證明是痛苦的事情是用於分區的不同ECC算法。 閃存的前幾個擦除單元通常保證更強大,並且將使用SoC支持的掩模PROM中的最小初始加載器的任何ECC。 這可能不是你在設備的其他部分使用的 - 當然不是我正在使用的Micron部件。

這意味着引導加載程序和內核可能無法在不進行某些修改的情況下讀取和寫入彼此的分區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM