http://www.formosaos.url.tw/
http://www.formosaos.url.tw/
http://www.formosaos.url.tw/
關於版主:
陳育書。
郵件地址,bookysc@hotmail.com
學歷:
國立中興大學電機工程學系學士。
國立交通大學電子研究所碩士。
國立中山大學資訊工程研究所博士班攻讀中。
專長:
8051 韌體。
PIC18 韌體。
ARM9 載入程式和多工作業系統。
80X86 多工作業系統。
興趣:
爬樹。
紅色部分表示爬過的,藍色部分表示還想爬的。
离线
歡迎光臨
福爾摩沙作業系統
作業系統開發實戰手冊
網頁提供作業系統開發實戰手冊一書的部分內容。
網頁也提供讀者的問題解答。
讀者可以使用留言板發問。
本書的 facebook 網頁:
http://www.facebook.com/pages/%E7%A6%8F%E7%88%BE%E6%91%A9%E6%B2%99%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1/238788629478848?sk=wall
另外,筆者把過去寫過的其他程式放上來跟讀者分享,包括 8051、PIC18、ARM 等。
因為書本只能提供單色的圖片,在這裡將彩色的圖檔提供給大家。
离线
作業系統開發實戰手冊
推薦書評
作業系統是計算機科學的重要課題,其內容廣大,不易闡述。 此書以一條最短路徑實現視窗作業系統,在有限的篇幅內詳細說明作業系統的重要構成。殊為可貴。 其內容的規劃富有層次,對程式的講解非常仔細,只要循著書中的路徑,就可走進作業系統的核心。 藉由細膩的解析,引領讀者由下而上地了解作業系統的運作原理,並體驗作業系統的開發。
當在操作視窗時,是否會被視窗背後的工作原理所吸引。 此書不只說明了作業系統的多工原理,也一併說明桌面視窗的工作原理。 從啟動磁區到視窗應用程式,以簡潔而有系統的方式帶過,讓人有一種豁然開朗的讚嘆感受。
書中不只詳述開發作業系統的知識,也提供多種執行作業系統的方法和工具軟體。 讓讀者可以用許多方式執行作業系統,而不須再多費心於此。可見作者創作此書的用心。
此書實可幫助許多想要了解作業系統工作原理的學生和資訊工程人員。 本人特此推薦。
國立中山大學資訊工程學系 林俊宏教授
以下是摘取章节:
推薦序
作業系統開發實戰手冊
第1章 微算機系統
第8章 多工核心預覽
第29章 桌面預覽
第43章 目的檔與執行檔
http://www.formosaos.url.tw/myx86/recommend.html
http://www.formosaos.url.tw/myx86/x86os_ch00.html
http://www.formosaos.url.tw/myx86/x86os_ch01.html
http://www.formosaos.url.tw/myx86/x86os_ch08.html
http://www.formosaos.url.tw/myx86/x86os_ch29.html
http://www.formosaos.url.tw/myx86/x86os_ch43.html
离线
我的 8051
8051 MCU
8051 的執行
8051 組合語言
8051 C 語言
C 語言程式碼
8051 的多工
8051 多工程式碼
SDCC
http://www.formosaos.url.tw/my8051/8051_me.html
http://www.formosaos.url.tw/my8051/8051_mcu.html
http://www.formosaos.url.tw/my8051/8051_execute.html
http://www.formosaos.url.tw/my8051/8051_asm.html
http://www.formosaos.url.tw/my8051/8051_c.html
http://www.formosaos.url.tw/c8051/index.html
http://www.formosaos.url.tw/my8051/8051_tasking.html
http://www.formosaos.url.tw/rtos8051/index.html
http://www.formosaos.url.tw/my8051/8051_sdcc.html
离线
讀者來信
回覆一
回覆二
回覆三
http://www.formosaos.url.tw/articles/article1.html
http://www.formosaos.url.tw/articles/article2.html
http://www.formosaos.url.tw/articles/article3.html
回覆一 2011.06.12
您好:
我剛剛在書店看到你那個是用x86想說如果提供的多工作業系統. 如果也能在ARM平台上運作,感覺能跟x86做比較,這樣好像可以更清楚一個OS跟CPU 關係.
上面我是自己想法我不知道對不對.
如果要把你的多工作業系統用到qemu 虛擬器用ARM平台可行嗎?
因為現在好像嵌入式都用ARM 比較多~
謝謝
我的回答如下.
你好, 我是從ARM走過來的,這個作業系統的多工核心是在ARM上面發展的. 為甚麼挑選X86的原因是因為所需要的硬體在X86的平台上一應俱全,而ARM板卻有許多缺乏和限制. 我創作的這個作業系統是跑在保護模式中,不會用到BIOS的函式呼叫,全部都是使用IO去設定各個硬體的動作. 如果你的意思是 X86 因為有BIOS而讓OS和CPU的關係不清楚的話,我進入保護模式後,不會再用到BIOS了.
如果使用ROM啟動的話,的確,ARM像單晶片那樣,不會有BIOS的過程,就可以直接啟動. 但如果是使用NAND FLASH 的話,其實ARM裡面也有一個類似BIOS的東西,負責載入NAND FLASH裡面的啟動程式,我記得 S3C2440 是8個磁區,4KB.
無論是ARM或X86,當你摸得夠深的話,你會發現它們的動作原理相類似. 現在市場上之所以把ARM當作是嵌入式系統是因為整個消費性電子的市場都是ARM的天下.也以ARM做為簽入式系統的課程內容.講到嵌入式就想到ARM. 但曾否想過為什麼X86不算嵌入式,其實X86也可以當作嵌入式系統.而且是一個已經發展幾十年的嵌入式系統.只是多了一個BIOS.而這個BIOS讓人家覺得OS和CPU是不直接的,這其實是種誤解. 對我的作業系統來說,BIOS充其量只是一個負責把作業系統載入到記憶體執行的媒介,如此而已.之後,BIOS形同虛設. 如果你仔細追我的程式碼的話,你會發現進入保護模式之後,我不會再使用到BIOS的系統呼叫,因為所有的程式功能都必須用手寫,沒有BIOS系統呼叫可用.
QEMU 是 LINUX 上的虛擬機器,使用 RAW IMAGE 模擬作業系統的執行.這和 FORMOSAOS 的映像檔是一樣的. 只要將 FORMOSAOS 編譯出來的映像檔複製到 LINUX,映像檔包括 floppy_os.img,install_os.img,cdrom_os.iso,cdrom_install.iso. 舉例來說,執行 cdrom 模擬時,可用指令 $qemu -m 32 -cdrom cdrom_os.iso,就可以模擬 formosaos.
希望我的回答可以解掉你的疑惑.
您好:
1.請問一下您所說的ARM板卻有許多缺乏和限制是指開發板環境嗎?
那如果再一些可以模擬ARM平台的虛擬機還有這問題存在嗎?
qemu 可以模擬出x86、ARM、MIPS、Power PC 這些
2.ROM啟動跟用NAND FLASH <--- 這是會區分有沒有BIOS?
在嵌入式上bootload 不是相當於BIOS , 那如果再 ROM啟動就沒有所謂BIOS?
謝謝
我的回答如下.
你好,
1.是的 我是指開發板的環境2.虛擬環境就是虛擬開發板的環境.虛擬環境可以有更多的虛擬硬體. PC的配備某程度上是標準化了,所以可以在 PC 虛擬環境執行的OS就可以在真實的PC上面執行. ARM的模擬環境可以用來練功,但是它是無法用在實際的開發版中的,除非ARM的虛擬環境的元件和ARM的開發板一樣. 但ARM的開發板的硬體建置並沒有像PC那樣標準化.
3.ARM的啟動有分ROM和NAND FALSH. 這是透過ARM的外部接腳設定.通常開發板都會用電阻設定之. 通常ARM的產品都是用ROM.而開發版通常是用NAND FLASH. 用NAND FLASH 啟動ARM時,ARM本身會執行自己的啟動程式,負責將NAND FLASH的程式載入 STEPPING STONE.並執行使用者的啟動程式. 它不是BIOS,只是單純的把放在NAND FLASH 中的程式碼載入 STEPPING STONE 而已.之後就跳到STEPPING STONE 的位址上,執行使用者的啟動程式 PC的BIOS除了載入啟動磁區,並執行啟動磁區外,還提供一些系統中斷,用來控制IO. 如果只使用BIOS的啟動功能,而不使用其系統呼叫的話,那BIOS的功能就有點像是ARM上面載入STEPPING STONE的程序那樣.
4.BOOTLOADER 就是被ARM從 NAND FLASH 載入STEPPING STONE 的使用者啟動程式. BOOTLOADER 會把後面的OS陸續載入RAM中,然後跳到OS起頭的地方執行OS. 也因此BOOTLOADER的體積不會大於4KB.否則會超過STEPPING STONE的容量,而出錯. 對我來說,BOOTLOADER 比較像是啟動磁區內的啟動程式,而不是BIOS.
5.是的.用ROM啟動就不需要BOOTLOADER了.所有OS的程式碼都由ROM提供.
回覆二 2011.07.17
版主好,我是這本書的讀者.關於這本說我一些疑問,想請您回答
1.為何我執行 RUN 指令之後畫面(虛擬電腦的視窗)會變藍的,滑鼠也不見了
2.可以介紹一些其他有關"作業系統開發"的書嗎(簡單一點的)(我之前找過LINUX的,不過都沒有核心的程式碼(像是桌面繪製等等))
3.有辦法看載ISO檔裡的東西嗎(我用WINRAR開,結果只有一個TXT檔)
4.有辦法用這OS開WINDOWS的執行檔嗎(這問題好像有點異想天開了)
--------------------------------
PS:我今天燒了一片開機光碟(這本書的OS),結果滑鼠會有殘影+很會LAG+滑鼠按下左鍵沒反應,請問怎麼處理
期待您的回應!!
讀者上
回覆如下.
你好,
1 .run 是用在遠端下載作業系統的時候. 我沒有把它用在模擬器上. 可能是出現cpu的違例,發生中斷了,才會出現藍色畫面.
2. 自己動手寫嵌入式作業系統---有寫到多工,一個命令列
自己動手寫作業系統---有寫到多工,命令列
作業系統自作入門---有寫到視窗.
我所知道的就以上三本了3.用WINRAR開的時候,它會跳過開機映像,只把目錄解開.目錄中好像只有一個README.TXT吧. 不過重要的是開機映像,而不是目錄中的檔案. 你可以用ULTRAEDIT 以二進位的方式看ISO檔的內容. 基本上它就是用 HTTP://WWW.NU2.NU/BOOTCD/ 提供的軟體製作第一份ISO. 我只是寫個C程式把裡面的FLOPPY 映像換掉而已.你可以在ISO中找到啟動磁區的啟動程式.
4.不行...我沒有把 PORTABLE AND EXECUTABLE COMMON OBJECT FILE FORMAT 實現在這個OS上. 它不能吃WINDOWS執行檔,只能把要執行的程式和作業系統一起編譯,才能執行. 有點像是LINUX KERNEL裡面的BUILT IN模式.
5.請問你的電腦環境是什麼.因為我要了解一下才知道. 我之前跑這個OS都是用桌上型電腦,使用PS2介面的滑鼠,用好幾部電腦驗證,沒有出現像你這樣的情形. 跑這個OS時, 滑鼠必須使用PS2滑鼠(實機執行時只能用PS2滑鼠). 會不會是放電腦的桌子是鏡面,所以讓光學滑鼠的訊號不穩定,才讓OS的滑鼠跳來跳去(所以有殘影),又無法處理按鍵訊號?
基本上,這本書分成二階段. 一般作業系統比較容易,而且頁數只到332頁. 桌面部分佔去了整本書的大部分篇幅,不好說明,也不好懂. 其實桌面的構造很簡單,不要被程式碼迷惑了.
回覆三 2011.11.16
不好意思 我是買了作業系統開發實戰手冊的讀者....
但是我發現剛開始看書有很多問題
所以想要問一下
我看了第四章
但是我發現有很多組合語言的東西 我看不懂
4.3.3.5 讀取並執行映像
02 mov byte [CurrentSector] ,0x03 這感覺起來好像是把 3 的十六進位放到 CurrentSector 的位置裡面 但是前面的byte 就不知道是幹嘛了?
07 jmp OS_IMAGE_SEGMENT:0 請問 jmp 後面的 OS_IMAGE_SEGMENT 跟 0 中間有個冒號 是什麼意思?
謝謝
回覆如下.
02 mov byte [CurrentSector] ,0x03
這是 nasm 支援的組合語言寫法.
byte 是指操作的記憶體單位是位元組,長度是八位元.
如果改寫成 mov word [CurrentSector],0x03 就變成把 0x03 寫到 CurrentSector 這個 word 裡面,word 有十六位元的長度.07 jmp OS_IMAGE_SEGMENT:0
這是 80x86 在真實模式底下,最基本的跳躍指令.
80x86 的位址由程式節區暫存器(cs)和指令指標(ip)組成.
因為我把作業系統映像放在 0x100000 的位址上,換算成 cs:ip 就是 0x1000:0
OS_IMAGE_SEGMENT 的值是 0x1000
執行這個指令後,程式就會跑到 0x10000 的位址上執行後面的作業系統映像你問的問題是最基本組合語言問題.
因為這本書是以作業系統的程式設計為主要內容.
對於組合語言的說明比較依賴組合語言的專門書籍.
作業系統的底層很依賴組合語言.
你可能需要去買一本講 NASM 組合語言的書.
离线