28
嵌嵌嵌 嵌嵌嵌 Linux Linux 嵌嵌 嵌嵌 長長長長 長長長長 長長長 長長長

嵌入式 Linux 介紹

Embed Size (px)

DESCRIPTION

嵌入式 Linux 介紹. 長高科技 顏旭偉. 嵌入式 linux 簡介. LINUX 是一個類似 UNIX 的作業系統,其程式碼是完全開放的,核心功能強大,實現簡潔。它提供了類似 UNIX 的編寫程式介面和系統應用,可以方便的將 UNIX 系統上的應用程式,移植到 Linux 上運作。 Linux 核心支援多種體系結構的處理器,包括目前流行的 Intel x86 , Motorola/IBM PowerPC , ARM , Compaq Alpha , Sun SRARC 等處理器體系結構。 - PowerPoint PPT Presentation

Citation preview

Page 1: 嵌入式 Linux 介紹

嵌入式嵌入式 LinuxLinux介紹介紹長高科技長高科技顏旭偉顏旭偉

Page 2: 嵌入式 Linux 介紹

嵌入式嵌入式 linuxlinux 簡介簡介 LINUXLINUX是一個類似是一個類似 UNIXUNIX的作業系統,其程式碼是完全的作業系統,其程式碼是完全開放的,核心功能強大,實現簡潔。它提供了類似開放的,核心功能強大,實現簡潔。它提供了類似 UNIXUNIX的編寫程式介面和系統應用,可以方便的將的編寫程式介面和系統應用,可以方便的將 UNIXUNIX系統上系統上的應用程式,移植到的應用程式,移植到 LinuxLinux上運作。上運作。 LinuxLinux 核心支援多核心支援多種體系結構的處理器,包括目前流行的種體系結構的處理器,包括目前流行的 Intel x86Intel x86 ,, MotMotorola/IBM PowerPCorola/IBM PowerPC ,, ARMARM ,, Compaq AlphaCompaq Alpha,, SuSun SRARCn SRARC等處理器體系結構。等處理器體系結構。 要把要把 LinuxLinux 用於嵌入式環境,就必須修改用於嵌入式環境,就必須修改 LinuxLinux 滿足嵌滿足嵌入式系統的要求。主要集中在兩個方面:一是體積,二是入式系統的要求。主要集中在兩個方面:一是體積,二是即時性。與目前上的眾多商業的即時性。與目前上的眾多商業的 RTOSRTOS(即時操作系統)(即時操作系統)相比,嵌入式相比,嵌入式 LinuxLinux擁有以下的特點:擁有以下的特點:

Page 3: 嵌入式 Linux 介紹

完全開放來源程式碼完全開放來源程式碼 嵌入式嵌入式 LinuxLinux 開放來源程式碼,這使得學開放來源程式碼,這使得學習,修改,剪裁習,修改,剪裁 LinuxLinux 成為可能,嵌入式成為可能,嵌入式系統的設計者可以對嵌入式系統的設計者可以對嵌入式 LinuxLinux 進行二進行二次開發,去掉作業系統的附加功能,只保次開發,去掉作業系統的附加功能,只保留必須的作業系統功能,並且可以根據實留必須的作業系統功能,並且可以根據實際應用的需要優化作業系統的來源程式碼,際應用的需要優化作業系統的來源程式碼,從而降低整個作業系統開銷與消耗。從而降低整個作業系統開銷與消耗。

Page 4: 嵌入式 Linux 介紹

成本低成本低 GPLGPL 協定保證了源自協定保證了源自 LinuxLinux 的嵌入式的嵌入式 LinLinuxux 也是開放來源程式碼的自由軟體,也就也是開放來源程式碼的自由軟體,也就是說,只要遵守是說,只要遵守 GPLGPL 協議,嵌入式協議,嵌入式 LinuxLinux作業系統的來源程式碼可以自由獲得。另作業系統的來源程式碼可以自由獲得。另外,大多數嵌入式外,大多數嵌入式 LinuxLinux 使用的開發工具使用的開發工具也是遵守也是遵守 GPLGPL 協議的,同樣可以免費獲得。協議的,同樣可以免費獲得。

