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...