在Kevin學(xué)ZED之6:指鹿為馬中, 我們明確了學(xué)習(xí)方法, 也就是試圖修改一點(diǎn)點(diǎn)軟件的源代碼,找到那個(gè)寫LED0,LED1的地址那句話, 然后換一下它們的地址或命令字,然后重新編譯源代碼, 使得最終我們點(diǎn)亮LED0的那句 echo 1 > /sys/class/gpio/gpio61/value 的結(jié)果是點(diǎn)亮了LED1, 或者是LED7,等等.
一旦你能夠修改源代碼,并能夠把你的修改在硬件中體現(xiàn)出來,后面的事情就簡單了,更復(fù)雜的修改就成了一個(gè)完成工作量的問題. ZED其實(shí)已經(jīng)足夠強(qiáng)大,理論上,要想直接在ZED上進(jìn)行本機(jī)編譯,其實(shí)也是可以滴, 只需要裝一個(gè)ARM版的GCC就可以了. 當(dāng)然,目前還不推薦這樣做,因?yàn)楫吘故乔度胧较到y(tǒng),特別是可編程邏輯PL端, 還要跑Vivado等軟件. 因此,需要交叉編譯.
交叉編譯用的工具鏈,按理說應(yīng)該在這里可以找到: 可打開一看,死活也找不到下載鏈接.最后,在這里找到了:
當(dāng)然, 嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計(jì)實(shí)戰(zhàn)指南-基于Xilinx ZYNQ 的光盤里也有,在這里:
D:\DVD_Disk\Chapter 9\Src\9.3 Single Board Computer\ xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin
安裝完了,按照給出的錯(cuò)誤提示, 解決dash問題. 關(guān)于這個(gè)問題的來龍去脈,俺2009年的Blog中有詳細(xì)解釋. 這里一筆帶過. 現(xiàn)在解決,只需要按照提示敲進(jìn)去就行了.
至于書上寫的要設(shè)PATH啊,設(shè)CROSS_COMPILE環(huán)境變量啊,暫時(shí)還用不著.
然后,就可以寫一個(gè)helloworld.c 了, 就用gedit寫吧,上網(wǎng)搜了拷貝過來也可以. 然后, 用gcc編譯一下。 如圖:
?
然后,
gcc helloworld.c
然后,赫然看到a.out . 然后運(yùn)行它
./a.out
這不,第一個(gè)C程序就運(yùn)行起來了。
別急,這只是在PC機(jī)上運(yùn)行起來了,并沒有在ZED板上運(yùn)行起來。 但能到這一步,至少說明你的C程序是沒有問題滴。
那么,需要把gcc換成交叉編譯的版本,最土的辦法:
~/CodeSourcey/Sourcey_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/arm-xilinx-linux-gnueabi-gcc helloworld.c
得到a.out
運(yùn)行它,系統(tǒng)報(bào)錯(cuò):
無法執(zhí)行二進(jìn)制文件
這就對(duì)了。 因?yàn)樯傻氖茿RM的二進(jìn)制文件。 當(dāng)然無法在PC機(jī)上運(yùn)行。
把ZED板上的SD卡拔下來, 插到PC上,將a.out 拷貝到ext文件系統(tǒng)中,比如/home/linaro下面。 然后,再插回到ZED板。 啟動(dòng)。
?
然后運(yùn)行 a.out
./a.out
這不, ZED板的Hello World 就有了。 有圖有真相。
評(píng)論