Page 5: 嵌入式 Linux 介紹

豐富的實用軟體支援豐富的實用軟體支援 LinuxLinux 作業系統是一個完整的、功能強大作業系統是一個完整的、功能強大的作業系統,提供了大量的實用程式和各的作業系統,提供了大量的實用程式和各種各樣的應用軟體。這些軟體的正確性和種各樣的應用軟體。這些軟體的正確性和有效性都經過了實際應用檢驗,可以根據有效性都經過了實際應用檢驗,可以根據需要,利用需要,利用 LinuxLinux 提供的豐富的軟體支援,提供的豐富的軟體支援,迅速構建嵌入式應用的軟體環境。這樣可迅速構建嵌入式應用的軟體環境。這樣可以極大地減小嵌入式系統軟體發展的時間以極大地減小嵌入式系統軟體發展的時間和費用,提高系統的可靠性。和費用,提高系統的可靠性。

Page 6: 嵌入式 Linux 介紹

嵌入式嵌入式 LINUXLINUX 的可攜性的可攜性 將將 LINUXLINUX 移植到新的微處理器體系非常快移植到新的微處理器體系非常快捷,一般是將其移植到一種新型的目標板,捷,一般是將其移植到一種新型的目標板,其中包含有獨特的外部設計。大部分的核其中包含有獨特的外部設計。大部分的核心程式碼都是相同的,因為它們與微處理心程式碼都是相同的,因為它們與微處理器無關,所以移植的工作多集中在一些記器無關,所以移植的工作多集中在一些記憶體管理及中斷處理程式上。一旦完成,憶體管理及中斷處理程式上。一旦完成,它們將非常穩定。它們將非常穩定。

Page 7: 嵌入式 Linux 介紹

嵌入式嵌入式 LINUXLINUX 的應用的應用 嵌入式系統的涵蓋面是非常廣泛的,其中,嵌入式系統的涵蓋面是非常廣泛的,其中,家電市場包括機頂盒、數位電視、視訊電家電市場包括機頂盒、數位電視、視訊電話、家庭網路等資訊家電;工業市場包括話、家庭網路等資訊家電;工業市場包括工業控制設備、儀器;商用市場包括掌上工業控制設備、儀器;商用市場包括掌上電腦、受客戶機、電腦、受客戶機、 POSPOS終端等;通訊市場終端等;通訊市場包括包括WAPWAP 手機、無線手機、無線 PDAPDA 等。目前被廣等。目前被廣泛看好的是資訊家電市場,國內有很多開泛看好的是資訊家電市場,國內有很多開發廠商正加大投入、開發和研製新的產品,發廠商正加大投入、開發和研製新的產品,嵌入式嵌入式 LINUXLINUX 將是他們首選的作業系統 將是他們首選的作業系統

Page 8: 嵌入式 Linux 介紹

LinuxLinux 的基本示意圖 的基本示意圖

Page 9: 嵌入式 Linux 介紹

Boot Loader Boot Loader 負責負責 LinuxLinux 核心的啟動,它用於初始化系核心的啟動,它用於初始化系統資源,包括統資源,包括 SDRAMSDRAM 。這部分程式碼用。這部分程式碼用於建立於建立 LinuxLinux 核心運作環境和從核心運作環境和從 FlashFlash 中中裝載初始化裝載初始化 ramdisk ramdisk

Page 10: 嵌入式 Linux 介紹

