天天看點

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

本章内容對應視訊講解連結(線上觀看): 

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

我們寫了 linux 上第一個 c 程式 heollo world ,是使用 gcc 編譯器進行代碼的編譯,編譯得到的可執行檔案隻能在 X86 結構的 PC 上運作,我們來看下,在我的 ubuntu 的 test 目錄下有一個 hello.c ,這個程式也非常簡單,就是一個 hello world ,我們來編譯一下,然後運作下可執行檔案,這個可執行檔案是可以在 PC上運作的。如下圖所示。

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

然後我們使用 file 指令來看下這個檔案,這個檔案是可以在 X86 上運作的,但是它不能在 ARM 上運作,因為它這裡寫的是 X86。如下圖所示。

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

如果我們想在 ARM 上運作,就要使用 ARM 的編譯器,然後在 X86 上進行編譯。因為我們使用 ARM 的編譯器編譯完了之後,是把我們的可執行程式放到開發闆上來運作,而不是在 PC 上運作的,這個過程大家可以把它了解成交叉,然後再和我們的編譯器結合起來就叫做交叉編譯器。交叉編譯器的種類有很多,我

們使用 的 是 Linaro 公 司 的 arm 交 叉 編 譯 器 , 這 是 交 叉 編 譯 器 的 地 址

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

我們已經給大家下載下傳好了,打開 i.MX6ULL 終結者CD光牒資料\01_開發及燒寫工具\1.交叉編譯器,給大家下載下傳好了一個是 64 位的,一個是 32 位的,如下圖所示。

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

然後我們把交叉編譯器拷貝到 ubuntu,因為我們安裝的是 64 位的 ubuntu ,是以要安裝 64 位的交叉編譯器,這裡作者不推薦大家安裝 32 位的 ubuntu,因為 64 位的 ubuntu,可以安裝支援 32 位的依賴包,但是 32 位的 ubuntu 安裝不了 64 位的依賴包,是以大家哪怕這裡是安裝的 64 位的,但是他也是向下相容32 位的,是以作者這裡推薦提供的都是 ubuntu64 位的系統,

接下來我們安裝下交叉編譯器,我們使用 ssh 把我們交叉編譯器的安裝包拷貝到 ubuntu 上,進入

/usr/local

cd /usr/local

進到這個目錄,然後我們在這個目錄下建立一個名為 arm 的檔案夾,

sudo mkdir arm

然後我們進到 arm 檔案夾裡面,我們把我們的交叉編譯器放到這個目錄上,

cd arm

我們打開 ssh 軟體,連接配接下 ubuntu ,這裡大家也可以使用 samba 這個工具來安裝,都是可以的,然後我們通過 ssh 軟體進到我們剛剛建立的目錄 /usr/local/arm 這個目錄,然後我們把CD光牒裡面的交叉編譯器拖過來,我們這裡要用 64 位的,然後我們在 ubuntu 上解壓這個檔案,解壓直接使用 tar 指令就可以了,如下圖所示。

sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

我們要使用管理者的身份來運作,解壓成功後,就會在目前目錄下看到生成的這個檔案,如下圖所示。

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

解壓完之後下一步就要添加環境變量了,這裡之前給大家講過了,ubuntu 修改的是這個檔案,我們也可以修改 .bashrc 檔案,我們之前講到了修改環境變量的方法,參考第十七章,我們修改的這個檔案是對所有使用者生效的,就是說我在這裡添加完了環境變量,不管是在 topeet 使用者還是在 root 使用者都可以找到arm 交叉編譯器,如果是在 bashrc 這個檔案下修改,那麼你目前是哪個使用者你就僅對目前這個使用者生效,是以我們來改下這個檔案,打開檔案如圖所示。

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

然後我們進到這個檔案的最後,輸入

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

修改完了之後,我們要重新開機下 ubuntu,這樣交叉編譯環境才能生效,環境變量才可以生效。使用指令

sudo reboot

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

重新開機成功後,我們來檢查我們的交叉編譯器有沒有成功安裝,我們可以在控制台上輸入 arm- 輸入一個Tap 他會自動幫我們補全,然後我們輸入一個 gcc -v ,

arm-linux-gnueabihf-gcc -v

如果這裡顯示了 gcc 的版本号 4.9.4 說明我們的交叉編譯器是成功的,如下圖所示。如果這裡大家跟我顯示的不太一樣,大家可以看下環境變量有沒有設定對,還有大家安裝的 ubuntu 是不是 64 位的,因為我這裡安裝的是 64 位的交叉編譯器。

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

然後我們進到 test 目錄下,我們使用交叉編譯器來編譯下 hello.c ,編譯方法和我們之前使用 gcc 編譯方法是一樣的,gcc 加 hello.c 這個源檔案,然後後邊跟上-o 指定的檔案名稱,格式是一摸一樣的,隻不過把 gcc 編譯器換成了交叉編譯器,使用 arm-linux-gnueabihf- 後邊跟上 gcc 和我們要編譯的原檔案的名字,-o 指定下我們要生成的可執行檔案,這樣我們就編譯成功了,如下圖所示。

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

然後我們可以來運作下這個 hello ,大家看他這裡是提示錯誤的,我們不能執行,如下圖所示。

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

使用 file 指令來看下,這裡顯示的架構是 arm ,說明我們這個可執行檔案是在開發闆上運作的而不是在 X86 上運作的,可以看到,使用 gcc 編譯器編譯出來的可執行檔案,它的架構是 X86 的,是以我們使用 gcc編譯器編譯完的可執行程式隻能在 X86 的 ubuntu 上運作,不能在 arm 上運作。大家通過 file 指令就可以區分了,大家可以自己安裝下。如下圖所示。

迅為IMX6ULL開發闆交叉編譯器的安裝和使用

繼續閱讀