嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 大綱 15.1 Linux 核心移植準備 15.2 Linux 核心剪裁編譯 15.3 檔案系統建立與燒錄
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.1 Linux 核心移植準備 15.1 Linux 核心移植準備 15.2 Linux 核心剪裁編譯 15.3 檔案系統建立與燒錄
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.1 Linux 核心移植簡介 Linux 移植是將 Linux 作業系統針對具體的目 標平台做必要改寫,再將其安裝到該目標平 台使其正確的運行執行。 在嵌入式開發領域中,其基本內容是: 1. 取得某一版本的 Linux 核心原始程式碼,根據具 體目標平台針對原始程式碼進行必要的改寫(主 要是修改體系結構相關部分),及新增設備驅動。 2. 對該系統進行目標平台的交叉編譯,產生一個核 心映像檔,最後通過介面通訊方式將映象檔燒寫 (安裝)到目標平台中。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.1 Linux 核心建立流程 形成適合 ARM 平台的 Linux 基本流程 1. 下載 Linux 核心及 ARM 平台相關套件 2. 建立交叉編譯環境 3. 修改核心內部的 makefile ,符合所建立的交叉編 譯環境 4. 進行編譯 提供 Linux 核心及 ARM 平台相關套件下載載 點 ftp://ftp.arm.linux.org.uk 其中提供 ARM Linux 的核心及其關於 ARM 平台 的套件。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.1 GNU GCC 工具鏈說明 目前 Linux 作業系統主要以 GNU GCC 來執行交 叉編譯的動作。 GCC 進行程式碼編譯時,為保證編譯過程與實 體電腦硬體平台的無關性,它使用 RTL ( Register Transfer Language )暫存器傳遞 語言對目標平台的指令進行描述。 由 GCC 輸出的是組合語言根源程式,必須經過 一些工具鏈協助,才可編譯成機器程式。 這些工具鏈包含 GNUBinutils 、 GNU GLibc 。 Binutils :主要包含包含鏈結器 ld 和組譯器 as 。 GLibc :其提供一個 C 函式庫,使系統完成基本系 統呼叫及其它的一些函數呼叫 。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.1 GCC 產生過程 一般 GCC 交叉編譯器的產生過程 1. 取得 Binutils 、 GCC 、 Glibc 的原始程式碼。 2. 設置並編譯 Binutils ,得到我們下一步要用到的 組譯器和連接器。 3. 設置並編譯 GCC 原始程式碼,產生 GCC 編譯器。 4. 設置 Glibc 編譯產生 Glibc 的 C 函數庫。 5. 再次設置並編譯 GCC 原始程式碼,產生其他語 言的編譯器如: C ++等。 這部分工作必須對硬體平台的體系結構非常 熟悉,執行才會正確,因此大多從網上直接 下載相關工具包。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.1 ARM 系列核心資料夾 在 arch 目錄中有許多子目錄,是利用晶片命 名的,表示是針對該晶片體系結構的程式碼。 arm 系列晶片編譯核心,需修改 ARM 目錄下 相關檔案。 ARM 晶片系列 核心資料夾
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.1 ARM 初始化程式 在 arm/boot/bootp 下有一個 init.S 的檔案, init.S 就是引導 Linux 核心在 ARM 平台上啟 動的初始化程式碼。 初始化 程式碼
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.1 初始化工作內容 Init.S 主要完成以下功能: 1. 定義資料段、程式碼段、 bbs (未初始化資料段) 起始位址變數並對 bbs 段進行初始化。 2. 設置暫存器以初始化系統硬體。 3. 關閉中斷。 4. 初始化 LCD 顯示。 5. 將資料段資料複製到記憶體中。 6. 跳轉到核心起始函數 start_kernel 繼續執行。 7. 對主暫存器的修改。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.2 Linux 核心剪裁編譯 15.1 Linux 核心移植準備 15.2 Linux 核心剪裁編譯 15.3 檔案系統建立與燒錄
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.2 Linux 核心剪裁編譯簡介 Linux 核心的裁剪與編譯看似簡單過程,只需 對其設置功能表做所需功能選擇。 針對所有核心設置功能表都是透過 Config.in 經由不同描述解釋器產生.config 設定檔。 針對核心設置功能表本身結構龐大,內容複 雜,具體如何選擇,必須熟悉與瞭解該功能表 的各項具體含義。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.2 Linux 核心編譯功能表 Linux 核心的編譯功能表有好幾個版本執行: make config: 透過進入命令行,經由一行一行顯示做設置,較 不便設定。 make menuconfig: 透過 menu 功能表,可選擇你要的核心功能。 make xconfig: 經由 X windows 所顯示的功能選單,使用便利。 針對上列三種方式, make menuconfig 方式 最為便利且穩定性最高的。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.2 Linux 核心編譯功能表儲存及載入 以上大部分選項為 2.6 版核心的基本選項,但 會因為開發平台的不同,內部選項內容也會不 同,需要同學根據自己所需功能去設定。 設定完所需的設定,要將其設定檔建立起來。 在選項中有儲存與載入的功能: Load an Alternate Configuration File 載入已建立的.config 檔。 Save Configuration to an Alternate File 儲存所設定內容至一個.config 檔
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.2 Linux 核心編譯功能表儲存及載入選項 載入與儲存 設定選項
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.2 Linux 核心編譯動作 建立完設定檔,必須經過編譯形成燒錄映像 檔,才可經由 Bootloader 燒錄至 Flash 所規劃 好的核心映射區。 編譯前必須先確認 Makefile 的編譯器路徑是 否設定為交叉編譯工具的編譯器路徑。 如之前設定,其路徑應為 : /usr/local/arm/3.4.1/bin/arm-linux-
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.2 Linux 核心編譯動作 確認無誤後,便可執行 make zImage 命令, 產生名為 zImage 的映像檔在核心資料夾中的 所屬晶片資料夾的 /arch/boot 的目錄底下。 如平台晶片為 ARM 系列,其目錄路徑為核心資料 夾 /arm /arch/boot
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.2 編譯核心 Makefile 檔 編譯核心 Makefile 檔所設定的編譯路徑 交叉編譯工具路徑
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.2 Linux 核心執行編譯 執行編譯,形成 zImage 燒錄檔 執行編譯動作
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.2 形成 Linux 核心映像檔路徑 產生燒錄檔的路徑位置 產生映像檔路徑 所產生映像檔
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.3 檔案系統建立與燒錄 15.1 Linux 核心移植準備 15.2 Linux 核心剪裁編譯 15.3 檔案系統建立與燒錄
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.3 檔案系統指標比較表 檔案系統 可寫 性 永久 儲存性 停電 穩定性 壓縮 性 在 Ram 中 的空間 RomfsNoN/A No CramfsNoN/A YesNo JFFSYes No JFFS2Yes No Ext2 over NFTL Yes No Ext3 over NFTL Yes No Ext2 over RAM YesNo 幾種常用的檔案系統
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.3 檔案系統內容 根檔案系統是 Linux 系統的根本所在,啟動時 必須載入進來以支援系統的執行。 一般包括以下目錄內容: /dev (設備檔目錄) /proc ( proc 檔案系統目錄) /etc (系統設置檔的目錄) /sbin (系統程式的目錄) /bin (基本應用程式的目錄) /lib (共用函數庫的目錄) /mnt (裝載其他磁片節點的目錄) /usr (附加應用程式的目錄)。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.3 開啟根檔案系統 (1) 根檔案系統提供給核心第一個行程的程式, 同時也提供了基本的工具。 一套 Linux 系統要正常啟動,根檔案系統要包 括下列檔案夾: /bin , /etc , /proc , /tmp , /var , /dev , /mnt 。 要包括下列基本的設備檔: /dev/console , /dev/null , /dev/ram0 , /dev/tty , /dev/tty0 。 要包括下列設置檔: /etc/rc.d/inittab , /etc/rc.d/rc.sysinit,/etc/fstab.
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.3 開啟根檔案系統 (2) 對於系統程式和基本的應用程式,由兩種方 式去獲得: 交叉編譯所有需要的命令原始程式碼, 利用 BusyBox 工具來完成。 將現有 ARM 專用 ramdisk 內部檔案拷貝至自己的 ramdisk 裏。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.3 BusyBox 工具 嵌入式系統命令工具建立通常使用 BusyBox 工具。 他是一個工具集,包括很多常用的工具軟體,這 些軟體全都編譯成一個可執行檔,透過符號連接 的方式開啟各個工具的名稱。 其優勢為佔用空間小且可很方便的制定所需命令。 利用 BusyBox 建立命令工具流程 下載 BusyBox 原始檔案 進入設定功能表,選擇自己所需功能 進行 make 動作,編譯出所需的命令工具。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.3 檔案系統建立流程 透過現有的 ramdisk 內部檔案拷貝至自己的 ramdisk 裏。必須經由特定的映像檔產生工具。 根據開發平台上的檔案系統採用 cramfs 檔案 系統,因此必須透過 mkcramfs 產生工具,將 以新增好所需應用程式的檔案系統,產生為 cramfs 映像檔。
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 15.3 檔案系統建立流程 產生所需的 cramfs 工作流程 將原本檔案系統的 cramfs 掛載在暫存資料夾 將暫存資料夾的檔案打包成 tar 檔,在目的資料夾 在將其 tar 檔解開 新增所需的應用程式 利用 mkcramfs 建立出新的 cramfs 檔
嵌入式系統概論 - 以 S3C2440 核心為架構 許永和 問題與討論 請讀者試著自行編譯 Linux 核心,並燒錄於平台之中 請讀者自行加入第 13 章所編譯好的九九乘法表程式 至檔案系統之中,並燒錄至平台之中