《微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)》cha.ppt_第1頁(yè)
《微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)》cha.ppt_第2頁(yè)
《微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)》cha.ppt_第3頁(yè)
《微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)》cha.ppt_第4頁(yè)
《微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì)》cha.ppt_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

微處理器系統(tǒng)結(jié)構(gòu)與嵌入式系統(tǒng)設(shè)計(jì) 第十一章基于ARM微處理器的軟件系統(tǒng)設(shè)計(jì) 2020 2 6 2 第十一章基于ARM的軟件系統(tǒng)設(shè)計(jì) 1 嵌入式軟件系統(tǒng)結(jié)構(gòu)及工作流程2 嵌入式軟件系統(tǒng)的引導(dǎo)和加載S3C2440啟動(dòng)過程 BootLoader基本概念 U boot的分析與移植3 嵌入式Linux操作系統(tǒng)嵌入式操作系統(tǒng) 嵌入式Linux內(nèi)核4 Linux下驅(qū)動(dòng)程序設(shè)計(jì)示例打開串口 設(shè)置串口 讀寫串口 關(guān)閉串口 第十一章結(jié)束 2020 2 6 4 嵌入式軟件系統(tǒng)結(jié)構(gòu) 簡(jiǎn)單的嵌入式應(yīng)用若嵌入式系統(tǒng)的功能需求比較簡(jiǎn)單 嵌入式系統(tǒng)軟件只需完成較簡(jiǎn)單的監(jiān)控 驅(qū)動(dòng)和處理功能 則不需要嵌入式操作系統(tǒng)的支持 如基于8051的應(yīng)用 玩具 家電 汽車等的控制系統(tǒng)復(fù)雜的嵌入式應(yīng)用若嵌入式系統(tǒng)的功能需求比較復(fù)雜 需要圖形用戶界面 網(wǎng)絡(luò)管理 存儲(chǔ)管理 進(jìn)程 線程管理或需要支持二次開發(fā)等 則通過嵌入式操作系統(tǒng)的幫助 可以加快嵌入式系統(tǒng)軟件的開發(fā)進(jìn)度和可靠性 如基于ARM的應(yīng)用 手機(jī) PDA 2020 2 6 5 簡(jiǎn)單嵌入式系統(tǒng)軟件結(jié)構(gòu) 不需要使用操作系統(tǒng) 基于裸機(jī)開發(fā)典型單任務(wù)程序架構(gòu) 1 從CPU復(fù)位時(shí)的指定地址開始執(zhí)行 2 跳轉(zhuǎn)至匯編代碼startup處執(zhí)行 3 跳轉(zhuǎn)至用戶主程序main執(zhí)行 在main中完成 a 初試化各硬件設(shè)備 b 初始化各軟件模塊 c 進(jìn)入死循環(huán) 無(wú)限循環(huán) 調(diào)用各模塊的處理函數(shù) 2020 2 6 6 用戶主程序和各模塊的處理函數(shù)都以C語(yǔ)言完成 用戶主程序最后都進(jìn)入了一個(gè)死循環(huán) 直到系統(tǒng)停電或者出現(xiàn)重大錯(cuò)誤 voidmain void 變量 參數(shù)等的定義及說明X init 系統(tǒng)初始化 一般為匯編代碼While 1 X 超級(jí)循環(huán) 2020 2 6 7 復(fù)雜嵌入式系統(tǒng)軟件的一般結(jié)構(gòu) ARM M I O HAL 底層封裝 部分由OS提供 BOOTLOAD 2020 2 6 8 復(fù)雜嵌入式系統(tǒng)軟件工作流程 2020 2 6 9 S3C2440啟動(dòng)方式 三星公司的S3C2440支持NorFlash和NandFlash啟動(dòng) 可以通過硬件跳線 引腳OM 1 0 設(shè)置啟動(dòng)方式 具體含義如下 OM 1 0 00時(shí) 處理器從NANDFlash啟動(dòng)OM 1 0 01時(shí) 處理器從16位寬度的NorFlash啟動(dòng)OM 1 0 10時(shí) 處理器從32位寬度的NorFlash啟動(dòng)OM 1 0 11時(shí) 處理器從TestMode啟動(dòng) 2020 2 6 10 S3C2440NandFlash S3C2440NandFlash啟動(dòng)過程 在系統(tǒng)上電后 NandFlash控制器會(huì)自動(dòng)的把NandFlash上的前4KU BOOT數(shù)據(jù)搬移到內(nèi)部SRAM的地址最低端 此SRAM被稱為Steppingstone CPU從內(nèi)部RAM的0 x00000000位置開始啟動(dòng)并在uboot啟動(dòng)代碼的前4K里完成S3C2440的核心配置 然后把U BOOT剩余部分搬到RAM中運(yùn)行 2020 2 6 11 引導(dǎo)程序BootLoader 是嵌入式系統(tǒng)在加電啟動(dòng)后執(zhí)行的第一段代碼 功能類似pc機(jī)的BIOS和OSLoader 通常需要固化在目標(biāo)板中 主要負(fù)責(zé)CPU 存儲(chǔ)器及相關(guān)硬件的初始化 以及將裝載操作系統(tǒng)映像到內(nèi)存中 然后跳轉(zhuǎn)到規(guī)定的地址啟動(dòng)操作系統(tǒng)運(yùn)行 Bootloader是嚴(yán)重依賴硬件而實(shí)現(xiàn)的 每一種不同體系結(jié)構(gòu)的處理器都有不同的Bootloader 甚至同一種處理器的外圍硬件配置不同 其Bootloader也有差別 因此開發(fā)特定的Bootloader是構(gòu)建嵌入式linux系統(tǒng)之前的一項(xiàng)必要的基礎(chǔ)工作 2020 2 6 12 Bootloader的運(yùn)行步驟 Stage1 匯編實(shí)現(xiàn) 基本硬件設(shè)備初始化 CPU時(shí)鐘頻率 寄存器 存儲(chǔ)器數(shù)據(jù)寬度 訪問周期 刷新周期 中斷系統(tǒng) I O端口等 為第二階段準(zhǔn)備RAM空間 設(shè)置堆棧 復(fù)制第二階段代碼到RAM中 并跳轉(zhuǎn)到第二階段入口點(diǎn)Stage2 C實(shí)現(xiàn) 初始化本階段要使用的硬件設(shè)備 實(shí)現(xiàn)對(duì)板級(jí)驅(qū)動(dòng)的支持 檢測(cè)系統(tǒng)內(nèi)存映射 將內(nèi)核鏡像和根文件系統(tǒng)鏡像從flash讀到RAM中 為內(nèi)核設(shè)置啟動(dòng)參數(shù) 將PC指針指向內(nèi)核的入口處 調(diào)用內(nèi)核 掛載文件系統(tǒng) 2020 2 6 13 Linux環(huán)境下BootLoader種類 2020 2 6 14 U boot的分析與移植 U boot全稱UniversalBootLoader 支持ARM體系等多種處理器 包含常見的外設(shè)的驅(qū)動(dòng) 是一個(gè)開源的 功能強(qiáng)大的板極支持包 由德國(guó)DENX軟件工程中心的WolfgangDenk維護(hù) U boot啟動(dòng)時(shí)處于正常的啟動(dòng)加載模式 但是它會(huì)延時(shí)指定時(shí)間 單位秒 等待終端用戶按下任意鍵而切換到下載模式 如果在指定時(shí)間內(nèi)用戶沒有按鍵 則繼續(xù)啟動(dòng)操作系統(tǒng) 2020 2 6 15 U boot主要包括以下目錄 board 該目錄存放了U Boot支持的一些已有開發(fā)板的信息 每一個(gè)開發(fā)板都以一個(gè)子目錄出現(xiàn)在當(dāng)前目錄中 如SMDK2410子目錄中存放與2410開發(fā)板相關(guān)的配置文件 但由于自行設(shè)計(jì)的目標(biāo)板即使與已有開發(fā)板使用相同處理器 但其他硬件配置不一定相同 所以需要參考該目錄下的內(nèi)容來進(jìn)行修改 例如根據(jù)使用的Flash存儲(chǔ)器的寬度和容量 可以修改flash c中對(duì)應(yīng)的參數(shù) common 該目錄存放的是U Boot命令行界面下支持的各條命令的實(shí)現(xiàn)源碼 每一條命令都對(duì)應(yīng)一個(gè)文件 例如bootm命令對(duì)應(yīng)就是cmd bootm c 通常主要關(guān)心與內(nèi)核引導(dǎo)有關(guān)的cmd boot c和cmd bootm c等代碼 cpu 該目錄存放了U Boot支持的CPU類型 每一款U Boot下支持的CPU在該目錄下對(duì)應(yīng)一個(gè)子目錄 比如S3C2440A采用的是ARM920T內(nèi)核 則子目錄arm920t下即是對(duì)該處理器核的支持源碼 CPU相關(guān)的文件主要是初始化一個(gè)執(zhí)行環(huán)境 包括中斷的初始化 其中有一個(gè)重要文件start s 該文件是一個(gè)匯編源文件 它是整個(gè)U Boot執(zhí)行的第一段代碼 它的功能是將整個(gè)U Boot目標(biāo)代碼重定位 也就是將U Boot轉(zhuǎn)移至內(nèi)存中去運(yùn)行 2020 2 6 16 U boot主要包括以下目錄 drivers U Boot支持的各種設(shè)備驅(qū)動(dòng)程序都放在該目錄 比如各種網(wǎng)卡 支持CFI的Flash 串口和USB等 fs 該目錄存放U Boot支持的文件系統(tǒng) 例如fat fdos jffs2 cramfs ext2和reiserfs等 include U Boot使用的頭文件 還有對(duì)各種硬件平臺(tái)支持的匯編文件 系統(tǒng)的配置文件和對(duì)文件系統(tǒng)支持的文件 該目錄下configs目錄有與開發(fā)板相關(guān)的配置頭文件 該目錄下的asm目錄有與CPU體系結(jié)構(gòu)相關(guān)的頭文件 ARM對(duì)應(yīng)的是asm arm lib xxx 與體系結(jié)構(gòu)相關(guān)的庫(kù)文件 與ARM相關(guān)的庫(kù)放在lib arm中 net 與網(wǎng)絡(luò)協(xié)議棧相關(guān)的代碼 BOOTP協(xié)議 TFTP協(xié)議 RARP協(xié)議和NFS文件系統(tǒng)的實(shí)現(xiàn) tools 生成U Boot的工具 如 mkimage crc等等 doc 文檔目錄 U Boot有非常完善的文檔 推薦參考閱讀 2020 2 6 17 U boot的運(yùn)行過程分析 U Boot的階段一代碼通常放在start s文件中 用匯編語(yǔ)言寫成 其主要功能是設(shè)置處理器狀態(tài) 初始化中斷和內(nèi)存時(shí)序 對(duì)整個(gè)U Boot目標(biāo)代碼進(jìn)行重新定位 階段一剛開始的代碼是處理器的異常處理向量表 globl start 系統(tǒng)復(fù)位的位置 由U Boot ld決定 start breset 0 x00000000 各個(gè)異常向量對(duì)應(yīng)的跳轉(zhuǎn)代碼ldrpc undefined instruction 0 x00000004 未定義指令異常ldrpc software interrupt 0 x00000008 軟件中斷異常ldrpc prefetch abort 0 x0000000c 預(yù)取中止異常ldrpc data abort 0 x00000010 數(shù)據(jù)中止異常ldrpc not used 0 x00000014 未使用ldrpc irq 0 x00000018 中斷異常ldrpc fiq 0 x0000001c 快速中斷異常 當(dāng)發(fā)生各類異常時(shí) CPU將執(zhí)行interrupts c中對(duì)應(yīng)定義的中斷處理函數(shù) 2020 2 6 18 U boot的運(yùn)行過程分析 reset setthecputoSVC32mode mrsr0 cpsrbicr0 r0 0 x1forrr0 r0 0 xd3msrcpsr r0 進(jìn)入SVC管理模式 關(guān)閉中斷和快速中斷 關(guān)閉看門狗 禁止中斷 配置處理器內(nèi)部時(shí)鐘 配置內(nèi)存區(qū)控制寄 存器 代碼搬移ldrpc start armboot 轉(zhuǎn)C代碼 stage1結(jié)束的 start armboot wordstart armboot 階段二 start armboot 在board c中定義 是Bootloader中的C語(yǔ)言開始的函數(shù) 也是整個(gè)啟動(dòng)代碼中C語(yǔ)言的主函數(shù) 它類似于Linux內(nèi)核的start kernel 是一種系統(tǒng)初始化的接口函數(shù) 調(diào)用一系列初始化函數(shù)完成CPU的基本設(shè)置 開發(fā)板初始化 中斷向量初始化 環(huán)境變量初始化 串口初始化等 配置可用的Flash區(qū) 內(nèi)存初始化 I2C LCD video 音頻等外圍設(shè)備初始化 網(wǎng)絡(luò)設(shè)備初始化等等 最后進(jìn)入U(xiǎn) Boot命令行 2020 2 6 19 嵌入式操作系統(tǒng) 2020 2 6 20 嵌入式實(shí)時(shí)操作系統(tǒng)RTlinux及其他嵌入式實(shí)時(shí)LinuxuC OSIIeCOSVxworks windriversystems公司 QNX QNXsoftwaresystems公司 pSOSOS 9VRTXThreadX嵌入式非實(shí)時(shí)操作系統(tǒng)一些嵌入inux系統(tǒng)WindowsCE Embeddedwindowsxp Microsoft公司 PalmOS Palm公司 EPOC Symbian公司 2020 2 6 21 Linux嵌入式操作系統(tǒng) Linux是一個(gè)類Unix Unix like 的 免費(fèi)的 源代碼開放的 符合POSIX PortableOperatingSystemInterfaceStandard 標(biāo)準(zhǔn)規(guī)范的操作系統(tǒng) 嚴(yán)格來說 Linux指由LinuxTorvalds維護(hù)的 及通過主要鏡像網(wǎng)站發(fā)布的 內(nèi)核 而整個(gè)Linux系統(tǒng)的其它大部分都建立在GNU軟件之上 嵌入式Linux內(nèi)核為特殊的硬件配置 或?yàn)榱酥С痔貏e的應(yīng)用而經(jīng)過特別的裁剪的修改過的Linux內(nèi)核 通常具有不同于工作站與服務(wù)器的內(nèi)核配置 嵌入式Linux系統(tǒng)基于Linux內(nèi)核的嵌入式系統(tǒng) 嵌入式Linux發(fā)行套件開發(fā)嵌入式Linux系統(tǒng)的平臺(tái) 各種為了在嵌入式系統(tǒng)中使用而剪裁過的應(yīng)用軟件 2020 2 6 22 Linux內(nèi)核的發(fā)展歷史 1991年11月 芬蘭赫爾辛基大學(xué)的學(xué)生LinusTorvalds寫了個(gè)小程序 取名為L(zhǎng)inux 放在互聯(lián)網(wǎng)上 他表達(dá)了一個(gè)愿望 希望借此搞出一個(gè)操作系統(tǒng)的 內(nèi)核 來 這完全是一個(gè)偶然事件 1993 在一批高水平黑客的參與下 誕生了Linux1 0版 1994年 Linux的第一個(gè)商業(yè)發(fā)行版Slackware問世 1996年 美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)局的計(jì)算機(jī)系統(tǒng)實(shí)驗(yàn)室確認(rèn)Linux版本1 2 13 由OpenLinux公司打包 符合POSIX標(biāo)準(zhǔn) 2001年 Linux2 4版內(nèi)核發(fā)布 2003年 Linux2 6版內(nèi)核發(fā)布 Linux內(nèi)核版本號(hào)由3位數(shù)字組成 r x y 第1位數(shù)字r為主版本號(hào) 第2位數(shù)字x為說明版本類型的次版本號(hào) 如果x為偶數(shù) 則表示為產(chǎn)品化版本 為奇數(shù)時(shí)表示為實(shí)驗(yàn)版本 第3位數(shù)字y為修改號(hào) 表示錯(cuò)誤修補(bǔ)的次數(shù) 2020 2 6 23 幾種流行的LinuxOS發(fā)行版本 2020 2 6 24 嵌入式Linux系統(tǒng)結(jié)構(gòu)圖 嵌入式Linux具有分層的體系結(jié)構(gòu) 一般可分為3小層及內(nèi)核空間和用戶空間兩大塊 每一層模塊都屏蔽了其以下各層的具體細(xì)節(jié) 只對(duì)上層提供功能接口或圖形界面 上層模塊不需要知道其以下各層模塊的實(shí)現(xiàn)方式 只需要利用下層提供的接口完成相應(yīng)功能即可 這樣的層次模型大大增加了嵌入式Linux的安全性 穩(wěn)定性 裁減或增添模塊的便利性 2020 2 6 25 Linux內(nèi)核的各子系統(tǒng)之間的關(guān)系 嵌入式Linux內(nèi)核一般可以分為4個(gè)部分 進(jìn)程調(diào)度管理 內(nèi)存管理 文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序 它們之間的關(guān)系如上圖所示 進(jìn)程調(diào)度處于中心位置 其他所有子系統(tǒng)都依賴于它 在嵌入式系統(tǒng)中 嵌入式Linux的實(shí)時(shí)性能改造與進(jìn)程調(diào)度有很大的關(guān)系 調(diào)度策略的算法直接關(guān)系到系統(tǒng)的實(shí)時(shí)性能 2020 2 6 26 嵌入式Linux中的文件系統(tǒng)結(jié)構(gòu) 嵌入式Linux的文件系統(tǒng)建立在塊設(shè)備上 不采用驅(qū)動(dòng)器號(hào)或驅(qū)動(dòng)器名稱來標(biāo)識(shí) 而是采用了樹形結(jié)構(gòu) 每個(gè)獨(dú)立文件系統(tǒng)為一個(gè)子樹 組成樹形的層次化的結(jié)構(gòu) 當(dāng)引入新的文件系統(tǒng)時(shí) 嵌入式Linux通過掛載方式將其連接到某個(gè)目錄 從而使不同的文件系統(tǒng)組合成一個(gè)整體成為可能 2020 2 6 27 嵌入式Linux內(nèi)核移植 如果一個(gè)系統(tǒng)是可以在不同的硬件平臺(tái)上運(yùn)行 那么這個(gè)系統(tǒng)就是可移植的 Linux內(nèi)核移植指根據(jù)自己的硬件平臺(tái)對(duì)內(nèi)核源代碼進(jìn)行修改 同時(shí)對(duì)內(nèi)核進(jìn)行裁剪 編譯出適合自己硬件平臺(tái)的內(nèi)核鏡像文件 Linux內(nèi)核源代碼包括多個(gè)目錄 1 arch 包括硬件特定內(nèi)核代碼 如arm mips等 2 drivers 包含硬件驅(qū)動(dòng)代碼 3 include 通用頭文件及針對(duì)不同平臺(tái)的特定頭文件 4 init 內(nèi)核初始化代碼 5 ipc 進(jìn)程間通信代碼 6 kernel 內(nèi)核核心代碼 7 mm 內(nèi)存管理代碼 8 net 與網(wǎng)絡(luò)協(xié)議棧相關(guān)的代碼 9 fs 文件系統(tǒng)相關(guān)代碼 如nfs vfat等 10 lib 庫(kù)文件 與平臺(tái)無(wú)關(guān)的strlen strcpy等 2020 2 6 28 Linux下驅(qū)動(dòng)程序設(shè)計(jì)示例 Linux操作系統(tǒng)對(duì)串口有著很好的支持 其中的串口驅(qū)動(dòng)程序?qū)τ脩羝帘瘟说讓佑布南嚓P(guān)信息 而且為用戶提供了一系列的標(biāo)準(zhǔn)調(diào)用函數(shù) 極大的方便了串口通信的操作 用戶編寫串口應(yīng)用程序的時(shí)候不需要考慮硬件相關(guān)的問題 只需要根據(jù)Linux操作系統(tǒng)提供的調(diào)用函數(shù)來實(shí)現(xiàn)自己需要的功能 在Linux操作系統(tǒng)下 串口是被當(dāng)做文件來對(duì)待的 因此對(duì)它進(jìn)行數(shù)據(jù)收發(fā)等效于對(duì)文件進(jìn)行讀寫操作 對(duì)串口的操作一般分為四個(gè)步驟 打開串口 設(shè)置串口 讀寫串口和關(guān)閉串口 2020 2 6 29 1 打開串口 在ARM平臺(tái)中Linux操作系統(tǒng)下的串口設(shè)備文件為 dev ttySAC0 intfd fd open dev ttySAC0 O RDWR 以讀寫方式打開串口 if fd 1 如果打開串口錯(cuò)誤則輸出提示信息 perror Can tOpenSerialPort 2020 2 6 30 2 設(shè)置串口 與無(wú)操作系統(tǒng)的情況下對(duì)串口進(jìn)行初始化設(shè)置類似 在Linux下最基本的串口設(shè)置工作主要包括波特率 校驗(yàn)位和停止位的設(shè)置 其設(shè)置方式主要是對(duì)structtermios結(jié)構(gòu)體各成員值進(jìn)行設(shè)置 在不同應(yīng)用中通常需要設(shè)置的波特率及數(shù)據(jù)格式等參數(shù)都不一樣 可以將結(jié)構(gòu)體成員賦值的功能編寫成函數(shù) 通過對(duì)該函數(shù)入口參數(shù)的修改 即可方便的實(shí)現(xiàn)不同的設(shè)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論