Ubuntuで擬似デバイスをなんとかかんとか作って動かした

Sun Mar 16 01:11:44 JST 2014 (modified: Sun Oct 1 10:50:27 JST 2017)
views: 1519, keywords:Linux,Ubuntu,疑似デバイス この記事は最終更新日が7年以上前のものです。

昨日はファイルシステムの説明で使おうかとUbuntuで擬似デバイス(/dev/nullとか/dev/zeroとかあれです。)を作ることに挑戦しました。やりっぱなしのもの(これとか、あと研究)をたくさん差し置いてなんだかなーという感じですが、ちょっと必要になったので・・・

ソースからMakefileまで準備するのに3つサイトを参考にしました。

結局、ソースやらMakefileやらを揃えて、古くなった部分を書き換えて、コンパイルやビルドを通して・・・とやっているうちに若干ながら独自の部分ができたのでコードを晒しておきます。

昨日は講義で使おうかとUbuntuで擬似デバイスを作ることに挑戦しました。

ソースからMakefileまで準備するのに3つサイトを参考にしました。

結局、ソースやらMakefileやらを揃えてコンパイルやビルドを通しているうちに若干ながら独自の部分ができたのでコードを晒しておきます。

ソースが1ファイル、Makefileが1ファイルのミニマム構成でビルドできるようになってますので、コードをいじってくちゃくちゃにしているながらも何らかの役には立つかもしれません。尚、中身はまだ理解してないので何の責任もとれません。

私がそうなのですが、勉強する前に動かしてみないと不安で勉強できないというタイプの人間が世の中には多いので、(うまくいけば)何も考えなくてもmakeとmake installだけで動くようにしてます。(私の大学時代に受けた講義がそんなふうになっていれば、もっと真面目にやってたのになぁ・・・と5分ばかり茫然自失。)

baibai.cとMakefileが必要なファイルの全てです。あとはmakeとかが入ってない可能性があるのでapt-getしましょう。おそらく、比較的新しいバージョンのUbuntuならうまくいくはずです。

https://github.com/ryuichiueda/PseudoDevice/tree/master/BaiBaiDevice

動かしてみましょう。入力した数字を倍にして返します。ただ、このデバイスは少々不機嫌なのでちょっとでも入力がイレギュラーだと0を返してきます。あ、事故ってもごめんなさいしか言えませんのでご容赦ください。

ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ make
   make -C /usr/src/linux-headers-`uname -r` M=`pwd` V=1 modules
   make[1]: ディレクトリ `/usr/src/linux-headers-3.2.0-53-generic' に入ります
   (なんかすごいたくさんログ)
    ld -r -m elf_x86_64 -T /usr/src/linux-headers-3.2.0-53-generic/scripts/module-common.lds --build-id -o /home/ueda/GIT/PseudoDevice/BaiBaiDevice/baibai.ko /home/ueda/GIT/PseudoDevice/BaiBaiDevice/baibai.o /home/ueda/GIT/PseudoDevice/BaiBaiDevice/baibai.mod.o
   make[1]: ディレクトリ `/usr/src/linux-headers-3.2.0-53-generic' から出ます
   ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ 
   ###make installでも設定できますが手動で###
   ###mknodでデバイスファイルを作る###
   ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ sudo mknod /dev/baibai c 0x0123 0
   ###読み書きできるように###
   ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ sudo chmod 0666 /dev/baibai
   ###モジュールをロード###
   ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ sudo insmod ./baibai.ko
   ###使ってみる###
   ###入力###
   ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ echo 12345 > /dev/baibai 
   ###出力###
   ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ cat /dev/baibai 
   24690
   ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ echo abc > /dev/baibai 
   ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ cat /dev/baibai 
   0
   ###後始末(慎重に)make uninstallでもできます###
   ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ sudo rmmod ./baibai
   ueda@remote:~/GIT/PseudoDevice/BaiBaiDevice$ sudo rm -f /dev/baibai

このエントリーでは動かすお手伝いをしたまでで、あとは上のURLのサイトに親切な解説があるので、そちらをご参考に。私も勉強になりましたので、感謝申し上げます。

ノート   このエントリーをはてなブックマークに追加 
 

prev:苦労している人をこんな風におちょくるのは如何なものか next:レンジでチンして仕事中断

やり散らかし一覧

記事いろいろ