嵌入式Linux應(yīng)用完全開發(fā)手冊_第1頁
嵌入式Linux應(yīng)用完全開發(fā)手冊_第2頁
嵌入式Linux應(yīng)用完全開發(fā)手冊_第3頁
嵌入式Linux應(yīng)用完全開發(fā)手冊_第4頁
嵌入式Linux應(yīng)用完全開發(fā)手冊_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、嵌入式Linux應(yīng)用完全開發(fā)手冊9嵌入式Linux應(yīng)用完全開發(fā)手冊終端概述在Linux中,TTY (終端)是一類字符設(shè)備的統(tǒng)稱,包括了 3中類型:控制臺、 串口、偽終端??刂婆_:供內(nèi)核使用的終端為控制臺。控制臺在 Linux啟動時,通過命令 con sole=指定,如果沒有指定控制臺,系把第一個注冊的終端作為控制臺??刂婆_是一個虛擬的終端,它必須映射到真正的終端上。控制臺可以簡單的理解為printk輸出的地方。控制臺是個只輸出的設(shè)備,功能很簡單,只能在內(nèi)核中訪問。進程四要素有段程序供其執(zhí)行。這段 程序不一定是某個進程所專 有,可以與其它進程共用。有進程專用的內(nèi)核空間 堆棧。在內(nèi)核中有一個 ta

2、sk_struct數(shù)據(jù)結(jié)構(gòu),即通 常所說的“進程控制塊”。有 了這個數(shù)據(jù)結(jié)構(gòu),進程才能 成為內(nèi)核調(diào)度的一個基本單位接受內(nèi)核的調(diào)度 有獨立的用戶空間進程調(diào)度調(diào)度概念:從就緒的進程中選出最合適的一個進程執(zhí)行。調(diào)度策略-SCHED_NORMAL(SCHED_OTHER):普通的分時進程。-SCHED_FIFO :先進先出的實時調(diào)度-SCHED_RR :時間片輪轉(zhuǎn)實時進程-SCHED_BATCH :批處理進程-SCHED_IDLE :只有在系統(tǒng)空閑時,才能夠被調(diào)度執(zhí)行的進程進程管理特點:動態(tài)性、并發(fā)性、獨立性、異步性狀態(tài)編譯說明編譯選項:-c編譯不鏈接。-g帶有調(diào)試信息。-I .h文件所在目錄-預(yù)處理

3、:語法分析,例如:將宏定義展開。-編譯:*.c文件編譯成*.s文件。-匯編:*.s文件編譯成*0文件。-鏈接:多個*0文件鏈接成執(zhí)行文件。 Linux系統(tǒng)調(diào)用和C庫Linux系統(tǒng)調(diào)用是依賴于系統(tǒng)的,而 C庫在任何操作系統(tǒng)下,調(diào)用都是相同信號類型 SIGHUP:從終端上發(fā)出結(jié)束信號 SIGINT:來自鍵盤的中斷信號(Ctrl-C) SIGKILL:該信號結(jié)束接收信號的進程。 SIGTERM:kill命令發(fā)出的信號。 SIGCHLD:標(biāo)識子進程停止或結(jié)束的信號。 SIGSTOP:來自鍵盤(Ctrl-Z )或調(diào)試程序停止執(zhí)行的信號。SIGKILL和SIGSTOP不能被忽略,因為它們是超級用戶提供了了

4、一種終止或停 止進程的方法。文件系統(tǒng)文件系統(tǒng)類型根據(jù)設(shè)備的硬件特性、系統(tǒng)需求,不同的文件系統(tǒng)類型有不同的應(yīng)用場合。在嵌入式Linux應(yīng)用中,主要的存儲設(shè)備為:RAM和FLASH,常用的基于存儲 設(shè)備的文件系統(tǒng)類型包括:jffs2、yaffs、cramfs、ramdisk、ramfs等。文件系統(tǒng)是對存儲設(shè)備上的文件進行存儲和組織的機制,Linux支持多種文件系統(tǒng),可以分為:磁盤文件系統(tǒng),如:ext2 Flash 文件系統(tǒng),如:jffs2,yaffs2網(wǎng)絡(luò)文件系統(tǒng):如:NFS特殊文件系統(tǒng),如:/sys /proc根文件系統(tǒng)根文件系統(tǒng):是Linux啟動時的第一個文件系統(tǒng) 。沒有根文件,Linux無法

