実るほど, 頭下る, 稻穗かな; 下るほど, 仰がるる, 藤の花 |
作者 Benjamin David Lunt 寫了好幾本系列, 組合起來就是一個 OS, 我這次購買的是 USB, SATA 的部份, simple os 就是少了這 2 個支援, 由於不能讀寫硬碟, 所以我沒辦法實作虛擬記憶體的功能, 實在可惜。
source code 本來付在書上的光碟, 現在改放在「https://github.com/fysnet/FYSOS」
作者 Benjamin David Lunt 在 bochs 加入 usb 支援, 這樣應該可以讓你知道他對 usb 的認識。這些系列書籍都有 kindle 電子書的版本, 不過在電腦學習書上, 我還是偏愛實體書, 前後翻頁比較容易。
運費還是佔了相當的一部分, 整體費用提高不少, kindle 版本便宜不少, 也不用運費, 但學習書還是習慣讀紙本。在收到實體書時, 被 usb 這本的厚度嚇到, 難怪運費這麼貴。
USB: The Universal Serial Bus $39.99 FYSOS: Media Storage Devices $22.59 Shipping & Handling $22.80 Order Total $85.38
不過似乎買紙本書比較適合, 書中有很多表格都蠻大的, 在 6 吋螢幕上看可能不是個好主意, 買電子書的朋友可能需要用大螢幕來看這些表格。
好久沒在美國亞馬遜買實體書了, 過了好幾年之後又再次購買。這系列的書沒有特別標示出版社, 可能是 amazon 出版的書籍, 有 ISBN, 印刷時間 2022/4/16。
usb keyboard/mouse 的部份似乎沒有 source code, 只有文字講解, 這樣讓我有點失望, 我有點懷疑我自己能靠這樣的資訊就寫出 usb keyboard driver。書中雖然也有講解各種 USB Controllers stack, 但一樣沒程式碼, 我懷疑能不能完成我的心願。
先從偵測 USB Controllers 開始, source code 在 FYSOS/main/usb/utils/detcntlr, 原本的程式是在 freedos + DPMI (我實在沒想到還可以看到這個) 環境下執行, 我稍做修改, 可以在 linux 上直接執行。
其中麻煩的是要怎麼在 linux user mode 下直接 read/write port IO, 是的, 在 user mode 就可以執行 IO port read/write, 不需要在 kernel mode, 後來查到 int iopl(int level);, 也看到
我不想用 inb/outb, 因為之後這段程式我想用在 bare-metal 環境, 所以用 iopl 就好, 但 man page 沒說 level 要怎麼設定, 我胡亂用 3 try (ref: Linux下設置端口權限的系統調用有兩個:ioperm和iopl), 結果是可以正常存取, 當然, 需要使用 root 執行。
改寫之後 list 1 是執行結果, 我在真實機器和模擬器中執行過, 都能正常執行。
作者大部分的程式都是在 freedos 下執行, 作為一個簡單的範例, 這樣是很好的, 很容易就可以移植到其他平台, 由於也支援 djgpp 編譯, 所以用 gcc 編譯可以說是無痛移植。
不過範例程式碼我不太知道要怎麼編譯, 沒有 makefile, 可能得手工編譯, djgpp 的版本是 20220125 加入的, 程式註解有寫如何編譯, 但如果是其他編譯器, 我就不知道怎麼編譯。不過由於範例都用最簡單的形式存在, 所以手工編譯還算容易。
我的修改放在: https://github.com/descent/FYSOS/tree/master/main/usb/utils/detcntlr
執行 OS kernel, 有 dos 的感覺。
cd FYSOS/images qemu-system-x86_64 -hda hd.img如果要執行 FYSOS/main/usb/freedos.img
要執行 detcntlr\detcntlr.exe 需要把 CWSDPMI.EXE 複製到 detcntlr, 然後再執行 detcntlr.exe。
cd FYSOS/main/usb qemu-system-x86_64 -fda freedos.img 在 freedos 下操作 cd detcntlr copy ..\CWSDPMI.EXE . detcntlr.exe detcntlr.exe /type
另外 janaxelson 也有出一系列 usb 的書, 比較偏向應用。
fig 5 janaxelson 其中一本 usb 書籍。 |
ref:
- http://www.fysnet.net/book_series/more_info.htm
- https://www.fysnet.net/osdesign_book_series.htm, 作者說明為什麼要使用 dos, 要使用舊硬體來測試, 要使用軟碟來開發, 但麻煩的是, 應該找不到軟碟機了, 能找到的替代品應該是 usb 的軟碟機, 但那不是作者提到的軟碟機。
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。