嵌入式系統(tǒng)8-嵌入式Linux_第1頁
嵌入式系統(tǒng)8-嵌入式Linux_第2頁
嵌入式系統(tǒng)8-嵌入式Linux_第3頁
嵌入式系統(tǒng)8-嵌入式Linux_第4頁
嵌入式系統(tǒng)8-嵌入式Linux_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

嵌入式Linux一、嵌入式Linux的定義嵌入式Linux(EmbeddedLinux)是指對Linux經過小型化裁剪后,能夠固化在容量只有幾K字節(jié)或幾M字節(jié)的存儲器芯片或單片系統(tǒng)中,應用于特定嵌入式場合的專用Linux操作系統(tǒng)嵌入式Linux的優(yōu)勢Linux系統(tǒng)是層次結構且內核完全開放強大的網絡支持功能Linux具備一整套工具鏈,容易自行建立嵌入式系統(tǒng)的開發(fā)環(huán)境和交叉運行環(huán)境,并且可以跨越嵌入式系統(tǒng)開發(fā)中仿真工具的障礙Linux具有廣泛的硬件支持特性嵌入式Linux面臨的挑戰(zhàn)1、擴充Linux的實時系統(tǒng)2、改變Linux內核的體系結構3、完善Linux的集成開發(fā)環(huán)境1、擴充Linux的實時系統(tǒng)內核不支持事件優(yōu)先級和搶占實時特性對Linux實時性的擴展可以從兩方面進行:向外擴展(讓實時系統(tǒng)支持的范圍更廣,支持的設備更多)向上擴展(擴充Linux內核,從功能上擴充Linux的實時處理和控制系統(tǒng))RT-Linux的做法Linux本身的任務以及Linux內核本身作為一個優(yōu)先級最低的任務實時任務作為優(yōu)先級最高的任務實時任務以Linux的內核模塊(LoadableKernelModule,LKM)的形式存在2、改變Linux內核的體系結構Monolithic內核體系MicroKernel體系執(zhí)行效率內核的體積升級、維護和移植微內核技術缺點:操作系統(tǒng)的服務模塊在獨立的地址空間運行,使得進程間通信和上下文切換的系統(tǒng)開銷大大增加,降低了系統(tǒng)效率。3、完善Linux的集成開發(fā)環(huán)境Linux在基于圖形界面的特定系統(tǒng)定制平臺的研究上,與Windows操作系統(tǒng)相比還存在差距POSIX實時擴展POSIX(PortableOperatingSystemInterface)是為標準化類UNIX操作系統(tǒng)所必須具有的特征和接口而制定,其思想就是為了增強為類UNIX操作系統(tǒng)編寫的軟件的可移植性二、嵌入式linux開發(fā)最小的嵌入式Linux系統(tǒng)僅需要三個基本元素:引導實用程序Linux微內核,由內存管理、進程管理和定時服務構成初始化過程硬件驅動程序一個或多個應用進程,以提供所需功能面向嵌入式Linux系統(tǒng)的圖形用戶界面MicroWindows/NanoX開放源碼無任何硬件加速能力圖形引擎中存在許多低效算法代碼質量較差OpenGUI可移植性稍差Qt/Embedded

低的程序效率、大的資源消耗MiniGUI嵌入式Linux開發(fā)了解硬件針對所用CPU的編譯器/匯編器/連接器,相應的庫工具,目標文件分析/管理工具,符號查看器編程器,下載工具和查錯器安排內存地址編寫啟動代碼和機器相關代碼:硬件初始化,裝載內核及安裝根文件系統(tǒng)以及開始內核執(zhí)行驅動程序嵌入式Linux的一般開發(fā)步驟:精簡內核系統(tǒng)啟動驅動程序開發(fā)界面開發(fā):將X-Window換成MicroWindows

精簡內核

構造內核的常用命令包括:makeconfig、dep、clean、mrproper、zImage、bzImage、modules、modules_install。使用makeconfig

去掉多余功能。

./Makefile

./arch/i386/kernel/

Makefile

系統(tǒng)啟動

系統(tǒng)啟動的相關文件如下:

./arch/$ARCH/boot/

bootsect.s

./arch/$ARCH/boot/setup.s

./init/main.c

bootsect.S及setup.S

