交叉编译说明:工具链安装和环境变量配置
目錄
一? ?簡單了解交叉編譯
① 什么是交叉編譯
② 為什么需要交叉編譯
③ 宿主機和目標機
二? ?搭建交叉編譯工作環境
① 安裝工具鏈
② 配置環境變量
● 配置臨時環境變量
● 配置永久環境變量
三? ?交叉編譯宿主機和目標機
● 宿主機編譯生成的可執行文件下載到目標機(開發板)
四? ?交叉編譯帶wiringPi庫的程序
● 將樹莓派中自帶的wiringPi庫下載到Ubuntu或宿主機中
五? ?軟鏈接和硬鏈接?
① 軟鏈接
② 硬鏈接?
六? ?結合四和五進行編譯
一? ?簡單了解交叉編譯
① 什么是交叉編譯
(1)編譯:是在一個平臺上生成在該平臺上的可執行代碼
(2)交叉編譯:是在一個平臺上生成另一個平臺上的可執行代碼。
● 我們再windows上面編寫C51代碼,并編譯成可執行代碼,如xx.hex,是在c51上面運行,不是在windows上面運行;
● 我們在ubuntu上面編寫樹莓派的代碼,并編譯成可執行代碼,如a.out,是在樹莓派上面運行,不是在ubuntu linux上面運行
② 為什么需要交叉編譯
● 平臺上不允許或不能夠安裝我們所需要的編譯器比如C51;
● 因為目的平臺上的資源貧乏,無法運行我們所需要編譯器;
● 樹莓派作為一款強大的開發板,同樣也需要用到交叉編譯。樹莓派有時因為目的平臺還沒有建立,暫無操作系統,所以根本不能運行編譯器。
● 操作系統也是代碼,也要編譯!
③ 宿主機和目標機
平臺運行需要兩樣至少東西:bootloader(啟動引導代碼)以及操作系統核心。
● 宿主機(host) :編輯和編譯程序的平臺,一般是基于X86的PC機,通常也被稱為主機(電腦X86)。
● 目標機(target):用戶開發的系統,通常都是非X86平臺。host編譯得到的可執行代碼在target上運行(樹莓派ARM)。
二? ?搭建交叉編譯工作環境
① 安裝工具鏈
工具鏈下載網址:https://github.com/raspberrypi/?
(1) 將下載好的工具鏈文件放入Windows中與Ubuntu的共享文件夾中;
(2) 打開Ubuntu,從共享文件夾拷貝到工作目錄。輸入命令:
cp /mnt/hgfs/share/tools-master.zip .//我的共享文件名是share(3) 解壓文件:?unzip tools-master.zip
(4) 進入解壓好的文件目錄中,依次進入如下目錄直到bin目錄(64位計算機就如下選擇)
cd tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin(5)ls進入bin目錄里,找到?arm-linux-gnueabihf-gcc?
?(6)? ls -l 查看bin目錄底下各文件權限,arm-linux-gnueabihf-gcc作為軟連接,實際用到的可執行程序是它后面的arm-linux-gnueabihf-gcc-4.8.3
(7)指令arm-linux-gnueabihf-gcc -v 檢查交叉工具鏈是否是4.8.3版本
② 配置環境變量
臨時:只在當前頁面有效,風險性高,離開當前頁面又需要重新配置;
永久:任何頁面或路徑下都有效,安全可靠
(1)Linux環境變量的作用和配置方法其實和Windows的環境變量一樣,不一樣的只有界面而已;
(2)在上面操作交叉編譯工具鏈可以看到,要使用工具鏈就必須進入層層目錄,繁瑣且麻煩,降低開發效率;
(3)配置環境變量就能很好的解決這一問題;
● 配置臨時環境變量
(1)echo $PATH :顯示當前的環境變量;
(2)pwd :顯示當前路徑,并復制;
(3)export PATH=? :配置環境變量?= 紅線部分 + 當前路徑
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/dhw/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin(4)回車確定,cd 回到工作目錄
(5)arm-linux-gnueabihf-gcc -v :檢查
● 配置永久環境變量
(1)修改工作目錄下的.bashrc 隱藏文件,配置命令終端的vi /home/dhw/.bashrc 打開后在文本最后一行加入以下內容:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/dhw/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
(2)source /home/dhw/.bashrc? 加載配置文件,馬上生效配置。
三? ?交叉編譯宿主機和目標機
?檢查交叉編譯工具鏈:arm-linux-gnueabihf-gcc -v
?在Ubuntu上編寫一個簡單的程序:程序的文件名為:demo1.c
● 常規編譯:gcc demo1.c -o test_1。生成test_1這個可執行程序;
● 交叉編譯:arm-linux-gnueabihf-gcc demo1.c -o test_2? ?。生成test_2這個可執行程序;
?用file命令查看可程序test_1和test_2的屬性:
● test_1在x86-64位計算機上面運行(宿主機-電腦),無法在ARM平臺上運行
● test_2在ARM平臺上運行(目標機-樹莓派),無法在X86平臺上運行
● 宿主機編譯生成的可執行文件下載到目標機(開發板)
scp test_2 pi@192.168.x.xxx:/home/pi
指令 文件名 開發板用戶名@開發板地址:開發板的絕對路徑
? 此方法也可以將目標機文件傳至宿主機
四? ?交叉編譯帶wiringPi庫的程序
說明:在樹莓派中編寫帶wiringPi庫的程序時(比如IO口),直接在程序中加頭文件#include <wiringPi.h>,在編譯的時候-l鏈接wiringPi庫即可,因為樹莓派自帶有wiringPi庫,在/usr/lib目錄下。在Ubuntu中或者宿主機中沒有自帶wiringPi的庫,那么很明顯無法順利完成帶wiringPi庫程序的交叉編譯。
● 將樹莓派中自帶的wiringPi庫下載到Ubuntu或宿主機中
①? cd /usr/lib? :樹莓派wiringPi庫的文件路徑;
②? ls -l |grep wiringPi :過濾出只有wiringPi庫的相關文件
③ 將軟鏈接libwiringPi.so指向的libwiringPi.so.2.50下載到Ubuntu或宿主機中:
scp libwiringPi.so.2.50 dhw@192.168.x.x:/home/dhw/lessonPI 指令 需要拷貝的文件名 目標用戶名 ip 拷貝的目標路徑注意:這里要拷貝軟連接指向的文件,如果直接拷貝軟鏈接到Ubuntu,Ubuntu里并不會生成我們要的軟鏈接。
那么需要自己來生成軟鏈接!具體如下:
五? ?軟鏈接和硬鏈接?
① 軟鏈接
● 軟鏈接文件有類似于Windows的快捷方式;
● 在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息;
● 在選定的位置上生成一個文件的鏡像,不會占用磁盤空間。
生成方法:
ln -s libwiringPi.so.2.50 libwiringPi.so 指令 參數 要被鏈接的文件 要生成的軟鏈接文件名字② 硬鏈接?
● 在選定的位置上生成一個和源文件大小相同的文件;
● 硬鏈接通過索引節點來進行鏈接;在Linux的文件系統中,保存在磁盤分區中的文件不管是什么類型都給它分配一個編號,稱為索引節點號(Inode Index)。在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接
● 允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。因為對應該目錄的索引節點有一個以上的連接。只刪除一個連接并不影響索引節點本身和其它的連接,只有當最后一個連接被刪除后,文件的數據塊及目錄的連接才會被釋放,也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。
生成方法:
ln libwiringPi.so.2.50 libwiringPi.so? 沒有參數 -s? 無論是軟鏈接還是硬鏈接,文件都保持同步變化。
六? ?結合四和五進行編譯
編譯時通過-I -L來指定相關庫的路徑
● -I (注意是大寫的i) 給gcc添加自定義的頭文件的路徑
● -L 給gcc添加額外的搜索庫的路徑
說明:將樹莓中名為demo2.c的程序文件拷貝到Ubuntu中,demo2.c是需要連接wiringPi庫使用的程序;-I的wiringPi庫的頭文件是自行網上下載的wiringPi庫的包;-L的wiringPi庫是樹莓拷貝到Ubuntu中的?。
arm-linux-gnueabihf-gcc demo2.c -I /home/dhw/lessonPI/WiringPi/WiringPi/wiringPi -L. -lwiringPi -o test 交叉編譯工具鏈 樹莓關于IO口文件 -I wiringPi庫頭文件路徑 -L wiringPi庫?編譯通過:
總結
以上是生活随笔為你收集整理的交叉编译说明:工具链安装和环境变量配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 港联证券|揭秘涨停 旅游板块掀涨停潮
- 下一篇: ImageMagick/Graphics