星期二, 11月 22, 2005

LinuxBIOS HOWTO : EPIA-M-howto

新checkout的LinuxBIOSv2(revision 2090)增加了HOWTO部份,裡面只有EPIA-M-howto。以下是筆記:
LinuxBIOS 從第一個serial port送出debugging output。 115200 8-N-1。
使用LinuxBIOS,還需要一個 "payload",LinuxBIOS執行完後,將控制權交給"payload",payload會去作"載入OS"的動作。一般LinuxBIOS配合的payload程式有
VGABIOS,LinuxBIOS使用原有的VGABIOS,所以要從mainboard上取得,首先要使用原有的BIOS執行Linux,然後以下命 令:
dd if=/dev/mem of=/video.bios.bin bs=1 count=65536 skip=790528
將VGA Bios讀入video.bios.bin檔

Getting Going


  1. 安裝Linux在要使用LinuxBIOSv2的系統
    這一步是為了取得該系統的BIOS資料。
  2. 取得LinuxBIOSv2的source code
    LinuxBIOSv2目錄下,會有:
    src: 所有source code所在目錄
    targets: 各platform相關的設定(config)檔所在,會在此進行build的動作
    util: build和debug所需要的工具。
  3. 這一步說明燒錄bios flash的動作與注意事項(建議使用bios savior - 去哪買?)
  4. 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。
  5. build LinuxBIOSv2 : EPIA-M
    到LinuxBIOSv2目錄下
    cd tagrets
    ./buildtarget via/epia-m
    會產生target/via/epia-m/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。
  6. 燒錄到bios的flash中
  7. 重新啟動epia-m,從serial port 1接上終端機,設定115200, 8-N-1,可以看到boot message。接著FILO啟動,準備load ide上的linux kernel。
以下是Optional - 對LinuxBIOS的一些修改

減少serial port輸出,加快boot speed


修改target中config.lb的設定,將debugging message輸出終止,減少起動時間
option MAXIMUM_CONSOLE_LOGLEVEL=8
option DEFATUL_CONSOLE_LOGLEVEL=8
的8改成比較小的值。之後run buildtargt,make clean, make

使用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中:
  1. 使用原有的BIOS開機,設定好需要的ACPI設定
  2. 進入Linux,執行以下命令取得ACPI table:
    cat /proc/acpi/dsdt >dsdt.aml
    將會產生dsdt.dsl
  3. 轉為C hex table:
    iasl -tc dsdt.dsl
    將會產生dsdt.hex
  4. 將dsdt.hex的內容取代 src/mainboard/via/dpia-m/dsdt.c
重新build LinuxBIOS一次,重新燒錄到bios flash中

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.5
make兩次,第一次產生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.

沒有留言:

網誌存檔