我們知道,在pc機linux上,安裝開源軟體,一般來講,大多是如下幾個步驟就搞定了。
tar -xzf open_source_software.tar.gz
cd open_source_software
./configure
make
make install
但是,如果要將開源軟體移植到嵌入式linux單板上執行,情況卻略有不同。
其實,無論是在pc機linux上安裝開源軟體,還是將開源軟體移植到嵌入式linux單板上,其操作過程,在本質上是完全相同的。只是在pc機linux上,各項事宜預設就得到了正確的組合。而對於嵌入式linux單板,我們則需要明確地為這些事宜構造正確的組合。下面,我們就來看看具體的移植過程。
一、在pc機linux上安裝合適的交叉編譯工具鏈。
這一步很簡單,一般就是將工具鏈的壓縮包解壓到某個路徑下,就完成了安裝。
我們這裡假設目標單板是arm處理器,執行linux系統,
用的工具鏈是arm-linux-gcc-3.4.1,工具鏈安裝路徑是/opt/arm-linux-gcc-3.4.1。
並且,為了使用方便,我們已經將/opt/arm-linux-gcc-3.4.1/bin目錄新增到path環境變數中了。這樣就可以直接使用arm-linux-gcc、arm-linux-ld等命令了。
如果不這樣做的話,後面使用/設定編譯器時,就得用/opt/arm-linux-gcc-3.4.1/bin/arm-linux-gcc了。
二、開源庫的移植
由於有些開源應用程式本身又依賴於一些開源庫。因此,我們的移植步驟是,先移植開源庫,再移植開源應用程式。不然的話,開源應用程式的編譯就會成問題。
因此,這裡先介紹開源庫的移植。
庫的移植,其實就是對工具鏈自帶的庫進行了擴充。
例如,假設上述arm工具鏈的stdio.h檔案路徑為/opt/arm-linux-gcc-3.4.1/include/stdio.h
那麼,我們移植完開源庫之後:
/opt/arm-linux-gcc-3.4.1/include/下面就會多出一些標頭檔案。
/opt/arm-linux-gcc-3.4.1/lib/下面就會多出一些.a檔案或.so檔案。
當然,凡是單板上用到的/opt/arm-linux-gcc-3.4.1/lib/下面的.so檔案,不管是工具鏈自帶的,還是我們移植的,都需要拷貝到單板的根檔案系統的/usr/lib/目錄中。
好了,下面說說具體移植步驟。
假設我們已經獲取並解壓了開源庫的原始碼包,並且在shell中已經進入了原始碼包的根目錄。接下來的工作,分三步進行。
1. 配置
注意,這是最關鍵的一步。在這一步中,我們要指定諸如目標單板的作業系統、cpu、工具鏈等資訊。
一般來講,常見的配置方法,是通過 ./configure 命令進行。當然,有些開源包,可能叫./config或其他名字。這並不重要。
這些configure通常都是很大的shell指令碼,應該都是用自動化工具生成的。因此,我們不用費力去讀他的內容。
以opensll為例。配置命令為:
./config--prefix=/opt/arm-linux-gcc-3.4.1/ linux-elf:arm-linux-gcc
這就指定了目標型別是linux-elf,工具鏈是arm-linux-gcc。
安裝路徑是:/opt/arm-linux-gcc-3.4.1/。注意,這個路徑是交叉工具鏈include目錄及lib目錄的父目錄。因為標頭檔案及編譯後的庫檔案,需要分別安裝到include與lib目錄中。
當然,在配置命令中,我們還可以指定其他選項,以做進一步的定製。
一般來講,可以通過 ./configure --help 命令檢視所支援的可定製選項。
該命令會輸出所支援的各種選項,選項的含義,以及預設是否開啟等資訊。
當然,對於opensll來說,這裡是用./config --help 命令。
如果這一步失敗,通常是編譯系統依賴的某個工具沒找到。這個好辦,安裝一下就是了。
2. 編譯
這就簡單了,一般來說,乙個make命令搞定
3. 安裝
這就簡單了,一般來說,乙個make install命令搞定
對於本例來說,由於指定了安裝路徑為:--prefix=/opt/arm-linux-gcc-3.4.1/
因此,標頭檔案(例如,openssl/ssl.h)及編譯後的庫檔案(如libcrypto.a libssl.a),會分別被安裝到/opt/arm-linux-gcc-3.4.1/include與 /opt/arm-linux-gcc-3.4.1/lib目錄中。這樣一來,就相當於擴充了/opt/arm-linux-gcc-3.4.1自帶的庫。接下來,就可以編譯使用了opensll的開源應用程式了。
三、開源應用程式的移植
假設我們已經獲取並解壓了開源應用程式的原始碼包,並且在shell中已經進入了原始碼包的根目錄。接下來的工作,也分三步進行。
1. 配置
和開源庫的移植類似。在這一步中,我們要指定諸如目標單板的作業系統、cpu、工具鏈等資訊。
以e2fsprogs-1.42.5為例。配置過程如下(可能相對傳統一點):
mkdir release
cd release/
../configure --host=arm-linuxcc=arm-linux-gcc
當然,我們同樣可以帶上更多的引數,做更多的定製。
例如,帶上引數 ldflags=-static從而指定靜態鏈結。
如果這一步失敗,有兩個原因:
a). 編譯系統依賴的某個工具沒找到。這個好辦,安裝一下就是了。
b). 開源應用程式的某個功能項所依賴的某個開源庫沒有找到。
這種問題,有兩個解決辦法:
一是移植此開源庫,按照前面的方法;
二是通過 --disable-funcname關閉此功能項,如果確實用不到該功能項的話。
2. 編譯
這就簡單了,一般來說,乙個make命令搞定
3. 安裝
這一步,需要將上述編譯出的可執行檔案、程式執行需要用到的配置檔案、程式執行需要用到的所有動態庫檔案(無論是工具鏈自帶的庫檔案,還是我們移植的庫檔案),都拷貝到單板的根檔案系統的相應的目錄下就行了。
例如,庫檔案拷貝到/usr/lib/目錄中。
配置檔案拷貝到/etc/下面合適的路徑中。
可執行檔案拷貝到/bin或/usr/bin等目錄中。
這一步,自己寫點指令碼來完成可能更合適。
因為即使在第1步中,已經指定了安裝目錄為單板的根檔案系統。
makeinstall命令也未必好用,他可能會安裝過多的東西(如man手冊頁等,單板上並不需要),或者某些檔案安裝的路徑未必正確,或者不會安裝相
如何移植開源軟體到嵌入式linux系統
在pc機linux上,安裝開源軟體,一般如下 tar xzf open source software.tar.gz cd open source software configure make make install但要將開源軟體移植到嵌入式linux單板上執行,情況卻略有不同。其實,無論是在p...
交叉編譯VIM並移植到ARM嵌入式Linux系統
一 編譯環境 host 機 ubuntu 16.10 32bit target arm 交叉工具鏈 arm linux gnueabi gcc 工具包 vim 7.4.tar.bz2 ncurses 5.9.tar.gz vimncurses 二 編譯準備 home abc test 資料夾,解壓縮...
ubuntu移植到嵌入式平台
ubuntu乙個以桌面應用為主的開源gnu linux作業系統。ubuntu 用在pc的intel框架,我們比較熟悉,ubuntu 在arm平台下執行,可能比較陌生。以下我們介紹ubuntu 14.04 到dlt rk3288 arm平台上。使用到的硬體平台 dlt rk3288 補充說明 雖然dl...