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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > arm 裸板程序編譯過程

          arm 裸板程序編譯過程

          作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
          看過編譯原理的人都知道我們一句簡單的arm-linux-gcc到達(dá)做了哪些工作。他并不是簡單的把我們的原文件編譯成我們可執(zhí)行的二進(jìn)制文件,在這個過程中他其實至少做了兩部工作。“編譯”和鏈接“當(dāng)然這其中包含了很多關(guān)于編譯原理的至少,由于本人才疏學(xué)淺說以也只能夠簡單的把他說成編譯和鏈接了。如果需要跟深入的理解請查找相關(guān)”編譯原理的書籍吧“

          這里我們先介紹一下常用的GCC命令.

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

          1.arm-linux-gcc-v 查看gcc版本號

          2.arm-linux-nm 查看一個.o文件所需要的庫。

          3.arm-linux-ld 鏈接命令

          3.arm-linux-gcc編譯命令

          4arm-linux-objdump -h test 查看符號

          -d 反匯編

          5arm-linux-as ls.S -o ls.o 將匯編原文件編譯成.o文件

          6arm-linux-objcopy -I elf32-littlearm-O binary test test.bin 去掉二進(jìn)制文件elf頭。

          現(xiàn)在我們來寫一個arm裸板的LED閃燈程序非常簡單的。

          源代碼 led_test.c

          void main()
          {
          int i=0;
          volatile long *GPKCON0 = 0x7F008800;
          volatile long *GPKDAT = 0x7F008808;
          volatile long *GPKPUD = 0x7F00880C;

          *GPKCON0 &= ~(0XFFFF <<16);
          *GPKCON0 |= (0X1111 <<16);
          while(1){
          *GPKDAT &= ~(0XF <<4);
          i=0xfffff;
          while(i--)
          ;
          *GPKDAT |= (0XF <<4);
          i=0xfffff;
          while(i--)
          ;
          }
          }

          每隔大概3秒鐘的時間LED閃爍一次。非常簡單的一個程序。這里沒有使用定時器啊 什么的知識簡單的做循環(huán)來延時。注意 關(guān)于LED 的GPIO相關(guān)寄存器地址根據(jù)你自己的實際情況來。

          編譯過程

          1 編譯

          arm-linux-gcc-c -march=armv4 test.c -o test.o

          2.鏈接

          arm-linux-ld -Ttext=50008000 test.o -o test //注意這個鏈接地址不要鏈接到你arm開發(fā)板不能提供的內(nèi)存地址。

          3 去掉elf頭信息

          arm-linux-objcopy -I elf32-little -O binary test test.bin

          這樣 我們需要的LED裸板閃燈代碼就生成了。

          現(xiàn)在我們通過任何你能夠使用的工具 把我們生成的 bin文件少些到ram的 0x50008000 這個地址。

          然后讓在bootloader中執(zhí)行

          bootm 0x50008000 看到你的燈閃木有。

          注意arm-linux-gcc版本。由于arm-linux-gcc-4.x.x 不支持arm-linux-ld -Ttext 這個參數(shù)還是其他的,具體沒深入研究。會出錯。

          只能使用arm-linux-gcc3.x.x的版本 這一點一定要注意。我今天就是因為這個原因郁悶了半天。如果有誰知道4.x.x版本的具體原因請告訴我并萬分感謝



          關(guān)鍵詞: arm裸板程序編譯過

          評論


          技術(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); })();