Yoct project を使ってBeagleboneblack 用 linux imageを作る

Yoctoについて

組込用のLinuxボードBeagleboneblack には本家サイトからSDカードに書き込めばそのまま起動するイメージファイルが提供されています。

これまでそのイメージファイルのDebianをベースに組込用システムを作っていましたが、フルスクラッチでBeagleBoneBlack用Linuxが構築できるYoctoProjectというツールを使ったLinuxイメージファイルを作りにトライしてみます。

以前に一度YoctoProjectを使おうとして途中で投げ出していて、今回再チャレンジしようとして見ると前回の手順を一から調べる必要があったので、備忘録として手順を記録しておきます。

sshdの追加方法

前回の場合イメージが出来SDカードに書き込んでLCDにオープニングメッセージが表示されることは確認しましたが、sshdも入ってなくて「シリアルポートでログインしろ」という状態で時間切れで諦めたので今回は最初からssjdが入ったイメージを作るのが課題です。
次の行をlocal.confに追加すればいいよというのを見つけました
※最後になって「dropbear は opensshと競合するからダメ」というエラーが発生しました、ということはこのバージョンにはopen-sshdが含まれてる?

CORE_IMAGE_EXTRA_INSTALL += "dropbear"

この書式で追加できる機能の一覧は次のコマンドで表示することが出来ます

$ cd bbb/build
$ bitbake-layers show-recipes

bitbakeを始めたら数時間経過して”libusb-1.0.20.tar.bz2″が見つからないというエラーが発生しました。
ERROR: Fetcher failure for URL
リンク先が変更になっているようでブラウザに表示されたリンクを入れてみるとファイルのダウンロードは出来るようです。

Tips  :-D 
このような場合、ダウンロードディレクトリ bbb/build/dounloads/ にwgetコマンドなどでファイルをダウンロードしファイル名の後に.doneを追加した空のファイルを作成しておけばエラーを回避することが出来ます。

libusb-1.0.20.tar.bz2            手動でダウンロード
libusb-1.0.20.tar.bz2.done        空のファイルを作成

構築の手順

参照元:YoctoによるBeagleBone Blackシステムの構築

http://www.jumpnowtek.com/beaglebone/BeagleBone-Systems-with-Yocto.html

システム情報

The Yocto version : 2.2.1   [morty] branch

Linux Kernel Version 4.4.45
ソース: linux-stable  (4.9.6 、 4.8.17 も可)

u-boot version  : 2016.07

sysvinit  eudev使用

対応Qt version : 5.7.1
 X11 及びデスクトップシステムは入っていない。
Qt は linuxfb プラグインで動作する。

build コンフィギュレーションの変更で軽量版 X11 を追加できる
X11 は Java GUI アプリケーションを走らせる場合に必要

Ubuntuのセットアップ

Ubuntuバージョン 16.04 64bit  古いバージョンでもたぶんいける
最低限次のパッケージをインストールする必要あり

sudo apt-get update
sudo apt-get install build-essential chrpath diffstat gawk git 
libncurses5-dev pkg-config subversion texi2html texinfo

 

python2.7をインストールし /usr/bin へのリンクを作成

sudo apt-get install python2.7
sudo ln -sf /usr/bin/python2.7 /usr/bin/python

デフォルトシェルを  dash から bash に変更

sudo dpkg-reconfigure dash

dashを使いますかと表示されたら No を選択

追加するパッケージ 

workdir/bbb/build/conf/local.conf の編集でパッケージを追加できる

CORE_IMAGE_EXTRA_INSTALL += "ncurses"

 

後は参照元の手順に従っていけばイメージが出来る、SDカード書き込み用のスクリプトもそろっている。

SDカード書き込み手順
$ cd /workdir/bbb/meta-bbb/scripts
$ sudo ./mk2parts.sh sdb
$ sudo mkdir /media/card
$ cp uEnv.txt-example uEnv.txt  
$ nano uEnv.txt
$ export OETMP=~/yocto-morty/bbb/build/tmp
$ ./copy_boot.sh sdb
$ ./copy_rootfs.sh sdb qt5 bbb

Tips

BBBのlinuxに追加したもの

