【連載】嵌入式Linux開發教程:Linux內核

2020-11-23 CSDN技術社區

第1章 Linux作業系統簡介

本章導讀:本章首先對Linux發展簡史進行簡要介紹,然後對Linux內核進行了介紹,重點介紹了Linux內核的特點和功能,接著對Linux發行版進行介紹,並列舉了一些典型的發行版;最後對嵌入式Linux進行了簡要介紹,包括嵌入式Linux的特點和產品形態。

1.1 Linux內核

1.1.1簡介

Linux是全球最受歡迎的開源作業系統。它是一個由C語言編寫的,符合POSIX標準的類UNIX系統。

詞條POSIX

POSIX是Portable Operating System Interface的縮寫,表示可移植作業系統接口,它規定了作業系統應該為應用編程提供的接口標準。

詞條UNIX

UNIX是一個強大的多用戶、多任務分時作業系統,支持多種處理器架構,於1969年在AT&T的貝爾實驗室開發。UNIX是商業作業系統,需要收費。

20世紀九十年代,由於當時UNIX的商業化,Andrew Tannebaum教授開發了Minix作業系統,用於教學和科研,並發布在Internet上,免費給全世界的學生使用。Minix具有UNIX的很多特點,但是不完全兼容。1991年,芬蘭大學生Linus Torvalds為了給Minix用戶設計一個比較有效的UNIX PC版本,寫了一個「類Minix」的作業系統,並發布到了Minix新聞組,在眾多支持者的幫助下,Linus推出了Linux第一個穩定版本。1991年11月份,Linux 0.10版本推出,次年12月份,Linux 0.11版本推出,並在發布網上免費供人們使用。Linux 0.13版本發布時,Linux已經非常接近於一種可靠、穩定的作業系統,Linus決定將0.13版本改稱為0.95版本,到1994年3月,Linux發布了1.0版本。

  • Linus當時提交到Minix新聞組的原名並不是Linux,而是Freax,取自「Free」和「Unix」兩個單詞,為「免費的Unix」之意。但當時的管理員並不喜歡「Freax」這個名稱,並以「Linus’s Minix」之意,將Freax放到了一個名為「Linux」的目錄下,之後便一直用Linux這個名稱。

Linux誕生、發展和壯大於網絡,目前依然掌控於Linux社區,遍布全球數以萬計的黑客和志願者參與Linux開發,也有商業公司為Linux貢獻代碼。Linux內核核心開發隊伍的領導者目前是Linus本人。

Linus其人

Linus Torvalds(1969.12.28 - ),芬蘭赫爾辛基人。在1991年他還是一名大學生的時候,開發了Linux作業系統,在眾多黑客的幫助和他的主持下,Linux作業系統蓬勃發展,他本人至今依然是Linux內核項目的核心和領導人物。他本人獲獎無數,主要有:

  • 2014年,Linus獲得2014 IEEE計算機先驅獎; 
  • 2012年,芬蘭千禧年科技獎; 
  • 2012年,首批入駐「網際網路名人堂」; 
  • 2011年,首屆ITechLaw成就獎; 
  • 2004年,被評為世界最有影響力的人之一; 
  • 1998年,電子前哨基金會先鋒獎。 
  • 除Linux作業系統之外,Linus還創建了目前最流行的版本控制系統Git。

Linux遵循GPL協議,允許任何人對代碼進行修改或發行,包括商業行為。只要其遵守該GPL協議,所有基於Linux的軟體也必須以GPL協議的形式發表,並提供原始碼。

詞條GPL

通用公共許可證」。只有GPL英文原版才具有法律效力。

在軟體中採用了使用GPL協議的產品,該軟體產品也必須採用GPL協議,即必須開源,這是GPL所謂的「傳染性」。

獲取Linux內核源碼的網址為:http://www.kernel.org,在這裡能夠下載各版本的內核源碼,包括測試版和最新穩定版。

Linux的吉祥物是一隻名叫Tux的企鵝,看起來像穿了一件晚禮服的企鵝,如下圖。


Linux吉祥物創作於1996年,據說Linus被澳大利亞國家動物園的一隻小企鵝輕輕咬了一下,於是就有了用企鵝做吉祥物的想法。

Tux全稱tuxedo,但大多數人更傾向於另一種說法,說是Tux名字來源於「TorvaldsUniX」。

Linux發音[』li:nэks],這也是Linus本人的發音,在不同語言裡發音有差異,國內很大一部分人發音[』li:njuks]。

1.1.2 特點

Linux內核的重要特點

Linux是一個開放自由的作業系統內核,具有一些鮮明的特點:

1. Linux是一個一體化內核;

註:「一體化內核」是也稱「宏內核」,是相對於「微內核」而言的。幾乎所有的嵌入式和實時系統都採用微內核,如VxWorks、uC/OS-II、PSOS等。

