FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Rocket-Chip を ZedBoardにインプリしてLinuxを動作させる (Ubuntuで作業、boot.binを作る/Cortex-A9向けLinuxをビルドする編)

前回までで、FSBLを作ったので、今度はBOOT.binを作ってSDカードに入れる。

前回はまだやっていなかったので、u-bootを作成しておく。 fpga_zynq/zedboard/ で、

make arm-uboot

とタイプして、u-bootを作る。(何でもmakeするだけで作成されてしまう。勉強にはならないな...)

SDKの[Xilinx Tools]-->[Create Zynq Boot Image]を選択して、必要なものを突っ込んでいこう。

Download - RISC-V

上記のURLが示すように、まずは fpga_zynq/zedboard/deliver_output というディレクトリを作り、そこにSDカードに流し込むものを足していく。 まずは、output.bif を作成する必要があるらしい。

f:id:msyksphinz:20150224021334j:plain

ここに、3つのファイル

  • FSBL.elf
  • rocketchip_wrapper.bit
  • u-boot.elf

を登録して、BOOT.bin を作成した。

f:id:msyksphinz:20150224021529j:plain

f:id:msyksphinz:20150224021612j:plain

[Create]をクリックすると、BOOT.binを作成した。作成先はdeliver_outputだ。 ※ ちなみに、u-boot.elf を挿入し忘れてブートできずに小一時間悩んだ!もったいない!

なんかこんなプログラムを実行している。これが噂に聞くbootgenか!

bootgen -image output.bif -o /home/masayuki/riscv-hw/rocket-chip/fpga-zynq/zedboard/deliver_output/BOOT.bin

ディレクトリを見ると、まだこんな感じだ。

$ ls -lt
合計 4044
-rw-rw-r-- 1 masayuki masayuki 4133440  2月 23 22:55 BOOT.bin
-rw-rw-r-- 1 masayuki masayuki     281  2月 23 22:55 output.bif

じゃあ次は、Linuxをダウンロードしてビルドしよう。

これは、Cortex-A9向けのLinuxだ。まずはこれがCortex-A9上で動作して、Linuxが立ち上がる。それからフロントエンドを立ち上げて、PL上のRocket-Coreを動かすという寸法だ。

make arm-linux  # ダウンロードが始まってビルドされる。
make arm-dtb
cd deliver_output/
$ ls -lt
合計 7376
-rw-rw-r-- 1 masayuki masayuki    9243  2月 23 23:26 devicetree.dtb
-rw-rw-r-- 1 masayuki masayuki 3395816  2月 23 23:22 uImage
-rw-rw-r-- 1 masayuki masayuki 4133440  2月 23 22:55 BOOT.bin
-rw-rw-r-- 1 masayuki masayuki     281  2月 23 22:55 output.bif

ついでに、BOOT.binが説明ではboot.binになっているので、怖いので変えておく (関係ないって説明に書いてあるのに!)

$ ls -lt
合計 7376
-rw-rw-r-- 1 masayuki masayuki    9243  2月 23 23:26 devicetree.dtb
-rw-rw-r-- 1 masayuki masayuki 3395816  2月 23 23:22 uImage
-rw-rw-r-- 1 masayuki masayuki 4133440  2月 23 22:55 boot.bin
-rw-rw-r-- 1 masayuki masayuki     281  2月 23 22:55 output.bif

さらにramdiskを用意する。これも前回ビルドにチャレンジした気がするが、失敗したので、今回はリポジトリからそのまま引っ張ってくる。

$ make fetch-ramdisk
mkdir -p deliver_output
curl https://s3-us-west-1.amazonaws.com/riscv.org/fpga-zynq-files/uramdisk.image.gz > deliver_output/uramdisk.image.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 5845k  100 5845k    0     0   724k      0  0:00:08  0:00:08 --:--:-- 1217k

$ ls -lt deliver_output/
合計 13224
-rw-rw-r-- 1 masayuki masayuki 5985405  2月 23 23:28 uramdisk.image.gz
-rw-rw-r-- 1 masayuki masayuki    9243  2月 23 23:26 devicetree.dtb
-rw-rw-r-- 1 masayuki masayuki 3395816  2月 23 23:22 uImage
-rw-rw-r-- 1 masayuki masayuki 4133440  2月 23 22:55 boot.bin
-rw-rw-r-- 1 masayuki masayuki     281  2月 23 22:55 output.bif

大分いろいろ追加された。