嵌入式系統概論 - 以 s3c2440 核心為架構 第 15 章 嵌入式 linux 核心...

29
嵌嵌嵌嵌嵌嵌嵌 - 嵌 S3C2440 嵌嵌嵌嵌嵌 嵌 15 嵌 嵌嵌嵌 Linux 嵌嵌 嵌嵌嵌嵌嵌嵌

Post on 20-Dec-2015

245 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構

第 15 章 嵌入式 Linux 核心與根檔案系統

Page 2: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

大綱

15.1 Linux 核心移植準備15.2 Linux 核心剪裁編譯15.3 檔案系統建立與燒錄

Page 3: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.1 Linux 核心移植準備

15.1 Linux 核心移植準備15.2 Linux 核心剪裁編譯15.3 檔案系統建立與燒錄

Page 4: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.1 Linux 核心移植簡介

Linux 移植是將 Linux 作業系統針對具體的目標平台做必要改寫,再將其安裝到該目標平台使其正確的運行執行。

在嵌入式開發領域中,其基本內容是:1. 取得某一版本的 Linux 核心原始程式碼,根據具

體目標平台針對原始程式碼進行必要的改寫(主要是修改體系結構相關部分),及新增設備驅動。

2. 對該系統進行目標平台的交叉編譯,產生一個核心映像檔,最後通過介面通訊方式將映象檔燒寫(安裝)到目標平台中。

Page 5: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.1 Linux 核心建立流程

形成適合 ARM 平台的 Linux 基本流程1.下載 Linux 核心及 ARM 平台相關套件2.建立交叉編譯環境3.修改核心內部的 makefile ,符合所建立的交叉編譯環境

4.進行編譯提供 Linux 核心及 ARM 平台相關套件下載載點

ftp://ftp.arm.linux.org.uk 其中提供 ARM Linux 的核心及其關於 ARM 平台的套件。

Page 6: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.1 GNU GCC 工具鏈說明

目前 Linux 作業系統主要以 GNU GCC 來執行交叉編譯的動作。

GCC 進行程式碼編譯時,為保證編譯過程與實體電腦硬體平台的無關性,它使用 RTL ( Register Transfer Language )暫存器傳遞語言對目標平台的指令進行描述。

由 GCC 輸出的是組合語言根源程式,必須經過一些工具鏈協助,才可編譯成機器程式。這些工具鏈包含 GNUBinutils 、 GNU GLibc 。 Binutils :主要包含包含鏈結器 ld 和組譯器 as 。 GLibc :其提供一個 C 函式庫,使系統完成基本系統呼叫及其它的一些函數呼叫 。

Page 7: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.1 GCC 產生過程

一般 GCC 交叉編譯器的產生過程1. 取得 Binutils 、 GCC 、 Glibc 的原始程式碼。2. 設置並編譯 Binutils ,得到我們下一步要用到的

組譯器和連接器。 3. 設置並編譯 GCC 原始程式碼,產生 GCC 編譯器。

4. 設置 Glibc 編譯產生 Glibc 的 C 函數庫。5. 再次設置並編譯 GCC 原始程式碼,產生其他語

言的編譯器如: C ++等。 這部分工作必須對硬體平台的體系結構非常熟

悉,執行才會正確,因此大多從網上直接下載相關工具包。

Page 8: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.1 ARM 系列核心資料夾在 arch 目錄中有許多子目錄,是利用晶片命名的,表示是針對該晶片體系結構的程式碼。

arm 系列晶片編譯核心,需修改 ARM 目錄下相關檔案。

ARM晶片系列核心資料夾

Page 9: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.1 ARM 初始化程式

在 arm/boot/bootp 下有一個 init.S 的檔案,init.S 就是引導 Linux 核心在 ARM 平台上啟動的初始化程式碼。

初始化程式碼

Page 10: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.1 初始化工作內容

Init.S 主要完成以下功能:1. 定義資料段、程式碼段、 bbs (未初始化資料

段)起始位址變數並對 bbs 段進行初始化。2. 設置暫存器以初始化系統硬體。3. 關閉中斷。4. 初始化 LCD 顯示。5. 將資料段資料複製到記憶體中。6. 跳轉到核心起始函數 start_kernel 繼續執行。7. 對主暫存器的修改。

Page 11: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.2 Linux 核心剪裁編譯

15.1 Linux 核心移植準備15.2 Linux 核心剪裁編譯15.3 檔案系統建立與燒錄

Page 12: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.2 Linux 核心剪裁編譯簡介

Linux 核心的裁剪與編譯看似簡單過程,只需對其設置功能表做所需功能選擇。

針對所有核心設置功能表都是透過 Config.in經由不同描述解釋器產生 .config 設定檔。

針對核心設置功能表本身結構龐大,內容複雜,具體如何選擇,必須熟悉與瞭解該功能表的各項具體含義。

Page 13: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.2 Linux 核心編譯功能表

Linux 核心的編譯功能表有好幾個版本執行:make config:

透過進入命令行,經由一行一行顯示做設置,較不便設定。

