More Related Content
Similar to ロボットシステム学2015年第13回
Similar to ロボットシステム学2015年第13回 (20)
More from Ryuichi Ueda (20)
ロボットシステム学2015年第13回
- 2. 本日の内容
• デバイスドライバ
– 例
• 延々と寿司のアイコンを吐き続ける「寿司デバイス」
• https://github.com/ryuichiueda/SushiDevice
• UbuntuとRaspbian OSで動作確認済み
• インストール方法、コードの中身
• udevについて
2016年1月14日 ロボットシステム学 2
- 3. 参考
• 米田聡, RaspberryPiで学ぶ ARMデバイスドライバープログラ
ミング, ソシム, 2014.
• J. Corbet et al., Linuxデバイスドライバ第3版, O'reilly, 2005.
• 動的メジャー番号割り当てとデバイスファイルの自動生成 |
迷える子羊の苦悩
– http://44781184.at.webry.info/201306/article_10.html
2016年1月14日 ロボットシステム学 3
- 5. 使ってみましょう
• insmod: カーネルモジュールを組み込むコマンド
• rmmod: カーネルモジュールを削除するコマンド
2016年1月14日 ロボットシステム学 5
$ git clone https://github.com/ryuichiueda/SushiDevice.git
$ cd SushiDevice/
$ make
$ sudo insmod sushi.ko
$ sudo chmod 666 /dev/sushi0
###使ってみる###
$ cat /dev/sushi0 | head -n 3
🍣 🍺
🍣
🍣
###削除###
$ sudo rmmod sushi
- 10. rmmod / module_exit
• デバイスドライバをカーネルから外す
– ユーザから見ると、/sys/class/と/dev/から
– 関係するファイル、ディレクトリが消える
– module_exitマクロに処理を書いた関数を渡す
2016年1月14日 ロボットシステム学 10
- 12. copy_to_user
• static inline unsigned long __must_check
copy_to_user(void __user *to, const void *from,
unsigned long n)
– (/usr/src/<ヘッダのディレクトリ>/arch/x86/include/asm/uaccess.h)
• to: ユーザ空間のバッファのポインタ
• from: カーネル空間に自分で用意するバッファのポインタ
• n: 転送するバイト数
• 返り値: コピーできなかったバイト数
• 実際の使い方はコードで
2016年1月14日 ロボットシステム学 12
- 13. copy_from_user
• static inline unsigned long __must_check
copy_from_user(void *to, const void __user *from,
unsigned long n)
– (/usr/src/<ヘッダのディレクトリ
>/arch/x86/include/asm/uaccess.h)
– to, from, n: copy_to_userと一緒
– 返り値: コピーできなかったバイト数
2016年1月14日 ロボットシステム学 13
- 16. udevの設定
• /etc/udev/rules.d/にファイルを置く
– Ubuntu, Raspbian共に
– ファイル名は「<優先度>-<対象>.rules」
– 基本: 「==」で条件をマッチさせて「=」で設定
• 反映
– $ sudo udevadm control --reload
2016年1月14日 ロボットシステム学 16
$ cat /etc/udev/rules.d/89-sushi.rules
#rules for sushi
KERNEL=="sushi0",SUBSYSTEM=="sushi",ACTION=="add",MODE="0666"
- 18. 講義でやっていないこと
• USB等
• 排他
• 一つのドライバで複数のデバイスファイル
• read, write以外の方法
• ioctl
– フォーマット等読み書きとは別の操作
• ブロックデバイス
• ・・・
2016年1月14日 ロボットシステム学 18