Help us understand the problem. What is going on with this article?

UltraZed 向け Debian GNU/Linux の構築(Debian9 Root File System編)

More than 1 year has passed since last update.

はじめに

UltraZed-EG スターターキットに Debian GNU/Linux を構築する方法について、具体的な方法をいくつかに分けて説明します。

この記事では、Debian9 Root File System の構築について説明をします。

必要な環境

私は Ubuntu 上で Debian9 Root File System を構築しました。Debian 系のプラットフォームを用意してください。

まずはプラットフォームに構築に必要なツールをインストールします。

shell$ apt-get install qemu-user-static debootstrap binfmt-support

構築

構築環境の準備

次の URL から git clone でリポジトリをダウンロードして v2017.3.0 をチェックアウトします。

shell$ git clone git://github.com/ikwzm/ZynqMP-FPGA-Linux
shell$ cd ZynqMP-FPGA-Linux
shell$ git checkout v2017.3.0

環境変数の設定

shell$ export targetdir=debian9-rootfs
shell$ export distro=stretch

構築(ステージ1)

shell$ mkdir $targetdir
shell$ sudo debootstrap --arch=arm64 --foreign $distro    $targetdir
shell$ sudo cp /usr/bin/qemu-aarch64-static               $targetdir/usr/bin
shell$ sudo cp /etc/resolv.conf                           $targetdir/etc
shell$ sudo cp scripts/build-debian9-rootfs-with-qemu.sh  $targetdir
shell$ sudo cp linux-image-4.9.0-xlnx-v2017.3-zynqmp-fpga_4.9.0-xlnx-v2017.3-zynqmp-fpga-1_arm64.deb   $targetdir
shell$ sudo cp linux-headers-4.9.0-xlnx-v2017.3-zynqmp-fpga_4.9.0-xlnx-v2017.3-zynqmp-fpga-1_arm64.deb $targetdir

QEMU による構築(ステージ2)

これ以降は QEMU(arm64版) と chroot を使ってRoot File System を構築します。

shell$ sudo chroot $targetdir

ここから、次の2種類の方法があります。

  1. build-debian9-rootfs-with-qemu.sh を使って楽々構築
  2. 一歩一歩コマンドを打ち込みつつ構築

どちらもやってることは同じなので、ここでは一歩一歩コマンドを打ち込む方法を説明します。

APT の設定

debian9-rootfs# distro=stretch
debian9-rootfs# export LANG=C
debian9-rootfs# /debootstrap/debootstrap --second-stage
debian9-rootfs# cat <<EOT > /etc/apt/sources.list
deb     http://ftp.jp.debian.org/debian            stretch         main contrib non-free
deb-src http://ftp.jp.debian.org/debian            stretch         main contrib non-free
deb     http://ftp.jp.debian.org/debian            stretch-updates main contrib non-free
deb-src http://ftp.jp.debian.org/debian            stretch-updates main contrib non-free
deb     http://security.debian.org/debian-security stretch/updates main contrib non-free
deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free
EOT
debian9-rootfs# cat <<EOT > /etc/apt/apt.conf.d/71-no-recommends
APT::Install-Recommends "0";
APT::Install-Suggests   "0";
EOT
debian9-rootfs# apt-get update

基本的なアプリケーションのインストール

debian9-rootfs# apt-get install -y locales dialog
debian9-rootfs# dpkg-reconfigure locales
debian9-rootfs# apt-get install -y net-tools openssh-server ntpdate resolvconf sudo less hwinfo ntp tcsh zsh

hostname の設定

ここでは debian-fpga という名前をつけています。ここらへんはお好みに合わせてください。

debian9-rootfs# echo debian-fpga > /etc/hostname

root のパスワードの設定

debian9-rootfs# passwd

ここで rootのパスワードを何にするか聞かれるので適当に admin とか入力してください。

debian9-rootfs# cat <<EOT >> /etc/securetty
# Seral Port for Xilinx Zynq
ttyPS0
EOT

FPGA ユーザーの追加

debian9-rootfs# adduser fpga

ここで fpga ユーザーのパスワードを何にするか聞かれるので適当に fpga とか入力してください。

debian9-rootfs# echo "fpga ALL=(ALL:ALL) ALL" > /etc/sudoers.d/fpga

sshd config の設定

debian9-rootfs# sed -i -e 's/#PasswordAuthentication/PasswordAuthentication/g' /etc/ssh/sshd_config

Time Zone の設定

debian9-rootfs# dpkg-reconfigure tzdata

または Time Zone を noninteractive に指定したい時は次のようにしてください。

debian9-rootfs# echo "Asia/Tokyo" > /etc/timezone
debian9-rootfs# dpkg-reconfigure -f noninteractive tzdata

fstab の設定

