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

ZYBO (Zynq) 初心者ガイド (9) Linuxカーネルを少しカスタマイズする

More than 1 year has passed since last update.

この記事の内容を3分で見る ( https://youtu.be/swrcNY7KO8Q )

環境

  • 開発用PC: Windows 10 64-bit
    • Vivado 2017.4 WebPACKライセンス
    • Xilinx SDK 2017.4 <- 今回は使わない
  • 開発用PC (Linux): Ubuntu 16.04 本家 (日本語版じゃない) (on VirtualBox 5.2.4)
    • PetaLinux 2017.4
  • ターゲットボード: ZYBO (Z7-20)

Windows環境は1回目、Linux環境は8回目を参照。
使用するハードウェア(hdf)は8回目を参照。

Linuxカーネルを少しカスタマイズする

前回はLinuxイメージを作成して、起動させました。この時作成したLinuxイメージは、PetaLinuxツールが設定してくれたものをそのまま使用してビルドしたものです。今回は、カーネルを少しだけカスタマイズしてみようと思います。Linuxカーネルの設定は、それだけでご飯が食べていけるくらい奥が深い分野になりますが、今回は簡単な触りだけをやります。

変更する内容

今回は、試しに以下の2点をカスタマイズしてみようと思います。

  • ルートファイルシステム(rootfs)をSDカードにする
    • デフォルト設定だと、Linuxファイルシステムのルートは、DDR上にマウントされるようです(initramfs)。そのため、ファイルを作成しても、再起動したら消えてしまいます。SDカードを使用するようにします。
  • 自動ログインにする
    • 起動後、rootとして自動ログインします。(これは、趣味レベルならいいですが、実プロダクトではやるべきではありません。)

コンフィグ / ビルドする

新規PetaLinuxプロジェクトの作成からやります。ハードウェアは前回と同じく、PSのみを配置したhdfを使用します。既存のプロジェクトに対してやる場合は、petalinux-config --get-hw-description=../project_1.sdkpetalinux-configに置き換えてください。)

下記コマンドを実行すると、menuconfigの画面が表示されるので、以下の設定を変更します。

cd ~/work/peta
petalinux-create --type project --template zynq --name SimplePS
cd SimplePS/
petalinux-config --get-hw-description=../project_1.sdk

01.png

  • Image Packaging Configuration -> Root filesystem type -> SDカードを選択する
  • Yocto Settings -> Enable Debug Tweaks を有効にする (Spaceキーを押す)

設定完了したら、SaveしてExitします。その後、ビルドし、BOOT.binを作ります。

petalinux-build
petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/design_1_wrapper.bit --u-boot

成果物

最終的に必要となる成果物は、以下の3つです。

  • images/linux/BOOT.bin
    • FSBL (First Stage Boot Loader)、ビットストリーム、U-Boot (Second Stage Boot Loader)
  • images/linux/image.ub
    • Linuxシステムイメージ (カーネルなど)
  • images/linux/rootfs.ext4
    • SDカードに書き込まれるrootfs

02.png

メモ

ここ(https://github.com/Digilent/Petalinux-Zybo-Z7-20/blob/master/README.md )には、config後に、meta-user/recipes-bsp/device-tree/files/system-user.dtsiを編集してbootargsを変更しろみたいなことが書いてあったのですが、不要でした。ug1144-petalinux-tools-reference-guide.pdfによると、自動生成される components/plnx_workspace/device-tree-generation/system-conf.dtsiで設定されているらしいです。

SDカードを作成する

ラズパイなどでおなじみですが、SDカードを2つのパーティションに分けて使用します。

  • 起動用パーティション (FAT32)
    • BOOT.binとimage.ubを保存
  • Linuxのルートファイルシステム (ext4)
    • rootfs.ext4を保存

パーティションを分ける

Windowsだとext4を扱えないので、Ubuntu上でパーティションを作成します。VirtualBoxを使用している場合は、SDカードリーダ(USB)をVirtualBoxに接続します。(VirtualBox上のメニューバー -> デバイス -> USB -> General Mass Storage Device(このデバイス名は環境によって異なる))

コマンドでやってもいいのですが、Disks (gnome-disk-utility) でGUIから設定します。僕は、8GByteのSDカードを使用しているのですが、以下のように、先頭100MByteをFAT32として、残り全部(7.6GByte)をExt4としてパーティションを分けてフォーマットしました。また、この画面で、Ext4のデバイス名を確認しておいてください。ここだと、/dev/sdb2になっています。

03.jpg

メモ

ug1144-petalinux-tools-reference-guide.pdfを見ると、起動用パーティション (FAT32)の前に、「4MB の未割り当て領域が必要」とのことでしたが、特に何の設定もしないでも大丈夫でした。

イメージファイルのコピー

起動用パーティション (FAT32)にimages/linux/BOOT.binとimages/linux/image.ubをコピーします。これは、前回と同様です。

Linuxのルートファイルシステム (ext4)には、images/linux/rootfs.ext4を書き込むのですが、これはファイルのコピーではなく、バイナリレベルでイメージをそのまま書き込みます。ddで書き込むとファイルサイズもrootfs.ext4に合わせて60MByteくらいに小さくなってしまうので、最後にリサイズして戻しておきます。

sudo umount /dev/sdb2
cd ~/work/peta/SimplePS/
sudo dd if=images/linux/rootfs.ext4 of=/dev/sdb2
sync
sudo resize2fs /dev/sdb2 
sync

起動確認する

前回と同様に、SDカードを挿入して、ジャンパ(JP5)をSDに設定して、電源ONします。

すると、起動完了時に自動的にrootとしてログインしていることが分かると思います。また、試しに、以下のように/home/root/にファイルを作成して再起動してみると、再起動後もファイルがあることが分かると思います。(前回だと、再起動後にファイルは消えていた)

touch newFile
ls
reboot

修正

記事を書いた後に気付いたのですが、これまでの内容は、Linuxカーネルのコンフィグではありません。プロジェクトのコンフィグになります。そのため、U-Bootの設定などはここでやりました。

Linuxカーネルそのもののコンフィグ(カーネルツリーでのmake menuconfig相当)をやるには、以下コマンドを実行します。

petalinux-config -c kernel 

image.png

メモ

自分で変更したkernel configは、project-spec/meta-user/recipes-kernel/linux/linux-xlnx/user_2018-01-14-15-33-00.cfgといった感じに、変更した差分だけが保存されているっぽい。ベースとなるコンフィグはたぶんこれ。project-spec/meta-plnx-generated/recipes-kernel/linux/configs/plnx_kernel.cfg。一番最初にpetalinux-configしたときに作られているっぽい。
最終的には、これらをマージしたものが使われるのかな??

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
ユーザーは見つかりませんでした