linux的驱动开发——交叉编译器
1.交叉編譯器
\qquadARM裸機(jī)、Uboot移植、linux移植這些都需要在linux系統(tǒng)上進(jìn)行編譯,編譯就需要編譯器。在linux系統(tǒng)中,可以使用gcc命令對c語言程序進(jìn)行編譯,但gcc編譯器是針對X86架構(gòu)的,現(xiàn)在需要對ARM架構(gòu)的代碼進(jìn)行編譯。所以我們現(xiàn)在需要一個(gè)可以對ARM架構(gòu)的代碼進(jìn)行編譯的gcc編譯器,這個(gè)編譯器被稱為交叉編譯器。
\qquad交叉編譯器具有如下的特點(diǎn):
\qquad(1)是一個(gè)gcc編譯器
\qquad(2)運(yùn)行在X86架構(gòu)上
\qquad(3)可以編譯ARM架構(gòu)的代碼,也就是說編譯出來的可執(zhí)行文件是在ARM芯片上運(yùn)行的
2.ARM-linux交叉編譯器的下載安裝
\qquad我下載的是gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz,下載地址:arm-linux交叉編譯器4.9.4
\qquad下載完成后,在/usr/local目錄下,創(chuàng)建一個(gè)arm目錄,然后再把gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz拷貝到/usr/loacl/arm目錄下,再解壓。
\qquad解壓完成之后,還需要把/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin的路徑添加到/etc/profile
sudo vim /etc/profile #打開profile\qquad在文件最后,添加export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
\qquad查看是否安裝成功,若安裝成功會(huì)顯示版本號gcc version 4.9.4 (Linaro GCC 4.9-2017.01)
3.交叉編譯器的編譯過程
\qquad首先使用arm-linux-gnueabihf-gcc,將.c .s文件編譯為.o文件,.s文件是匯編文件,.c文件是c語言文件。
\qquad-g:產(chǎn)生調(diào)試信息;-c:編譯源文件,但是不鏈接;-o:制定編譯產(chǎn)生的.o文件的名字。
\qquad然后把上一步的所有的.o文件鏈接到一起,并要指定一個(gè)鏈接起始地址,也就是代碼運(yùn)行的起始地址。鏈接起始地址一般指向RAM地址,RAM 分為內(nèi)部RAM和外部RAM,外部RAM即DDR。比如:
arm-linux-gnueabihf-ld -Ttext 0X87800000 xxx.o -o xxx.elf\qquad最后xxx.elf不是最終燒寫到單片機(jī)sd卡上的可執(zhí)行文件,我們要燒寫的文件是.bin文件,這需要使用arm-linux-gnueabihf-objcopy -O binary -S -g xxx.elf xxx.bin
\qquad其中-O:選擇以什么格式輸出;binary:以二進(jìn)制輸出;-S:不要復(fù)制源文件中的重定位和符號信息;-g:不要復(fù)制源文件中的調(diào)試信息;
總結(jié)
以上是生活随笔為你收集整理的linux的驱动开发——交叉编译器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库高级知识——主从复制
- 下一篇: 计算机网络(二)-性能指标