驅動程序在Linux系統(tǒng)里,設備驅動程序提供一組入口點,它們由一個結構在設備驅動程序初始化的時候向系統(tǒng)進行登記,以便系統(tǒng)在適當的時候調用。Linux系統(tǒng)里,通過調用register_chrdev

向系統(tǒng)注冊字符型設備驅動程序。

添加驅動程序1.直接修改系統(tǒng)核心的源代碼,把設備驅動程序加進核心里2.把設備驅動程序作為可加載的模塊,由系統(tǒng)管理員動態(tài)地加載它,使之成為核心的一部分。驅動程序模塊Linux中,模塊可以用C語言編寫,用gcc編譯成目標文件(不進行鏈接,作為*.o文件存在)。為此需要在gcc命令行里加上-c的參數。在成功地向系統(tǒng)注冊了設備驅動程序后(調用register_chrdev),就可以用mknod命令來把設備映射為一個特別文件。其它程序需要使用這個設備的時候,對此特別文件進行操作。

三、linux啟動流程1加電或復位2BIOS的啟動3BootLoader4操作系統(tǒng)初始化1加電或復位冷啟動過程開始,中央處理器進入復位狀態(tài),將內存中的所有數據清零,對內存進行校驗,如果沒錯,CS寄存器將置入FFFF,IP寄存器置入0000,這個CS:IP組合指向的是BIOS的入口。系統(tǒng)就是這樣進入BIOS啟動過程的。2BIOS啟動上電自檢POST(PowerOnSelfTest)對系統(tǒng)內的硬件設備進行監(jiān)測和連接最后,BIOS將從軟盤或硬盤上讀入BootLoader.如果從硬盤啟動,BIOS將讀入該盤的零柱面零磁道1扇區(qū)(MBR),這個扇區(qū)上就放著BootLoader.2BIOS啟動除了啟動程序,BIOS還提供了一組中斷以便于對硬件設備的訪問。我們知道,當鍵盤上的某一鍵被按下,CPU就會產生一個中斷并把這個鍵的信息讀入。在操作系統(tǒng)沒有被裝入以前(Bootsect.S還沒有被讀入),中斷的響應程序由BIOS提供。3BootLoaderBootLoader是一段匯編代碼,存放在MBR中,它的主要作用就是將系統(tǒng)啟動代碼讀入內存。3BootLoader因為在啟動過程中,BIOS會把BootLoader讀入內存,并把控制權交給它。MBR(硬盤啟動)內的代碼就是BootLoader或者它的一部分,為了說明Bootloader的實現,先解釋磁盤結構。3BootLoader一個硬盤在DOS文件系統(tǒng)下可被分為四個基本分區(qū),可以把一個基本分區(qū)定義為一個擴展分區(qū),然后再把這個基本分區(qū)分為一個或多個邏輯分區(qū)。整個硬盤的分區(qū)表存放在硬盤的第一個扇區(qū)(MBR),每個擴展分區(qū)也對應一個分區(qū)表,它存放在該擴展分區(qū)對應的第一個扇區(qū)里。除主引導扇區(qū)外,每個基本分區(qū)和擴展分區(qū)也有自己的引導扇區(qū),結構與MBR相同,但邏輯分區(qū)的引導扇區(qū)不能用于啟動。3BootLoader如果是硬盤啟動,BootLoader將查找主分區(qū)表中標記為活動分區(qū)的表項,把該表項對應的分區(qū)的引導扇區(qū)讀入,然后將控制權交給該扇區(qū)內的引導程序。3BootLoader 如果計算機上裝有不只一個操作系統(tǒng),僅僅MS-DOS的BootLoader無法完成這種工作,需要一個可以多重起動的工具,下面介紹Linux下最常用的LILO.3BootLoaderLILO實際上是一個在Linux環(huán)境下編寫的BootLoader程序,主要功能是引導Linux操作系統(tǒng)的啟動。LILO的功能實際上是有幾個程序共同實現的,它們是:(1)MapInstaller這是LILO用于管理啟動文件的程序。它將bootloader寫入引導分區(qū),創(chuàng)建紀錄文件以映射內核的啟動。(2)Thebootloader它負責把Linux內核或其他操作系統(tǒng)的引導分區(qū)讀入內存。還提供命令行接口,讓用戶選擇從哪個操作系統(tǒng)啟動和加入啟動參數。(3)其他文件:主要包括用于存放MapInstaller記錄的map文件和存放LILO配置信息的配置文件。4進入操作系統(tǒng)BootLoader做了這么多工作,一言以蔽之,只是把操作系統(tǒng)的代碼調入內存,所以當它執(zhí)行完后,自然該把控制權交給操作系統(tǒng),由操作系統(tǒng)的啟動程序來完成剩下的工作。4進入操作系統(tǒng)把控制權交給Setup.S這段程序進入保護模式,同時把控制權交給Head.SHead.S調用/init/main.C中的start_kernel函數,啟動程序從start_kernel()函數繼續(xù)執(zhí)行4進入操作系統(tǒng)

