ZCU111でUbuntu Linuxの起動に成功
大学の研究室で使っているZCU111用にLinuxをコンパイルし、Ubuntu Linuxを起動させることができました。
といっても、これはそんなに難しくはありませんでした。
なぜかというと、XILINXはXILINXのボード用のボード定義ファイルを用意してくれているからです。
ご存じのとおり、Linuxカーネルの構築は
make ARCH=arm64 xilinx_zynqmp_defconfig
でUltraScale用のデフォルトのコンフィグを作り、ネットワークの有効化などを適当に行ったのち、
make ARCH=arm64
mkimage -A arm64 -O linux -C none -T kernel -a 0x3000000 -e 0x3000000 -d arch/arm64/boot/Image uImage
を行います。
カーネルの構築で一番わけがわからないのはデバイスツリーだと思いますが、さすがはXILINXの標準ボードだけあって、linux-xlnx/arch/arm64/boot/dts/xilinxにデバイスツリー・ソースも入っていて一緒にビルドされます。そのディレクトリには出来上がったzynqmp-zcu111-revA.dtbがあるので、適当に改名してSDカードの第一パーティションに入れておけばよいのです。
標準ボードだとデバイスツリーがあらかじめ用意されているというのが、非常にありがたいことです。
なお、SDカードの第一パーティションはFSBLが入るためのFAT32にして、第二パーティションにEXT4でLinuxのファイルシステムを入れるというやり方をするのであれば、デバイスツリーのchosenを、
chosen {
bootargs = "console=ttyPS0,115200, root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1 earlycon";
stdout-path = "serial0:115200n8";
};
にします。
また、SDカードの第一パーティションに存在する謎のファイルboot.scrとboot.scriptですが、boot.scriptをコンパイルするとboot.scrになります。
これは作らなくても構いません。従来はuEnv.txtでやっていたことをif文やwhile文や環境変数を使って、さまざまな起動メディアに柔軟に対応できるようにしようとした結果boot.scrになったようです。
SDカードから起動すると決めているのであれば、従来どおりのuEnv.txtを置いておけば全く問題ありません。
つまり、ZYNQ UltraScale+であっても、SDカードの第一パーティションには、
- boot.bin
- bl31.elf
- u-boot.elf
- devicetree.dtb
- uImage
があればよいのです。増えたのはbl31.elfだけです。
| 固定リンク
コメント