0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MPFS-DISCO-KIT 向け Ubuntu 22.04 の構築(Ubuntu 22.04 Root File System 編)

Last updated at Posted at 2024-12-20

はじめに

MPFS-DISCO-KIT(Microchip PolarFire SoC FPGA Discovery Kit) で動作する Ubuntu 22.04 を構築する方法をいくつかの記事に分けて説明します。

上記の記事で構築した MPFS-DISCO-KIT 向け Ubuntu 22.04 Root File System、Linux Kernel、Boot Loader は次の URL にて公開しています。なお、これらはオフシャルなものではなく、筆者の魔改造がはいっています。ご使用の際はこの点にご留意してください。

この記事では、Ubuntu 22.04 Root File System のビルド方法について説明します。

なお、この記事で紹介する Ubuntu22.04 Root File System のビルド済みのファイルは以下の URL にあります。ビルドが面倒な方はどうぞ。

必要な環境

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

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

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

構築

構築環境の準備

次の URL から git clone でリポジトリをダウンロードします。

shell$ git clone --depth 1 --branch develop-v5.0.x https://github.com/ikwzm/MPFS-FPGA-Ubuntu22.04 MPFS-FPGA-Ubuntu22.04-develop-v5.0.x
shell$ cd MPFS-FPGA-Ubuntu22.04-develop-v5.0.x

Linux Image/Header Debian Package の準備

Ubuntu22.04 Root File System をビルドする際、Linux Kernel Image/Header の Debian Package を同時に Ubuntu22.04 Root File System にインストールしておくと後々便利です(もちろん後でインストールしてもかまいません)。

上記のリポジトリには次に示す Debian Package をあらかじめ用意しています。
この Debian Package の作りかたは 『MPFS-DISCO-KIT 向け Ubuntu 22.04 の構築(Linux Kernel mpfs-fpga-first 編)』 を参照してください。

  • debian/
    • linux-image-6.6.51-mpfs-fpga-first_6.6.51-mpfs-fpga-1_riscv64.deb
    • linux-headers-6.6.51-mpfs-fpga-first_6.6.51-mpfs-fpga-1_riscv64.deb

環境変数の設定

shell$ export targetdir=ubuntu22.04-rootfs
shell$ export distro=jammy

構築(ステージ1)