核心初始化 核心初始化 LinuxLinux 核心的進入點是核心的進入點是 start_kernelstart_kernel ()()函數。它初始化核心的其他部分,包括捕函數。它初始化核心的其他部分,包括捕獲、獲、 IRQIRQ 通道、調度、設備驅動、標定延通道、調度、設備驅動、標定延遲迴圈,最重要的是能夠遲迴圈,最重要的是能夠 fork “init”fork “init” 處處理程序,以啟動整個多工環境。系統應用理程序,以啟動整個多工環境。系統應用函數函數 // 捕獲函數:在執行完“捕獲函數:在執行完“ init”init” 程式程式後,核心對程式不再有直接的控制權,此後,核心對程式不再有直接的控制權,此後,它的作用僅僅是處理非同步事件後,它的作用僅僅是處理非同步事件 (( 例如例如硬體中斷硬體中斷 ))和為系統應用提供處理程序。 和為系統應用提供處理程序。

Page 11: 嵌入式 Linux 介紹

設備驅動 設備驅動 設備驅動佔據了設備驅動佔據了 LinuxLinux 核心很大部分。同核心很大部分。同其他作業系統一樣,設備驅動為它們所控其他作業系統一樣,設備驅動為它們所控制的硬體設備和作業系統提供介面。 制的硬體設備和作業系統提供介面。

Page 12: 嵌入式 Linux 介紹

檔案系統 檔案系統 LinuxLinux 最重要的特性之一就是對多種檔案最重要的特性之一就是對多種檔案系統的支援。這種特性使得系統的支援。這種特性使得 LinuxLinux 很容易很容易地同其他作業系統共存。檔案系統的概念地同其他作業系統共存。檔案系統的概念使得用戶能夠查看儲存設備上的檔案和路使得用戶能夠查看儲存設備上的檔案和路徑而無須考慮實際物理設備的檔案系統類徑而無須考慮實際物理設備的檔案系統類型。型。 LinuxLinux 透明的支援許多不同的檔案系透明的支援許多不同的檔案系統,將各種安裝的檔和檔案系統以一個完統,將各種安裝的檔和檔案系統以一個完整的虛擬檔案系統的形式呈現給用戶。 整的虛擬檔案系統的形式呈現給用戶。

Page 13: 嵌入式 Linux 介紹

嵌入式檔案系統簡介嵌入式檔案系統簡介 嵌入式檔案系統的結構與嵌入式檔案系統的結構與 LINUXLINUX類似,目前常用的有類似,目前常用的有 EEXT2XT2,, CRAMFSCRAMFS,, JFFS2JFFS2 ,, YAFFS2YAFFS2和和 RAMRAM 磁片檔案磁片檔案系統等。為了更好的嵌入式系統選擇檔案系統,一般會考系統等。為了更好的嵌入式系統選擇檔案系統,一般會考察檔案系統的如下幾個特性:察檔案系統的如下幾個特性: 可寫入 檔案系統是否可以被寫入?可寫入 檔案系統是否可以被寫入? 可更新 系統重新啟動後,檔案系統是否能保持重新啟可更新 系統重新啟動後,檔案系統是否能保持重新啟動前的更改?動前的更改? 斷電可靠性 檔案系統在發生斷電的時候是否可以恢復原斷電可靠性 檔案系統在發生斷電的時候是否可以恢復原資料?資料? 可壓縮 檔案系統內容是否可被壓縮?可壓縮 檔案系統內容是否可被壓縮? RAMRAM 啟動 在掛載檔案系統前,其內容是否首先從記憶啟動 在掛載檔案系統前,其內容是否首先從記憶體中提取到體中提取到 RAMRAM 中?中?

Page 14: 嵌入式 Linux 介紹

ROMfsROMfs 檔案系統檔案系統 : : ROMfsROMfs 是使用最多的檔案系統,它是一種是使用最多的檔案系統,它是一種簡單、緊湊和唯讀的檔案系統。簡單、緊湊和唯讀的檔案系統。 ROMfsROMfs 順順序儲存檔資料,並可以在序儲存檔資料,並可以在 uClinuxuClinux 支援的支援的儲存設備上直接運作檔案系統,這樣可以儲存設備上直接運作檔案系統,這樣可以在系統運作時節省許多在系統運作時節省許多 RAMRAM 空間空間