make menuconfig:透過 menu 功能表,可選擇你要的核心功能。

make xconfig:經由 X windows 所顯示的功能選單,使用便利。

針對上列三種方式, make menuconfig 方式最為便利且穩定性最高的。

Page 14: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.2 Linux 核心編譯功能表儲存及載入

以上大部分選項為 2.6 版核心的基本選項,但會因為開發平台的不同,內部選項內容也會不同,需要同學根據自己所需功能去設定。

設定完所需的設定,要將其設定檔建立起來。在選項中有儲存與載入的功能: Load an Alternate Configuration File載入已建立的 .config 檔。

Save Configuration to an Alternate File儲存所設定內容至一個 .config 檔

Page 15: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.2 Linux 核心編譯功能表儲存及載入選項

載入與儲存設定選項

Page 16: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.2 Linux 核心編譯動作

建立完設定檔,必須經過編譯形成燒錄映像檔,才可經由 Bootloader 燒錄至 Flash 所規劃好的核心映射區。

編譯前必須先確認Makefile 的編譯器路徑是否設定為交叉編譯工具的編譯器路徑。如之前設定,其路徑應為 :

/usr/local/arm/3.4.1/bin/arm-linux-

Page 17: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.2 Linux 核心編譯動作

確認無誤後,便可執行 make zImage 命令,產生名為 zImage 的映像檔在核心資料夾中的所屬晶片資料夾的 /arch/boot 的目錄底下。如平台晶片為 ARM 系列,其目錄路徑為核心資料夾 /arm /arch/boot

Page 18: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.2 編譯核心 Makefile 檔

編譯核心 Makefile 檔所設定的編譯路徑

交叉編譯工具路徑

Page 19: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.2 Linux 核心執行編譯

執行編譯,形成 zImage 燒錄檔

執行編譯動作

Page 20: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.2 形成 Linux 核心映像檔路徑

產生燒錄檔的路徑位置

產生映像檔路徑

所產生映像檔

Page 21: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.3 檔案系統建立與燒錄

15.1 Linux 核心移植準備15.2 Linux 核心剪裁編譯15.3 檔案系統建立與燒錄

Page 22: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.3 檔案系統指標比較表

檔案系統 可寫性

永久儲存性

停電穩定性

壓縮性

在 Ram中

的空間Romfs No N/A N/A No No

Cramfs No N/A N/A Yes No

JFFS Yes Yes Yes No No

JFFS2 Yes Yes Yes Yes NoExt2 over

NFTL Yes Yes Yes No No

Ext3 over NFTL Yes Yes Yes No No

Ext2 over RAM Yes No No No No

幾種常用的檔案系統

Page 23: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.3 檔案系統內容

根檔案系統是 Linux 系統的根本所在,啟動時必須載入進來以支援系統的執行。

一般包括以下目錄內容: /dev (設備檔目錄) /proc ( proc 檔案系統目錄) /etc (系統設置檔的目錄) /sbin (系統程式的目錄) /bin (基本應用程式的目錄) /lib (共用函數庫的目錄) /mnt (裝載其他磁片節點的目錄) /usr (附加應用程式的目錄)。

Page 24: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

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.

Page 25: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.3 開啟根檔案系統 (2)

對於系統程式和基本的應用程式,由兩種方式去獲得:交叉編譯所有需要的命令原始程式碼,

利用 BusyBox 工具來完成。將現有 ARM專用 ramdisk 內部檔案拷貝至自己的 ramdisk裏。

Page 26: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.3 BusyBox 工具

嵌入式系統命令工具建立通常使用 BusyBox工具。他是一個工具集,包括很多常用的工具軟體,這些軟體全都編譯成一個可執行檔,透過符號連接的方式開啟各個工具的名稱。

其優勢為佔用空間小且可很方便的制定所需命令。利用 BusyBox 建立命令工具流程

下載 BusyBox 原始檔案進入設定功能表,選擇自己所需功能進行 make 動作,編譯出所需的命令工具。

Page 27: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.3 檔案系統建立流程

透過現有的 ramdisk 內部檔案拷貝至自己的ramdisk裏。必須經由特定的映像檔產生工具。

根據開發平台上的檔案系統採用 cramfs 檔案系統,因此必須透過 mkcramfs 產生工具,將以新增好所需應用程式的檔案系統,產生為cramfs 映像檔。

Page 28: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

15.3 檔案系統建立流程

產生所需的 cramfs 工作流程將原本檔案系統的 cramfs掛載在暫存資料夾將暫存資料夾的檔案打包成 tar 檔,在目的資料夾在將其 tar 檔解開

新增所需的應用程式利用 mkcramfs 建立出新的 cramfs 檔

Page 29: 嵌入式系統概論 - 以 S3C2440 核心為架構 第 15 章 嵌入式 Linux 核心 與根檔案系統

嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和

問題與討論

請讀者試著自行編譯 Linux 核心,並燒錄於平台之中

請讀者自行加入第 13 章所編譯好的九九乘法表程式至檔案系統之中,並燒錄至平台之中