最近要學習ARM開發板,想按着單片機的套路,首先開發裸機程序。百度了下,大部分的裸機程序都是用RVDS或者ADS開發,用JLink 或者JTag燒寫到Sdram中去執行。由於在ubuntu下使用習慣了,想脫離集成開發環境,所以在Linux下使用arm-linux-gcc 等工具開發。首先遇到的問題就是開發好的二進制文件怎么燒到板子上運行呢?
百度上給出的大部分方法是通過Uboot 來燒寫,用Uboot的DNW燒寫進去,但是我用的環境是Win7 64bit,DNW的USB驅動死活裝不上,而且,也懶得找別人借條OTG線,所以這個途徑就不考慮了。繼續google,找到了一種方法,通過Uboot的Tftp 功能把二進制文件燒寫到開發板的指定內存處。這種方法只需要網絡連接以及串口連接,更方便一些,所以決定選擇這個方法。
首先在Ubuntu上搭建Tftp服務器(我的開發環境是:ubuntu 13.04 用來開發,win7 遠程登錄到Ubuntu 13.04,串口連接Win7 與 開發板,網絡連接Ubuntu與開發板)。具體方法參考:http://www.2cto.com/os/201203/122887.html

1.1 搭建tftp服務器 TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議),是一個基於UDP協議實現的用於在客戶機和服務器之間進行簡單文件傳輸的協議,適合於開銷不大、不復雜的應用場 合。TFTP協議專門為小文件傳輸而設計,只能從服務器上獲取文件,或者向服務器寫入文件,不能列出目錄,也不能進行認證。 在嵌入式Linux開發中,TFTP協議在很多場合都被用到,甚至是必不可少的,特別是在內核調試階段,在U-Boot下通過TFTP協議從服務器上加載內核並運行,既方便又快捷。 一般的發行版默認都沒有安裝TFTP服務以及TFTP服務器。TFTP服務依賴於網絡守護進程服務程序,可選擇安裝inetd或者升級版的xinetd, 然后安裝tftp和tftp-server,接着修改或者創建/etc/xinetd.d/tftp配置文件,最后重啟xinetd,啟動TFTP服務。 無論采用什么發行版,TFTP服務器的安裝都是這樣的流程,只不過不同發行版的安裝命令不同而已,下面以ubuntu為例進行說明。 安裝xinetd: ky@ubuntu:~$ sudo apt-get install xinetd 安裝tftp和tftpd: ky@ubuntu:~$ sudo apt-get install tftp tftpd 或者安裝tftp的增強版本tftp-hpa: ky@ubuntu:~$ sudo apt-get install tftp-hpa tftpd-hpa 建立配置文件。建立/etc/xinetd.d/tftp文件,寫入如下內容: service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/tftpboot/ disable = no per_source = 11 cps = 100 2 flags = IPv4 } 其中server_args設置的/var/tftpboot目錄是tftp服務器的目錄,設置其訪問權限為777: ky@ubuntu:~$ sudo mkdir -pv /var/tftpboot/ ky@ubuntu:~$ sudo chmod 777 /var/tftpboot/ 啟動或者重啟xinetd服務: ky@ubuntu:~$ sudo /etc/init.d/xinetd start或者restart 本機測試。在/tftpboot目錄下創建一個ky文件,啟動另外一個終端,輸入: ky@ubuntu:~$ tftp 127.0.0.1 tftp> get ky #獲取ky文件 tftp> q #退出tftp 在終端輸入ls命令,可以看到當前目錄下看到ftp獲取到的ky文件。 用開發板來驗證tftp服務器是否可用。啟動開發板,進入U-Boot命令行,用tftp命令加載tftp服務器中的文件,如: U-Boot$ tftp 80008000 zImage ENET:auto-negotiation complete ENET:Link status up ENET:FULL DUPLEX ENET:100MBase MAC: 00:61:62:69:6e:67 TFTP from server 192.168.1.3; our IP address is 192.168.1.5 Filename 'zImage'. Load address: 0x80008000 Loading: ################################# done Bytes transferred = 479927 (752b7 hex) 說明: (1)使用開發板與虛擬機安裝的客戶系統進行TFTP通訊,需要將虛擬網卡設置為Bridged模式,並建議使用靜態IP地址。 (2)如果以上設置都確認無誤,但tftp還是不成功,請檢查主機的防火牆是否已經關閉。
搭建好后:開發板上電,串口終端按任意鍵停留在Uboot 狀態,進入Uboot輸命令模式:
設置好Uboot的IP地址,網關等並保存。即可開始使用tftp 命令下載二進制文件進開發板。
設置Uboot的IP等參數主要參考:http://www.linuxidc.com/Linux/2013-05/84302p4.htm

mini2440燒寫裸機程序 Uboot下載 [日期:2013-05-15] 來源:Linux社區 作者:dream890527 [字體:大 中 小] 6.1 進入Uboot命令行 6.2 使用tftp下載.bin文件 6.2.1 設置開發板 printenv setenv ipaddr192.168.1.100 // 開發板IP setenv serverip192.168.1.101 //Windows IP setenv gatewayip192.168.1.1 // 網關 saveenv 6.2.2 把uImage放到tftpboot目錄下,自動加載 燒寫XX.bin到nand Flash 將XX.bin拷貝至/tftpboot/ 在SecureCRT中依次輸入: SMDK2440A>tftp 0x30000000 XX.bin SMDK2440A>nand erase0x0000 0x40000 SMDK2440A>nand write0x30000000 0x00000 0x400000 6.3 重啟開發板 U-Boot源代碼下載地址 http://www.linuxidc.com/Linux/2011-07/38897.htm
如: tftp 0x50000000 led_on_c.bin