Page 15: 嵌入式 Linux 介紹

Cramfs Cramfs 檔案系統檔案系統 :: CramfsCramfs 是針對是針對 LinuxLinux 核心核心 2.42.4 之後的版之後的版本所設計的一種新型檔案系統,也是壓縮本所設計的一種新型檔案系統,也是壓縮和唯讀格式的。它主要的優點是將檔案資和唯讀格式的。它主要的優點是將檔案資料以壓縮形式儲存,在需要運作的時候進料以壓縮形式儲存,在需要運作的時候進行解壓縮。由於它儲存的檔形式是壓縮的行解壓縮。由於它儲存的檔形式是壓縮的格式,所以檔案系統不能直接在格式,所以檔案系統不能直接在 FlashFlash 上上運作。雖然這樣可以節約很多運作。雖然這樣可以節約很多 FlashFlash 儲存儲存空間,但是檔案系統運作需要將大量的資空間,但是檔案系統運作需要將大量的資料複製進料複製進 RAMRAM 中,消耗了中,消耗了 RAMRAM 空間。 空間。

Page 16: 嵌入式 Linux 介紹

JFFS2 JFFS2 日誌檔案系統日誌檔案系統 : : JFFS2JFFS2 是專門針對快閃記憶體的檔案系統,是專門針對快閃記憶體的檔案系統,除了有日誌功能,還有負載平衡,垃圾收除了有日誌功能,還有負載平衡,垃圾收集等,並且來源碼公開。集等,並且來源碼公開。

Page 17: 嵌入式 Linux 介紹

YAFFS2(Yet Another Flash File YAFFS2(Yet Another Flash File System)System) 檔案系統 檔案系統 YAFFS2YAFFS2 是一種和是一種和 JFFSxJFFSx 類似的快閃記憶類似的快閃記憶體檔案系統,和體檔案系統,和 JFFS2JFFS2 相比它減少了一些相比它減少了一些功能,所以速度更快,而且對記憶體的佔功能,所以速度更快,而且對記憶體的佔用比較小用比較小 .YAFFS.YAFFS 自已自已 NANDNAND 晶片驅動,晶片驅動,並且為嵌入式系統提供了直接取用檔案系並且為嵌入式系統提供了直接取用檔案系統的統的 APIAPI。。 除了上面介紹的檔案系統之外,還有除了上面介紹的檔案系統之外,還有 RAMRAMDISK(DISK( 一種基於記憶體的檔案系統一種基於記憶體的檔案系統 )),, TruTrueFFSeFFS 等等。等等。

Page 18: 嵌入式 Linux 介紹

根檔案系統相關說明根檔案系統相關說明 LinuxLinux核心在系統啟動時的最後操作之一就是載核心在系統啟動時的最後操作之一就是載入根檔案系統。根檔案系統中存放了嵌入式系統入根檔案系統。根檔案系統中存放了嵌入式系統使用的所有應用程式庫以及一些需要用到的服務。使用的所有應用程式庫以及一些需要用到的服務。由於由於 LinuxLinux受到受到 UNIXUNIX 系統發展的影響,系統發展的影響, LinuxLinux檔案系統的組織和檔案系統的組織和 UNIXUNIX相同。相同。 根檔案系統的結構根檔案系統的結構 根檔案系統中每一個最上層目錄都有特定的用途根檔案系統中每一個最上層目錄都有特定的用途和目的。有些目錄是為了多用戶模式服務。在大和目的。有些目錄是為了多用戶模式服務。在大多數沒有用戶和管理員的嵌入式多數沒有用戶和管理員的嵌入式 LinuxLinux中,建立中,建立一個根檔案系統可以不考慮大部分在多用戶下需一個根檔案系統可以不考慮大部分在多用戶下需要注意的問題,下表列出了根檔案系統頂層目錄要注意的問題,下表列出了根檔案系統頂層目錄大致結構。大致結構。

