LoginSignup
7
3

More than 5 years have passed since last update.

zyboでXilinxリポジトリのu-bootとLinuxを動かす

Posted at

概要

Xilinx社の管理しているリポジトリのu-bootとlinuxをzyboで動くようにしました。

環境

  • ホストPC: lubuntu 18.04
  • コンパイラ: arm-linux-gnueabihf-gcc 7.3.0

u-boot

ソースのダウンロード

u-boot公式のソースをgitでダウンロードしてくる。

$ git clone https://github.com/Xilinx/u-boot-xlnx.git
$ cd u-boot-xlnx
$ git checkout -b xilinx-v2018.2_zybo refs/tags/xilinx-v2018.2

u-bootソースを修正

uEnv.txtを使うように./include/configs/zynq-common.hを修正します。
CONFIG_BOOTCOMMAND、CONFIG_EXTRA_ENV_SETTING、CONFIG_CMD_BOOTZの3つのマクロを修正します。ここを参考にしています。

$ cd xilinx-v2018.2_zybo
$ vi ./include/configs/zynq-common.h
#define CONFIG_BOOTCOMMAND \
    "if mmc rescan; then " \
        "echo SD/MMC found on device...;" \
        "if run loadbootenv; then " \
            "echo Loaded environment from ${bootenv};" \
            "run importbootenv;" \
        "fi;" \
        "if test -n $uenvcmd; then " \
            "echo Running uenvcmd ...;" \
            "run uenvcmd;" \
        "fi;" \
        "if run loadbootscript; then " \
            "run bootscript; " \
        "fi; " \
    "fi;" \
    "run $modeboot"

/* Default environment */
#ifndef CONFIG_EXTRA_ENV_SETTINGS
#define CONFIG_EXTRA_ENV_SETTINGS      \
   "fit_image=fit.itb\0"       \
   "load_addr=0x2000000\0"     \
   "fit_size=0x800000\0"       \
   "flash_off=0x100000\0"      \
   "nor_flash_off=0xE2100000\0"    \
   "fdt_high=0x20000000\0"     \
   "initrd_high=0x20000000\0"  \
   "norboot=echo Copying FIT from NOR flash to RAM... && " \
       "cp.b ${nor_flash_off} ${load_addr} ${fit_size} && " \
       "bootm ${load_addr}\0" \
   "sdboot=echo Copying FIT from SD to RAM... && " \
       "load mmc 0 ${load_addr} ${fit_image} && " \
       "bootm ${load_addr}\0" \
   "jtagboot=echo TFTPing FIT to RAM... && " \
       "tftpboot ${load_addr} ${fit_image} && " \
       "bootm ${load_addr}\0" \
   "usbboot=if usb start; then " \
           "echo Copying FIT from USB to RAM... && " \
           "load usb 0 ${load_addr} ${fit_image} && " \
           "bootm ${load_addr}\0" \
       "fi\0" \
   "bootenv=uEnv.txt\0" \
   "loadbootenv=load mmc 0 ${load_addr} ${bootenv}\0" \
   "importbootenv=echo Importing environment from mmc ...;" \
           "env import -t $load_addr $filesize\0" \
   "loadbootscript=load mmc 0 ${load_addr} boot.scr\0" \
   "bootscript=echo Running bootscript from mmc ...;" \
           "source ${load_addr}\0" \
   DFU_ALT_INFO
#endif

#define CONFIG_CMD_BOOTZ

コンパイル

make ARCH=arm zynq_zybo_defconfig
make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

ワークディレクトリ直下にu-boot.imgが、splフォルダの中にboot.binが生成されます。

linux

ソースのダウンロード

$ git clone https://github.com/Xilinx/linux-xlnx.git
$ cd linux-xlnx
$ git checkout -b xilinx-v2018.2_zybo refs/tags/xilinx-v2018.2
$ make ARCH=arm xilinx_zynq_defconfig
$ make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

./arch/arm/boot/にzImageと./arch/arm/boot/dtsにzynq-zybo.dtbが生成されます。

uEnv.txt

u-bootの設定でuEnv.txtの内容でブートするように修正したので次のような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

SDカードの用意

ここを参考にして第2パーティションにubuntuのルートファイルシステムが存在して、sudoグループに所属しているユーザyoshiが存在するとします。

第1パーティションに今まで作成したファイルと、FPGAのコンフィグレーションデータdesign.bitをコピーします。コピーした後のSDカードの中身はこのようになっています。

$ ls /media/yoshi/ZYBO_BOOT/
boot.bin  design.bit  u-boot.img  uEnv.txt  zImage  zynq-zybo.dtb

ZYBOの起動

SDカードをZYBOに挿して起動します。シリアル接続はscreenコマンドなどで接続します。zyboの電源を入れないと接続出来ないが、電源を入れてから接続するとメッセージが途中からしか出力されないので、接続できたら一旦ボタンスイッチPS-SRSTでリセットすると最初からメッセージが出力されます。

起動メッセージが出力された後ログインできるので、作成したユーザとパスワードでログインします。無事ログインでることが確認できました。

$ sudo screen /dev/ttyUSB1 115200

# 起動メッセージ省略

Ubuntu 18.04 LTS airi ttyPS0

airi login: yoshi                                                                 
Password: 
Last login: Sun Jan 28 16:36:02 UTC 2018 on ttyPS0
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.14.0-xilinx armv7l)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

yoshi@airi:~$ pwd
/home/yoshi
yoshi@airi:~$ uname -a
Linux airi 4.14.0-xilinx #4 SMP PREEMPT Mon Aug 13 07:13:30 JST 2018 armv7l armv7l armv7l GNU/Linux
7
3
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
7
3