(1)Setup.S首先,Setup.S對已經調入內存的操作系統(tǒng)代碼進行檢查,如果沒錯,它會通過BIOS中斷獲取內存容量,硬盤等信息(實模式)準備讓CPU進入保護模式a.先屏蔽中斷信號b.調用指令lidt和lgdtc.對8259中斷控制器進行編程d.協處理器重新定位完成這幾件事后,Setup.S設置保護模式的標志,重取指令,再用一條跳轉指令jmpi0x100000,KERNEL_CS。進入保護模式下的啟動階段,控制權交給Head.S.4進入操作系統(tǒng)

(2)Head.S也要先做屏蔽中斷一類的工作然后對中斷向量表做一定的處理BootLoader讀入內存的啟動參數和命令行參數,Head.S把它們保存在empty_zero_page頁中檢查CPU類型對協處理器進行檢查

頁初始化,調用setup_paging這個子函數

因為已進入保護模式,段機制的多任務屬性體現

4進入操作系統(tǒng)

(3)main.c中的初始化Head.S調用/init/main.c中的start_kernel函數,把控制權交給它,這個函數是整個操作系統(tǒng)初始化的最重要的函數,一旦它執(zhí)行完,整個操作系統(tǒng)的初始化也就完成了。4進入操作系統(tǒng)

(3)main.c中的初始化計算機在執(zhí)行start_kernel前以進入了保護模式,使處理器完全進入了全面執(zhí)行操作系統(tǒng)代碼的狀態(tài)。但直到目前為止,這都是針對處理器的。而一旦start_kernel開始執(zhí)行,Linux內核就一步步展現。Start_kernel執(zhí)行后,就可以以一個用戶的身份登陸和使用Linux了4進入操作系統(tǒng)

(3)main.c中的初始化較為重要的函數如下Setup_arch()最基本硬件的初始化Paging_init()線性地址空間映射Trap_init()中斷向量表初始化Int_IRQ與中斷有關的初始化Sched_init()進程調度初始化Console_init()對中斷的初始化4進入操作系統(tǒng)

(3)main.c中的初始化對文件系統(tǒng)的初始化Inode_init()i節(jié)點管理機制初始化Name_cache_init()目錄緩存機制初始化Buffer_init()塊緩存機制初始化4進入操作系統(tǒng)

(3)main.c中的初始化啟動到了目前這種狀態(tài),只剩下運行/etc下的啟動配置文件。這時初始化程序并沒有完成操作系統(tǒng)各個部分的初始化,更關鍵的文件系統(tǒng)的安裝還沒有涉及,這是在init進程建立后完成的。就是start_kernel()最后部分內容。4進入操作系統(tǒng)

(4)建立init進程Linux要建立的第一個進程是init進程啟動所需的Shell腳本文件a.Linux系統(tǒng)啟動所必須的b.用戶登陸后自己設定的系統(tǒng)啟動所必須的腳本存放在系統(tǒng)默認的配置文件目錄/etc下。首先調用的是/etc/inittab.四、Linux系統(tǒng)移植的兩大部分內核部分和系統(tǒng)部分(1)內核部分初始化和控制所有硬件設備(嚴格說不是所有,而是絕大部分),為內存管理、進程管理、設備讀寫等工作做好一切準備。(2)系統(tǒng)部分加載必需的設備,配置各種環(huán)境以便用戶可以使用整個系統(tǒng)。

