Zynqのqemu (その2)の続きです。
375 static QEMUMachine xilinx_zynq_a9_machine = { 376 .name = "xilinx-zynq-a9", 377 .desc = "Xilinx Zynq Platform Baseboard for Cortex-A9", 378 .init = xilinx_pele_a9_init, 379 .use_scsi = 1, 380 .max_cpus = 2, 381 .no_sdcard = 1 382 };の.initで設定したxilinx_pele_a9_init関数が呼び出されます。
xilinx_pele_a9_init関数では、xilinx_init関数を呼び出しています。
363 static void xilinx_pele_a9_init(ram_addr_t ram_size, 364 const char *boot_device, 365 const char *kernel_filename, const char *kernel_cmdline, 366 const char *initrd_filename, const char *cpu_model) 367 { 368 if (!cpu_model) { 369 cpu_model = "cortex-a9"; 370 } 371 xilinx_init(ram_size, boot_device, kernel_filename, kernel_cmdline, 372 initrd_filename, cpu_model); 373 } 374
xilinx_init関数は、xilinx.cファイルのほとんどになります。
52 static void xilinx_init(ram_addr_t ram_size, 53 const char *boot_device, 54 const char *kernel_filename, const char *kernel_cmdline, 55 const char *initrd_filename, const char *cpu_model) 56 {xilinx_init関数は、RAMサイズ、Linuxのカーネル、コマンドライン、initrcファイル、CPUモデル名を引数に取ります(boot_deviceは、xilinx_init関数では使われていません)。
このxilinx_init関数内でZynq内部の次のような機能に対応するコードがあります。
DRAM On-chip memory (256KB) Flash memory QSPI Flash (32MB) Nand Controller SMC SLCR (System Level Control Register) A9-MPCore (Dual Core) 割り込み GPIO LQSPI CAN I2C SPIS UART Timer Watch Dog Timer SD Card Drive NIC DMAC PL330 (L2-Cache) Devcfg
次回は、実際、どのようなことを行っているのかを見ていきます。
検証、Verification、FPGA