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くんを作りました.
ご確認ください.