Page 19: 嵌入式 Linux 介紹

目錄 內容bin 基本命令的可執行檔boot 核心及啟動需要用到的一些檔Dev 設備檔Etc 系統配置檔,包括啟動檔Home 用戶目錄Lib 基本函式庫,例如 c 庫和核心模組Mnt 臨時映射檔案系統的映射點(映射目標)Proc 核心及處理程序資訊的虛擬檔案系統Root Root 用戶目錄Sbin 用於系統管理的可執行程式Tmp 暫存檔案,在 SDRAM 中建立Usr 該目錄的二級目錄包含大部分對大多數用戶很有用的應用程式和文件檔Var 存放系統日誌或一些服務程式的暫存檔案

Page 20: 嵌入式 Linux 介紹

交叉編譯器介紹交叉編譯器介紹 交叉編譯就是在一個平台上產生可以在另一個平台上執行交叉編譯就是在一個平台上產生可以在另一個平台上執行的程式碼。注意這裡的平台,實際上包含兩個概念:體系的程式碼。注意這裡的平台,實際上包含兩個概念:體系結構結構 (Architecture)(Architecture) 、作業系統、作業系統 (Operating System)(Operating System)。。同一個體系結構可以運作不同的作業系統;同樣,同一個同一個體系結構可以運作不同的作業系統;同樣,同一個作業系統也可以在不同的體系結構上運作。舉例來說,我作業系統也可以在不同的體系結構上運作。舉例來說,我們常說的們常說的 x86 Linuxx86 Linux 平台實際上是平台實際上是 Intel x86Intel x86 體系結構和體系結構和Linux for x86Linux for x86 作業系統的統稱;而作業系統的統稱;而 x86 WinNTx86 WinNT 平台實平台實際上是際上是 Intel x86Intel x86 體系結構和體系結構和Windows NT for x86Windows NT for x86 作業作業系統的簡稱。就本書所涉及到的目標硬體系統的簡稱。就本書所涉及到的目標硬體 FS2410XPFS2410XP而言,而言,之所以使用交叉編譯是因為在該硬體上無法安裝我們所需之所以使用交叉編譯是因為在該硬體上無法安裝我們所需的編譯器,只好借助於宿主機器,在宿主機器上對即將運的編譯器,只好借助於宿主機器,在宿主機器上對即將運作在目的機上的應用程式進行編譯,產生可在目的機器上作在目的機上的應用程式進行編譯,產生可在目的機器上運作的程式碼格式。運作的程式碼格式。

Page 21: 嵌入式 Linux 介紹

GNUGNU 工具簡介工具簡介 GNUGNU開發工具包括開發工具包括 CC編譯器編譯器 GCCGCC,, C++C++編譯器編譯器 G++G++,組,組語編譯器語編譯器 ASAS,鏈結器,鏈結器 LDLD,二進位轉換工具,二進位轉換工具 (OBJCOPY(OBJCOPY,,OBJDUMP)OBJDUMP),調整測試工具,調整測試工具 (GDB(GDB,, GDBSERVERGDBSERVER,, KGKGDB) DB) 和基於不同硬體平台的開發函式庫。在和基於不同硬體平台的開發函式庫。在 GNU GCCGNU GCC支援支援下用戶可以使用流行的下用戶可以使用流行的 C/C++C/C++ 語言開發應用程式,滿足產生語言開發應用程式,滿足產生高效率運作程式碼、易掌握的編寫程式語言的用戶需求。高效率運作程式碼、易掌握的編寫程式語言的用戶需求。 這些工具都是按這些工具都是按 GPLGPL 版權聲明發佈,任何人可以從網上獲版權聲明發佈,任何人可以從網上獲取全部的來源程式碼,無需使用任何費用。關於取全部的來源程式碼,無需使用任何費用。關於 GNUGNU和公和公共許可證協定的詳細資料,讀者可以參看共許可證協定的詳細資料,讀者可以參看 GNUGNU網站的介紹,網站的介紹,http://www.gnu.org/home.htmlhttp://www.gnu.org/home.html 。。 運作於運作於 LinuxLinux作業系統下的自由軟體作業系統下的自由軟體 GNU gccGNU gcc編譯器,不編譯器,不僅可以編譯僅可以編譯 LinuxLinux作業系統下運作的應用程式,還可以編譯作業系統下運作的應用程式,還可以編譯LinuxLinux核心本身,甚至可以作交叉編譯,編譯運作於其他核心本身,甚至可以作交叉編譯,編譯運作於其他 CPCPUU上的程式。在這裡我們用的是上的程式。在這裡我們用的是 arm-linux-arm-linux-工具鏈 工具鏈