5、正常啟動。根文件系統(tǒng)由一系列目錄 組成,目錄中包含了應(yīng)用程序、C庫、以及相關(guān)配置文件。總線的功能:提供時鐘分配/管理地址響應(yīng)中斷傳輸數(shù)據(jù)傳輸控制信號全速、高速、低速三種時鐘。(FCLK,HCLK,PCLK)。arm AMBA 總線結(jié)構(gòu) AHB/APBAHB總線上有內(nèi)存,NAND控制器等高速設(shè)備。HCLKAPB總線上有UMARK設(shè)備控制器等慢速設(shè)備。PCLKARM三級流水結(jié)構(gòu)取指:把指令從程序存儲器中取出來。取指是在處理器內(nèi)核和程序存儲器之 間進行的。譯碼:把讀到內(nèi)核的指令進行解釋,也就是把二進制的指令變換成電路的動 作。執(zhí)行:即按照指令的要求把門電路的動作送到指定的目標(biāo)地址。ARM在執(zhí)行一條指

6、令的時候,PC的指針是在取指的那條指令的。程序:1、代碼段:指令2、數(shù)據(jù)段:有初始值(并且不為 0)的全局、靜態(tài)變量3、 BSS段(Block Started by Symbol ):初始值為0或無初始值的全局、靜態(tài)變量。BSS ( Block Started by Symbol )通常是指用來存放程序中未初始化的全局 變量和靜態(tài)變量的一塊內(nèi)存區(qū)域。特點是:可讀寫的,在程序執(zhí)行之前BSS段會 自動清0。所以,未初始的全局變量在程序執(zhí)行之前已經(jīng)成0 了。注意和數(shù)據(jù)段的區(qū)別,BSS存放的是未初始化的全局變量和靜態(tài)變量,數(shù) 據(jù)段存放的是初始化后的全局變量和靜態(tài)變量。UNIX下可使用size命令查看可

7、執(zhí)行文件的段大小信息。如 size a.out。4、棧區(qū)域。1、程序運行是應(yīng)該位于它的鏈接地址2、硬件決定了程序一開始從0運行,需要重定位(從0開始的8k代碼)。重定位:前面的一小段代碼(從 0開始的8k代碼),復(fù)制到它的鏈接地址3、前面8k代碼為什么能正常運行:因為是位置無關(guān)碼寫的。10端口和10內(nèi)存I0端口 :當(dāng)一個寄存器或內(nèi)存位于io地址空間時,為10端口。10內(nèi)存:當(dāng)一個寄存器或內(nèi)存位于內(nèi)存地址空間時,為I0內(nèi)存。MMU管理權(quán)限管理:程序不能訪問內(nèi)核或其它程序的內(nèi)存空間。地址映射:應(yīng)用程序訪問的“虛擬地址”,而數(shù)據(jù)真正存放在真實的物理地址。 虛擬地址和真實地址的轉(zhuǎn)換是由 MMU實現(xiàn)的。

8、物理地址:指出現(xiàn)在CPU地址總線上的尋址物理內(nèi)存的 地址信號,是地址 變換的最終結(jié)果。線性地址(虛擬地址):是在32位CPU架構(gòu)下,可以表示4G的地址空間,用 16 進制表示就是:OxOOOOOOOO-OxFFFFFFFF。邏輯地址:程序經(jīng)過編譯后,出現(xiàn)在匯編程序中的地址。地址轉(zhuǎn)換:CPU要將一個邏輯地址轉(zhuǎn)換為物理地址,需要兩步:-首先,CPU利用段式內(nèi)存管理單元,將邏輯地址轉(zhuǎn)換成線性地址。-再利用頁式內(nèi)存管理單元,把線性地址最終轉(zhuǎn)換成物理地址。段式管理單元:16位CPU內(nèi)部擁有20位地址線,它的尋址范圍就是 220, 也就是1M的地址空間。但16位CPU用于存放地址寄存器(IP,SP.等)只

9、有 16位,因此只能訪問65536個存儲單元,64K。頁式管理單元:從管理和效率的角度出發(fā),線性地址被分為固定長度的組,稱為“頁(page)”,例如32位的機器,線性地址最大可為4G,如果4K為一 個頁來劃分,這樣整個線性地址就被劃分 220個頁。另一類“頁”,稱為物理頁,或者是“頁框、頁幀”。分頁單元把所有的物理內(nèi)存 也劃分為固定長度的管理單位,它的長度一般與線性地址頁是相同的。分頁管理1、分頁單元中,頁目錄的地址放在 CPU的CR3寄存中,是進行地址轉(zhuǎn)換的開 始點。2、每一個進程,都有其獨立的虛擬地址空間,運行一個進程首先需要將它的的 也目錄地址放到CR3寄存中,將其它進程的地址保存起來。

10、3、 每個32位的線性地址被劃分為三個部分:頁目錄索引(10位)、頁表索引(10 位)、頁偏移(12位)。依據(jù)以下步驟進行地址轉(zhuǎn)化:1、 裝入進程的頁目錄地址(操作系統(tǒng)在調(diào)度進程時,把這個地址裝入CR3 )。2、根據(jù)線性地址的前10位,在頁目錄中,找到對應(yīng)的索引項, 頁目錄中的項 是一個頁表的地址。3、根據(jù)線性地址的中間10位,在頁表中找到頁的起始地址。4、將頁的起始地址 與線性地址的最后12位相加,得到物理地址。 內(nèi)存使用slab管理工具內(nèi)棣空I可進彈貢表free pae<s)內(nèi)核頁釈Vmallot分曾己區(qū)內(nèi)核程濟get_fiie#_pag#t:£)=«位置無關(guān)碼1

11、、使用B或bl跳轉(zhuǎn)2、不訪問全局靜態(tài)變量異常處理中斷是一種異常-CPU 上電,CPU處于SVC模式,-當(dāng)發(fā)生了中斷,CPU就進入IRQ模式,并且切換到自己的 R13和R14,并跳到中斷向量的相 應(yīng)地址執(zhí)行。 SWI中斷處理硬件處理:1、CPU進入SVC模式2、把之前模式的CPSR->SPSR_svc3、切換到 R13_svc,R14_svc4、下一條指令->R145、跳轉(zhuǎn)到地址8軟件處理:1、在地址8,寫一條跳轉(zhuǎn)指令2、保存現(xiàn)場3、處理中斷4、恢復(fù)現(xiàn)場Idmia sp!,r0-r12,pcA A :表示將 spsr 恢復(fù)到 cpsr 中。 SWI指令的作用用戶應(yīng)用程序open、re

12、ad、write、print函數(shù)等用戶應(yīng)用運行在用戶態(tài),經(jīng) 常用到內(nèi)核的資源,如何調(diào)用內(nèi)核呢?就是調(diào)用SWI指令,CPU就會響應(yīng)中斷, 跳到相應(yīng)的中斷服務(wù)程序,訪問內(nèi)核資源。未定義指令用于調(diào)試等待隊列Linux驅(qū)動程序設(shè)計中,可以使用等待隊列來實現(xiàn)進程的阻塞,等待隊列可看作保存進程的容器,在阻塞進程時,將進程放入等待隊列,喚醒進程時,從等待隊列中取出進程。如何看電路圖1.GPIP和門電路1.1輸入、輸出引腳、上拉 /下拉電阻、三極管1.2與、或、非門1.3中斷三極管:PNP(正負(fù)正),NPN (負(fù)正負(fù))。上拉/下拉電阻:確定懸空的引腳一個狀態(tài)。 怎么用接口1、配置引腳功能。2、讀出某寄存器 輸

13、入。設(shè)置寄存器-輸出2.協(xié)議類雙方約定信號的協(xié)議嵌入式Linux應(yīng)用完全開發(fā)手冊雙方滿足時序的要求2.1 UART2.2 I2C :每個I2C設(shè)備都有一個地址。是自己的地址才回應(yīng)2.3 SPI2.4 NAND2.5 LCD3類似內(nèi)存接口類3.1 NOR、SDRAM、網(wǎng)卡3.2不同位寬外設(shè)的接線、訪問過程3.3如何確定訪問地址、設(shè)置內(nèi)存控制器4綜合理解原理圖Linux內(nèi)核簡介Linux體系結(jié)構(gòu) Linux系統(tǒng)構(gòu)成GNU/Hardware PlalfonnUser SpaceSpace-Linux由用戶空間和內(nèi) 核空間兩部分。-為什么分為用戶空間和內(nèi)核空間?出于安全考慮。通過系統(tǒng)調(diào)用和硬件中 斷從

14、用戶空間進入內(nèi)核 空間。 Linux系統(tǒng)構(gòu)成 -SCI :用戶進入內(nèi)核的入口。-PM :主要是進程調(diào)度和進程間通信。-MM :分配、回收、內(nèi)存的地址轉(zhuǎn)換。-Arch :和CPU相關(guān)的管理。將PM、MM、NS與CPU相關(guān)的代碼集成,減少 了移植的難度。-VFS :虛擬文件系統(tǒng)。隱藏了各種具體文件系統(tǒng)的細(xì)節(jié),為文件系統(tǒng)提供了統(tǒng) 一的接口。NS :網(wǎng)絡(luò)協(xié)議棧。-DD :設(shè)備驅(qū)動。 Linux內(nèi)核目錄結(jié)構(gòu)arch目錄:內(nèi)核支持的每種CPU體系,在該目錄下都有對應(yīng)的子目錄。每個CPU的子目錄,有分為boot , mm , kernel等子目錄,分別控制系統(tǒng)引導(dǎo),內(nèi)存管理,系統(tǒng)調(diào)用等。block目錄:部分

15、塊設(shè)備驅(qū)動程序。driver目錄:設(shè)備驅(qū)動程序。fs目錄:存放各種文件系統(tǒng)的實現(xiàn)代碼。每個子目錄對應(yīng)一種一種文件系統(tǒng)的實現(xiàn),公用的源代碼用于實現(xiàn)虛擬文件系統(tǒng)(VFS )。include目錄:內(nèi)核所需的頭文件。與平臺無關(guān)的頭文件在include/linux子目錄下,與平臺相關(guān)的頭文件存放在相應(yīng)的子目錄中。lib目錄:庫文件代碼,自己實現(xiàn)的庫的源代碼也放在這里。mm目錄:mm目錄中的文件用于實現(xiàn)內(nèi)存管理中與體系結(jié)構(gòu)無關(guān)的部分。與體系結(jié)構(gòu)相關(guān)的代碼在arch目錄中。net目錄:用于網(wǎng)絡(luò)協(xié)議的實現(xiàn)代碼。子目錄用于實現(xiàn)具體協(xié)議的代碼。srcipts目錄:配置內(nèi)核的腳本usr目錄:cpio命令的實現(xiàn)。內(nèi)核

16、編譯清除臨時文件、中間文件和配置文件make clean :清除大部分編譯產(chǎn)生的中間文件,保留config文件。make mrproper :清除所有編譯產(chǎn)生的中間文件和config文件。make distclean : mrprope葉和備份文件和補丁文件。配置1、 make menuconfig(完整配置)2、使用默認(rèn)配置在/arch/arm找到相似的配置文件make xxxdefc onfigmake menuconfig.c文件中的宏定義來源于autoconfig.h 文件 子目錄中的 Makefile的宏定義來源于auto.config文件autoconfig.h、auto.conf

17、ig 文件中的定義來源于.configmake uImage 時,.config 文件自動生成 autoconfig.h 禾口 auto.config 文件3、使用廠家提供的配置文件嵌入式軟件層次一個嵌入式系統(tǒng),從軟件的角度看分為三個層次:引導(dǎo)加載程序包括固化在固件(firmware )中的boot程序(可選)和 Bootloader兩大部 分。 Linux內(nèi)核特定式嵌入式平臺的定制內(nèi)核。文件系統(tǒng)包括了系統(tǒng)命令和應(yīng)用程序。BootLoader的啟動流程 stage1-硬件初始化-CPU內(nèi)部的寄存器 -為加載Bootloader的stage2準(zhǔn)備RAM空間。-拷貝Bootloader的stage2代碼到RAM空間中-設(shè)置堆/棧 -跳轉(zhuǎn)到stage2的C入口點 stage2-初始化本階段要使用的硬件設(shè)備 -板在的硬件,比如:串口、網(wǎng)卡等。-將內(nèi)核映像和根文件系統(tǒng)映像從flash中讀到RAM中。-調(diào)用內(nèi)核。U-boot目錄結(jié)構(gòu) board目錄和開發(fā)板有關(guān)的文件。每一個開發(fā)板都以一個子目錄出現(xiàn)在當(dāng)前目錄中,比如: SMDK2410,子目錄中存放于開發(fā)板相關(guān)的文件。 Com mon 目錄實現(xiàn)Uboot支持的命令 CPU與特定CPU架構(gòu)相關(guān)的代碼,每一款Uboot下支持的CPU在該目錄下對

溫馨提示

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

評論

0/150

提交評論