用OpenEmbedded構建嵌入式Linux系統

2021-01-11 電子產品世界

本篇文章主要是教大家如何用OpenEmbedded構建嵌入式的Linux系統,不過它做得太複雜,如果不出問題,用起來很方便,但是一旦出點問題,就不知道該怎樣去弄了。作者是用Embedded-LFS構建的,它非常簡單,當然功能也要弱一些,對於只想玩玩的初學者還是有幫助的。

本文引用地址:http://www.eepw.com.cn/article/201610/305526.htm

1. 下載Embedded-LFS:

svn checkout http://embedded-lfs.googlecode.com/svn/trunk/ embedded-lfs-read-only

2. 創建一個名為xxxx_env.sh的腳本文件:

這裡的xxxx代表板子的名稱,比如為pxa300寫的pxa300_env.sh內容如下:

unset TOOLCHAIN_PREFIX

export BOARD_NAME=pxa300

export TOOLCHAIN=/usr/local/arm-linux-4.1.1

env.sh arm $1

export CFLAGS=$CFLAGS」 -mcpu=xscale -fno-strict-aliasing」

這裡主要是設置板子的名稱和工具鏈的位置,和一些額外的編譯選項。有三個預設的腳本文件:

openmoko_env.sh 為openmoko手機編譯

pxa300_env.sh 為marvell的pxa300編譯。

x86_env.sh 編譯x86的版本,可以虛擬機裡測試。

3. 修改軟體包配置文件:

配置文件裡的每一項描述一個軟體包,同一個軟體包可以有多個項,會自動合併起來。如zlib的描述:

[zlib]

config-env = export CC=$(TARGET_CC) PREFIX=$(PREFIX)

config-cmd = configure

config-param= –prefix=$(PREFIX) –shared

url = http://google-desktop-for-linux-mirror.googlecode.com/files/zlib-1.2.3.tar.gz

config-env指定在configure之前要設置的環境變量。

config-cmd指定configure時執行的命令。

config-param指定configure時的參數。

url則是用來下載軟體包的位置。

對於用標準autotool管理的軟體包,更簡單一些。如png的描述:

[png]

config-cmd = autoconf

url = http://nchc.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.35.tar.bz2

這裡只需要說明是用autoconf配置的和下載軟體包的URL就行了。

另外,軟體包的位置決定了軟體包的編譯順序。

為了在不同平臺間重用這些配置信息,可以把這些軟體包的配置放在幾個文件中:

(1) pkg-$GDK_TARGET.ini 主要用來區分基於TinyX的GTK還是基於DirectFB的GTK。

pkg-directfb.ini 基於TinyX的GTK的預設配置。

pkg-x11.ini 基於基於DirectFB的GTK的預設配置。

(2) pkg-$ARCH.ini 這是某類CPU特有的軟體包配置。

pkg-x86.ini PC版本特有的配置

pkg-arm.ini arm版本特有的配置

(3) pkg-$BOARD_NAME.ini 板子特有的配置。

(4) pkg-$BOARD_NAME-$GDK_TARGET.ini 板子針對GTK不同後端的特有的配置。

4. 設置編譯環境變量(以pxa300為例)

如果想編譯基於TinyX的GTK:

[root@localhost embedded-lfs]# . pxa300_env.sh

如果想編譯基於DirectFB的GTK:

[root@localhost embedded-lfs]# . pxa300_env.sh directfb

終端會出現下列提示:

==================================================================

exported the following vars:

==================================================================

ARCH=arm

GDK_TARGET=directfb

WITH_ARCH=–with-arch=arm-linux

HOST_PARAM=–host=arm-linux

TARGET_CC=arm-linux-gcc

TARGET_PLATFORM=arm-linux-

PREFIX=/work/mine/googlecode/embedded-lfs/arm/pxa300/usr

CFLAGS=-I/work/mine/googlecode/embedded-lfs/arm/pxa300/usr/include

LDFLAGS=-L/work/mine/googlecode/embedded-lfs/arm/pxa300/usr/lib

PKG_CONFIG_PATH=/work/mine/googlecode/embedded-lfs/arm/pxa300/usr/lib/pkgconfig/

PATH=/usr/local/arm-linux-4.1.1/bin:/work/mine/googlecode/embedded-lfs/patches/bin:/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/backup/software/jdk1.5.0_19/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/sbin:/usr/sbin::/root/bin

==================================================================

to build:

make -f Makefile.pxa300.directfb all

==================================================================

5. 編譯

按在設置環境變量時的提示去做就行了,如:

make -f Makefile.pxa300.directfb all

編譯的結果會自動安裝到ARCH/BOARD下面,如pxa300的編譯結果會安裝到arm/pxa300目錄下。

6. 問題診斷

embedded- lfs的工作原理是根據軟體包配置和環境變量,生成一個Makefile文件。如前面的Makefile.pxa300.directfb ,如果編譯時出現問題,可以看下這個Makefile裡對應軟體包的腳本是否正確就行了。比如這是freetype的編譯腳本:

