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