!気づいたら 12月. なんだか暖かいままだし,10月くらいの気分... とかいってるとやばい. !ZCU111の復習 2020.2版のTRDがでてたので動作確認がてら PetaLinuxを使ったZCU111向けのビルド手順の再確認をした unzip rdf0476-zcu111-rf-dc-eval-tool-2020-2.zip cd rdf0476-zcu111-rf-dc-eval-tool-2020-2/apu/ petalinux-create -t project -s rfsoc_petalinux_bsp.bsp cd rfsoc_petalinux_bsp/ petalinux-config --get-hw-description=../../pl/MTSDesign_8x8/pre-built/rfsoc_trd petalinux-build petalinux-package --force --boot --fsbl zynqmp_fsbl.elf --pmufw pmufw.elf --u-boot u-boot.elf ls -l BOOT.BIN image.ub boot.scr BOOT.BIN image.ub boot.scrをSDカードにコピー. autostart.shの中身は #!/bin/sh ifconfig -a | grep eth0 RESULT=$? if [ $RESULT -eq 0 ]; then ifconfig eth0 192.168.1.3 rftool fi なので,そのまま流用. !PetaLinuxを使わずにZynq MPSoC向けにLinuxなどをビルド 2019.1で作業する :: 必要なソースコードをダウンロード https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842156/Fetch+Sources $ cd ${WORK} $ git clone https://github.com/Xilinx/linux-xlnx.git $ git clone https://github.com/Xilinx/u-boot-xlnx.git $ git clone https://github.com/Xilinx/device-tree-xlnx.git $ git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git $ git clone https://github.com/Xilinx/arm-trusted-firmware.git $ git clone https://github.com/Xilinx/xen.git $ git clone https://github.com/Xilinx/embeddedsw.git :: FSBLのビルド https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841798/Build+FSBL 適当に作ったhdfをコピー. $ export CROSS_COMPILE=aarch64-linux-gnu- $ mkdir ${WORK}/fsbl; cd ${WORK}/fsbl $ cp ${WORK}/zcu111_base/zcu111_base.sdk/desgin_1_wrapper.hdf . で, $ hsi hsi% set hwdsgn [open_hw_design design_1_wrapper.hdf] hsi% generate_app -hw $hwdsgn -os standalone -proc psu_cortexa53_0 -app zynqmp_fsbl -compile -sw fsbl -dir fsbl :: dtcのビルド https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841988/Build+Device+Tree+Compiler+dtc これはホスト上のプログラムのビルド(のはず) $ sudo apt install pkg-config libyaml-dev # if required $ cd ${WORK}/dtc $ make :: PMUファームウェアのビルド https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842462/Build+PMU+Firmware $ export CROSS_COMPILE=aarch64-linux-gnu- $ mkdir ${WORK}/pmc; cd ${WORK}/pmc $ cp ${WORK}/zcu111_base/zcu111_base.sdk/desgin_1_wrapper.hdf . $ hsi hsi% set hwdsgn [open_hw_design design_1_wrapper.hdf] hsi% generate_app -hw $hwdsgn -os standalone -proc psu_pmu_0 -app zynqmp_pmufw -compile -sw pmufw -dir pmu :: ARM Trusted Firmwareのビルド https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842305/Build+ARM+Trusted+Firmware+ATF $ export CROSS_COMPILE=aarch64-linux-gnu- $ cd ${WORK}/arm-trusted-firmware $ make PLAT=zynqmp RESET_TO_BL31=1 ./build/zynqmp/release/bl31/bl31.elf ができる :: U-BOOT https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841973/Build+U-Boot $ export CROSS_COMPILE=aarch64-linux-gnu- $ export ARCH=aarch64 $ cd ${WORK}/u-boot-xlnx $ make distclean $ make xilinx_zynqmp_virt_defconfig $ export DEVICE_TREE="zynqmp-zcu111-revA" $ make u-boot や tools/mkimage などができる :: RootFS https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842473/Build+and+Modify+a+Rootfs $ cd ${WORK} $ wget -O ramdisk.image.gz "https://xilinx-wiki.atlassian.net/wiki/download/attachments/18842473/arm_ramdisk.image.gz?version=1&modificationDate=1536675884034&cacheVersion=1&api=v2" $ mkimage -A arm64 -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz :: Device tree https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842279/Build+Device+Tree+Blob XilinxのDTGを使ってハードウェア定義情報からDevice Treeファイルを作る $ cd ${WORK}/device-tree-xlnx $ git checkout xilinx-v2019.1 $ cp zcu111_base/zcu111_base.sdk/design_1_wrapper.hdf . $ hsi hsi% open_hw_design design_1_wrapper.hdf hsi% set_repo_path . hsi% create_sw_design device-tree -os device_tree -proc psu_cortexa53_0 hsi% generate_target -dir my_dts hsi% close_hw_design [current_hw_design] hsi% exit my_dts/ の下にいろいろファイルが作られたので,dtbを作る $ cd my_dts $ gcc -I my_dts -E -nostdinc -undef -D__DTS__ -x assembler-with-cpp -o system.dts system-top.dts $ dtc -I dts -O dtb -o system.dtb system.dts :: カーネルのビルド https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842481/Build+kernel $ export CROSS_COMPILE=aarch64-linux-gnu- $ cd ${WORK}/linux-xlnx $ make ARCH=arm64 xilinx_zynqmp_defconfig $ make ARCH=arm64 menuconfig $ make ARCH=arm64 :: boot.binの生成 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841976/Prepare+boot+image $ cd ${WORK} 次の内容で boot.bif を作る image : { [destination_cpu = a53-0, bootloader]fsbl.elf [pmufw_image]pmufw.elf [destination_cpu = a53-0, exception_level = el-3, trustzone]bl31.elf [destination_cpu = a53-0, exception_level = el-2]u-boot.elf } で,必要なファイルを集めてbootgen $ cp fsbl/fsbl/executable.elf fsbl.elf $ cp pmc/pmu/executable.elf pmufw.elf $ cp arm-trusted-firmware/build/zynqmp/release/bl31/bl31.elf . $ cp u-boot-xlnx/u-boot.elf . $ bootgen -image boot.bif -arch zynqmp -w -o i BOOT.bin :: SDカードの用意 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841655/Prepare+Boot+Medium 先頭に200MくらいのFAT領域,残りにext4領域を作る FAT領域のタイプはc(W95 FAT32 (LBA)),ext4の方は83(Linux)にセットする. で, mkfs.vfat -F 32 -n boot /dev/sdX1 mkfs.ext4 -L root /dev/sdX2 などとしてフォーマット.Xのとこは自分の環境にあわせる. :: コピー あとは,SDカードの先頭に作ったFATパーティションに * BOOT.bin * linux-xlnx/arch/arm64/boot/Image * linux-xlnx/arch/arm64/boot/dts/xilinx/zynqmp-zcu111-revA.dtb * device-tree-xlnx/my_dts/system.dtb * uramdisk.image.gz をSDカードにコピー. :: 起動してみる 途中でインタラプトして, ZynqMP> fatload mmc 0 0x03000000 Image ZynqMP> fatload mmc 0 0x02a00000 system.dtb ZynqMP> fatload mmc 0 0x20000000 uramdisk.image.gz ZynqMP> setenv bootargs earlycon clk_ignore_unused root=/dev/ram rw earlyprintk ZynqMP> booti 0x03000000 0x20000000 0x02a00000 とすれば起動する. 自分で作ったdtbだとSDカードを認識しなかった /dev/mmcblk0 が生えなかったけど, ZynqMP> fatload mmc 0 0x03000000 Image ZynqMP> fatload mmc 0 0x02a00000 zynqmp-zcu111-revA.dtb ZynqMP> fatload mmc 0 0x20000000 uramdisk.image.gz ZynqMP> setenv bootargs earlycon clk_ignore_unused root=/dev/ram rw earlyprintk ZynqMP> booti 0x03000000 0x20000000 0x02a00000 としたら /dev/mmcblk0 が生えた というわけで, ZynqMP> fatload mmc 0 0x03000000 Image ZynqMP> fatload mmc 0 0x02a00000 zynqmp-zcu111-revA.dtb ZynqMP> setenv bootargs earlycon clk_ignore_unused consoleblank=0 root=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait ZynqMP> booti 0x03000000 - 0x02a00000 として,第二パーティションから起動. :: Ubuntuをセットアップする ZYBOでUbuntuを動かしたとき https://github.com/fpga-design-contest/ad-refkit/blob/master/docs/sec4/index.md と同じようにセットアップ $ sudo apt install debootstrap # if required $ mkdir -p arm64 $ sudo debootstrap --foreign --arch arm64 bionic ./arm64 http://ports.ubuntu.com/ $ sudo apt install qemu-user-static $ sudo cp /usr/bin/qemu-aarch64-static ./arm64/usr/bin/ $ sudo chroot ./arm64 I have no name!@qdev:/# ./debootstrap/debootstrap --second-stage I have no name!@qdev:/# passwd I have no name!@qdev:/# su root@ubuntu:# passwd root@ubuntu:# locale-gen ja_JP.UTF-8 en_US.UTF-8 root@ubuntu:# apt install software-properties-common root@ubuntu:# add-apt-repository universe && apt update root@ubuntu:# apt install build-essential flex bison net-tools root@ubuntu:# apt install openssh-server root@ubuntu:# systemctl enable ssh root@ubuntu:# adduser user root@ubuntu:# apt install git root@ubuntu:# mkdir -p /usr/local/src/; cd /usr/local/src root@ubuntu:# git clone -b v1.4.7 https://git.kernel.org/pub/scm/utils/dtc/dtc.git dtc && cd dtc root@ubuntu:# make && make HOME=/usr install-bin root@ubuntu:# cd .. && rm -rf dtc root@ubuntu:# sed -i -e 's/#PasswordAuthentication/PasswordAuthentication/g' /etc/ssh/sshd_config root@ubuntu:# sed -i -e 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config root@ubuntu:# sed -i -e 's/AcceptEnv/#AcceptEnv/g' /etc/ssh/sshd_config !結婚記念日 でした.16年目だそうです.妻に感謝.