AM335X Nand Flash 啟動除錯

2021-08-26 08:09:46 字數 3868 閱讀 3396

nand 除錯成功了。

具體修改下面描述:

硬體修改:

根據原理圖發現 am335x 目前預設是 sd 卡啟動,所以需要配置一下 sysboot 從nand啟動,官方文件:

這裡對 sysboot 的配置有詳細的介紹,結合 am335x technical reference.pdf 和 原理圖找到對應的 電阻,修改掉就可以從 nand 啟動了。

uboot 配置:

根據  文件中介紹的 nand flash 的 nand layout,描述 uboot , kernel , rootfs ,mlo ,dt(device tree)的空間分布,燒寫到對應的 nand flash上。

但這份文件比較老(基於 sdk 6.0),我們使用的是 sdk 8.0,所以需要根據 am335x-evm.h 中的 nand layout 來燒寫:

在uboot中敲打兩條命令:

u-boot# mtdparts default

u-boot# mtdparts

device nand0 , # parts = 10

#: name size offset mask_flags

0: nand.spl 0x00020000 0x00000000 0

1: nand.spl.backup1 0x00020000 0x00020000 0

2: nand.spl.backup2 0x00020000 0x00040000 0

3: nand.spl.backup3 0x00020000 0x00060000 0

4: nand.u-boot-spl-os 0x00040000 0x00080000 0

5: nand.u-boot 0x00100000 0x000c0000 0

6: nand.u-boot-env 0x00020000 0x001c0000 0

7: nand.u-boot-env.backup10x00020000 0x001e0000 0

8: nand.kernel 0x00800000 0x00200000 0

9: nand.file-system 0x0f600000 0x00a00000 0

active partition: nand0,0 - (nand.spl) 0x00020000 @ 0x00000000

defaults:

mtdids : nand0=nand.0

mtdparts: mtdparts=nand.0:128k(nand.spl),128k(nand.spl.backup1),128k(nand.spl.backup2),128k(nand.spl.backup3),256k(nand.u-boot-spl-os),1m(nand.u-boot),128k(nand.u-boot-env),128k(nand.u-boot-env.backup1),8m(nand.kernel),-(nand.file-system)

u-boot#

可以檢視nand 的 layout。一共分了10個區,描述見上面。

nand 的 pinmux 也是必須要配置的:

在 mux.c 中 配置:

else if (board_is_evm_sk(header))
依然使用了官方的 kernel(在sdk中攜帶的),而非自己編譯的,理由是還沒確定原因是什麼,自己編譯的kernel 認不到 usb 。

此時 uboot 能夠正常引導 kernel,但是uboot 無法支援/操作 ubifs(不是必須)。

還需要在 am335x-evm.h 中配置:

根據文件中描述,需要配置下面幾個巨集(可有可無,在uboot使用 ubi write 會導致 kernel無法正常掛載檔案系統,沒有細究原因,直接使用 nand write即可):

#define config_cmd_ubifs

#define config_cmd_ubi

#define config_cmd_mtdparts

#define config_mtd_device

#define config_mtd_partitions

#define config_lzo /* needed for ubi */

#define config_rbtree /* needed for ubi */

#define config_fit

此時能夠支援uboot中的所有 ubi 操作,但意義不大,此項可有可無。

ecc 配置:

am335x 支援 硬體 ecc : bch8 ,需要在 am335x-evm.h 中配置(預設應該開啟了):

#define config_nand_omap_eccscheme	omap_ecc_bch8_code_hw
device tree配置:

因為 am335x 支援nand flash 的硬體 bch ecc , 所以需要配置device tree,讓kernel能夠正常的認到 ecc 韌體,並對其進行操作/利用其校驗。

am335x-evmsk.dts: 在對應的地方加入以下配置(附件會攜帶 devicetree)

ocp ;

partition@1 ;

partition@2 ;

partition@3 ;

partition@4 ;

partition@5 ;

partition@6 ;

partition@7 ;

partition@8 ;

partition@9 ;

};};};*

***&elm ;

這三行必須加上,因為根據官方文件,elm 預設是 disable的,需要確認開啟。

&elm ;

官方文件:

其中對 elm 的描述值得仔細看看。

檔案系統製作:

yum install liblzo2-devel

yum install libzlib-devel

yum install libuuid-devel

編譯:without_xattr=1 make

宗旨是缺什麼安裝什麼。

檔案系統製作:

mkfs.ubifs -f -q -r ./filesystem/ -m 2048 -e 126976 -c 2047 -o ubifs.img

ubinize -v -o root.ubi -m 2048 -p 128kib -s 2048 ./ubifs

注意幾個點:

這裡描述了幾個可能的錯誤。其中命令的各個命令引數代表的意義都有說明,注意一下就行。

我遇到的錯誤就比如:

mkfs.ubifs -e 126976 ,這樣的演算法:-e:leb size,對於 am335x 的 nand driver,為 block size-2x(page size),如果這裡算錯,會有kernel panic.

ubinize 中的 -s 選項,需要和 uboot 給 kernel 的啟動引數一致: nandroot=ubi0:rootfs rw ubi.mtd=9,2048,最後乙個引數是 2048 , 所以需要匹配上。

注意給kernel 的引數 ubi.mtd=9, 表示 mtd9 號,對應的就是 file-system 分割槽,預設是 ubi.mtd=nand.rootfs。改一下

後來找到了乙個快速除錯nand的方法:

首先sd卡啟動,這個更換 uboot ,kernel ,檔案系統都非常方便,從sd卡的啟動uboot之後。燒寫 nand, 弄完了,直接在uboot中敲打命令:run nandboot. 而不需要擔心nand燒壞了,焊接那麼麻煩。

am335x nand驅動移植

使用ok335xd核心板上的nand flash,無論是速度還是穩定性,都比sd卡好,所以接下來的任務是使用sd中的u boot操作nand flash,把需要的映象燒錄進去之後,就可以從nand flash啟動了!第一步 按照 u boot for am335x 的步驟準備好 ok335x開發板 ...

am335x watchdog 裝置出錯

am335x watchdog 裝置節點開啟失敗。如果是直接將omap wdt 直接編譯成uimage,這樣會出現開啟檔案節點失敗的情況。如果單獨編譯成模組在後面檔案系統內插入則不會。將omap wdt 單獨編譯成模組,在檔案系統層新增。在kernel3.2中 make menuconfig dev...

Am335x 啟動過程

啟動順序 針對ti oma3 evm linux一般的啟動順序是 上電的時候,omap裝置最開始的boot是從cpu內部的boot rom起來,這部分的 是出廠的時候固化的,不能被改變的。boot rom通過讀取外部boot pin的配置來尋找第乙個外部bootloader。可以尋找的裝置有nand...