Intel Edison, ubilinuxへカーネルモジュールを追加する.

Intel Edison Advent Calender 2014の6日目です.
本日の担当は@shiitakeoですこんにちは.

宣言どおり,ubilinuxカーネルモジュールを追加するお話をします.
ubilinuxにカーネルモジュールを追加することができると,Webカメラを使ったり,オーディオを使ったりと,Edisonの可能性が広がりますね!

経緯

Yoctoはopkgのリポジトリが貧弱なので,ubilinux最高!みたいになってきてるのが実際のところだと思う. たしかにubilinuxのaptのリポジトリはいい感じなんだけど,ソースが提供されていないのでカーネルモジュールの追加どうすんのって感じだった.

解決策

Yoctoでカーネルをビルドして,ubilinuxへコピーするような形をとると,ubilinuxへカーネルモジュールを追加することができる.
具体的には,/boot/にあるカーネルと,/lib/modules以下にあるカーネルモジュールを,Yoctoからubilinuxへ転送する. ここで注目したいのは,ubilinuxのカーネルはYoctoのカーネルをベースにしているということで,試しに再ビルドしたYoctoのカーネルをubilinuxにコピーしてみたら,カーネルモジュールを追加することができた.

まあでもOSビルドして基板に転送,くらいのノリなので,今までのスタイルとあまり変わらないみたいな感じ.

1. 準備@Ubuntu:必要なカーネルモジュールを追加したYoctoイメージの作成.

必要なモジュールを追加したYoctoをビルドする.
カーネルビルドについては,Edisonアドベントカレンダー3日目の@k_yoneさんのエントリを参考にしてください.
発売当初は結構うまく行かなくて,ひさやんさんのエントリにお世話になった記憶がある.これとか,これとか.今はそうでもないのかなあ?

2. 準備@Edison

カーネルとモジュールを書き換えるので,現在入っいるものを削除しておきます.どっかにコピーしておいてバックアップしてもいいです.

$ rm /boot/*
$ rm -r /lib/modules/*

3. Edisonへ必要なファイルを転送する@Ubuntu

イメージファイルをマウントして,カーネルカーネルモジュールをscpを使って転送します.
カーネルビルドの際の設定(menuconfig)で,"*"にしたものはカーネルに組み込まれているので,edison-image-edison.hddimgの中に,"M"にしたものはカーネルモジュールになるので,edison-image-edison.ext4の/lib/modules以下に存在しています.

# postBuild.shを実行して作成される,ビルドしたイメージが存在するディレクトリで作業しています.
$ cd toFlash
$ sudo mkdir -p /mnt/edison/kernel
$ sudo mkdir -p /mnt/edison/modules
$ sudo mount -o loop  edison-image-edison.hddimg /mnt/edison/kernel
$ sudo mount -o loop edison-image-edison.ext4 /mnt/edison/modules
# user名とIPは適宜変更してください.
$ scp /mnt/edison/kernel/* root@192.168.xxx.xxx:/boot/
$ scp -r /mnt/edison/modules/lib/modules/* root@192.168.xxx.xxx:/lib/modules/

4. 再起動してカーネルとモジュールを読み込む@Edison

転送ができたら,再起動してあげれば,カーネルとモジュールが読み込まれて,ubilinuxで利用できるようになります.

$ reboot

5. 確認

今回はuvcをカーネルへ追加してみました.

root@ubilinux:~# find / -name uvc*
/sys/bus/usb/drivers/uvcvideo
/sys/kernel/debug/usb/uvcvideo
/sys/module/uvcvideo
/usr/include/linux/uvcvideo.h```

最後に

ubilinux最高!

おまけ

なんかこう固い話でつまんないので,HexBugとコラボして走ったりかっとんだりするEdisonくんを作りました.
ご確認ください.


走れ!Edisonくん! - YouTube


かっとべ!Edisonくん! - YouTube