Linux是個典型的巨集內核(一體化)結構,硬體系統上面是硬體介面,在硬體介面上面是內核服務功能模組,這些模組經由系統呼叫介面向用戶提供任務服務。而任務管理的系統包括:任務的創造、調度、終止及等待等。
Linux從1991年問世到現在,短短的十幾年時間已經發展成為功能強大、設計完善的作業系統之一,不僅可以與各種傳統的商業作業系統分庭抗爭,而且在新興的嵌入式作業系統領域內也獲得了飛速發展。所謂的嵌入式Linux是指對標準Linux經過小型化整合處理後,能夠使用在容量只有幾KB或者幾MB的記憶體晶片或者單片機中,適合於特定嵌入式應用場合的專用Linux作業系統。嵌入式Linux的開發和研究是作業系統領域中的一個熱點,目前已經開發成功的嵌入式系統中,大約有一半的作業系統是使用Linux,或者是修改版。Linux可以說是現代電腦技術的一個奇蹟,問世之後,只經過了十幾年的時間就風靡世界,並在嵌入式系統中得到了廣泛應用。
儘管Linux不是為嵌入式系統設計的,特別不是為即時系統設計的,但是,由於它的模組化結構使其具有良好的刪減性,以及具有豐富的資源和原始碼開放的特點,所以還是有人把它應用在嵌入式系統中,並獲得了的成功。多年來,人們一直在對Linux進行修改和改造,並且形成了許多可以用於嵌入式即時系統的Linux版本。
本書特色
本書重點介紹一些Linux的嵌入式修改版本,以使讀者清楚Linux在嵌入式應用,特別是即時應用時,它的弱點之所在,以及解決的方法,從而更深入了解嵌入式即時操作系統的本質。
書中除了先從Linux的發展歷史介紹到Linux在嵌入式應用的各種修改版的特點,還包括了Linux必須要具備的一些基礎知識。
作者簡介:
總校閱簡介
温坤禮
學歷
國立中央大學機械工程研究所系統組博士
經歷
建國工商專校電機科主任
建國工商專校機電光中心主任
中華民國灰色學會理事
中華民國灰色學會常務理事
中華民國灰色學會秘書長
台灣感性資訊學會秘書長
現職
建國科技大學教授(灰色系統分析研究室)
台灣灰色系統學會秘書長
計量管理期刊理事
作者序
嵌入式Linux 作業系統與軟體、硬體都相關,使用的技術幾乎覆蓋了電腦技術的全部方面。因此Linux 技術較難被學生和讀者掌握。鑒於Linux 這種通用作業系統在嵌入式應用中的良好表現,電腦專業的學生學習Linux 很有必要。
由於Linux 實在太大了,用它來建立作業系統的概念確實很困難。如果不分析代碼,則又是空洞無比,如若分析代碼,則又會被代碼的資料海洋所淹沒。所以本書還是以精巧的微內核μC/OS-II 切入,使讀者能快速建立起作業系統的調度、通訊、同步等基礎概念。而對於Linux,則以入門為主要目標,以介紹Linux 用來描述作業系統各個部分的主要資料結構為主,力求使讀者對Linux 的組成與結構能有一個較清晰的瞭解和掌握,為讀者進一步精研Linux 打下基礎。再就是作為一本作業系統內核入門的書籍,本書在文字和語言敘述上盡量言簡意賅。
全書內容共九章,參與本書編寫的有潘樹林老師、房紅征老師和任哲老師,由任哲老師擔任主編並負責全書稿的統一整理工作。
在本書的編寫過程中,得到了很多師長的關心、指導和幫助。特別是書中在ARM 上移植一章中使用了周立功先生的方法和程式碼,部分章節還使用了Jean J.Labrosse 先生書中的部分例題代碼。同時,在編寫本書的過程中,作者還參閱了大量的參考書籍,並在書中引用了這些書籍中的一些文字和插圖。為此向為本書做過貢獻的專家與學者表示衷心的感謝!
本書僅是一本入門書,用意是藉此引導讀者可以順利地使用文獻學習作業系統,本書僅在相關學習難點上做了較詳細的講解。關於作業系統以及Linux 的學習問題,請參閱以下的問答討論:
1. 尖端軟體設計工程師,學習Linux 作業系統是否有必要?
Yes! 因為設計的軟體在運行時,作業系統是你的應用程式的一部分。如果你對使用的作業系統不瞭解,如何判斷你的工作是必需的,如何向客戶說明你的軟體是安全的,如何保證當系統升級時,你的軟體是相容的?
2. 硬體研究工程師,學習作業系統有意義嗎?
現在做硬體研究的工程師一定會接觸到軟體研究。試想,要設計一個硬體驅動程式,你不瞭解作業系統的設備管理可以嗎?尤其是在嵌入式系統應用如此廣泛的現今,你具備嵌入式作業系統的選用、剪裁及改造能力嗎?你能成為一個合格的嵌入式工程師嗎?
3. 本書為什麼都在介紹Linux,而不是介紹Windows 等及其他作業系統呢?
因為所依據的軟體實例必須是源碼開放的,否則會引起專利權與知識產權問題。就目前狀況來看,適合作為電腦專業教學使用,且源碼開放的只有Linux,而相較於其他作業系統則只能就其公開的技術做一般的介紹。
4.Linux 軟體是否具有適用性?
此問題比較複雜,Linux 至少在作業系統中較重要的微內核概念很難通過它來體現。此外Linux 的進程(程序)、線程的概念不很清晰(但很實務),可能會在學習階段容易造成一些不必要的混亂。因作業系統屬實務體,若具體到各系統就免不了各有高手,對於電腦這種非線性系統來說,不同技術間的差異很大。因此,希望僅以一個實例就把所有作業系統弄清楚的想法行不通,加之前面所說的開放源碼問題,現在的教學實例也只能是Linux 了。但由於作業系統的基本作用和原理都大致相同,所以學習了Linux 之後,學習其他系統也就不難了。
5. 學習作業系統能提高編程能力嗎?
Yes! 前面已經解釋過了,作業系統實際上是實體的大程式實例。在相關課程中很難用實例介紹的資料結構、演算法、設計模式,以及軟體工程中提到的「高內聚、低耦合」等軟體設計原則、代碼動態鏈結以及充分利用指標完成的各種虛擬技術等,在作業系統中都有極為充分的體現,注意整理總結,個人的軟體設計能力會有突飛猛進的提高。
6. 學習Linux 難不難?
Linux 入門、甚至應用都不難,但要精通確實很難。想想看,從Linux 出現到現在,從程式設計方法上,它歷經了面向過程程式設計、面向物件程式設計兩大階段;從內核結構上,儘管它很難改變當初的宏內核設計,但後來的一些內核新概念,例如層次化內核和微內核,也給了它極大的影響,加之為了嵌入式應用它還在實現即時內核方面做出了很大努力。因此可以說,Linux 是集各種編程思想和方法之大成者。因Linux 所採用技術之廣泛和繁雜,要精通它確實很難,所以從這個角度看,它並不是一個特別理想的教學實例。在此作者也建議初學者在閱讀本書時,最好看一些介紹其他小型作業系統的書籍和資料,例如開源的μC/OS-II、T-KERNEL等,以快速瞭解作業系統的一些基礎概念。另外,在閱讀本書介紹的一些大型資料結構時,也需要某種程度的「不求甚解」,以把握其中的主要內容。
7. 這本書適合哪類讀者?如何學習Linux ?
學無定法,作者只能提一些建議。如果只是單純以一般的尖端應用為目的,那麼作業系統就是一堆函數,將這些函數的用途及使用方法弄清楚也就可以了,這本書可能不適合你。但想要對作業系統用途、原理、特點和實現方法有一定程度的瞭解或是想入門的話,這本書就比較合適,因為這本書儘量做到注重說理、深度適中、文字通俗易懂。當然,要深入研究的話,單靠這一本小書就遠遠不夠了,還需看一些理論性較強或對代碼剖析的比較詳細的書籍(市面上這類書籍已經逐漸多了起來)。
學習方法建議:最好是以Shell 編程來熟悉Linux,以閱讀資料結構來瞭解內核架構,以編寫守護進程和驅動程式為突破點來理解Linux 內核。
本書作者群:為樊生文、房紅征、潘樹林與任哲,其中樊生文與任哲為主編並負責書稿。
嵌入式Linux 作業系統與軟體、硬體都相關,使用的技術幾乎覆蓋了電腦技術的全部方面。因此Linux 技術較難被學生和讀者掌握。鑒於Linux 這種通用作業系統在嵌入式應用中的良好表現,電腦專業的學生學習Linux 很有必要。
由於Linux 實在太大了,用它來建立作業系統的概念確實很困難。如果不分析代碼,則又是空洞無比,如若分析代碼,則又會被代碼的資料海洋所淹沒。所以本書還是以精巧的微內核μC/OS-II 切入,使讀者能快速建立起作業系統的調度、通訊、同步等基礎概念。而對於Linux,則以入門為主要目標,以介紹Linux 用來描述作業系統各個...
目錄
第1章 Linux的基礎知識
1.1 Linux系統簡介
1.2 Linux系統的嵌入式應用
1.3 Linux中的C語言和組合語言
1.4 Linux中的鏈表
1.5 Linux模組
第2章 Linux的記憶體管理
2.1 記憶體管理之目標
2.2 虛擬記憶體
2.3 Linux實體記憶體的管理
2.4 Linux虛擬記憶體空間描述
2.5 Linux的內核空間
2.6 內核空間的Slab分配模式
2.7 Linux記憶體管理的總貌
第3章 Linux程序及其管理
3.1 Linux程序(processing)
3.2 Linux程序的創造
3.3 Linux程序額度
3.4 Linux2.6對調度器的改進
第4章 中斷/異常和系統呼叫
4.1 處理器的硬體中斷機制
4.2 Linux的兩級中斷
4.3 Linux硬中斷結構
4.4 Linux軟中段結構
4.5 系統呼叫
第5章 Linux檔案系統
5.1 檔案與檔案系統
5.2 檔案的儲存
5.3 檔案目錄
5.4 Ext2檔系統
5.5 其他常用的檔案系統
5.6 作業系統的檔案管理系統
5.7 Linux的虛擬檔系統
5.8 Linux的Proc檔系統簡介
5.9 作業系統對檔系統的管理
5.10 檔與程序的關聯
5.11 根據檔案路徑查尋索引節點
5.12 程序創造時檔案的複製和共用
第6章 Linux程序通訊
6.1 基本概念
6.2 System VIPC機制簡介
6.3 共用記憶體
6.4 消息佇列Linux
6.5 管道
6.6 Linux 的訊號
第7章 Linux 的同步控制
7.1 概述
7.2 Linux 訊號量集
第8章 Linux 設備驅動
8.1 概述
8.2 設備驅動程式
8.3 設備驅動程式及其內核介面
8.4 設備管理
8.5 Linux 的設備驅動程式
8.6 Linux 的字元設備驅動程式
第9章 μ CLinux 簡介
9.1 Linux 在嵌入式應用中的局限
9.2 μCLinux 的架構
9.3 μCLinux 的記憶體管理
9.4 μCLinux 的檔案系統
9.5 μCLinux 的開發環境
索引
第1章 Linux的基礎知識
1.1 Linux系統簡介
1.2 Linux系統的嵌入式應用
1.3 Linux中的C語言和組合語言
1.4 Linux中的鏈表
1.5 Linux模組
第2章 Linux的記憶體管理
2.1 記憶體管理之目標
2.2 虛擬記憶體
2.3 Linux實體記憶體的管理
2.4 Linux虛擬記憶體空間描述
2.5 Linux的內核空間
2.6 內核空間的Slab分配模式
2.7 Linux記憶體管理的總貌
第3章 Linux程序及其管理
3.1 Linux程序(processing)
3.2 Linux程序的創造
3.3 Linux程序額度
3.4 Linux2.6對調度器的改進
第4章 中斷/異...