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

正文內(nèi)容

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

2025-06-24 01:15本頁(yè)面
  

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