LinuxBIOS 從第一個serial port送出debugging output。 115200 8-N-1。
使用LinuxBIOS,還需要一個 "payload",LinuxBIOS執行完後,將控制權交給"payload",payload會去作"載入OS"的動作。一般LinuxBIOS配合的payload程式有
- FILO(一樣在LinuxBIOS的社群maintain : http://linuxbios.org/index.php/FILO ) 載入HD的OS。
- Etherboot 用在diskless系統,執行網路開機動作。
dd if=/dev/mem of=/video.bios.bin bs=1 count=65536 skip=790528將VGA Bios讀入video.bios.bin檔
Getting Going
- 安裝Linux在要使用LinuxBIOSv2的系統
這一步是為了取得該系統的BIOS資料。 - 取得LinuxBIOSv2的source code
LinuxBIOSv2目錄下,會有:
src: 所有source code所在目錄
targets: 各platform相關的設定(config)檔所在,會在此進行build的動作
util: build和debug所需要的工具。 - 這一步說明燒錄bios flash的動作與注意事項(建議使用bios savior - 去哪買?)
- FILO
到http://felixx.tsn.or.jp/~ts1/filo下載filo,解開後先make一次, 修改config檔AUTOBOOT_FILE "hda1/vmlinuz root=/dev/hda2 console=ttyS0,115200"
意思是:在IDE 1的partition 1找到vmlinuz作為kernel image,boot kernel時,傳入參數: "root=/dev/hda2 console=ttyS0, 115200"
修改完後再make一次,產生filo.elf。這就是LinuxBIOS的payload。
當 然還要準備好要boot的linux kernel image。 - build LinuxBIOSv2 : EPIA-M
到LinuxBIOSv2目錄下cd tagrets
會產生target/via/epia-m/epia-m目錄
./buildtarget via/epia-m
buildtarget 是依照target/via/epia-m/Config.lb產生這些makefile和設定檔。如果需要不一樣的設置,就需要對config.lb作 修改,例如:filo.elf要改在其他位置....
修改完後要執行./buildtarget一次重新產生make file。
這 個config檔設定產生196608 byte的LinuxBIOS rom image,比epia-m flash的256k少了64k,這64k是要給VGA BIOS用的,將makefile的cat fallback/linuxbios.rom > linuxbios.rom
改為cat /video.bios.bin fallback/linuxbios.rom > linuxbios.rom
這樣就會將VGABIOS和LinuxBIOS合成一個image。
再make 一次,linuxbios.rom產生。檢查一下size是不是262144 bytes。這是EPIA-M的size。 - 燒錄到bios的flash中
- 重新啟動epia-m,從serial port 1接上終端機,設定115200, 8-N-1,可以看到boot message。接著FILO啟動,準備load ide上的linux kernel。
減少serial port輸出,加快boot speed
修改target中config.lb的設定,將debugging message輸出終止,減少起動時間
option MAXIMUM_CONSOLE_LOGLEVEL=8的8改成比較小的值。之後run buildtargt,make clean, make
option DEFATUL_CONSOLE_LOGLEVEL=8
使用Advance ACPI功能
因為copyright的原因,ACPI table不得與LinuxBIOS sourcecode一起散佈,所以要由原來的BIOS中取得ACPI management Table。
首先要取得isal - Intel's ACPI Asl compiler for Unix/Linux : http://developer.intel.com/technology/iapc/acpi/download.htm
接著將源BIOS的table取出,放入LinuxBIOS中:
- 使用原有的BIOS開機,設定好需要的ACPI設定
- 進入Linux,執行以下命令取得ACPI table:
cat /proc/acpi/dsdt >dsdt.aml
將會產生dsdt.dsl - 轉為C hex table:
iasl -tc dsdt.dsl
將會產生dsdt.hex - 將dsdt.hex的內容取代 src/mainboard/via/dpia-m/dsdt.c
Boot on onboard CF
這個有點麻煩,因為CF的block number和標準ide不同,所以要修改FILO的driver/ide.c,讓他認得CF drive。
再來因為EPIA-M II的CF是由pcmcia控制,所以要將pcmcia driver加入kernel的initrd中,讓他認得pcmcia,才能找到CF。
之後附上由pcinitrd script修改的mkcfinitrd script。用來產生可以用來boot CF driver的initrd。
自己build的結果
follow LinuxBIOS 的說明checkout filo 0.5$ svn co svn://openbios.org/filo/trunk/filo-0.5make兩次,第一次產生config檔,第二次正式make。出現error : unrecognize option: -Wno-pointer-sign,修改makerules,將-Wno-pointer-sign刪掉,make一次,OK。
因 為我的gcc是3.3,查no-pointer-sign是4.0以後才有的option (?),這個option-W是代表warnning的意思,所以刪掉應該不會有影響吧。(ref : The Defubutuve Guide to GCC . Apress)
修改LinuxBIOS/targets/via/epia-m/config.lb,將payload的目錄改為/home/charles/filo-0.5/filo.elf,buildtarget, make OK.
沒有留言:
張貼留言