Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Zynqのqemu (その3)


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