2. 可移植性強。儘管Linus最初只為在X86 PC上實現一個「類UNIX」,後來隨著加入者的努力,Linux目前已經成為支持硬體平臺最廣泛的作業系統;

註:目前已經在X86、IA64、ARM、MIPS、AVR32、M68K、S390、Blackfin、M32R等眾多架構處理器上運行。

3. 是一個可裁剪作業系統內核。Linux極具伸縮性,內核可以任意裁剪,可以大至幾十或者上百兆,可以小至幾百K,運行的設備從超級計算機、大型伺服器到小型嵌入式系統、掌上行動裝置或者嵌入式模塊,都可以運行;

4. 模塊化。Linux內核採用模塊化設計,很多功能模塊都可以編譯為模塊,可以在內核運行中動態加載/卸載而無需重啟系統;

5. 網絡支持完善。Linux內核集成了完整的POSIX網絡協議棧,網絡功能完善;

6. 穩定性強。運行Linux的內核的伺服器可以做到幾年不用復位重啟;

7. 安全性好。Linux源碼開放,由眾多黑客參與Linux的開發,一旦發現漏洞都能及時修復;

8. 支持的設備廣泛。Linux源碼中,設備驅動源碼佔了很大比例,幾乎能支持任何常見設備,無論是很老舊的設備還是最新推出的硬體設備,幾乎都能找到Linux下的驅動。

Linux作業系統的特點

以Linux內核為核心的作業系統具有如下特點:

(1)開放性

遵循世界標準規範,特別是遵循開放系統互連(OSI)國際標準。凡遵循國際標準所開發的硬體和軟體,都能彼此兼容,可方便地實現互連。

詞條OSI

OSI是Open System Interconnection的縮寫,意為開放系統互聯,該模型由ISO(國際標準化組織)制定。模型把網絡通信分為7層:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。

詞條ISO

ISO是International Organization for Standardization的縮寫,即國際標準化組織,該組織是由國家標準化機構組成的世界範圍的聯合會,現有140個成員國。ISO中央辦事機構設在瑞士的日內瓦。

(2)多用戶

Linux作業系統是一個真正的多用戶作業系統;系統資源可以被不同用戶各自擁有使用,即每個用戶對自己的資源有特定的權限,互不影響。

經常有初學者將Linux的多用戶與Windows的多用戶弄混淆,實際上兩者的差別是很大的。Windows桌面同一時刻只允許一個用戶登錄,其餘用戶必須鎖定;而Linux則允許多個用戶同時登錄。

(3)多任務

多任務是現代計算機的最主要的一個特點。它是指計算機同時執行多個程序,而且各個程序的運行互相獨立。Linux系統調度每一個進程平等地訪問處理器。

多任務實際上很常見,例如我們在編寫文檔的時候,還可以一邊聽歌,甚至還可以從網上下載資料。這至少就有文檔處理、音樂播放和網絡下載三個任務,相互互不影響,並且是同時運行的。

(4)良好的用戶界面

Linux向用戶提供了兩種界面:用戶界面和系統調用。

Linux的傳統用戶界面是基於文本的命令行界面,即Shell,它既可以聯機使用,又可存在文件上脫機使用。Shell有很強的程序設計能力,用戶可方便地用它編製程序,從而為用戶擴充系統功能提供了更高級的手段。

Linux還為用戶提供了圖形用戶界面。它利用滑鼠、菜單、窗口、滾動條等設施,給用戶呈現一個直觀、易操作、交互性強的友好的圖形化界面。

系統調用是提供給用戶編程時使用的界面。用戶可以在編程時直接使用系統提供的系統調用。系統通過這個界面為用戶程序提供低級、高效率的服務。

(5)設備獨立性

Linux作業系統把所有外部設備統一當作成文件來看待,只要安裝它們的驅動程序,任何用戶都可以像使用文件一樣,操縱、使用這些設備,而不必知道它們的具體存在形式。Linux的設備獨立性使得它具有高度適應能力,能夠適應隨時增加支持新設備。

設備獨立性主要是對應用程式開發者來說的。例如,對應用開發者來說,系統自帶的串口與USB串口的操作方式是一樣的,都是串口設備,而不用關心這個串口設備實際對應的物理硬體是什麼。

現代計算機都實現了設備獨立特性。

(6)完善的網絡功能

Linux內置完整的POSIX網絡協議棧,在通信和網絡功能方面優於其它作業系統。Linux為用戶提供了完善的、強大的網絡功能:

支持Internet。Linux免費提供了大量支持Internet的軟體,使得用戶能用Linux與世界上的其他人通過Internet網絡進行通信。

網絡文件傳輸。用戶能通過一些Linux命令完成內部信息或文件的傳輸。

