2009年7月31日 星期五

trace fiasco bootstrap code part 2

接下來繼續看fiasco的bootstrap
正在努力看懂crt0.S
首先遇到一個macro就是REALMODE_LOADING
雖然說我知道這個macro在Makefile中有 但是看不出來有沒有有沒有用
我就用readelf這個工具 將以已經編好的bootstrap執行檔讀出來
指令是 readelf -a (build directory)/bin/x86-586/bootstrap
在symbol table欄中 可以看到很多在crt0.S出現的label 但是沒有_stack_seg這個label
因為這個label是在有定義REALMODE_LOADING的時候才會編譯的
好 因此我知道 現在REALMODE_LOADING這個macro沒有define

為了看懂crt0.S 我跑去看elf的格式 我發現了.init是重要的section
他跟我想的一樣 是為了在執行main之前執行的function
但是目前我不知道程式是從bootstrap的哪裡開始執行 我猜是第一個instruction
這樣很合理 但是我不知道怎麼看出來

-----------------------
跳離主題 製作fiasco的iso檔
我以前都不知道在用grub做iso檔的時候的資料夾 會當作iso檔的內容
然後還傻傻的放在我tudos的top資料夾下 他就全部放進iso檔中 真像個笨蛋....
-----------------------

為了知道grub怎麼跳到fiasco 我跑去看grub了
發現現在有grub 跟grub 2
他們的分法是grub最新的是0.97 而之後的版本是grub2的 並沒明確的編號上的不同
我現在用的grub是0.97也就是grub的最後一版
所以說我看的doc是grub 0.97的manual
其實grub本來就有支援multiboot也就是一次除了load kernel外 還有load其他的module
我也發現grub跟u-boot一樣可以用command line只是我都不想用而已
現在的重點是我要了解grub跟fiasco的相關指令
主要是kernel跟module這兩個指令 其實應該還有root這個指令 不過我現在是在做iso檔 就先不理了
kernel就是要指定kernel的名稱 這裡並不是要指定fiasco 而是要指定bootstrap 由bootstrap當作假的kernel
是要用來load fiasco
command是這樣打的 kernel (directory)/bootstrap
其實還要加上 --type=multiboot 在kernel後面 這樣才是要讀多個module
雖然說command是照上面這樣打 但是還可以在 command接東西 這樣接的東西 會傳到bootstrap
在bootstrap中有很多處理這些選項的程式碼
module就是另外要load的module名稱
(這是grub原本就有的功能另我很驚訝 我猜是因為MACH所以才會有 manual中另外還有提到 可以參考fiasco的使用 超酷的)
command是這樣打的module (directory)/(moudle name)
這也是一樣後面接者給他的選項

其實我還是沒找到他怎麼執行bootstrap的東西.....

沒有留言:

張貼留言