LoginSignup
6
8

More than 5 years have passed since last update.

ZYBO (Zynq) 初心者ガイド (10) Linuxのrootfsをカスタマイズする / PythonでHello World

Last updated at Posted at 2018-01-12

環境

  • 開発用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のrootfsをカスタマイズする / PythonでHello World

前回は、Linuxカーネルをカスタマイズしました。今回は、rootfsをカスタマイズしてみます。デフォルト設定のままで作ったrootfsには最低限のバイナリやライブラリしか含まれていません。今回は試しに、Pythonを追加して、PythonからHello Worldしてみようと思います。また、gdbも追加してみます。

  • Pythonoの追加
  • gdbの追加

メモ

本当は、gccも入れてネイティブビルドできるようにしようと思ったのですが、出来ないようです。
https://forums.xilinx.com/t5/Embedded-Linux/gcc-in-petalinux-kernel/td-p/788368

プロジェクトの準備

新規PetaLinuxプロジェクトの作成からやります。とりあえず、下記操作でBOOT.binとimage.ubを作成して、ちゃんと起動できることを確認します。これは、8回目と同じです。

cd ~/work/peta
petalinux-create --type project --template zynq --name SimplePS
cd SimplePS/
petalinux-config --get-hw-description=../project_1.sdk
petalinux-build
petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/design_1_wrapper.bit --u-boot

参考のために、出来上がったバイナリのサイズを確認しておきます。

~/work/peta/SimplePS$ ls -la images/linux/BOOT.BIN images/linux/image.ub 
-rw-rw-r-- 1 tak tak 4554128 Jan 12 13:26 images/linux/BOOT.BIN
-rw-r--r-- 1 tak tak 9482736 Jan 12 13:25 images/linux/image.ub

rootfsのコンフィグ / ビルドする

下記コマンドで、rootfsのコンフィグ画面に入れます。ここで、さまざまなツール(/usr/bin)やライブラリを、含めたり取り外したりできます。また、次回やる予定ですが、自作のユーザアプリケーションを含めるかどうかもここで設定できます。

petalinux-config -c rootfs

今回は、Pythonとgdbをインストールします。Filesystem Packages -> devel -> python -> python -> pythonと、Filesystem Packages-> misc -> gdbを選択して、Save,Exitします。

01.jpg
02.jpg

その後、ファイルシステムを更新します。petalinux-build -x packageだけで良いはずですが、上手くいかなかったら、petalinux-build -x do_populate_sysrootpetalinux-build -c rootfsもやってみてください。(時間がかかるので注意)

# petalinux-build -x do_populate_sysroot
petalinux-build -x package
# petalinux-build -c rootfs

メモ

rootfsのコンフィグファイルはproject-spec/configs/rootfs_configに作られるっぽい。

成果物

変更したのはrootfsだけなので、image.ubのみ更新します。image.ubをSDカードに上書きコピーします。ファイルサイズが大きくなっていることを確認してください。もともと9MByteくらいだったものが、12MByteまで増加しています。

~/work/peta/SimplePS$ ls -la images/linux/BOOT.BIN images/linux/image.ub 
-rw-rw-r-- 1 tak tak  4554128 Jan 12 13:26 images/linux/BOOT.BIN
-rw-r--r-- 1 tak tak 12832728 Jan 12 13:47 images/linux/image.ub

確認する

image.ubを更新したSDカードで、Zyboを起動します。pythonとgdbがインストールされていることを確認します。

root@SimplePS:~# ls /usr/bin/gdb /usr/bin/python*
/usr/bin/gdb               /usr/bin/python-config     /usr/bin/python2-config    /usr/bin/python2.7-config
/usr/bin/python            /usr/bin/python2           /usr/bin/python2.7

PytonでHello Worldする

通常のLinuxのようにPythonコードを実行できます。viはデフォルトでインストールされています。(今回は、rootfsはRAMに展開されているので、再起動したらファイルは消えます)

root@SimplePS:~# vi hello.py
root@SimplePS:~# cat hello.py
print("hello world")

root@SimplePS:~# python hello.py
hello world

gdbでデバッグしてみる

試しに、lsコマンドをgdbでデバッグしてみます。当然lsコマンドにはデバッグ情報が含まれていないので、ブレークポイントなどは張れませんが、一応gdbからrunはできていました。ただし、gdb起動直後にエラー(LookupError: no codec search functions registered: can't find encoding)が大量に発生していました。

root@SimplePS:~# gdb ls
 ここでエラーがたくさんでる
(gdb) run
Starting program: /bin/ls
Cannot access memory at address 0x0
hello.py
6
8
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
8