歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下ARM裸機開發-交叉工具鏈

Linux下ARM裸機開發-交叉工具鏈

日期:2017/3/1 9:48:26   编辑:Linux編程

初識linux下ARM的裸機開發全過程。現在總結如下:

首先說明為什麼要學習裸機開發,一方面bootloader的編寫要用到裸機開發的知識,另一方面就是驅動的開發。一般情況下我們進行的系統上的開發。

學習要點

1、如何修改默認路徑

用戶 root

#vim /root/.bashrc

添加:export PATH=$PATH:路徑

生效路徑:source /root/.bashrc

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

led.lds led.SMakefile

編譯:arm-linux-gcc -g -c led.S 生產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、燒寫與運行

運用superboot與開發板進行通信,用dnw下載映像程序到nandflash。以nandflash重新啟動6410,可以看到led亮起來了。

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

再續

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

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卡模式下啟動開發板就可以實現開發板與linux系統的通信了。

關於dnw驅動安裝不上的原因,我已經查實。原因是驅動編寫時用的內核版本與我用的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、什麼是交叉工具鏈?

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

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

編譯產生的文件為elf文件,如果生產文件不能運行,一般會有三方面原因:

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

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

2、readelf查看大小端

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

可以自己用gcc和arm-linux-gcc兩種方式編譯生產elf文件,然後查看他們的運行環境。

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

cat dump

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

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

產生的led.bin文件可以在ARM中直接運行。

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

6、Makefile工具管理

1、為什麼要用Makefile

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

2、Makefile怎麼構成

規則和變量

規則: 目標:依賴

<Tab>命令

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

命令中引用:$(obj)

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

3、Makefile使用技巧

直接輸入make默認執行第一條規則,第一條規則默認為最終目標。

make 目標 選擇性的執行某一個目標

內核還有uboot中經常使用一種通用規則 %.o %.s

1、取消回顯:@命令

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

make -f file clean

Copyright © Linux教程網 All Rights Reserved