由于nand中沒有MLO和u-boot.img,所以我們需要設置am335x處于SD卡啟動模式,從SD卡啟動。 從SD卡啟動,對SD卡的設置比較簡單,將SD卡設置為FAT16分區,并格式化,然后將MLO,u-boot.img拷貝到SD卡上。由于我們不需要進入到kernel,所以不拷貝uImage,也不制作ubi分區。 設置am335x的LCD_data4:0為b10111,從SD卡啟動(MMC0),插入制作好的SD卡到卡槽中。將am335x電路板通電,等u-boot.img啟動時按下鍵盤任意鍵,超級終端顯示“U-Boot:”提示符,即進入到命令行操作模式。輸入以下內容,設置網絡參數: setenv ipaddr 192.168.1.51 //設置am335x板的ip地址 setenv serverip 192.168.1.50 //設置tftp和nfs的ip地址 確保計算機的tftp服務已經正確啟動,/home/XXXX/tftp目錄下有MLO,u-boot.img和uImage。執行以下的命令: mw.b 0x82000000 0xff 0x20000 //將DDR的0x82000000,長度0x20000空間填充為0xff tftp 0x82000000 MLO //從tftp服務器下載MLO到DDR的0x82000000開始的空間 nandecc hw 2 //設置DDR的工作模式 nand erase 0x0 0x20000 //擦除nand地址0x0開始,長度0x20000空間 nand write.i 0x82000000 0x0 0x20000 //將DDR地址0x82000000空間的數據寫入到nand的0x0開始的空間,寫入長度0x20000 上述命令將MLO寫入到nand的地址0x0開始的空間。 mw.b 0x82000000 0xff 0x40000 tftp 0x82000000 u-boot.img nand erase 0x80000 0x40000 nand write.i 0x82000000 0x80000 0x40000 上述命令將u-boot.img寫入到nand的地址0x80000開始空間。 我們將使用nfs來加載uImage,以及根文件系統,所以下面的命令可以先不執行。 mw.b 0x82000000 0xff 0x500000 tftp 0x82000000 uImage nand erase 0x280000 0x500000 nand write 0x82000000 0x280000 0x500000 上述命令將uImage寫入到nand的0x280000的空間。 mw.b 0x82000000 0xff 0x2000000 tftp 0x82000000 ubi.img nand erase 0x780000 0xf880000 nand write 0x82000000 0x780000 0x2000000 上述命令將根文件系統寫入到nand的0x780000空間,長度為0x2000000。這里要注意長度應該比ubi.img實際字節大一些。 ubi.img文件的制作方法在后續的手記中記錄。 上述完成后,執行nand erase 0x260000 0x20000,清除u-boot的啟動參數,然后設置bootargs和bootcmd。 setenv ipaddr 192.168.1.51 setenv serverip 192.168.1.50 setenv bootargs console=ttyO0,115200n8 noinitrd root=/dev/nfs rw nfsroot=192.168.1.50:/home/XXXX/nfs ip=192.168.1.51:192.168.1.50::255.255.255.0::eth0::off mem=256M init=/linuxrc set bootcmd 'nfs 0x82000000 192.168.1.50:/home/XXXX/nfs/boot/uImage;bootm 0x82000000' saveenv //保存環境變量 上述將設置am335x板的ip地址,tftp和nfs服務器的ip地址,以及從nfs服務器加載uImage和ubi跟文件系統。 最后保存好上述環境變量后,將am335x電路板斷電,然后將LCD_data(4:0)設置為b10011,從nand啟動。 重新啟動電路板,當u-boot啟動后,將會自動從192.168.1.50的nfs/boot目錄下下載uImage并啟動。kernel啟動后,將自動將192.168.1.50的nfs目錄作為根文件系統加載到am335x的“/”下。 |