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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM裸機(jī)開(kāi)發(fā)bootloader交叉工具鏈

          ARM裸機(jī)開(kāi)發(fā)bootloader交叉工具鏈

          作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
          今天跟隨國(guó)嵌,初識(shí)linux下ARM裸機(jī)開(kāi)發(fā)全過(guò)程?,F(xiàn)在總結(jié)如下:

          首先說(shuō)明為什么要學(xué)習(xí)裸機(jī)開(kāi)發(fā),一方面bootloader的編寫要用到裸機(jī)開(kāi)發(fā)的知識(shí),另一方面就是驅(qū)動(dòng)的開(kāi)發(fā)。一般情況下我們進(jìn)行系統(tǒng)上的開(kāi)發(fā),不會(huì)用到裸機(jī)開(kāi)發(fā)。

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

          學(xué)習(xí)要點(diǎn)

          1、如何修改默認(rèn)路徑

          用戶 root

          #vim /root/.bashrc

          添加:export PATH=$PATH:路徑

          生效路徑:source /root/.bashrc

          2、裸機(jī)開(kāi)發(fā)流程:1編寫裸機(jī)程序。2調(diào)試裸機(jī)程序。3生產(chǎn)二進(jìn)制映像(編譯、鏈接、格式轉(zhuǎn)換)。4燒寫/運(yùn)行二進(jìn)制映像。

          led.ldsled.SMakefile

          編譯:arm-linux-gcc -g -c led.S 生產(chǎn)led.o

          鏈接:arm-linux-ld -Tled.lds -o led.elf led.o

          格式轉(zhuǎn)換:arm-linux-objcopy -O binary led.elf led.bin

          3、Makefile

          all: led.o
          arm-linux-ld -Tled.lds -o led.elf led.o
          arm-linux-objcopy -O binary led.elf led.bin

          led.o : led.S
          arm-linux-gcc -g -o led.o -c led.S

          .PHONY: clean
          clean:
          rm *.o led.elf led.bin

          4、燒寫與運(yùn)行

          運(yùn)用超級(jí)終端與開(kāi)發(fā)板進(jìn)行通信,用dnw下載映像程序到nandflash。以nandflash重新啟動(dòng)6410,可以看到led亮起來(lái)了。

          燒寫的整個(gè)過(guò)程都是在windowsXP下進(jìn)行的,如何在linux下運(yùn)用minicom代替超級(jí)終端?并結(jié)合linux下的dnw驅(qū)動(dòng)燒寫成功。

          再續(xù)

          有關(guān)linux下minicom與開(kāi)發(fā)板通信的問(wèn)題,本人查找了一個(gè)晚上的資料,終于搞定了。

          1、首先要設(shè)置vmware,vm-setting-hardware-serial port添加串口設(shè)備。然后重新啟動(dòng)linux,這個(gè)時(shí)候一定要保證超級(jí)終端是關(guān)閉的,以免串口被除linux以外的軟件占用。這一步也是很多朋友忘記的,至關(guān)重要。

          2、minicom的設(shè)置,這很簡(jiǎn)單,root登錄下,輸入minicom -s 就進(jìn)入了設(shè)置界面。保證115200 bps。串口要設(shè)置為/dev/ttyUSB0或ttyS0(我使用的是前者,在我的電腦上后者不能用,所以就用了一根usb轉(zhuǎn)串口線就可以了,也不知道怎么回事)。退出時(shí)一定要保持,選擇save to df1.

          3、設(shè)置好以后,直接輸入minicom就可以啟動(dòng)了。sd卡模式下啟動(dòng)開(kāi)發(fā)板就可以實(shí)現(xiàn)開(kāi)發(fā)板與linux系統(tǒng)的通信了。

          關(guān)于dnw驅(qū)動(dòng)安裝不上的原因,我已經(jīng)查實(shí)。原因是驅(qū)動(dòng)編寫時(shí)用的內(nèi)核版本與我用的linux內(nèi)核不是一個(gè)版本。

          輸入命令insmod dnw_usb.ko

          然后輸入dmesg可以查看到原因

          dnw_usb: version magic 2.6.32-279.el6.i686 SMP mod_unload modversions 686 should be

          2.6.18-53.el5xen SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1

          5、初識(shí)交叉工具鏈

          1、什么是交叉工具鏈?

          鏈?zhǔn)羌系囊馑迹徊婀ぞ哝溡簿褪墙徊婀ぞ呒系囊馑?。之所以稱為交叉工具,是因?yàn)?strong>嵌入式的開(kāi)發(fā)有宿主機(jī)和目標(biāo)機(jī)兩個(gè)角色,宿主機(jī)主要用來(lái)編譯、鏈接嵌入式軟件,而嵌入式軟件要在目標(biāo)機(jī)上運(yùn)行,也就是目標(biāo)硬件。

          2、常用的交叉工具鏈

          交叉編譯器 arm-linux-gcc (gcc編譯器頭文件在/usr/include/,而arm-linux-gcc頭文件用arm-linux-gcc --help中的命令可以查看頭文件地址)

          交叉鏈接器 arm-linux-ld

          交叉轉(zhuǎn)換器 arm-linux-objcopy

          交叉ELF文件工具 arm-linux-readelf

          交叉反匯編器 arm-linux-objdump

          3、演示

          led.lds led.S

          arm-linux-gcc -g -c led.S

          led.o led.lds led.S

          arm-linux-ld -Tled.lds -o led.elf led.o

          led.elf led.o led.lds led.S

          查看elf文件

          arm-linux-readelf -a led.elf

          編譯產(chǎn)生的文件為elf文件,如果生產(chǎn)文件不能運(yùn)行,一般會(huì)有三方面原因:

          arm-linux-gcc -static -o hello hello.c

          1、file查看運(yùn)行環(huán)境(ARM、X86)

          2、readelf查看大小端

          3、查看庫(kù)arm-linux-readelf -d hello

          可以自己用gcc和arm-linux-gcc兩種方式編譯生產(chǎn)elf文件,然后查看他們的運(yùn)行環(huán)境。

          反匯編:arm-linux-objdump -D -S hello/led.elf >dump

          cat dump

          elf格式的文件不能在ARM中運(yùn)行(帶系統(tǒng)的ARM中如果含有elf解析器除外)。所以要進(jìn)行格式的轉(zhuǎn)換,將應(yīng)用程序轉(zhuǎn)換為二進(jìn)制的映像程序。

          arm-linux-objcopy -O binary led.elf led.bin

          產(chǎn)生的led.bin文件可以在ARM中直接運(yùn)行。

          查看幫助文件方法:arm-linux-gcc --help

          6、Makefile工具管理

          1、為什么要用Makefile

          主要是為了提高編譯、鏈接的效率。我們可以將多條編譯命令寫在一個(gè)Makefile文件中,然后只用一條make命令就可以實(shí)現(xiàn)多條命令的功能。

          2、Makefile怎么構(gòu)成

          規(guī)則和變量

          規(guī)則: 目標(biāo):依賴

          命令

          變量:自定義obj=func.o func1.o

          命令中引用:$(obj)

          系統(tǒng)默認(rèn):$^:所以依賴文件 $< 第一個(gè)依賴文件$@目標(biāo)文件

          3、Makefile使用技巧

          直接輸入make默認(rèn)執(zhí)行第一條規(guī)則,第一條規(guī)則默認(rèn)為最終目標(biāo)。

          make 目標(biāo) 選擇性的執(zhí)行某一個(gè)目標(biāo)

          內(nèi)核還有uboot中經(jīng)常使用一種通用規(guī)則 %.o %.s

          1、取消回顯:@命令

          2、使用文件名:系統(tǒng)默認(rèn)make命令作用于makefile或Makefile文件。如果想作用于自己定義的文件則要這樣進(jìn)行:

          make -f file clean

          7、鏈接器腳本

          1、鏈接器腳本有什么作用?

          在源程序不變的情況下,不同的鏈接器腳本對(duì)程序會(huì)產(chǎn)生不同的效果。特別在設(shè)置代碼段首文件的時(shí)候,這會(huì)對(duì)程序的后期運(yùn)行產(chǎn)生很大的作用。

          2、鏈接器腳本的構(gòu)成

          主要分為:段

          起始鏈接地址

          對(duì)齊設(shè)置

          使用變量

          設(shè)置代碼段首文件

          下面是一個(gè)例子,可以參考:

          ENTRY(_start)SECTIONS{. = 0x50008000;  //起始地址,.代表當(dāng)前地址. = ALIGN(4); //對(duì)齊方式為4字節(jié)對(duì)齊,就是說(shuō)存取地址要為4的倍數(shù).text :  //代碼段{led.o (.text) //代碼段首文件設(shè)置*(.text)}. = ALIGN(4);.rodata :{*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))}. = ALIGN(4);.data : //數(shù)據(jù)段{*(.data)}. = ALIGN(4);bss_start = .; //使用變量,此變量可以在源程序中應(yīng)用.bss //未初始化全局變量{*(.bss). = ALIGN(4);}bss_end = .;}

          下面有幾個(gè)問(wèn)題說(shuō)明一下:對(duì)齊設(shè)置是為了提高數(shù)據(jù)的存取效率。代碼段首文件是cpu上電時(shí)開(kāi)始運(yùn)行的文件。

          7、eclipse的集成開(kāi)發(fā)

          1、為什么要使用eclipse

          目的是集成編譯和在線調(diào)試

          2、整個(gè)的集成開(kāi)發(fā)環(huán)境構(gòu)成

          eclipse arm-linux-gdb jlinkgdbserver

          1、eclipse的安裝十分簡(jiǎn)單,解壓縮后,直接運(yùn)行就可以了。

          2、arm-linux-gdb解壓縮后還要設(shè)置默認(rèn)路徑,因?yàn)橹耙呀?jīng)安裝了arm-tools里面含有arm-linux-gdb。設(shè)置默認(rèn)路徑時(shí)要將剛安裝的gdb路徑放在前面,因?yàn)檫@里的默認(rèn)路徑執(zhí)行靠前優(yōu)先的原則。

          3、jlinkgdbserver的安裝要相對(duì)復(fù)雜一點(diǎn),解壓縮后還要三個(gè)文件到新的文件夾下:1、cp -d libjlinkarm.so.* /usr/lib -f2、cp 45-jlink.rules /etc/udev/rules.d/。完成之后,運(yùn)行jlinkgdbserver就可以了。

          3、eclipse使用之前的配置

          1、首先安裝jlink插件,這要在網(wǎng)上下載然后安裝。方法:選擇help-installnewsofteware然后填入網(wǎng)址http://opensource.zylin.com/zylincdt直接點(diǎn)擊ok,等待找到zylin embedded cdt 選中后點(diǎn)擊next 再next 選accept 后點(diǎn)擊finish。最后restart。

          2、配置eclipse

          1、file-new-makefile project with existing code

          2、去掉自動(dòng)組件:project-bulid automatical

          3、如何編譯

          選中工程led后,點(diǎn)project中的build all在console中可以查看make。

          4、調(diào)試,Debug-debug configurations然后雙擊zylin embedded debug

          5、main:選中c/c++ application的browse選擇led.elf。Debugger:arm-linux-gdb,去掉stop on startup at maincommands:運(yùn)行g(shù)editinit6410進(jìn)行初始化設(shè)置。之后就可以使用eclipse。



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