Page 22: 嵌入式 Linux 介紹

嵌入式嵌入式 LinuxLinux 核心程式碼結構核心程式碼結構 /arch/arch 子目錄包含了所有硬體結構特定的核心程式碼。如子目錄包含了所有硬體結構特定的核心程式碼。如 i386i386,, alphaalpha和和 arm.arm.。。 /drivers/drivers 子目錄包含了核心中所有的設備驅動程式,如子目錄包含了核心中所有的設備驅動程式,如 usbusb和和 soundsound。。 /fs/fs 子目錄包含了所有的檔案系統的程式碼。如子目錄包含了所有的檔案系統的程式碼。如 nfsnfs,, ext3ext3和和 jffs2jffs2等。等。 /include /include 子目錄包含了建立核心程式碼時所需的大部分函式庫檔案,這子目錄包含了建立核心程式碼時所需的大部分函式庫檔案,這個模組利用其他模組重建核心。該目錄也包括了不同平台需要的函式庫個模組利用其他模組重建核心。該目錄也包括了不同平台需要的函式庫檔案。比如,檔案。比如, asm-armasm-arm是是 armarm 平台需要的函式庫檔案。平台需要的函式庫檔案。 /init/init 子目錄包含了核心的初始化程式碼,核心從此處工作。子目錄包含了核心的初始化程式碼,核心從此處工作。 /ipc/ipc 子目錄包含了處理程序間通訊程式碼子目錄包含了處理程序間通訊程式碼 /kernel /kernel 子目錄包含了主核心程式碼子目錄包含了主核心程式碼 /mm/mm 子目錄包含了所有核心管理程式碼子目錄包含了所有核心管理程式碼 /net/net 子目錄包含了和網路相關的程式碼,如子目錄包含了和網路相關的程式碼,如 atmatm,, ipv6ipv6等。等。 一般在每個目錄下都有一個一般在每個目錄下都有一個 dependdepend 檔和一個檔和一個MakefileMakefile 檔。這兩個檔檔。這兩個檔都是編譯時使用的輔助檔。其中都是編譯時使用的輔助檔。其中MakefileMakefile 檔中指出了編譯時需要用到檔中指出了編譯時需要用到的編譯器,也是移植核心過程中不可缺少的。的編譯器,也是移植核心過程中不可缺少的。

Page 23: 嵌入式 Linux 介紹

在核心中添加網路驅動設備過程在核心中添加網路驅動設備過程

Page 24: 嵌入式 Linux 介紹

在核心中添加網路驅動設備過程在核心中添加網路驅動設備過程

Page 25: 嵌入式 Linux 介紹

在核心中添加網路驅動設備過程在核心中添加網路驅動設備過程

Page 26: 嵌入式 Linux 介紹

在核心中添加網路驅動設備過程在核心中添加網路驅動設備過程

Page 27: 嵌入式 Linux 介紹

LinuxLinux 下下 SD/MMCSD/MMC 卡驅動程式卡驅動程式

Page 28: 嵌入式 Linux 介紹

LinuxLinux 下下 SD/MMCSD/MMC 卡驅動程式卡驅動程式