遠程訪問功能。Linux系統既允許本身通過網絡訪問遠程的系統,也允許遠程系統通過網絡訪問自身。

(7)可靠的系統安全

Linux採取了許多安全技術措施,包括對讀、寫進行權限控制、帶保護的子系統、審計跟蹤、核心授權等,為網絡多用戶環境中的用戶提供了必要的安全保障。

(8)模塊化

  運行時可以根據系統的需要加載程序而無需重啟系統。Linux的模塊化極大地提高了Linux的可裁剪性和靈活性。

(9)良好的可移植性

Linux是一種可移植的作業系統,能夠在從微型計算機到大型計算機的任何環境和任何平臺上運行。目前已經成為支持平臺最廣泛的作業系統。

Linux內核移植分3個層次:體系結構級別移植、處理器級別移植和板級移植。對大多數開發者而言,只需進行板級移植。

相關焦點

  • 嵌入式Linux開發環境的搭建之:嵌入式開發環境的搭建
    本文引用地址:http://www.eepw.com.cn/article/257141.htm5.1嵌入式開發環境的搭建5.1.1嵌入式交叉編譯環境的搭建linux作業系統文章專題:linux作業系統詳解(linux不再難懂)交叉編譯的概念在第4章中已經詳細講述過,搭建交叉編譯環境是嵌入式開發的第一步,也是必備的一步。
  • 嵌入式Linux的GDB調試環境建立
    嵌入式Linux的GDB調試環境由Host和Target兩部分組成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。
  • 從RTOS到Linux的應用移植
    儘管一度曾被認為是不重要的平臺,但今天嵌入式Linux已經成為主流,廣泛應用於消費電子、手持和無線設備、數據聯網以及電信設備等領域。Google公司在2007年11月發布的Android手機作業系統正是基於Linux內核的作業系統,使得Linux在數字行動電話業取得跨越式發展。
  • 基於嵌入式Linux的語音識別系統硬軟體設計
    在嵌入式Linux作業系統下,運用多進程機制完成了對語音識別晶片、超聲波測距和雲臺的控制,並將語音識別技術應用於多角度超聲波測距系統中。通過測試,系統可以通過識別語音指令控制測量方向,無需手動幹預,最後將測量結果通過語音播放出來。
  • 程式設計師及嵌入式的一些學習建議
    但是嵌入式專業不同於其他學科,嵌入式專業是一門綜合性非常強,涉及知識面非常廣的學科,對於初學者來說,面對那麼多教程,課本,那麼多知識點,往往不知道從何處下手,不知道哪些是重點,哪些不是重點,這些知識點之間有什麼關聯,一臉的茫然,然後東一榔頭,西一棒子,折騰了幾個月甚至大半年後,還是找不著學習嵌入式的方向,還徘徊在嵌入式開發的大門之外。
  • 嵌入式Linux設備驅動開發之:實驗內容——test驅動
    這個簡單的驅動程序的原始碼如下所示:/*test_drv.c*/#includelinux/module.h>#includelinux/init.h>#includelinux/fs.h>#includelinux/kernel.h>#includelinux/slab.h
  • Linux2.6內核驅動移植參考
    作者:晏渭川 隨著Linux2.6的發布,由於2.6內核做了教的改動,各個設備的驅動程序在不同程度上要 進行改寫。為了方便各位Linux愛好者我把自己整理的這分文檔share出來。該文當列舉 了2.6內核同以前版本的絕大多數變化,可惜的是由於時間和精力有限沒有詳細列出各個 函數的用法。
  • 嵌入式Linux用Qt Designer快速開發
    RAD(快速應用程式開發)是一種高效的軟體開發形式,可以讓用戶在極短的時間裡創建一個圖形化的用戶界面。通常情況下,在一張空白的表單上,開發人員可以通過拖拉或點擊的方式,在窗口的適當位置上添加一些輸入框和按鈕等窗口組件。
  • 嵌入式Linux設備驅動開發之:GPIO驅動程序實例
    linux作業系統文章專題:linux作業系統詳解(linux不再難懂) linux相關文章:linux教程
  • Linux基礎命令之:實驗內容及小結
    本文引用地址:http://www.eepw.com.cn/article/257155.htm2.4實驗內容2.4.1在Linux下解壓常見軟體在Linux下安裝一個完整的軟體(嵌入式Linux的必備工具——交叉編譯工具),掌握Linux常見命令
  • 升級Ubuntu Linux 內核的幾種不同方法
    然後下載符合以下格式的兩個文件(其中 X.Y.Z 是最高版本號):1. linux-image-X.Y.Z-generic-*.deb2. linux-modules-X.Y.Z-generic-.deb在終端中改變到文件所在的目錄,然後執行此命令手動安裝內核:$ sudo dpkg --install *.deb重啟系統,使用新內核
  • 基於Yocto Project的嵌入式應用設計
    但現有的嵌入式Linux市場開始分化,現有的選擇包括半導體廠商提供的實例方案、嵌入式OSV提供商應用的嵌入式Linux產品、嵌入式產品開發商的自有方案和開源項目等。由於缺乏一致性,造成了嵌入式開發高昂的維護成本,不僅嵌入式開發缺乏足夠的專業人員,而且開發過程存在安全漏洞問題。在Yocto Project項目中,可以使用許多高效的工具,從而輕鬆定製嵌入式Linux產品。
  • 數字溫度傳感器DS1621在Linux下的IIC接口驅動設計
    而Linux作為一個原始碼公開、易於裁剪的作業系統,非常適合於嵌入式系統的應用。Linux作業系統下的嵌入式設備驅動,通過IIC總線,實現ARM與外圍模塊間的協同工作,有著廣泛的應用。1.2 選用ARM9晶片功能介紹 MCU採用某公司的S3C2440晶片,S3C2440A是某公司的一款基於ARM920T內核的16/32位RISC嵌入式微處理器,主要面向手持設備以及高性價比、低功耗的應用,且集成了1個IIC總線控制器,能夠方便的與帶有IIC接口外設的通信。
  • 嵌入式linux新手入門手記-準備qt5.4.1開發平臺
    本文引用地址:http://www.eepw.com.cn/article/201603/287664.htm  那麼,我們正式開始搭建qt的開發平臺,我的ubuntu上安裝的是qt5.4.1,並已經寫了一個hello world的qt程序,這個程序非常簡單,就是運行後在桌面上顯示一個窗口,窗口中顯示一行文字「hello world」,以及一個按鍵。滑鼠點擊按鍵退出程序。
  • 如何在MIPS平臺上使用Yocto設備定製的嵌入式系統Linux
    Yocto Project簡介 為描述Yocto Project,我們可以引述網站上的 「Yocto Project提供了一個開源的、高質量的基礎設備和工具,以幫助開發人員創建自己的定製Linux發行版,用於任何硬體架構及跨多個細分市場。Yocto Project旨在為開發人員提供一個良好的開端。
  • 實戰經驗吐血推薦:怎樣在Linux環境下輕鬆實現基於I2C總線的EEPROM...
    筆者在開發基於MPC8250的嵌入式Linux系統的過程中發現I2C總線在嵌入式系統中應用廣泛,I2C總線控制器的類型比較多,對系統提供的操作接口差別也很大。與I2C總線相連的從設備主要有微控制器、EEPROM、實時時鐘、A/D轉換器等。MPC8250處理器正是通過內部的I2C總線控制器來和這些連接在I2C總線上的設備進行數據交換的。
  • 從串口驅動到Linux驅動模型,想轉Linux的必會!
    此外Linux還是一種嵌入式作業系統,可以運行在掌上電腦、機頂盒或遊戲機上。2001年1月份發布的Linux 2.4版內核已經能夠完全支持Intel 64位晶片架構。同時Linux也支持多處理器技術。多個處理器同時工作,使系統性能大大提高。
  • Linux系統的Linux應該怎麼讀?正確讀法在這裡,很多人都讀錯了!
    3、有人綜合網上和linux自己的讀音,概括出幾個自認為最合適也最通用的讀法:/li'n^ks/(「裡那克斯」)或/'li:nэks/(「裡訥克斯」)或/li'nju:ks/(「裡紐克斯」)。4、這幾個應該是誰都聽得懂的。至於哪個比較正宗,當然是linux的原因。但事實上使用linux哪種讀法的人似乎都不在少數。
  • PCBA與嵌入式開發
    基於PCBA板的嵌入式系統的開發嵌入式系統的開發分為嵌入式軟體開發和嵌入式硬體開發,PCBA正是嵌入式硬體開發的基礎。下圖是嵌入式系統開發基本流程:開發流程4.什麼是嵌入式系統(1) 嵌入式系統的基本介紹嵌入式系統應定義為:嵌入到對象體系中的專用計算機系統。嵌入性、專用性與計算機系統是嵌入式系統的三個基本要素。嵌入式開發就是指在嵌入式作業系統下進行開發,一般常用的系統有ucos,linux,android等。
  • 「linux專欄」嘔心瀝血兩天,就為linux中安裝拼音輸入法
    之前呢,小編也百度過,都說直接下載linux版本的搜狗輸入法之後,直接點擊sougoupinyin.deb的安裝文件就能直接安裝。但是,事實卻很扎心,小編的REHL8作業系統系統並不支持這樣的操作,點擊之後反而是打開了安裝包,並沒有進入安裝程序。