(1)內核移植Linux內核可以視為由五個功能部分組成:進程管理(包括調度和通信)、內存管理、設備管理、虛擬文件系統(tǒng)、網絡需要改動的就是進程管理、內存管理和設備管理中被獨立出來的那部分即硬件相關部分的代碼修改的代碼進程管理底層代碼BIOS接口代碼時鐘、中斷等板上設備支持代碼特殊結構代碼:SMP內存管理(2)系統(tǒng)移植一個最小系統(tǒng)的重建過程類似Linux系統(tǒng)應急盤DiskOnChip包括:init、libc庫、驅動模塊、必需的應用程序和系統(tǒng)配置腳本。五、一些Real-TimeLinux簡介NMTRT-LinuxMontaVistaLinuxucLinuxBlueCat

LinuxOpenWRT,DD-WRTGoogleAndroid1、NMTRT-LinuxNMT是新墨西哥科技大學(NewMexicoTechnology)的縮寫Real-timeLinux的鼻祖硬實時一個實時內核負責處理硬件消息,接管中斷,實時任務可在該內核上直接運行可載入式核心模組(loadablekernelmodule)。

RTAIReal-TimeApplicationInterfaceLKM在Linux上定義了一組RTHAL(Real-TimeHardwareAbstractionLayer)RTAI只使用RTHAL和Linux溝通LXRTRTAI無法直接使用Linux的系統(tǒng)調用解決的方法:使用RT-FIFO將一個RTAIreal-timekernelmodule和真正的Linux進程連接在一起代理:LXRTproxy2、MontaVista

LinuxMontaVista軟件公司全球三大嵌入式Linux操作系統(tǒng)及解決方案供應商之一MontaVista

Linux支持6種體系結構的20款處理器,x86/IA-32、PowerPC、StrongARM、XScale、ARM、MIPSMontaVista

Linux包括KDevelop

IDE、目標配置工具(Target

Configuration

Tool)、庫優(yōu)化工具(Library

Optimizer

tool)。另外,它還提供超過215個應用軟件包。基于Linux

2.4.X穩(wěn)定內核,提供支持x86、MIPS、SH以及PowerPC體系結構的實時搶占式內核??缙脚_開發(fā),支持14個主機開發(fā)環(huán)境,包括Red

Hat、Yellow

Dog

Linux、SuSE、Mandrake、Solaris以及VMWare

on

Windows

NT/2000該版本提供了215多個主機配套工具和嵌入式目標平臺開發(fā)組件軟件包,包括thttpd嵌入式服務器和802.11b無線通信標準附加包。擴展了針對嵌入式跨平臺開發(fā)的各類開放源代碼工具的支持,提供了首個基于KDevelop的MontaVista開發(fā)環(huán)境;支持x86和PowerPC平臺的Linux跟蹤工具(包括內核性能和執(zhí)行分析器);ext3日志文件系統(tǒng)。

3、uClinux專為無(MMU)的微控制器打造的嵌入式Linux操作系統(tǒng)。uClinux已移植支持的微控制器和微處理器摩托羅拉DragonBall

(M68EZ328),

M68328,

M68EN322,

ColdFire,

QUICC

(Quad

Integrated

Communications

Controller)

Motorola

MC68328:

DragonBall集成微處理器

ARM7TDMI

MC68EN302

Axis

ETRAX

Intel

i960

PRISMA

Atari

68k

ETRAX

特點UClinux的內核要比原Linux內核小的多1.

內存管理不能使用處理器的虛擬內存管理技術分頁管理對于內存的訪問是直接的,所有程序中訪問的地址都是實際的物理地址。對內存空間沒有保護,各個進程實際上共享一個運行空間。一個進程在執(zhí)行前,系統(tǒng)必須為進程分配足夠的連續(xù)地址空間,然后全部載入主存儲器的連續(xù)空間中。2.uCLinux兩種可選的的內核加載方式Flash運行方式:把內核的可執(zhí)行映像文件燒到flash上,系統(tǒng)啟動時從flash的某個地址開始逐句執(zhí)行。內核加載方式:把內核的壓縮文件存放在flash上,系統(tǒng)啟動時讀取壓縮文件在內存里解壓,然后開始執(zhí)行,運行速度更快3.uCLinux的romfs文件文件系統(tǒng)內核支持romfs文件系統(tǒng)比支持ext2文件系統(tǒng)需要更少的代碼超級塊(superblock)需要更少的存儲空間。4.uCLinux的應用程序庫uClibc對l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論