shell$ mkdir                                               $PWD/$targetdir
shell$ sudo debootstrap --arch=riscv64 --foreign $distro   $PWD/$targetdir
shell$ sudo cp /usr/bin/qemu-riscv64-static                $PWD/$targetdir/usr/bin
shell$ sudo cp /etc/resolv.conf                            $PWD/$targetdir/etc
shell$ sudo cp scripts/build-ubuntu22.04-rootfs.sh         $PWD/$targetdir
shell$ sudo cp debian/*.deb                                $PWD/$targetdir
shell$ sudo mount -vt proc proc                            $PWD/$targetdir/proc
shell$ sudo mount -vt devpts devpts -o gid=5,mode=620      $PWD/$targetdir/dev/pts

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

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

shell$ sudo chroot $targetdir

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

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

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

APT の設定

ubuntu22.04-rootfs# distro=jammy
ubuntu22.04-rootfs# export LANG=C
ubuntu22.04-rootfs# /debootstrap/debootstrap --second-stage
ubuntu22.04-rootfs# cat <<EOT > /etc/apt/sources.list
deb http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiverse
deb http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted universe multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted universe multiverse
deb http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted universe multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted universe multiverse
EOT
ubuntu22.04-rootfs# cat <<EOT > /etc/apt/apt.conf.d/71-no-recommends
APT::Install-Recommends "0";
APT::Install-Suggests   "0";
EOT
ubuntu22.04-rootfs# apt -y update
ubuntu22.04-rootfs# apt -y upgrade

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

ubuntu22.04-rootfs# apt install -y locales dialog
ubuntu22.04-rootfs# dpkg-reconfigure locales
ubuntu22.04-rootfs# apt install -y net-tools openssh-server ntpdate resolvconf sudo less hwinfo ntp tcsh zsh file

locale の設定はお好みで。
ここでは "160. en_US.UTF-8 UTF-8" と "2. C.UTF-8" を選択しました。

hostname の設定

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

ubuntu22.04-rootfs# echo ubuntu-fpga > /etc/hostname

root のパスワードの設定

ubuntu22.04-rootfs# passwd

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

ubuntu22.04-rootfs# cat <<EOT >> /etc/securetty
# Seral Port for Xilinx Zynq
ttyPS0
ttyPS1
EOT

FPGA ユーザーの追加

ubuntu22.04-rootfs# adduser fpga

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

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

sshd config の設定

ubuntu22.04-rootfs# sed -i -e 's/#PasswordAuthentication/PasswordAuthentication/g' /etc/ssh/sshd_config

Time Zone の設定

ubuntu22.04-rootfs# dpkg-reconfigure tzdata

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

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

fstab の設定

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

ubuntu22.04-rootfs# cat <<EOT > /etc/fstab
none            /config         configfs        defaults        0       0
EOT

/lib/firmware の設定

fpga-region による FPGA のコンフィギュレーションの際、bitstream ファイルは /lib/firmware に置かなければなりません。ここでそのディレクトリを作っておきます。ただし、現バージョンでは未使用ですが、とりあえずディレクトリだけ用意しておきます。

ubuntu22.04-rootfs# mkdir /lib/firmware

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

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

ubuntu22.04-rootfs# apt install -y build-essential
ubuntu22.04-rootfs# apt install -y pkg-config
ubuntu22.04-rootfs# apt install -y curl
ubuntu22.04-rootfs# apt install -y git git-lfs
ubuntu22.04-rootfs# apt install -y kmod
ubuntu22.04-rootfs# apt install -y flex bison
ubuntu22.04-rootfs# apt install -y u-boot-tools device-tree-compiler
ubuntu22.04-rootfs# apt install -y libssl-dev
ubuntu22.04-rootfs# apt install -y socat
ubuntu22.04-rootfs# apt install -y ruby rake ruby-msgpack ruby-serialport
ubuntu22.04-rootfs# apt install -y python3 python3-dev python3-setuptools python3-wheel python3-pip python3-numpy
ubuntu22.04-rootfs# pip3 install msgpack-rpc-python
ubuntu22.04-rootfs# apt install -y samba
ubuntu22.04-rootfs# apt install -y avahi-daemon
ubuntu22.04-rootfs# apt install -y haveged

Network Manager のインストール

ubuntu22.04-rootfs# apt install -y network-manager
ubuntu22.04-rootfs# cat <<EOT >/etc/NetworkManager/conf.d/10-globally-managed-devices.conf
[keyfile]
unmanaged-devices=none
EOT

Linux Image/Header Debian Package のインストール

ubuntu22.04-rootfs# mkdir              home/fpga/debian
ubuntu22.04-rootfs# mv *.deb           home/fpga/debian
ubuntu22.04-rootfs# chown fpga.fpga -R home/fpga/debian
ubuntu22.04-rootfs# dpkg -i home/fpga/debian/linux-image-6.6.51-mpfs-fpga-first_6.6.51-mpfs-fpga-1_riscv64.deb
ubuntu22.04-rootfs# dpkg -i home/fpga/debian/linux-headers-6.6.51-mpfs-fpga-first_6.6.51-mpfs-fpga-1_riscv64.deb

APT Cache の掃除

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

ubuntu22.04-rootfs# apt-get clean

Debian Package List の生成

どんな Debian Package をインストールしたかをファイルに残しておきます。

ubuntu22.04-rootfs# dpkg -l > dpkg-console-list.txt

後始末

chroot から出て、dpkg-console-list.txt を移動した後、不要になったファイルを消去してください。

ubuntu22.04-rootfs# exit
shell$ sudo rm -f  $PWD/$targetdir/usr/bin/qemu-riscv64-static
shell$ sudo rm -f  $PWD/$targetdir/build-ubuntu22.04-rootfs.sh
shell$ sudo mv     $PWD/$targetdir/dpkg-console-list.txt files/ubuntu22.04-dpkg-list.txt
shell$ sudo umount $PWD/$targetdir/proc
shell$ sudo umount $PWD/$targetdir/dev/pts

ubuntu22.04-rootfs.tgz の生成

作ったディレクトリを丸ごと ubuntu22.04-rootfs.tgz にまとめます。

shell$ cd $PWD/$targetdir
shell$ sudo tar cfz ../ubuntu22.04-rootfs.tgz *
shell$ cd ..

ubuntu22.04-rootfs.tgz.files の生成

github で LFS(Large File Storage) を使わずにリリースする場合は、幾つかのファイルに分割しておきます。

shell$ mkdir ubuntu22.04-rootfs.tgz.files
shell$ cd    ubuntu22.04-rootfs.tgz.files
shell$ split -d --bytes=40M ../ubuntu22.04-rootfs.tgz
shell$ cd ..

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?