28
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EdisonAdvent Calendar 2014

Day 3

Intel Edisonのカーネルビルド

Last updated at Posted at 2014-12-02

今日はEdisonのLinuxのカーネルとモジュールを,自分好みにカスタマイズする方法について勉強します.
題材として,EdisonにUSBオーディオを接続して,音楽を鳴らしてみましょう.

母艦の作業

必要なツールのインストール

カーネルのビルドは,Edison上ではなく,CPUのコアとメモリと記録容量が潤沢にある別のPC上で行います.以下は,Ubuntuマシンで行った手順になります.

$ sudo apt-get install build-essential git diffstat gawk chrpath texinfo libtool gcc-multilib u-boot-tools

BSP source package edison-src.tgzのダウンロード・解凍

Intelのページから,EdisonのBoard Support Packageをダウンロードしてきます.
カスタマイズしたカーネルのビルド方法については,この文章を参考にしました.

$ tar xvf edison-src.tgz
$ cd edison-src/

ビルド環境のセットアップ

$ mkdir dl
$ mkdir sst
$ ./device-software/setup.sh --dl_dir=./dl --sstate_dir=./sst

環境変数の設定も行います.
$ source poky/oe-init-build-env

これを行うと,自動的にbuildディレクトリに移動するはず.

ついでに, ./conf/local.conf の中の BB_NUMBER_THREADSPARALLEL_MAKE の値を,母艦のコア数×2くらいに設定しておくと,ビルドが早くなって幸せになれます.

カーネルをビルドしてみる

$ bitbake virtual/kernel

PCの強さによって,ビルドにかかる時間が変わります.
後から説明するカーネルコンフィグの設定を行うためには,先に一度はビルドしておく必要があるようです.

カーネルコンフィグ

$ bitbake linux-yocto -c menuconfig

カスタマイズを行う画面が開きます.
この画面で,
Device Drivers -> Sound card support (SOUND [=y]) -> Advanced Linux Sound Architecture (SND [=y]) -> USB sound devices (SND_USB [=y])
とたどって,USB sound deviceの指定を[y](カーネルに組み込む)か[M](モジュールとして組み込む)のどちらかに設定しましょう.設定状態は,スペースキーで切り替えられます.
また,"/"を入力すると,カーネルパラメータの検索ができます.

USB Audioのドライバをビルドするカーネルの設定
最後に,<SAVE>を選んで,保存することを忘れずに.その後は,ずっと<EXIT>を選択すれば終了できます.

終わったら,設定した.configをコピーします.
$ cp tmp/work/edison-poky-linux/linux-yocto/3.10.17+gitAUTOINC+6ad20f049a_c03195ed6e-r0/linux-edison-standard-build/.config ../device-software/meta-edison/recipes-kernel/linux/files/defconfig

そして,カスタマイズしたカーネルをビルドします.
$ bitbake virtual/kernel

うまくいったら,全体のビルド.
$ bitbake edison-image

途中で中のファイルをいじったりして,どうにもエラーが取れなくなってしまった場合は,
$ bitbake virtual/kernel -c clean
とすると,初期状態に戻せるようです.

焼き込み

このコマンドで,Edisonに焼き込むファイルをtoFlashフォルダにまとめます.
$ ../device-software/utils/flash/postBuild.sh

実際にEdisonに焼き込みます.
$ cd toFlash
$ sudo ./flashall.sh

ここで,EdisonのUSB OTGと母艦を接続します.

焼き込みが完了したら、とりあえずEdisonの電源を切って,母艦と切り離してください.

Edison上の作業

USBオーディオのドライバが認識されていることを確認

初期アカウントはrootでパスワードなし.

USBオーディオを接続して,lsmodすると,以下のようにサウンド関連のモジュールがインストールされていることがわかります.
# lsmod
Module Size Used by
snd_usb_audio 119941 0
snd_usbmidi_lib 24140 1 snd_usb_audio
snd_hwdep 13232 1 snd_usb_audio
snd_rawmidi 24231 1 snd_usbmidi_lib
usb_f_acm 14335 1
u_serial 18582 6 usb_f_acm
g_multi 70703 0
libcomposite 39245 2 usb_f_acm,g_multi
bcm_bt_lpm 13676 0
bcm4334x 578947 0

dmesg中からも確認できます.

# dmesg|tail
[ 100.750482] usb 1-1: Product: USB AUDIO
[ 100.751284] usb 1-1: ep 0x82 - rounding interval to 64 microframes, ep desc says 80 microframes
[ 100.751333] usb 1-1: ep 0x84 - rounding interval to 64 microframes, ep desc says 80 microframes
[ 100.761554] input: USB AUDIO as /devices/pci0000:00/0000:00:11.0/dwc3-host.2/usb1/1-1/1-1:1.3/input/input2
[ 100.762873] hid-generic 0003:1130:F211.0001: input,hidraw0: USB HID v1.10 Device [USB AUDIO ] on usb-dwc3-host.2-1/input3
[ 100.767713] input: USB AUDIO as /devices/pci0000:00/0000:00:11.0/dwc3-host.2/usb1/1-1/1-1:1.4/input/input3
[ 100.769354] hid-generic 0003:1130:F211.0002: input,hidraw1: USB HID v1.10 Device [USB AUDIO ] on usb-dwc3-host.2-1/input4
[ 100.890609] usbmixer: volume control quirk for Tenx TP6911 Audio Headset
[ 100.890656] usbmixer: volume control quirk for Tenx TP6911 Audio Headset
[ 100.892506] usbcore: registered new interface driver snd-usb-audio

ドライバが入っていないと、下3行がないはず。

各種設定

# configure_edison --setup で各種初期設定
# vi /etc/opkg/base-feeds.conf

以下を入力

src/gz all http://repo.opkg.net/edison/repo/all
src/gz edison http://repo.opkg.net/edison/repo/edison
src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32

# opkg update

オーディオ用のツールをインストール

# opkg install alsa-utils

母艦から、何か適当なwavファイルをEdisonに送っておく.

サウンドデバイスの確認

# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 0: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 1: AUDIO [USB AUDIO], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

何番のカードなのかを確認。たぶん1。

再生してみる

# aplay ./music.wav -D hw:1
音量を設定していないと、いきなり大音量で流れるので注意。

EdisonにUSBオーディオをつなぐ

28
26
3

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
28
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?