debian9-rootfs# cat <<EOT > /etc/fstab
/dev/mmcblk1p1  /boot   auto        defaults    0   0
none        /config configfs    defaults    0   0
EOT

/dev/mmcblk1p1 は SD-Card の第一パーティションです。ここには BOOT.BIN、Linux Kernel Image、Device Tree が入っています。ここを /boot にマウントしておけば、後で中身を更新するときに Debian 上から出来るので楽です。

Configuration File System を /config にマウントしておきます。Configuration File System は Device Tree Overlay で使います。

Network Interface の設定

debian9-rootfs# cat <<EOT > /etc/network/interfaces.d/eth0
allow-hotplug eth0
iface eth0 inet dhcp
EOT

ここでは有線LAN (eth0) に DHCP を設定しています。これはお使いの環境にあわせてください。

/lib/firmware の設定

debian9-rootfs# mkdir /lib/firmware

fpga-region による FPGA のコンフィギュレーションの際、bitstream ファイルは /lib/firmware に置かなければなりません。ここでそのディレクトリを作っておきます。

各種アプリケーションのインストール

debian9-rootfs# apt-get install -y wireless-tools
debian9-rootfs# apt-get install -y wpasupplicant
debian9-rootfs# apt-get install -y firmware-realtek
debian9-rootfs# apt-get install -y firmware-ralink
debian9-rootfs# apt-get install -y build-essential
debian9-rootfs# apt-get install -y git
debian9-rootfs# apt-get install -y u-boot-tools
debian9-rootfs# apt-get install -y socat
debian9-rootfs# apt-get install -y ruby ruby-msgpack ruby-serialport
debian9-rootfs# gem install rake
debian9-rootfs# apt-get install -y python  python-dev  python-setuptools  python-wheel  python-pip  python-numpy
debian9-rootfs# apt-get install -y python3 python3-dev python3-setuptools python3-wheel python3-pip python3-numpy
debian9-rootfs# pip3 install msgpack-rpc-python
debian9-rootfs# apt-get install -y samba
debian9-rootfs# apt-get install -y avahi-daemon

必要なアプリケーションはここでインストールします。何をインストールするかはお好みで。

Device Tree Compiler (supported symbol version) のインストール

debian9-rootfs# apt-get install -y flex bison
debian9-rootfs# cd root
debian9-rootfs# mkdir src
debian9-rootfs# cd src
debian9-rootfs# git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git dtc
debian9-rootfs# cd dtc
debian9-rootfs# make
debian9-rootfs# make HOME=/usr/local install-bin
debian9-rootfs# cd /

apt-get で install される Device Tree Compiler はバージョンが古くてシンボルがサポートされていないことがあります。ここではソースコードからビルドしています。これに関しては「デバイスツリーにシンボル情報を埋め込む」を参照してください。

Linux Header and Modules のインストール

debian9-rootfs# mv    boot boot.org
debian9-rootfs# mkdir boot
debian9-rootfs# dpkg -i linux-image-4.9.0-xlnx-v2017.3-zynqmp-fpga_4.9.0-xlnx-v2017.3-zynqmp-fpga-1_arm64.deb
debian9-rootfs# dpkg -i linux-headers-4.9.0-xlnx-v2017.3-zynqmp-fpga_4.9.0-xlnx-v2017.3-zynqmp-fpga-1_arm64.deb
debian9-rootfs# rm    boot/*
debian9-rootfs# rmdir boot
debian9-rootfs# mv    boot.org boot

APT Cache の掃除

debian9-rootfs# apt-get clean

APT Cache に大量にダウンロードしたパッケージがキャッシュされていますが、そのままだと Root File System が大きくなるので、掃除して身軽にしておきます。

後始末

debian9-rootfs# exit
shell$ sudo rm -f $targetdir/usr/bin/qemu-aarch64-static
shell$ sudo rm -f $targetdir/build-debian9-rootfs-with-qemu.sh
shell$ sudo rm -f $targetdir/linux-image-4.9.0-xlnx-v2017.3-zynqmp-fpga_4.9.0-xlnx-v2017.3-zynqmp-fpga-1_arm64.deb
shell$ sudo rm -f $targetdir/linux-headers-4.9.0-xlnx-v2017.3-zynqmp-fpga_4.9.0-xlnx-v2017.3-zynqmp-fpga-1_arm64.deb

ご苦労さまでした。chroot から出て不要になったファイルを消去してください。

debian9-rootfs-vanilla.tgz の生成

shell$ cd $targetdir
shell$ sudo tar cfz ../debian9-rootfs-vanilla.tgz *

最後に作ったディレクトリを丸ごと debian9-rootfs-vanilla.tgz にまとめて完了です。

ikwzm
元へっぽこ電子回路エンジニア。現在隠居中。どちらかというとVHDL派。最近はFPGA+SoC でいろいろやってます。github でもいろいろと公開してます。 https://github.com/ikwzm
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした