一、准備工作
1.在Ubuntu系統中進入u-boot的文件根目錄,編譯出一個新的ARM環境下的u-boot.imx文件,這里筆者使用自己編寫的腳本mx6ull_fire_emmc.sh文件進行編譯,腳本的內容如下圖所示:
操作步驟如下圖所示:
2.編譯成功后uboot的根目錄會生成一些新的文件,從中找到u-boot.imx文件並拷貝到tftp文件目錄中,如下圖所示:
3.進入ftfp文件目錄找到拷貝的u-boot.imx文件賦予最高權限,如下圖所示:
4.使用一塊Linux開發板,連接好串口(能夠打印出Linux系統信息的串口)和網線(能夠在uboot命令控制界面下ping通的網口,筆者使用的是開發板和網線直連的方式),重啟Linux開發板后進入uboot命令控制界面。查看開發板的ip地址和服務器的ip地址(即Ubuntu系統的ip地址),如下圖所示:
5.如果顯示的ip地址不在同一個網段或者沒有對應的信息顯示,可以按照下圖所示做相應的設置:
首先,查看服務器也就是Ubuntu系統的ip地址(通常手動設置成指定的ip地址)
根據服務器的ip地址在uboot命令控制界面設置對應的ip地址,具體設置命令如下所示:
1 setenv ipaddr 192.168.1.50 2 setenv ethaddr 00:04:9f:04:d2:35 3 setenv gatewayip 192.168.1.1 4 setenv netmask 255.255.255.0 5 setenv serverip 192.168.1.110 6 saveenv
ipaddr是開發板設置的ip地址;
serverip是服務器(Ubuntu系統)的IP地址;
ethaddr 為網絡 MAC 地址,是一個 48bit 的地址,如果在同一個網段內有多個開發板的話一定要保證每個開發板的ethaddr不同。
uboot的環境變量設置完成后,使用ping命令去ping一下服務器ip地址檢查是否正常,正常情況如下圖所示:
以上准備工作完成后即可進行下面的階段。
二、更新SD卡中的uboot
1.這里筆者要更新的是SD卡中的uboot,首先在uboot命令控制界面輸入下面命令查看mmc有效的設備:
1 mmc list
筆者的開發板的Flash是EMMC,同時支持SD卡,因此會顯示兩個有效設備,具體信息如下圖所示:
顯示的有效設備信息中,0是指SD卡,1是指EMMC。
接着輸入下面命令切換設備到SD卡,
1 mmc dev 0
最后輸入“version”命令查看當前SD卡中的uboot信息為以后對照。
2.為了確認切換設備成功可以使用下面的命令查看當前選擇的設備信息:
1 mmc info
筆者使用的SD卡是2G的存儲空間,注意SD塊的大小為512個字節,具體信息如下圖所示:
3.使用下面的命令從服務器(Ubuntu系統)下載新的uboot到指定的0x80800000為起始地址DRAM中。
1 tftp 80800000 u-boot.imx
如果下載成功會顯示如下圖信息:
4.新下載的uboot的大小為424960個字節,從前面的信息我們知道SD卡每個塊的大小為512個字節,那么將會占用424960/512=830個塊,用16進制表示就是0x33E。使用下面的命令從SD卡分區0第2個塊開始燒寫新的uboot,千萬不要寫 SD 卡或者 EMMC 的前兩個塊(扇區),里面保存着分區表!
1 mmc dev 0 0 2 mmc write 80800000 2 33E
寫入SD成功后如下圖所示:
5.重啟開發板(設置SD卡啟動),使用“version”命令再次查看uboot信息,對比之前的信息SD卡中uboot的日期發生了變化,說明新的uboot寫入成功,具體信息如下圖所示:
三、更新EMMC中的uboot
1.和SD卡類似,如果要在uboot中更新EMMC對應的uboot可以使用如下命令:
1 mmc dev 1 0 /* 切換到EMMC的分區0 */ 2 tftp 80800000 u-boot.imx /* 下載u-boot.imx到DRAM中的指定地址中 */ 3 mmc write 80800000 2 33E /* 燒寫u-boot.imx到EMMC中 */ 4 mmc partconf 1 1 0 0 /* 分區配置 第一個1代表設備, 第二個1代表響應發送,啟動分區和訪問分區均設置0*/ 5
千萬不要寫 EMMC 的前兩個塊(扇區),里面保存着分區表!
關於“mmc partconf”命令的說明如下圖所示: