freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm9的linux嵌入式系統(tǒng)移植與驅(qū)動開發(fā)-資料下載頁

2025-06-24 01:15本頁面
  

【正文】 士研究生學位論文 第四章 Linux 內(nèi)核的編譯及其移植 16 將控制權(quán)交給 Linux內(nèi)核。Linux 系統(tǒng)初始化過程如圖 所示。京郵電大學碩士研究生學位論文 第三章 BootLoader 的設(shè)計與移植 13 Uboot 里面已經(jīng)提供了串口的驅(qū)動程序,連接終端 DEBUG 口,打印出來的信息如圖 所示: 通過上述信息,我們可以看到 UBoot 的版本是 ,終端內(nèi)存是 32MB,NANDFLASH大小是 64MB,輸入輸出以及錯誤打印都是通過串口,同時還可以看到網(wǎng)口的相關(guān)信息。至此說明 UBoot 已經(jīng)成功的運行了。 本章小結(jié) 本章詳細的介紹了 BootLoader 的源碼結(jié)構(gòu)以及啟動流程,并選擇 Uboot 作為本目標板的引導程序。結(jié)合開發(fā)需求,在理解源碼結(jié)構(gòu)的基礎(chǔ)上為 Uboot 添加 YAFFS2 文件系統(tǒng)燒寫補丁,并最終完成了本目標板上 Uboot 的編譯以及移植。通過 Uboot 啟動界面打印的信息,可以得到該目標板的硬件信息,說明 Uboot 在目標板上已經(jīng)可以成功運行。 圖 UBoot 運行界面圖 UBoot (Jun 23 2011 12:55:03) DRAM: 32 MB NAND: 64 MB In: serial Out: serial Err: serial Net: macb0 macb0: Starting autonegotiation... macb0: Autonegotiation plete macb0: link up, 100Mbps fullduplex (lpa: 0x45e1) Hit any key to stop autoboot: 0 京郵電大學碩士研究生學位論文 第四章 Linux 內(nèi)核的編譯及其移植 14 第四章 Linux 內(nèi)核的編譯及其移植 嵌入式操作系統(tǒng)選擇 本目標終端選擇嵌入式 Linux作為操作系統(tǒng),是因為 Linux 具有如下優(yōu)勢[24]: (1)免費,源代碼公開 嵌入式 Linux源代碼可以免費從互聯(lián)網(wǎng)上下載使用,與此同時,Linux運行的絕大多數(shù)應(yīng)用程序也是可以免費得到,這樣就沒有了企業(yè)產(chǎn)品限制成本的瓶頸。而且對于公開的源代碼,全世界的開發(fā)人員都會共享一些更改的意見,所以對 Linux系統(tǒng)的定制就變得簡單、方便。 (2)可靠性高,適應(yīng)性好 對于 Unix系統(tǒng),可靠性和穩(wěn)定性都是非常突出的,Linux系統(tǒng)也繼承了它的這些優(yōu)點。同時,嵌入式 Linux 系統(tǒng)又是一個跨平臺的系統(tǒng),適用性非常廣泛,市面上幾十種 CPU 基本都支持[25]。另外,在使用過程中對集中器采用的一般是遠程調(diào)試、遠程抄表,Linux內(nèi)核在網(wǎng)絡(luò)方面的優(yōu)勢正好可以滿足這一需求,Linux系統(tǒng)內(nèi)核不僅提供包括十兆、百兆、千兆的以太網(wǎng)絡(luò),還提供了無線網(wǎng)絡(luò)的支持,在實現(xiàn)遠程抄表方面有一定的優(yōu)勢。對嵌入式 Linux內(nèi)核進行裁剪時,裁剪的只是實際的目標板用不到的模塊,所以原 Linux 的可靠性以及穩(wěn)定性是不受影響的。 (3)滿足實時性要求 在實時性方面,嵌入式 Linux 系統(tǒng)同樣也不遜色,可以滿足嵌入式系統(tǒng)對實時性的要求。 (4)成熟的開發(fā)工具 一套成熟的開發(fā)和調(diào)試工具會大大加快嵌入式系統(tǒng)開發(fā)的步伐,嵌入式 Linux 擁有GNU 項目的 C 編譯器和 gdb 源程序級調(diào)試器來調(diào)試程序,用戶能夠方便的開發(fā)嵌入式 Linux的各種應(yīng)用程序。 (5)配置和裁剪內(nèi)核方便、靈活 在嵌入式系統(tǒng)中,考慮到成本以及目標板體積等因素,可供操作系統(tǒng)存儲的空間比較有限,所以對嵌入式系統(tǒng)的體積也有一定的限制,嵌入式 Linux 操作系統(tǒng)可以根據(jù)用戶需要進行裁剪配置內(nèi)核,解決了體積和功能的矛盾。南京郵電大學碩士研究生學位論文 第四章 Linux 內(nèi)核的編譯及其移植 17 (2)第二階段:內(nèi)核的初始化線程 init 表 給出 Start_kernel()函數(shù)初始化線程時所調(diào)用的函數(shù),并且建立起基本的 Linux核心環(huán)境。 表 Start_kernel()函數(shù)中的主要函數(shù)及其描述 函數(shù) 描述 Setup_arch() 主要完成體系結(jié)構(gòu)相關(guān)的硬件的初始化,初始化內(nèi)存管理,判定物理內(nèi)存大小。 Trap_init() init_IRQ 針對 ARM 體系結(jié)構(gòu)的異常和中斷進行初始化。 Sched_init() 該函數(shù)與硬件體系結(jié)構(gòu)關(guān)系不大,負責初始化內(nèi)部定時器、系統(tǒng)進程調(diào)度等,在進行平臺移植時,基本不需要修改。 Softirq_init() 該函數(shù)和硬件體系結(jié)構(gòu)的關(guān)系也不大,負責內(nèi)核較上層部分,涉及軟中斷處理初始化,在進行平臺的移植過程中也基本不需要進行修改 Time_init() 該函數(shù)是平臺移植過程中重要修改的地方,因為該函數(shù)涉及到系統(tǒng)硬件體系結(jié)構(gòu)定時器的初始化,同時要安裝定時器中斷處理程序,配置時鐘中斷的定時器周期。 Console_init() 該函數(shù)是對虛擬控制臺設(shè)備的初始化,負責顯示內(nèi)核的引導信息。該函數(shù)實際是驅(qū)動虛擬出來的終端設(shè)備,該設(shè)備作為內(nèi)核的一個高層組件。 Kmem_cache_init() 該部分與硬件平臺關(guān)系也不大,基本不需要修改,是負責初始化對內(nèi)核的 Slab 存儲管理子系統(tǒng)。 Calibrate_delay() 校準系統(tǒng)延時時鐘,平臺移植時基本不需要修改 Mem_init 初始化內(nèi)存管理子系統(tǒng),平臺移植時基本不需要修改。 函數(shù) start_kernel()側(cè)重初始化內(nèi)核自身的基本架構(gòu),而進入 init 后,進一步所完成的初始化針對更多的是外部各種設(shè)備。從邏輯角度分析,此順序也是成立的。首先在內(nèi)部打好基礎(chǔ),形成基本內(nèi)部架構(gòu),然后從內(nèi)向外,對外部設(shè)備進行初始化操作。 通過上面對 Linux啟動過程的剖析,在對 Linux啟動過程理解的基礎(chǔ)上,進行 Linux內(nèi)核的裁剪和移植。 Linux 內(nèi)核源碼的修改、編譯及移植 基于目標板修改 Linux 內(nèi)核源碼 (1)獲得源碼 在了解 Linux 內(nèi)核結(jié)構(gòu)和系統(tǒng)啟動過程后,就可以針對目標板進行內(nèi)核定制了。在這里我們下載 ,同時在 atmel 的官網(wǎng)上下載 at91 針對該版本 Linux 內(nèi)核的補丁, 提供對 at91sam9260ek 的支持。 南京郵電大學碩士研究生學位論文 第四章 Linux 內(nèi)核的編譯及其移植 18 (2)為 Linux內(nèi)核添加分區(qū)表信息; 實際上,內(nèi)核是使用 MTD 驅(qū)動來實現(xiàn)分區(qū)功能的,MTD(Memory Technology Device),即內(nèi)存技術(shù)設(shè)備,是 Linux 中對 ROM、NOR FLASH、NAND FLASH 等存儲設(shè)備抽象出來的一個設(shè)備層,它向上提供統(tǒng)一的訪問接口:讀寫擦除等;屏蔽了底層硬件的操作、各類存儲設(shè)備的差別。得益于 MTD 設(shè)備的作用,重新劃分 NAND FLASH 的分區(qū)比較簡單[27]。這部分在內(nèi)核源碼的 arch /arm /machat91 / 文件中,是通過 mtd_partition結(jié)構(gòu)體來描述的。內(nèi)核啟動后能正確的掛載文件系統(tǒng),必須正確的定義分區(qū)表信息。針對我們的系統(tǒng)需要,分區(qū)如下: static struct mtd_partition __initdata ek_nand_partition[ ] = { [0]={ name:bootstrap 128KB, offset:0, size:SZ_128K, }, [1]={ name:Uboot 256KB, offset:MTDPART_OFS_APPEND, size:SZ_256K, }, [2]={ name:Uboot env 128KB, offset:MTDPART_OFS_APPEND, size:SZ_128K, }, [3]={ name:Uboot env swap 128KB, offset:MTDPART_OFS_APPEND, size:SZ_128K, }, 南京郵電大學碩士研究生學位論文 第四章 Linux 內(nèi)核的編譯及其移植 19 [4]={ name:kernel 2MB, offset:MTDPART_OFS_APPEND, size:2 * SZ_1M, }, [5]={ name:fs + all, offset:MTDPART_OFS_APPEND, size : MTDPART_SIZ_FULL, }, }。 其 中 的 MTDPART_OFS_APPEND 表 示 當 前 分 區(qū) 緊 接 著 上 一 個 分 區(qū) ,MTDPART_SIZ_FULL 表示當前分區(qū)的大小為剩余的 Flash 空間。 (3)實現(xiàn)目標板 RS485 模式遠程通信,增加 RS485 模式串口設(shè)備; RS485 通信方式支持多節(jié)點、遠距離以及靈敏度高,且只對接口的電氣特性做出規(guī)定,不涉及接插件、電纜或協(xié)議,在此基礎(chǔ)上用戶可以建立自己的高層通信協(xié)議,RS485 已成為工業(yè)應(yīng)用中數(shù)據(jù)傳輸?shù)氖走x。對本集中器也選擇 RS485 作為遠程通信方式。本終端外圍設(shè)備中有七個串口,但是本 Linux 系統(tǒng)內(nèi)核僅支持 4 個串口,所以要在內(nèi)核中增加我們所需要的 RS485 模式的三個串口設(shè)備。首先描述串口設(shè)備的結(jié)構(gòu)體是 at91_uart_config,定義在內(nèi)核的/arch/arm/machat91/ 文件中, static struct at91_uart_config __initdata tms_uart_config = { .console_tty = 0, /* ttyS0 */ .nr_tty = 5, .tty_map = { 4, 0, 1, 2, 3} /* ttyS0, ..., ttyS4*/ }。 修改為: static struct at91_uart_config __initdata tms_uart_config = { .console_tty = 0, /* ttyS0 */ .nr_tty = 7, .tty_map = { 6, 0, 1, 2, 3, 4, 5 } /* ttyS0, ..., ttyS6*/ }。 16 將控制權(quán)交給 Linux內(nèi)核。Linux 系統(tǒng)初始化過程如圖 所示。 (1)第一階段初始化 當引導程序完成加載 Linux 內(nèi)核任務(wù)時,就會將 CPU 的控制權(quán)交給 Linux 內(nèi)核,然后由 CPU 執(zhí)行 Linux 內(nèi)核的核心映像代碼,開始啟動 Linux 系統(tǒng)。如前所述,與體系結(jié)構(gòu)相關(guān)和無關(guān)的部分分別在內(nèi)核代碼的不同目錄下,其中內(nèi)核中與體系結(jié)構(gòu)相關(guān)的代碼部分首先執(zhí)行,負責設(shè)置硬件寄存器、建立內(nèi)存映射以及執(zhí)行與體系結(jié)構(gòu)相關(guān)部分的初始化等,然后轉(zhuǎn)移控制權(quán)執(zhí)行內(nèi)核中與體系結(jié)構(gòu)無關(guān)部分的代碼。以 ARM 為例,在內(nèi)核目錄 arch/中,不同的體系結(jié)構(gòu)對應(yīng)不同的子目錄,例如 arch 下的 arm、powerpc、x86 等子目錄,在每一個這樣的子目錄下都包含/mm、/kernel 和/boot 等子目錄,這些目錄都是某一特定體系結(jié)構(gòu)的代碼,用來完成其對應(yīng)體系結(jié)構(gòu)的如設(shè)置 IRQ、初始化內(nèi)存、啟用高速緩存、設(shè)置內(nèi) 核 頁 面 表 等 操 作 。 首 先 系 統(tǒng) 要 解 壓 Linux 鏡 像 文 件 , 這 一 步 主 要 是 由“arch /arm/boot /pressed”目錄下的 head.、 文件完成,依靠解壓函數(shù)depress_kernel()將壓縮的內(nèi)核解壓到內(nèi)存中,該函數(shù)是由 在 文件中調(diào)用的。然后再直接跳轉(zhuǎn)到的程序入口 arch/arm/kernel/。 主要負責系統(tǒng)參數(shù)方便被內(nèi)核代碼讀取,這些參數(shù)包括內(nèi)存、磁盤等將被拷貝至特別的內(nèi)存中。最后,調(diào)用 start_kernel()函數(shù)開始下一階段的初始化。 引導程序開始運行 引導程序?qū)⒉僮飨到y(tǒng)內(nèi)核讀入內(nèi)存 內(nèi)核開始運行,并初始化系統(tǒng) 初始化內(nèi)核和硬件 初始化設(shè)備驅(qū)動 掛載根文件系統(tǒng) 運行初始化程序 開始運行用戶進程 圖 Linux 系統(tǒng)初始化的基本過程 南京郵電大學碩士研究生學位論文 第四章 Linux 內(nèi)核的編譯及其移植 20 增加串口設(shè)備到七個,在 Linux
點擊復制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1