環境
- Lubuntu 18.04
参考資料
必要なパッケージのインストール
$ sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev xterm
レシピ集のダウンロード
スクリプトの準備
#!/bin/bash
# version
VERSION=sumo
# download poky
git clone git://git.yoctoproject.org/poky.git -b $VERSION
# download additional recipie
mkdir -p sources
cd sources
git clone git://github.com/openembedded/meta-openembedded.git -b $VERSION
git clone git://git.linaro.org/openembedded/meta-linaro.git -b $VERSION
git clone git://github.com/meta-qt5/meta-qt5.git -b $VERSION
git clone git://github.com/xilinx/meta-xilinx -b $VERSION
cd ..
スクリプトの実行
$ ./download_meta.sh
ビルド環境の準備
$ cd poky
$ source ./oe-init-env ../build_zyboz7
bblayers.conf
次のように修正します。
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
/home/yoshi/FPGA/yocto/poky/meta \
/home/yoshi/FPGA/yocto/poky/meta-poky \
/home/yoshi/FPGA/yocto/poky/meta-yocto-bsp \
"
BBLAYERS += " ${TOPDIR}/../sources/meta-openembedded/meta-oe "
BBLAYERS += " ${TOPDIR}/../sources/meta-xilinx/meta-xilinx-bsp "
BBLAYERS += " ${TOPDIR}/../sources/meta-xilinx/meta-xilinx-contrib "
local.conf
-
ターゲットとするマシンの設定
MACHINE ??= "zybo-zynq7"
-
ダウンロード先の設定
DL_DIR ?= "${TOPDIR}/../downloads"
-
デバッグ用の設定
EXTRA_IMAGE_FEATURES ?= "debug-tweaks tools-sdk"
-
パッケージの追加
# Install Application IMAGE_INSTALL_append = " nano" IMAGE_INSTALL_append = " minicom" IMAGE_INSTALL_append = " lrzsz" IMAGE_INSTALL_append = " ethtool" IMAGE_INSTALL_append = " libdrm" IMAGE_INSTALL_append = " i2c-tools" # remove splash IMAGE_INSTALL_remove = " psplash" DISTRO_FEATURES_append = " x11"
ビルド
$ bitbake core-image-minimal
$ ls tmp/deploy/images/zybo-zynq7/
boot.bin
boot.bin-zybo-zynq7
boot.bin-zybo-zynq7-2018.01-r0
core-image-minimal-zybo-zynq7-20181024121207.rootfs.cpio
core-image-minimal-zybo-zynq7-20181024121207.rootfs.cpio.gz.u-boot
core-image-minimal-zybo-zynq7-20181024121207.rootfs.manifest
core-image-minimal-zybo-zynq7-20181024121207.rootfs.tar.gz
core-image-minimal-zybo-zynq7-20181024121207.testdata.json
core-image-minimal-zybo-zynq7.cpio
core-image-minimal-zybo-zynq7.cpio.gz.u-boot
core-image-minimal-zybo-zynq7.manifest
core-image-minimal-zybo-zynq7.tar.gz
core-image-minimal-zybo-zynq7.testdata.json
modules--4.14-xilinx-v2018.1+git0+4ac76ffacb-r0-zybo-zynq7-20181024121207.tgz
modules-zybo-zynq7.tgz
u-boot-zybo-zynq7-2018.01-r0.elf
u-boot-zybo-zynq7-2018.01-r0.img
u-boot-zybo-zynq7.elf
u-boot-zybo-zynq7.img
u-boot.elf
u-boot.img
uEnv.txt
uImage
uImage--4.14-xilinx-v2018.1+git0+4ac76ffacb-r0-zybo-zynq7-20181024121207.bin
uImage--4.14-xilinx-v2018.1+git0+4ac76ffacb-r0-zynq-zybo-20181024121207.dtb
uImage-zybo-zynq7.bin
uImage-zynq-zybo.dtb
zynq-zybo.dtb
ここでビルドした生成物は旧ZYBO用でZYBO-Z7で使えるのはルートファイルシステムの
- core-image-minimal-zybo-zynq7.tar.gz
だけみたいです。u-bootやLinuxのイメージは以降で作成します。
SDKの構築
SDKのビルド
$ bitbake core-image-minimal -c populate_sdk
生成物
$ ls ./tmp/deploy/sdk/
poky-glibc-x86_64-core-image-minimal-cortexa9hf-neon-toolchain-2.5.1.host.manifest
poky-glibc-x86_64-core-image-minimal-cortexa9hf-neon-toolchain-2.5.1.sh
poky-glibc-x86_64-core-image-minimal-cortexa9hf-neon-toolchain-2.5.1.target.manifest
poky-glibc-x86_64-core-image-minimal-cortexa9hf-neon-toolchain-2.5.1.testdata.json
インストール
$ sudo ./tmp/deploy/sdk/poky-glibc-x86_64-core-image-minimal-cortexa9hf-neon-toolchain-2.5.1.sh
Poky (Yocto Project Reference Distro) SDK installer version 2.5.1
=================================================================
Enter target directory for SDK (default: /opt/poky/2.5.1): /opt/poky/2.5.1_zybo-z7
The directory "/opt/poky/2.5.1_zybo-z7" already contains a SDK for this architecture.
If you continue, existing files will be overwritten! Proceed[y/N]? y
Extracting SDK.......................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . /opt/poky/2.5.1_zybo-z7/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
u-bootのダウンロード
xilinxがメンテナンスしているu-bootをダウンロードします。
$ git clone git://github.com/Xilinx/u-boot-xlnx
zybo用の初期設定をします。
$ cd ./u-boot-xlnx
$ make zynq_zybo_defconfig
ps7_init_gpl.c/hを適用します。vivadoで作成した.hdfファイルからps7_init_gpl.cとps7_init_gpl.hをu-bootにコピーします。
$ unzip zynq_wrapper.hdf
$ cp ps7_init* ./board/xilinx/zynq/zynq-zybo/
Device Treeの修正をします。旧ZYBO用に50MHzで設定されているので、33.3MHzに修正します。
&clkc {
// ps-clk-frequency = <50000000>;
ps-clk-frequency = <33333333>;
};
ビルドします。
$ make -j8
生成物のうち以下2つのファイルを以降で使用します。
- u-boot.img
- ./spl/boot.bin
Linux Kernelのダウンロード
xilinxがメンテナンスしているLinux kernelをダウンロードします。
$ git clone git://github.com/Xilinx/linux-xlnx -b xilinx-v2018.2
zybo用の初期設定をします。
$ cd ./linux-xlnx
$ make xilinx_zynq_defconfig
Device Treeの修正をします。旧ZYBO用に50MHzで設定されているので、33.3MHzに修正します。メモリも512MBの設定から1GBへ変更します。
memory@0 {
device_type = "memory";
// reg = <0x0 0x20000000>;
reg = <0x0 0x40000000>;
};
&clkc {
// ps-clk-frequency = <50000000>;
ps-clk-frequency = <33333333>;
};
ビルドします。
$ make -j8
生成物のうち以下2つのファイルを以降で使用します。
- ./arch/arm/boot/zImage
- ./arch/arm/boot/dts/zynq-zybo.dtb
SDカードの準備
パーティションの作成
パーティションの作成については下記の記事を参考にしてブート用のパーティションとルートファイルシステム用のパーティションの2つのパーティションを作成します。下記の記事ではUbuntuのルートファイルシステムを使用していますが、この記事では先程作成したルートファイルシステムを使用します。
ファイルのコピー
SDカードのデバイスsdb1が/media/yoshi/BOOTにsdb2が/media/yoshi/ROOTにマウントされているとして、次のようにファイルをコピーします。
ルートファイルシステムのコピー
$ cd /media/yoshi/ROOT
$ sudo tar xvf ~/build_zyboz7/tmp/deploy/images/zybo-zynq7/core-image-minimal-zybo-zynq7.tar.gz
ブートファイルのコピー
$ cd /media/yoshi/BOOT
$ sudo cp ~/u-boot-xlnx/u-boot.img ~/u-boot-xlnx/spl/boot.bin ./
$ sudo cp ~/linux-xlnx/arch/arm/boot/zImage ~/linux-xlnx/arch/arm/boot/dts/zynq-zybo.dtb ./
$ sudo cp ~/design.bit ./
$ vi ~/uEnv.txt
bootargs=console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1
uenvcmd=fatload mmc 0 0x03000000 design.bit && fpga loadb 0 0x03000000 $filesize && fatload mmc 0 0x03000000 zImage && fatload mmc 0 0x02A00000 zynq-zybo.dtb && bootz 0x03000000 - 0x02A00000
$ sudo cp ~/uEnv.txt ./
SDカードのBOOTパーティションの中身は以下のような状態になります。
$ ls ./
boot.bin design.bit u-boot.img uEnv.txt zImage zynq-zybo.dtb
ZYBOの起動
SDカードをZYBOに挿してシリアルで接続すると起動メッセージが見えてログインもできました。
Poky (Yocto Project Reference Distro) 2.5.1 zybo-zynq7 /dev/ttyPS0
zybo-zynq7 login: root
root@zybo-zynq7:~# ps
PID TTY TIME CMD
863 ttyPS0 00:00:00 sh
867 ttyPS0 00:00:00 ps