發表文章

目前顯示的是有「Emdebian」標籤的文章

Debian/Ubuntu 交叉編譯 - 函式庫相依性速解法

從來,交叉編譯(Cross-compile)就是一門苦差事,往往取得 Toolchain 之後,還必須自己編譯所需的所有函式庫,花費的時間甚巨,實在不值得。隨著 Debian/Ubuntu 跨平台支援趨於完整,開發和移植各平台程式之工作,已經不用再經歷過去那不足為外人道哉的編譯地獄。我們可以直接抓取不同硬體平台(如:ARM、MIPS)的套件,安裝在系統上供交叉編譯使用。因此,比起專注於 x86 下的其他系統(如:Fedora),Debian/Ubuntu 優異的跨平台支援和資源,更決定了跨平台開發者的效率以及產出品質。 而較為傳統的方法,是建立一個新的 Rootfs ,包括完整目標平台的函式庫和編譯所需檔案,在編譯自己的程式時引入使用即可。如不想這樣麻煩,Debian/Ubuntu 包括了一支工具『apt-cross』可以將目標平台的套件,轉換成交叉編譯專用套件,然後安裝至目前的系統上。 如同常見的 apt-get ,apt-cross 的使用方法極為相似,以安裝 ARM 架構下 的GTK+ Library 和開發用檔案為例(使用 Debian Sid 的 ARM 版套件): apt-cross -a armel -S sid -i libgtk2.0-0 apt-cross -a armel -S sid -i libgtk2.0-dev 如此 apt-cross 會下載 ARM 版本的 GTK+ Library,然後轉換成 libgtk2.0-0-armel-cross 和 libgtk2.0-dev-armel-cross 兩個套件,並安裝至系統中。隨後,我們便可交叉編譯自己的 GTK+ 程式,arm-linux-gnueabi-gcc 會直接去引用這兩個套件內的檔案。 隨帶一提,若執行 ./configure 時會發生 arm-linux-gnueabi-pkg-config 找不到,而自動選用系統上原生的 pkg-config 程式,常會造成編譯時關聯位置錯誤或找不到檔案。這通常是因為 pkg-config 選錯路徑,參考了系統上的編譯參數定義(正確行為應該去引用交叉編譯用的參數)。因此,我們可以在下 ./configure 前指定參考路徑,以解決此問題: export PKG_CONFIG_PATH...

Emdebian - 快速建構你的嵌入式系統

圖片
毫無疑問,目前『 Debian 』已經成為當今最龐大的 Linux 體系之一,包括目前最為人所知的 Ubuntu,其表皮之下都是 Debian 的骨。Debian 支援超過十一種以上的硬體架構,包括了 i386/IA-32、m68k、sparc、Alpha、PowerPC、ARM、MIPS、hppa、IA-64、s390、AMD64,還有更多計劃支援但仍在移植中的平台,如:ppc64、SuperH、armeb、m32r、AVR32等。要用 Debian 打造任何一種硬體平台上的作業系統,可說是輕而易舉,甚至不必撰寫一行 Code 或學習使用 cross-compiler,只要會用 debootstrap 和 apt-get。 但是,除了傳統 x86 和幾個特定平台外,大多數的硬體架構都是用於嵌入式應用,其硬體資源相對較低,若將 x86 完整的系統移植過去,似乎沒有多大價值,軟體甚至可能因硬體限制(CPU、Memory、Storage)而無法使用。 因此,『 Emdebian (Embedded Debian) 』計畫誕生,該計畫首要目標是建構最小化的 Debian System,更進一步因應需求而打造出最輕量的嵌入式系統,並保留 Debian 的套件管理結構和特性。目前, Emdebian 分兩種版本: Emdebian Grip - A smaller Debian-compatible distro 一個小型的 Debian distro,但完全與官方 Debian 保持相容性,這意味著仍然可以在這系統上直接安裝官方 Debian 的東西(包括 Stable、Unstable、Testing 等版本)。其改進了 apt 的工具程式,使基礎系統更輕量化,更進一步將許多套件重新打包,減少平時很少用到的系統文件和相依性。 目前 Grip 所支援的硬體平台有 arm, armel, i386, amd64, powerpc, mips, mipsel。 Emdebian Crush - An ultimately small, cross-built, Debian. 這是針對高要求嵌入式系統所特別開發的版本,為了能真正使用在嵌入式系統,引入了 Busybox 等輕量化的工具程式,捨棄許多原本 Debian 系統內的累贅。目前 Crush 只有支援 ARM 架構,且...