cwlinux 寫的說明 http://www.cwlinux.com/downloads/linuxbios-sdk/docs/manual/linuxbios_sdk-5.html
checkout LinuxBIOSv2
$ svn co svn://openbios.org/repos/trunk/LinuxBIOSv2checkout後,會顯示checkout的snapshot version.例如:
Checked out revision 2090在 http://snapshots.linuxbios.org/ 可以看到每次的snapshot,也可以download個別的snapshot。其中也會有每個snapshot的autobuild的log。
svn checkout只會update 有變更的部份(這也是version control system的功能)
download完後,到 Document中make,Error : 找不到epstopdf,找到屬於tetex package.所以install
#aptitude install tetex-bininstall完後,make就會build documentation下的檔案,產生pdf檔。
***後來發現還要tetex-extra
Document就是一個porting的範例:LinuxBIOS on AMD64以下是筆記:
Build Requirement
- GCC 3.3.1
- binutils 2.14.90.0.5
- Python 2.3
- CVS 1.11.6
LinuxBIOS config overview
- Firmware image configure file位置在 freebios2/targets/<vendor&~~SPECIAL_REMOVE! #~~gt;/<mainboard>/., default config file name : Config.lb
- Mainboard相關的config file位置在freebios2/src/mainboard/<vendor& gt;/<mainboard% gt;.,Configuration file檔名是Config.lb。包含的資訊像是:cpu type,northbridge, southbridge,,hypertransport,superIO。
Building LinuxBIOS
LinuxBIOS的source code和Makefile設計將build的object file獨立於src之外,這是為了要讓不同的target同時存在,不會互相影響。Build的動作分為兩個部份:- Create Build Tree,存放configure tool產生的file和build產生的object file。
- compile LinuxBIOS,產生可燒錄的flash image。
$ cd freebios2/targets以上的動作會create一個folder: freebios2/targets/amd/solo/solo,folder中包含所有config file。接著,build :
$ ./buildtargets amd/solo
$ cd amd/solo/soloLinuxBIOS image的filename設定在 firmware image configuration file裏,以這個例子來看,是solo.rom。
$ make
Programmign LinuxBIOS to flash memory
產生的LinuxBIOS image檔可以用來燒錄在bios的flash memory中,可以用燒錄器或是linux的flash driver : devbios或mtd。LinuxBIOS configuration
接著說明LinuxBIOS的configuration file內容,所有configuration file都有一些共同的地方...- default config file name : Config.lb
- config file中的變數要用VARNAME宣告
- 以#開始的行是註解
- configuration有區分statement和options。Statement規劃了LinuxBIOS configuration file的動作。Options則是configuration和build時的變數
- Default configuration value可以在mainboard的configuration file中設定
- Options 可以修改default的設定,Options設定在freebios2/targets/< vendor>/<mainboard>/Config.lb (keyword option)
Common Configuration Statements
- uses
所有variable都要先宣告:
Example:uses ROM_IMGE_SIZE
NOTE:只有configuration system中的configuration variable可以使用. LinuxBIOS會check freebios2/src/config/Options.lb中宣告的variable決定哪些使可用變數 - default
用來設定一個configuration variable的default value,這些value可以被overwrite,通常用在mainboard configuration file中,
Example:default ROM_IMAGE_SIZE=0x10000
variable間可以互相使用來作為value:default FALLBACK_SIZE=ROM_SIZE
也可以使用基本的計算:default FALLBACK=(ROM_SIZE - NORMAL_SIZE)
String value要用"括起來default CC="gcc m32" - option< >option基本上和default的功能類似,但是只能用在build target configuration files(freebios2/targets/<vendor>/<mainboard>). option可以用來設定或是修改default設定的值。statement和default一樣。
Firmware image specific configuration
LinuxBIOS 可以為廷一個hardware platform create不同的image,每個image可以設定不同的output,payload(bootloader或linux kernel),組成的subimage。Firmware Image specific keyword
以下是firmware相關的configuration keyword- romimage
定義最後的LinuxBIOS image,一般都會有兩個romimage產出:normal, fallback。
每 個romimage都要指定包含mainboad configuration file的mainboard目錄和payload,pathload是一個指向payload binary 的static path.(payload就是LinuxBIOS開機完成後,要load的source ,一般會是bootloader或是真正的Linux Image)romimage "normal"
option USE_FALLBACK_IMAGE=0
option ROM_IMAGE_SIZE=0x10000
option LINUXBIOS_EXTRA_VERSION=".0Normal"
mainboard amd/solo
payload /suse/stepan/tg3ide_disk.zelf
end - buildrom<>這一個statement用來指定要build那一個LinuxBIOS image:
buildrom ./solo.rom ROM_SIZE "normal" "fallback"
Firmware image configuration options
除了以上的option外,以下是其他的一些option:- CC
設定C Compiler, default是$(CROSS_COMPILE)gcc, 當build AMD64 LinuxBIOS image時要設定在gcc m32 - CONFIG_CHIP_CONFIGURE
使用新的chip_configure的方式來config (nonpci) devices. build AMD64時要設為1 - MAXIMUM_CONSOLE_LOGLEVEL
Default是8,決定要印出的error level是最高level是多少,min是0,max是10。 - DEFAULT_CONSOLE_LOGLEVEL
console顯示這個level的error,default是7,main 0, max 10 - CONFIG_CONSOLE_SERIAL8250
log message由8250的serial device送出,Default 是0,使用AMD64時要設為1. - ROM_SIZE
最終的ROM image size,沒有default value. - FALLBACK_SIZE
Fallback image size,default 65536 bytes,不包含FALLBACK payload. - HAVE_OPTION_TABLE
Export CMOS option table. Default 0, 如果mainboard有CMOS memory而且要用來存放LinuxBIOS參數的話,就設為1 - CONFIG_ROM_STREAM
Boot image是在ROM中 (另一個設定是CONFIG_IDE_STREAM,代表Boot image是在ide裝置) - HAVE_FALLBACK_BOOT
如果要fallback boot功能的話,就設為1,default是0
- USE_FALLBACK_IMAGE
要使用fallback image的話就設為1,default是0 - ROM_IMAGE_SIZE
default image size,default是65536 bytes - LINUXBIOS_EXTRA_VERSION
LinuxBIOS的extra version label,default是空字串,可以加入任何你希望加在標準版本字串後的字串。
Mainboard相關的configuration
設 定mainboard相關的bridge, CPU, 也包含一些low-level 使用romcc 和 assembler compile的startup code。這些code enable caches, registers, 早期的mtrr 設定,fallback mechanism, dram初始話,.....
NOTEmainboard configuration中不能使用option keyword。而藥用default keyword.
以下是相關的keyword:
- arch
CPU的架構,AMD64要設i386.
Example:arch i386 end
- cpu
設定cpu???:cpu k8 "cpu0" end
***同一個板子可以放兩顆不一樣的cpu嗎? - driver
這個keyword將obj檔加入image的driver section中,代表PCI device的initialization code將可以使用這個obj檔內的function:driver mainboard.o
- object
這個keyword將obj檔加入LinuxBIOS的 image中,這樣加入的obj檔的function可以被所有LinuxBIOS的code使用(包含driver):object reset.o
- makerule< >增加build process的build rules.當使用外部工具(非標準的gcc... binutil..etc)時會用到。LinuxBIOS AMD64使用romcc來build startup code,這部份在auto.c中。
在configuration file中要加入如何使用romgcc build aoto.c:makerule ./auto.E
每個makerule中要包含file dependency, actions (就像一般的makefile一樣)
depends "$(MAINBOARD)/auto.c option_table.h ./romcc"
action "./romcc -E -mcpu=k8 -O2 I$(TOP)/src -I. $(CPPFLAGS) $(MAINBOARD)/auto.c -o $@"
end
makerule ./auto.inc
depends "$(MAINBOARD)/auto.c option_table.h /romcc"
action "./romcc -mcpu=k8 -O2 I$(TOP)/src -I. $(CPPFLAGS) $(MAINBOARD)/auto.c -o $@"
end - mainboardinit<>這個keyword可以將任意的assembler code加入LinuxBIOS image中。用在early infrastructure initialization (如切換進入protect mode):
mainboardinit cpu/i386/entry16.inc
- ldscript
用這個keyword指定ld 使用的link script檔:ldscript /cpu/i386/entry16.lds
- dir
LinuxBIOS包含很多mainboard的port,所以很多共同的code會放在某一個共用的目錄中,用這個keyword可以指定共用code目錄的位置:dir/pc80
- config
new chip configuration scheme need this.config chip.h
- register
這個keyword可以放在任何地方,作為設定code參數的方法,裏如以下的宣告就可以讓code 藉由com1存取到config file的參數resiter "com1" = " {1, 0, 0x3f8, 4}"
- northbridge
指 定系統的northbriede,AMD64系統可以有很多northbridge(一個 cpu一個),每個northbridge都要宣告,包含code的relative path (relatice to : freebios2/src/northbridge).northbridge amd/amdk8 "mc0"
[..]
end - southbridge
LinuxBIOS為簡化設定,除northbridge外所有的device都是為 southbridge。
從cpu來看,southbridge是經由northbridge連接到cpu的, southbridge宣告在每一個他連到的northbridgev宣告中。
同樣,每個bridge都要宣告他的code relative path和unique name。
如果是hypertransport device,用link keyword宣告他連到的hypertransport link.northbrige amd/amdk8 "mc0"
[..]
sourthbridge amd/amd8111 "amd8111" link 0
[...]
end
[..]
end - pci
這只在northbridge或southbridge中出現,用來描述PCI device,通常bridge section都會有很多pci keyword宣告。
pci 有on/off option可以指定這個device是enable或是disable。northbridge amd/amdk8 "mc1"
pci 0:19.0
pci 0:19.0
pci 0:19.0
pci 0:19.1
pci 0:19.2
pci 0.19.3
end
orsouthbridge amd/amd8111 "amd8111" link 0
pci 0:0.0
pci 0:1.0 on
pci 0:1.1 on
[..]
end - superio< >SuperIO的設置方式和bridge的方式大概類似,code在freebios2/src/superio/。和pci device不一樣的管理方式,使用PnP的device。如果SuportIO和southbridge相連,就要宣告在southbridge的 section裏。
superio NSC/pc87360 link 1
pnp 2e.0
pnp 2e.1
pnp 24.4
...
register "com1" = "{1, 0, 0x3f8, 4}"
register "lpt" = "{1}"
end
Mainboard specific configuration options
以下用在mainboard的設定,用default 來設定- HAVE_HARD_RESET
代表有hard reset功能,default 是沒有 - HAVE_PIRQ_TABLE
代表有IRQ Table,default是沒有 - IRQ_SLOT_COUNT
IRQ slot的數目,default並沒有定義 - HAVE_MP_TABLE
build MP table,default不build - have_OPTION_TABLE
export CMOS option table,default不export - CONFIG_SMP
support SMP (symmetric multiprocessing)。default是沒有 - CONFIG_MAX_CPUS
當有定義CONFIG_SMP時,這個定義CPU的數量 - CONFIG_IOAPIC
enable IOAPIC,在AMD64系統要boot 64bit Linux kernel時,這個選項一定要enable。 - STACK_SIZE
LinuxBIOS的stack size,function call的stack size,default是0x2000 (8k) - HEAP_SIZE
LinuxBIOS的heap size,LinuxBIOS function使用malloc() function時使用的memory。default 0x2000,AMD64 一般要設0x4000 - XIP_ROM_BASE
當LinuxBIOS使用execution from ROM時,cache的start address。 - XIP_ROM_SIZE
同上,size。 - CONFIG_COMPRESS
image是壓縮的。使用壓縮的image會慢一點點。
到targets下run buildtareget.sh,指定一個platform後會產生一個.mak檔,到那個platform下make,開始動作,但是到最後build rom時出現錯誤。
在Documentation folder裏有Config這個檔,說明LinuxBIOS的config檔的格式,LinuxBIOS因為要符合很多個platform, Chipset,CPU,Motherboard。所以需要一個特殊的config檔,以避免source code有分支。
沒有留言:
張貼留言