トップ 一覧 Farm 検索 ヘルプ RSS ログイン

Diary/2020-12-1の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!気づいたら
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年目だそうです.妻に感謝.