<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux下arm裸機(jī)開(kāi)發(fā)環(huán)境搭建與實(shí)例

          Linux下arm裸機(jī)開(kāi)發(fā)環(huán)境搭建與實(shí)例

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
          折騰了很長(zhǎng)時(shí)間,總算是弄明白怎么在linux編譯運(yùn)行arm裸機(jī)程序了。編譯運(yùn)行arm裸機(jī)程序可以考慮用arm工具鏈搭建編譯環(huán)境,由minicom和dnw來(lái)下載程序,至于調(diào)試,還沒(méi)有去耐心研究,著急來(lái)這里先備份一下,免得時(shí)間久了,忘記怎么回事。

          首先是arm工具鏈,arm工具鏈的編譯我就不寫(xiě)了,一方面很麻煩,另一方面是這方面的資料網(wǎng)上已經(jīng)有很多了,我就不在這里多言浪費(fèi)大家時(shí)間了。我這里有自己編譯的arm工具鏈,當(dāng)然,用網(wǎng)上現(xiàn)成的也不是不可以,但是最好是自己熟悉過(guò)程,免得必要的時(shí)候不會(huì)從源碼配置。我將工具鏈上傳到空間,如果需要,盡管拿去,鏈接地址為,使用說(shuō)明看資源備注:

          本文引用地址:http://www.ex-cimer.com/article/201611/322827.htm

          http://download.csdn.net/detail/girlkoo/3689485

          這樣,就可以開(kāi)發(fā)普通的arm裸機(jī)程序了,現(xiàn)在開(kāi)發(fā)環(huán)境是有了,編寫(xiě)可以編譯通過(guò)的代碼很是容易,但是編寫(xiě)真正運(yùn)行正常的卻不那么簡(jiǎn)單,因此,燒錄工具還是必要的,我推薦是用minicom和dnw,minicom模擬與windows下的超級(jí)終端有相同的功能,這樣就可以像windows下開(kāi)發(fā)環(huán)境一樣與vivi對(duì)話了,另外,我在網(wǎng)上下來(lái)多個(gè)dnw和dnw2,但是發(fā)現(xiàn)dnw2在某些情況下不是很穩(wěn)定,當(dāng)然也有聽(tīng)說(shuō)的成分,不管怎么說(shuō),就是個(gè)工具,不管哪個(gè),用著順手就行,我用的是dnw,也可能是我點(diǎn)背,下載的幾個(gè)dnw燒錄大的鏡像可以,但是燒錄自己開(kāi)發(fā)的程序,只有二三百K的小文件卻老是出錯(cuò),還好linux下是開(kāi)放源碼的,于是我就修改了一番,當(dāng)然,限于水平因素,可能曲解了原作者的意圖,不過(guò)巧合的是燒錄小文件正常了,大的文件也可以,或許你用的時(shí)候并沒(méi)有這個(gè)問(wèn)題,那么請(qǐng)您使用原版的dnw,指出小弟缺點(diǎn),如果不幸弄巧成拙求諸位不要噴我,下面是我修改后的dnw源碼及使用說(shuō)明,下載地址是:

          http://download.csdn.net/detail/girlkoo/3689525

          配置好上面兩個(gè)工具后就可以開(kāi)發(fā)arm2440的裸機(jī)程序了,當(dāng)然移植系統(tǒng)可能還會(huì)用到其他牛B的工具,等用到再去研究,如果有幸小弟弄明白了,還會(huì)來(lái)這里記錄下來(lái)的,下面附上兩個(gè)linux下的arm裸機(jī)程序及makefile,感覺(jué)對(duì)我這樣的新手來(lái)說(shuō)還是有幫助的。

          例子1:匯編文件led_on.S,代碼如下,這里我想告訴大家的是GNU的匯編跟標(biāo)準(zhǔn)的arm匯編是有出入的,具體的大家可以搜索“linux arm 匯編”來(lái)學(xué)習(xí)了解,網(wǎng)友給我們提供了足夠豐富的資源。

          1. .text
          2. .global_start
          3. _start:
          4. ldrr0,=0x56000010
          5. ldrr1,=0x00155555
          6. strr1,[r0]
          7. ldrr0,=0x56000014
          8. movr1,#0x0
          9. strr1,[r0]
          10. MAIN_LOOP:
          11. bMAIN_LOOP

          編譯指令如下:

          編譯:arm-linux-gcc -g -c -o led_on.o led_on.S

          鏈接:arm-linux-ld -Ttext 0x30000000 -g -o led_on.elf led_on.o

          轉(zhuǎn)換:arm-linux-objcopy -O binary -S led_on.elf led_on.bin

          makefile可以這樣寫(xiě):

          1. led_on.bin:led_on.S
          2. arm-linux-gcc-g-c-oled_on.oled_on.S
          3. arm-linux-ld-Ttext0x30000000-gled_on.o-oled_on_elf
          4. arm-linux-objcopy-Obinary-Sled_on_elfled_on.bin
          5. clean:
          6. rm-fled_on.binled_on_elf*.o

          例子2:如果使用廠家提供的Download and run,還可以編寫(xiě)純C語(yǔ)言代碼來(lái)操作arm芯片,下面是流水等的代碼:

          1. #defineGPBCON(*(volatileunsigned*)0x56000010)
          2. #defineGPBDAT(*(volatileunsigned*)0x56000014)
          3. #defineGPBUP(*(volatileunsigned*)0x56000018)
          4. #defineMPLL100MHz0x0007f022
          5. #defineCLKDIV20x02
          6. #definerMPLLCON(*(volatileunsigned*)0x4c000004)
          7. #definerCLKDIVN(*(volatileunsigned*)0x4c000014)
          8. intmain()
          9. {
          10. inti=0;
          11. intcount=0;
          12. intLEDS[4]={0x1c0,0x1a0,0x160,0xe0};
          13. rMPLLCON=MPLL100MHz;
          14. rCLKDIVN=CLKDIV2;
          15. GPBCON=0x00155555;
          16. GPBUP=GPBUP&0xFF00;
          17. while(1)
          18. {
          19. for(count=0;count!=4;++count)
          20. {
          21. GPBDAT=LEDS[count];
          22. for(i=0;i<0x30000;i++);
          23. }
          24. }
          25. }

          命令行下的編譯流程我就不寫(xiě)了,直接把makefile貼在這里吧
          1. led.bin:led.c
          2. arm-linux-gcc-g-c-oled.oled.c
          3. arm-linux-ld-Ttext0x30000000-gled.o-oled.elf-emain
          4. arm-linux-objcopy-Obinary-Sled.elfled.bin
          5. .PYTHON:clean
          6. clean:
          7. rm*.oled.elfled.bin
          這里我想提醒一下,純C的makefile與匯編的makefile是有點(diǎn)區(qū)別的,由于C的主函數(shù)是main,但是arm執(zhí)行環(huán)境并不知道是main,因此需要顯式的指定arm入口函數(shù)-e main,其他的就沒(méi)什么可說(shuō)的了,多文件編譯可以使用推導(dǎo),我相信到這里大家都能自己編寫(xiě)多文件的makefile了,我就不多說(shuō)了,如果有朋友對(duì)此有疑問(wèn)大家一塊討論,共同進(jìn)步還是好的。


          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();