FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages/

RISC-V FPGA-Zynq リポジトリのU-Bootの謎

RISC-V をFPGAで動かすにあたり必要な fpga-zynq リポジトリは、毎回Linuxをブートするにあたり以下のようなコマンドを入力してブートしている。

fatload mmc 0 0x3000000 uImage
fatload mmc 0 0x2A00000 devicetree.dtb
fatload mmc 0 0x1000000 uramdisk.image.gz
bootm 0x3000000 0x1000000 0x2A00000

しかし、これを毎回入力するのは面倒くさいし、よく見ると最初の立ち上がり時にエラーが出ている。これはどうにかして消せないだろうか?

Unknown command 'load' -try 'help'

f:id:msyksphinz:20180130231049p:plain

一応Xilinxのフォーラムには上がっているが、意味が分からない。

forums.xilinx.com

"Copying Linux from SD to RAM... RFS in ext4" のメッセージのあたりから、u-boot-xlnx/include/configs/zynq-common.h のあたりだと思うのだが、"load"コマンドというのがどこにも書いていないので困っている。

        "sdboot=if mmcinfo; then " \
                        "run uenvboot; " \
                        "echo Copying Linux from SD to RAM... && " \
                        "fatload mmc 0 ${kernel_load_address} ${kernel_image} && " \
                        "fatload mmc 0 ${devicetree_load_address} ${devicetree_image} && " \
                        "fatload mmc 0 ${ramdisk_load_address} ${ramdisk_image} && " \
                        "bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}; " \
                "fi\0" \

一応LinuxとU-Bootをリコンパイルしてみたが、変わらずだ。 fpga-zynq のリポジトリでは、 make arm-linuxLinuxとU-Bootを生成することができる。

  • common/Makefrag
arm-linux: arm-uboot # must first build uboot because we need tools
        # compile kernel
        git submodule update --init $(arm_linux_dir)
        # no make clean included here since one copy of linux should work on all boards
        cd $(arm_linux_dir) && make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig
        cd $(arm_linux_dir) && make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- -j$(JOBS)
        # convert zImage to uImage
        cd $(arm_linux_dir) && export PATH=$(uboot_dir)/tools:$$PATH && make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage
        mkdir -p $(output_delivery)
        cp $(arm_linux_dir)/arch/arm/boot/uImage $(output_delivery)/

arm-uboot:
        # compile board-compatible u-boot
        git submodule update --init $(uboot_dir)
        # copy relevant configuration files
        if [ -a soft_config/boards.cfg ] ; \
        then \
            cp soft_config/boards.cfg $(uboot_dir)/ ; \
        fi;
        cp soft_config/zynq_$(UBOOT_CONFIG).h $(uboot_dir)/include/configs/
        # actually build
        cd $(uboot_dir) && make CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_$(UBOOT_CONFIG)_config
        cd $(uboot_dir) && make CROSS_COMPILE=arm-xilinx-linux-gnueabi- -j$(JOBS)
        mkdir -p $(soft_build_dir)
        cp $(uboot_dir)/u-boot $(soft_build_dir)/u-boot.elf

再生成してSDカードに書き込んでみたが、やはり相変わらずだ...

2018/02/07追記。u-boot-xlnxのリビジョンを最新にすると正常ブートできるようになった。

github.com

cd common/u-boot-xlnx/
git checkout xilinx-v2017.4
cd ../../zedboard
emacs ../common/Makefrag
@@ -131,7 +131,7 @@ arm-linux: arm-uboot # must first build uboot because we need tools

 arm-uboot:
        # compile board-compatible u-boot
-       git submodule update --init $(uboot_dir)
+       # git submodule update --init $(uboot_dir)
        # copy relevant configuration files
        if [ -a soft_config/boards.cfg ] ; \
        then \

これでmakeを実行する。

make arm-uboot
make fpga-images-zedboard/boot.bin

これでイメージファイルをSDカードに書き込むと、正常ブートした。

f:id:msyksphinz:20180207225740p:plain