如何移植開源軟體到嵌入式linux系統

2021-08-10 13:21:52 字數 3433 閱讀 2826

在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上安裝交叉編譯工具鏈。

就是將工具鏈的壓縮包解壓到某個路徑下,就完成了安裝。

假設target單板是arm處理器,執行linux系統,用的工具鏈是arm-linux-gcc-3.4.1,工具鏈安裝路徑是/opt/arm-linux-gcc-3.4.1。

修改path環境變數。否則後面使用/設定編譯器時,就得用/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/目錄中。

移植步驟:

獲取並解壓開源庫的原始碼包,並進入原始碼包的根目錄。

1. 配置

指定如目標單板的作業系統、cpu、工具鏈等資訊。

如何指定這些資訊呢,不同軟體可能不同。如果不熟悉,就要閱讀原始碼包中附帶的如readme、install等檔案。

常見配置方法是通過./configure命令進行。當然有些開源包可能叫./config或其他名字。

configure通常是很大的shell指令碼,應該都是用自動化工具生成的。不用費力去讀他。

以opensll為例。配置命令為:

./config–prefix=/opt/arm-linux-gcc-3.4.1/ linux-elf:arm-linux-gcc

指定安裝路徑是/opt/arm-linux-gcc-3.4.1/,目標型別是linux-elf,工具鏈是arm-linux-gcc。

注 : 這個路徑是交叉工具鏈include目錄及lib目錄的父目錄。因為標頭檔案及編譯後的庫檔案,需要分別安裝到include與lib目錄中。

在配置命令中,還可指定其他選項,以做進一步的定製。

可通過 ./configure –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的開源應用程式了。

三、開源應用程式的移植

獲取並解壓開源應用程式的原始碼包。

1. 配置

和開源庫的移植類似。要指定諸如目標單板的作業系統、cpu、工具鏈等資訊。不熟悉,同樣要仔細閱讀原始碼包中附帶的諸如readme、install等檔案。

以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步中,已經指定安裝目錄為單板的根檔案系統。

make install未必好用,可能會安裝過多東西(如man手冊,單板上並不需要),或者某些檔案安裝的路徑未必正確,或者安裝失敗

1.開源軟體包找不到makefile

通常是採用configure方式組織的,那就使用configure生成makefile檔案。例如移植module-init-tools-3.2:

cc=arm-linux-gcc ./configure –prefix=/my_depmod –without-gun-ld –host=arm-linux

2.解壓後有makefile的,同時裡面有cc選項的,這種情況比較簡單,只要修改cc等選項即可。

例如,移植goahead到單板上,解壓之後makefile中修改:

cc = arm-linux-gcc

ar = arm-linux-ar

然後make即可。如果makefile中有cross_compile也同樣修改交叉編譯工具即可。

3.有makefile但是找不到cc或者cross_compile的。採用make cross=arm-linux-進行編譯。

如何移植開源軟體到嵌入式Linux系統

我們知道,在pc機linux上,安裝開源軟體,一般來講,大多是如下幾個步驟就搞定了。tar xzf open source software.tar.gz cd open source software configure make make install 但是,如果要將開源軟體移植到嵌入式lin...

交叉編譯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...