libncurses       fdをインストールするのに必要

fdclone

# wget https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz
# tar -zxvf ncurses-6.0.tar.gz
# cd ncurses-6.0
# ./configure
# make
# make install

# wget http://hp.vector.co.jp/authors/VA012337/soft/fd/FD-3.01b.tar.gz
# tar -zxvf FD-3.01b.tar.gz
# cd FD-3.01b
# make
# make install
uEnv.txtの場所

ブート用のパーティションをマウントする

 # mount /dev/mmcblk0p1 /mnt
psplashイメージの場所

workdir/poky-morty/meta-poky/recipes-core/psplash/files/psplash-poky-img.h
下のツールでイメージをヘッダファイルに変換して上のファイル名にして置き換える。
ヘッダファイル先頭の定義を次のようにPOKY_に置き換えておかないとエラーになる。
※(追記)コマンドラインでイメージファイルの次に ‘POKY’を指定すればOK

#define POKY_IMG_ROWSTRIDE (1708)
#define POKY_IMG_WIDTH (427)
#define POKY_IMG_HEIGHT (214)
#define POKY_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */
#define POKY_IMG_RLE_PIXEL_DATA ((uint8*)
$ git clone git://git.yoctoproject.org/psplash POKY
$ sudo apt-get install libgtk2.0-dev
$ ./make-image-header.sh src-img.png

$ cp src-img.h ~/workdir/meta-poky/recipes-core/psplash/files/psplash-poky-img.h

$ cd ~/workdir
$ source poky-morty/oe-init-build-env ~/yocto-morty/bbb/build
$ bitbake virtual/kernel

i2c参考サイト

https://datko.net/2013/11/03/bbb_i2c/

i2cのメモリアドレスは次の通り、i2c0はコネクタに出ていない。

i2c0: 0x44E0_B000
i2c1: 0x4802_A000
i2c2: 0x4819_C000

i2cの確認  場所:/sys/bus/i2c/devices

root@beaglebone:~# ls -l /sys/bus/i2c/devices/i2c-*
lrwxrwxrwx    1 root     root             0 Jan  1  2000 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/ocp.2/44e0b000.i2c/i2c-0
lrwxrwxrwx    1 root     root             0 Jan  1  2000 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/ocp.2/4819c000.i2c/i2c-1

i2c1をタッチスクリーンに使う

ピン割り当ての状態を見るには次のディレクトリをチェック

/sys/kernel/debug/pinctrl/44e10800.pinmux

カーネルコンフィグレーションの設定が出来ていなかったため/dev/inputにデバイスが追加されなかったらしい、

CONFIG_TOUCHSCREEN_FT5X06=m
では認識されなくて
CONFIG_TOUCHSCREEN_FT5X06=y
とする必要がありました

bbb/meta-bbb/recipes-kernel/linux/linux-stable-4.4/beaglebone/defconfig で次の設定がコメントになっていた。

CONFIG_TOUCHSCREEN_FT5X06=y
TSLIB_CONSOLEDEVICE=none
TSLIB_FBDEVICE=/dev/fb0
TSLIB_TSDEVICE=/dev/input/touchscreen0
TSLIB_CALIBFILE=/etc/pointercal
TSLIB_CONFFILE=/etc/ts/conf
後からbitbakeを実行するために必要なこと

bbb と porky-mortyがあるワークディレクトリ(下の例では~/yocto-morty/)に移って次のコマンドを実行

$ source poky-morty/oe-init-build-env ~/yocto-morty/bbb/build
bitbakeで再構築する方法

kernel構成を変えた場合は bbb/meta-bbb/recipes-kernel/linux/linux-stable_4.4.bb の 

PR = "r50"

を変更する。(カーネル再構築のトリガとなる)

$ cd ~/workdir
$ source poky-morty/oe-init-build-env ~/workdir/bbb/build
$ bitbake -c cleansstate qt5-image
$ bitbake qt5-image
bitbakeでkernelを再構築する(splash imageを入れ替えた場合など)
$ cd ~/workdir
$ source poky-morty/oe-init-build-env ~/workdir/bbb/build
$ bitbake -c cleansstate virtual/kernel
$ bitbake virtual/kernel

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です