1. 程式人生 > >第十期 路由器除錯之HelloWorld 《路由器就是開發板》

第十期 路由器除錯之HelloWorld 《路由器就是開發板》

        前面幾期都是在做準備工作,這一期我們開始實際操作。很多教程的開始都喜歡用HelloWorld來先做個演示,我也不例外,在硬體開發板教程裡流水燈就是一種HelloWorld,程式簡單,只要控制GPIO就能實現,並且直觀明顯。現在開始動手將HG255d實現流水燈功能,實現後的效果是這樣的:


如果你感興趣,那我們就先來動手操作一下,算是控制開發板的第一步。 首先編譯環境是在linux_32位下進行的,需要搭建一個linux開發環境,這裡以Ubuntu14.04為例, $ sudo apt-get update $ sudo apt-get install git g++ make libncurses5-dev subversion libssl-dev gawk libxml-parser-perl unzip wget python xz-utils vim
編譯工具鏈我們使用Ralink的SDK裡提供的,如果想自己編譯也可以,網上有很多教程可以借鑑,SDK目錄下Tools資料夾下的 buildroot-gcc342.tar.bz2 檔案就是編譯工具鏈,在Linux下的操作為:         1. 進入SDK/Tools目錄 cd xxxx/RFDemo/Tools         2. 解壓buildroot-gcc342.tar.bz2檔案到/opt目錄下 tar -jvxf buildroot-gcc342.tar.bz2 -C /opt         3. (可選) 將/opt/buildroot-gcc342/bin/ 目錄新增到Path變數中: vim ~/.profile 在末尾加入
        # MIPS Toolchain mipsel-linux-xxx         PATH=$PATH:/opt/buildroot-gcc342/bin 重啟後執行 mipsel-linux-gcc -v 就可以看到工具鏈的版本資訊。 編譯工具準備好後,開始生成我們想要的流水燈程式,這裡因為我們想作最小的改動實現最小的功能,我就不單獨生成工程了,而是直接在Uboot上修改,採用給Uboot打補丁的形式來演示我們的流水燈程式。這裡再說明一下,以後的演示示例我都是已補丁的形式給出,這樣做的好處有兩點:1.對於複雜的工程可以清楚的看到修改了哪些地方;2.patch檔案的操作是可逆的,實驗完成後可以恢復。
進入SDK的Code/Uboot目錄下 然後執行 patch -p1 < ../Patch/led_run.patch 如圖所示:
然後執行 make menuconfig 就會出現編譯配置程式,將所有選項改成下圖的狀態:


然後 Exit 選擇 yes 儲存並退出。 再執行 make 生成 uboot.bin 可執行檔案
編譯完成後如果在當前目錄下生成了 u-boot 檔案 就說明編譯成功,接著就可以進行下一步啦,如果不成功,就細心找找原因。將 uboot.bin 檔案放到OpenOCD的bin目錄下 ,執行OpenOCD服務,如果不清楚請詳細看前幾期介紹,再使用telnet工具訪問OpenOCD服務 telnet 127.0.0.1 4444 ,telnet成功後執行兩條命令: halt 和 run_uboot  結果如下所示:
>Open On-Chip Debugger
> halt
target state: halted
target halted in MIPS32 mode due to debug-request, pc: 0x9f000380
> ralink_init
> run_uboot
125248 bytes written at address 0x00200000
downloaded 125248 bytes in 3.163181s (38.668 KiB/s)
>
如果顯示如下的資訊,你會驚喜的發現我們的開發板已經動起來了,流水燈程式就這樣跑起來了。具體的原理我們以後分析,先來個小的Demo演示一下增加點興趣。 如果顯示如下的資訊,你會驚喜的發現我們的開發板已經動起來了,流水燈程式就這樣跑起來了。具體的原理我們以後分析,先來個小的Demo演示一下增加點興趣。 這裡需要注意一下如果在執行halt命令後pc的值為pc:0x00000000,那麼說明你的開發板的U-Boot還能正常執行並將JTAG介面初始化為了GPIO口,這種情況需要將flash的53和54引腳短接再開機,正常識別後再斷開即可,具體參考:
當然,做完實驗後要清理現場,因為Code目錄下的程式以後還要用到,所以我們要把剛才的修改再還原回去,執行下面兩個步驟就OK: 1. make distclean 2. patch -R -p1 < ../Patch/led_run.patch
到這裡《路由器就是開發板》的準備工作就講完了,下一期開始我會從原始碼分析問題,先說U-Boot再講OpenWRT。

---------------------------------------------------------------------------