2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、自己寫一個最簡單的嵌入式操作系統(tǒng)自己寫一個最簡單的嵌入式操作系統(tǒng)實現(xiàn)一個什么都不能做的嵌入式操作系統(tǒng)1.首先確定CPU,在這里為了簡單,就選用嵌入式的CPU,比如ARM系列,之所以用RISC(簡單指令集)類型的CPU,其方便之處是沒有實模式與保護模式之分,采用線性的統(tǒng)一尋址,也就是不需要進行段頁式內(nèi)存管理,還有就是芯片內(nèi)部集成了一些常用外設(shè)控制器,比如以太網(wǎng)卡,串口等等,不需要像在PC機的主板上那么多外設(shè)芯片2.確定要實現(xiàn)的模塊和功能,

2、為了簡單,只實現(xiàn)多任務(wù)調(diào)度(但有限制,比如最多不超過10),實現(xiàn)中斷處理(不支持中斷優(yōu)先級),不進行動態(tài)SHELL交互,不實現(xiàn)動態(tài)模塊加載,不實現(xiàn)fk之類的動態(tài)進程派生和加載(也就是說要想在你的操作系統(tǒng)上加入用戶程序,只能靜態(tài)編譯進內(nèi)核中;不支持文件系統(tǒng),不支持網(wǎng)絡(luò),不支持PCI,USB,磁盤等外設(shè)(除了支持串口,呵呵,串口最簡單嘛),不支持虛擬內(nèi)存管理(也就是說多任務(wù)中的每個進程都可以訪問到任何地址,這樣做的話,一個程序死了,那么這個

3、操作系統(tǒng)也就玩完了)3.確定要使用的編譯器,這里采用GCC,文件采用ELF格式,當(dāng)然,最終的文件就是BIN格式,GCC和LINUX有著緊密的聯(lián)系,自己的操作系統(tǒng),需要C庫支持和系統(tǒng)調(diào)用支持,所以需要自己去裁剪C庫,自己去實現(xiàn)系統(tǒng)調(diào)用4.實現(xiàn)步驟:首先是CPU選型,交叉編譯環(huán)境的建立,然后就是寫B(tài)OOTLOADER,寫操作系統(tǒng)如何實現(xiàn)BOOTLOADER1.之所以要實現(xiàn)一個專用的BOOTLOADER,一是為了更好的移植和自身的升級,二是為

4、了方便操作系統(tǒng)的調(diào)試,當(dāng)然,你完全可以將這部分所要實現(xiàn)的與操作系統(tǒng)相關(guān)的功能集成到操作系統(tǒng)中去2.確定一個簡單的BOOTLOADER所要完成的功能:我們這里只需要完成兩個主要功能,一是將操作系統(tǒng)加載到內(nèi)存中去運行,二是將自己和操作系統(tǒng)內(nèi)核固化到ROM存儲區(qū)(這里的ROM可以是很多設(shè)備,比如嵌入式芯片中的FLASH,PC機上的軟盤,U盤,硬盤等)3.BOOTLOADER的編寫:第一步:要進行相關(guān)硬件的初使化,比如在at91rm9200這塊

5、嵌入式板子上(以后都使用這一款芯片,主要是我對這款芯片比較熟悉,嘿嘿),大概要做接下來的幾方面的工作,其一:將CPU模式切換進系統(tǒng)模式,關(guān)閉系統(tǒng)中斷,關(guān)閉看門狗,根據(jù)具體情況進行內(nèi)存區(qū)域映射,初始化內(nèi)存控制區(qū),包括所使用的內(nèi)存條的相關(guān)參數(shù),刷新頻率等,其二:設(shè)定系統(tǒng)運行頻率,包括使用外部晶振,設(shè)置核的所有數(shù)據(jù)到內(nèi)存中(具體是內(nèi)存中的什么位置由自己指定,也可以采用LINUX之類的做法,就是在內(nèi)存的起始位置加上一個0x8000處),將跳轉(zhuǎn)到

6、內(nèi)核的第一條代碼處);如果用戶在指定的秒數(shù)內(nèi)鍵入了字符(這主要是為了方便開發(fā),如果開發(fā)定型之后完全可以不要這段代碼),那么就在串口與用戶進行交互,接受用戶在串口輸入的命令,比如用戶要求下載文件在FLASH中指定的位置等,具體內(nèi)容可參考UBOOT之類的開源項目到這里為止,BOOT部分已完成,這個BOOT非常簡單,僅僅只是將PC機上傳下來的文件固化到FLASH中,然后再將FLASH中的操作系統(tǒng)內(nèi)核部分加載進內(nèi)存中,并將CPU的控制權(quán)交給操作

7、系統(tǒng),下一頁開始講解如何寫一個最簡單的操作系統(tǒng),呵,到現(xiàn)在才開始切入正題呢?。。?!這里為了簡單,就不考慮可移植性開求,不從BOOT部分來接收參數(shù),也不對硬件進行檢測,也不需要進行DATA段,代碼段的重定位。我只是讀了LINUX內(nèi)核相關(guān)部分,并未自己去實現(xiàn)一個操作系統(tǒng),所以我以下所說的只是概念性的東西:1.接管系統(tǒng)的中斷處理,由于BOOT部分的代碼決定了那個中斷向量表,從而決定了系統(tǒng)中斷之后進入的內(nèi)存位置,但BOOT并不知道操作系統(tǒng)的中斷

8、處理函數(shù)位置所在啊,怎么辦呢?有幾種方法,其一是:如果你的板子可以重映射地址,也就是可以將內(nèi)存條所在的位置重映射成0x0開始,那么在鏈接內(nèi)核的時候,就將操作系統(tǒng)自己的中斷向量表定位在0x0處并且在BOOTLOADER引導(dǎo)結(jié)束時就完成映射操作,并讓CPU跳轉(zhuǎn)到0x0處執(zhí)行;如果沒有重映射功能,我就不曉得怎么辦了,不過我想到一個折衷的辦法,就是在BOOTLOADER啟動完成時(也就是將CPU控制權(quán)交給操作系統(tǒng)內(nèi)核時),重新改寫FLASH的0

9、x0區(qū)域,就是將操作系統(tǒng)的內(nèi)核的中斷向量表寫入FLASH區(qū)的0x0處,比如,當(dāng)一個IRQ發(fā)生時,CPU決定了會跳入0x18(假設(shè)這里FLASH占用地址總線0x0至0x0fffffff內(nèi)存占用0x20000000至0x2fffffff),而BOOTLOADER在最后將0x18處的代碼修改成了0x20000000加上0x18的地址處的代碼,而這個地址就是內(nèi)核的中斷向量表中的相關(guān)跳轉(zhuǎn)指令,就相當(dāng)于跳轉(zhuǎn)進了內(nèi)核所關(guān)聯(lián)的IRQ處理函數(shù)的地址上去執(zhí)

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論