packages/freetype-2.3.9.tar.gz:

cd packages wget http://ftp.twaren.net/Unix/NonGNU/freetype/freetype-2.3.9.tar.gz

freetype-2.3.9: packages/freetype-2.3.9.tar.gz

tar xf packages/freetype-2.3.9.tar.gz

freetype: freetype-2.3.9

mkdir freetype-2.3.9/$(ARCH); cd freetype-2.3.9/$(ARCH) ../configure $(HOST_PARAM) –prefix=$(PREFIX) make clean; make make install

freetype_clean:

rm -rf freetype-2.3.9/$(ARCH)

freetype_source_clean:

rm -rf freetype-2.3.9

embedded-lfs的一些限制:

(1) 目前只支持arm和x86

(2) 只在Fedora上測試過,如果系統中正確安裝了autotool和libtool相關工具,其它發行版本應該也不會有太多問題。

【編輯推薦】

新Linux內核耗電量顯著增加

Linux文件分割與合併:splitcat

四招教你打造輕型Linux桌面環境

Linux下利用ext3grep恢復被刪除的文件

Linux 20周年到底在哪天?Linus Torvalds告訴你

相關焦點

  • 嵌入式Linux NFS 根文件系統的構建及研究
    摘要:在嵌入式Linux系統開發過程中,根文件系統是構建嵌入式Linux系統的重要組成部分。為了方便和簡化嵌入式Linux開發過程中的調試過程,主要研究了如何使用Busybox構建出基本的嵌入式Linux根文件系統,包括Busybox的配置、編譯和安裝。
  • 基於S3C2440的嵌入式Linux根文件系統構建
    根文件系統一直是Linux系統不可或缺的組件,在嵌入式Lin-ux中,內核在啟動期間進行的最後操作之一就是安裝根文件系統。busybox是構建嵌入式Linux根文件系統的軟體,用它製作根文件系統簡單、方便,而且設置靈活。
  • Yocto工程與開放嵌入式(OpenEmbedded)結盟
    Linux基金會(The Linux Foundation)宣布說,Yocto工程將會與開放嵌入式(OpenEmbedded)「結盟」以發展嵌入式Linux。
  • Konqueror/embedded向ARM-Linux平臺的移植和漢化
    引言 目前,嵌入式瀏覽器已經逐漸成為高端手機和PDA的標準配置。Konqueror/embeded作為嵌入式Linux作業系統的首選瀏覽器得到了廣泛使用。但是由於該瀏覽器是自由軟體,因此向具體嵌入式平臺移植時存在一定的難度。
  • 使用TI-AM1808構建嵌入式導航系統
    本文探討了利用AM1808構建嵌入式導航系統的過程。並且探討了嵌入式文件系統的組成。在硬體和軟體方面對嵌入式系統構建過程中遇到的問題提出了解決方法。但是考慮到嵌入式系統成本和體積的要求,簡潔有力的設計更應該在整個設計流程中被體現出來。因此,某些功能必須被禁用,以提高系統的簡潔性和穩定性,並且降低成本。  系統的需求分析  使用AM1808構建嵌入式的導航系統,TFT顯示屏是必不可少的組件之一。TFT液晶顯示屏通過顯示不同的海圖和標誌,來引導船隻的正常航行。
  • 基於busybox的嵌入式Linux根文件系統的的製作方法
    根文件系統一直是Linux系統不可或缺的組件,在嵌入式Lin-ux中,內核在啟動期間進行的最後操作之一就是安裝根文件系統。Busybox是構建嵌入式Linux根文件系統的軟體,用它製作根文件系統簡單、方便,而且設置靈活。
  • 採用busybox的嵌入式Linux根文件系統的的製作方法
    根文件系統一直是Linux系統不可或缺的組件,在嵌入式Lin-ux中,內核在啟動期間進行的最後操作之一就是安裝根文件系統。Busybox是構建嵌入式Linux根文件系統的軟體,用它製作根文件系統簡單、方便,而且設置靈活。
  • linux系統工控機-ubuntu烏班圖嵌入式工業電腦
    不過在工控領域,最為常見的系統只有三種,即微軟系統(Windows XP/7/8/10),安卓系統(Android5.0/5.1等)以及嵌入式的烏班圖Ubuntu Linux系統。linux系統工控機-807A正面Linux是自由的免費開源的,它是以unix為原型改造的,一個多用戶多任務的作業系統,任何人都可以修改其代碼和頁面,其中主要的目的就是為了不收商業化的限制,而我們將伺服器部署在linux系統上會更加高效穩定、安全(註:UNIX作業系統(尤尼斯),是一個強大的多用戶、多任務作業系統,支持多種處理器架構
  • 工程師嵌入式Linux自學筆記及體會
    在設計嵌入式應用的時候,可以不按照這種層次,應用程式越過 C 庫直接和內核會話,或者把應用和內核捆綁在一起,甚至可以把應用寫為內核的一個線程,在內核中運行,雖然這樣在移植上帶來了困難,但考慮嵌入式系統對尺寸要求小的特點,是完全可行的。不過我們使用三層軟體結構的模式來學習嵌入式 linux將會是我們認識更清晰,簡單可行並使應用具有彈性。
  • 嵌入式系統課程的教與學
    2.掌握嵌入式系統的基本分析與設計方法,能進行典型嵌入式系統的分析與設計。3.熟悉實時作業系統的基礎知識,4.掌握嵌入式編程技術,能進行典型嵌入式系統環境下程序設計。初步了解先進嵌入式系統的原理與方法。
  • 嵌入式Linux啟動時間優化的秘密之一工具鏈/應用程式優化
    >   01   工具鏈/應用程式優化   導讀:嵌入式Linux在應用中往往希望系統能在儘量短的時間內啟動,以提高用戶體驗。7.4編譯,生成ARM代碼:   根文件系統總大小:3.79 MB   用gcc 7.4編譯,生成Thumb2代碼:   根文件系統總大小:3.10 MB(-18%)   性能方面:Thumb2的性能明顯改善(大約少於5%,但是從一次運行到另一次運行,測量的執行時間略有變化)。
  • 基於嵌入式Linux的MapInfo格式地圖顯示
    MiniGUI的移植對嵌入式平臺的開發首先都要建立交叉編譯環境和最終的運行環境。針對筆者所採用的ARM-Linux平臺,交叉編譯是為了在採用linux的宿主PC機上生成最終在ARM處理器上linux作業系統下可運行的代碼。而建立運行環境是將一些必要的資源文件安裝到程序運行的 ARM-Linux平臺上。
  • linux基礎複習(5)建立linux開發環境
    =screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';} border=0>其中:- arm-linux-gcc-3.3.2 編譯Qtopia 使用- arm-linux-gcc-3.4.1 編譯內核使用-
  • Linux嵌入式驅動開發——ioctl接口
    unlocked_ioctl就是ioctl接口,但是功能和對應的系統調用均沒有發生變化unlocked_ioctl和read/write函數有什麼相同和不同之前我們使用read/write函數完成寫數據或者讀數據的操作,ioctl函數也可以往內核中寫入命令。
  • Linux 系統內核的調試
    使用SkyEye構建Linux內核調試環境  SkyEye是一個開源軟體項目(OPenSource Software),SkyEye項目的目標是在通用的Linux和Windows平臺上模擬常見的嵌入式計算機系統。SkyEye實現了一個指令級的硬體模擬平臺,可以模擬多種嵌入式開發板,支持多種CPU指令集。
  • 雲伺服器linux是什麼系統
    雲伺服器linux是什麼系統?Linux是一套免費使用和自由傳播的類Unix作業系統,是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的作業系統。相比 Windows 系統,雲伺服器使用 Linux 系統有更好的穩定性,以及其他很多優點。
  • 基於Qtopia的嵌入式Linux俄文環境解決方案
    Qtopia是Trollteeh面向嵌入式Linux的綜合應用平臺,它是基於Qt的嵌入式版本Qt/Embedded庫的基礎上1 Qtopia移植將Qtopia移植到嵌入式設備中,要在安裝有Linux作業系統的PC機中交叉編譯Qtopia所需要的資源文件和環境,交叉編譯Qtopia原始碼,然後把生成的Qtopia系統下載到設備中。要先建立一個開發環境,其中必須要有提供qte的庫qt-embedded-2.3.10。
  • ARM7嵌入式系統中Bootloader分析與設計
    在嵌入式系統開發中Bootloader常常是嵌入式系統開發中可能遇到的第一個技術難點。應用程式運行環境能否正確構建,內核能否啟動成功,都取決於Bootloader能否正確的工作。一個功能完善的嵌入式系統Bootloader還要求能夠提供系統更新的能力,以及為了實現這一操作所需要的一個簡單的命令控制臺。
  • 基於CPCI的嵌入式系統的電源設計
    1 引言 嵌入式系統廣泛應用於控制和通信領域。而這些系統運行速度高,系統較複雜,常常集成超大規模FPGA器件、DSP器件、DDR存儲器以及各種接口電路。這對電源的輸出電壓值、功耗、電壓精度、上電順序以及電源完整性提出更高的要求。
  • 嵌入式Linux系統中MMC卡驅動管理技術研究
    關鍵詞 Linux MMC卡 底層驅動 集群讀寫 熱拔插引 言 MMC(Multitmedia Card)是一種體積小巧、容量大、使用方便的存儲器,目前在手機等嵌入式系統中有著廣泛的應用。然後對傳統的塊設備驅動程序中的單塊讀寫進行了改進,實現了集群讀寫技術,提高了卡的讀寫速度;同時增加了電源管理功能,滿足了嵌入式系統低功耗的需求;增加了即插即用功能,方便了用戶的使用。