LoginSignup
6
1

More than 5 years have passed since last update.

初めてのYocto環境で作成したLinuxをZYBOで動かす

Last updated at Posted at 2018-10-28

環境

  • 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
6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1