新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM裸機開發(fā)bootloader交叉工具鏈

ARM裸機開發(fā)bootloader交叉工具鏈

作者: 時間:2016-11-19 來源:網(wǎng)絡 收藏
今天跟隨國嵌,初識linux下ARM裸機開發(fā)全過程?,F(xiàn)在總結如下:

首先說明為什么要學習裸機開發(fā),一方面bootloader的編寫要用到裸機開發(fā)的知識,另一方面就是驅動的開發(fā)。一般情況下我們進行系統(tǒng)上的開發(fā),不會用到裸機開發(fā)。

本文引用地址:http://m.butianyuan.cn/article/201611/318214.htm

學習要點

1、如何修改默認路徑

用戶 root

#vim /root/.bashrc

添加:export PATH=$PATH:路徑

生效路徑:source /root/.bashrc

2、裸機開發(fā)流程:1編寫裸機程序。2調試裸機程序。3生產(chǎn)二進制映像(編譯、鏈接、格式轉換)。4燒寫/運行二進制映像。

led.ldsled.SMakefile

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

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

格式轉換: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、燒寫與運行

運用超級終端與開發(fā)板進行通信,用dnw下載映像程序到nandflash。以nandflash重新啟動6410,可以看到led亮起來了。

燒寫的整個過程都是在windowsXP下進行的,如何在linux下運用minicom代替超級終端?并結合linux下的dnw驅動燒寫成功。

再續(xù)

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

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

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

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

關于dnw驅動安裝不上的原因,我已經(jīng)查實。原因是驅動編寫時用的內核版本與我用的linux內核不是一個版本。

輸入命令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、初識交叉工具鏈

1、什么是交叉工具鏈?

鏈是集合的意思,交叉工具鏈也就是交叉工具集合的意思。之所以稱為交叉工具,是因為嵌入式的開發(fā)有宿主機和目標機兩個角色,宿主機主要用來編譯、鏈接嵌入式軟件,而嵌入式軟件要在目標機上運行,也就是目標硬件。

2、常用的交叉工具鏈

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

交叉鏈接器 arm-linux-ld

交叉轉換器 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)文件不能運行,一般會有三方面原因:

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

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

2、readelf查看大小端

3、查看庫arm-linux-readelf -d hello

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

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

cat dump

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

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

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

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

6、Makefile工具管理

1、為什么要用Makefile

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

2、Makefile怎么構成

規(guī)則和變量

規(guī)則: 目標:依賴

命令

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

命令中引用:$(obj)

系統(tǒng)默認:$^:所以依賴文件 $< 第一個依賴文件$@目標文件

3、Makefile使用技巧

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

make 目標 選擇性的執(zhí)行某一個目標

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

1、取消回顯:@命令

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

make -f file clean

7、鏈接器腳本

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

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

2、鏈接器腳本的構成

主要分為:段

起始鏈接地址

對齊設置

使用變量

設置代碼段首文件

下面是一個例子,可以參考:

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

下面有幾個問題說明一下:對齊設置是為了提高數(shù)據(jù)的存取效率。代碼段首文件是cpu上電時開始運行的文件。

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

1、為什么要使用eclipse

目的是集成編譯和在線調試

2、整個的集成開發(fā)環(huán)境構成

eclipse arm-linux-gdb jlinkgdbserver

1、eclipse的安裝十分簡單,解壓縮后,直接運行就可以了。

2、arm-linux-gdb解壓縮后還要設置默認路徑,因為之前已經(jīng)安裝了arm-tools里面含有arm-linux-gdb。設置默認路徑時要將剛安裝的gdb路徑放在前面,因為這里的默認路徑執(zhí)行靠前優(yōu)先的原則。

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

3、eclipse使用之前的配置

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

2、配置eclipse

1、file-new-makefile project with existing code

2、去掉自動組件:project-bulid automatical

3、如何編譯

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

4、調試,Debug-debug configurations然后雙擊zylin embedded debug

5、main:選中c/c++ application的browse選擇led.elf。Debugger:arm-linux-gdb,去掉stop on startup at maincommands:運行geditinit6410進行初始化設置。之后就可以使用eclipse。



評論


技術專區(qū)

關閉