Generate ace file
前两天生成了.bit文件,按照OpenSPARC T1 Processor Design and Verification User’s Guide里的方法就可以 通过调试链接开发板把要跑的操作系统传上去了。
但是我想用CF卡。CF卡上之前跑Solaris是一个.ace文件,大概100MB左右。
所以,首先就要生成.ace文件,并且把bootloader和Solaris系统也都装进取。
Xilinx自带的iMPACT,也就是bin下的impact可以生成ace,但是没找到怎样把Solaris也放进去。
主要就是靠网上搜到的Xilinx OpenSPARC Tutorial 2了。里面说了运行独立程序的步骤,但把程序的那个gz包换成Solaris也可以。
u@unamed:~/prjs/testaceos$ source ~/Xilinx/10.1/ISE/settings64.sh
u@unamed:~/prjs/testaceos$ source ~/Xilinx/10.1/EDK/settings64.sh
u@unamed:~/prjs/testaceos$ xmd -tcl genace.tcl -jprog -target mdm -board ml505 -hw ~/prjs/OpenSPARCT1/design/sys/edk/implementation/system.bit -elf executable.elf -data ./1c4t_obp_prom.bin 0x8ff00000 -data ./ramdisk.snv-b77-nd.gz 0x8af00000 -ace uty_testopensolaris.ace
这些文件都是OpenSPARC里自带的 ~/prjs/OpenSPARCT1/design/sys/edk/ccx-firmware/executable.elf ~/prjs/OpenSPARCT1/design/sys/edk/os/proms/1c4t_obp_prom.bin ~/prjs/OpenSPARCT1/design/sys/edk/os/OpenSolaris/proto/ramdisk.snv-b77-nd.gz
才发现prom我用的是1c4t的,1核4线程,但我编译的sparc内核是单线程的,也就是1c1t。不过看来影响不大。
最主要的是这个genace.tcl文件,在这个位置。但这个文件也是可以处理ml505开发板的。 ~/prjs/OpenSPARCT1/design/sys/edk_bee3/bee3_util/ace/genace_bee3.tcl
只是里面有一个小问题。 line 472:
460 proc get_elf_startaddr { target_type elffile } {
461 if { ![file exists $elffile] } {
462 puts "Error: File $elffile not found\n"
463 return -code error
464 }
465
466 if { $target_type == "ppc_hw" } {
467 if { [catch {set saddr [exec powerpc-eabi-objdump -x $elffile | grep -w "start address"]} err] } {
468 puts "Error: Executable $elffile does not contain start address.."
469 return -code error
470 }
471 } else {
472 if { [catch {set saddr [exec mb-objdump -x $elffile | grep -w "start address"]} err] } {
473 puts "Error: Executable $elffile does not contain start address.."
474 return -code error
475 }
476 }
477 set saddr_list [string trimleft $saddr]
478 set saddr [lindex $saddr_list end]
479 return $saddr
480 }
mb-objdump改成objdump。
Memory map addresses也在OpenSPARC T1 Processor Design and Verification User’s Guide的p6-10里给出了。
现在有了ace文件,就得说下该怎么在开发板上跑。
tutorial里说的是把板上的sw3开关拌到10101010,表示从CF卡启动,并且0-2位是010,表示读rev2目录里的文件, 所以要把生成的ace文件放在/rev2目录下。 这个听上去很合理,因为ace文件里还有OBP(Open Boot PROM)。但其实这个prom应该是OpenSPARC启动时的firmware, microblaze启动时运行的是microblaze_0_bootloop。ccx-firmware是干啥的还没搞清楚。 而我这个ml505开发板启动的时候,如果sw3在10101000的时候(rev0),是先进入个小菜单的。 启动自己的ace文件可以放在/ML50X/cfg6/里,开机的时候选6。