実験の失敗に備えて情報システム実験(11)で作成したデバイスドライバと それに関連するソフトウェア類を次のようにディレクトリLab11に保存 しておくこと。
「1.2 割り込み処理の実装」に従って、呼ぶ関数と呼ばれる関数の間に 矛盾がないように各処理を追加記述すること。
「1.2.1 割り込み処理の登録」のrequest_irq
関数をdio_init
モジュー
ルに書き込む。
このとき、次のようにretの戻り値が0のときだけ、割り込み番号を表示 するように変更する。
int __init dio_init(void) { . . . // Warikomi Youkyuu dio_res.irq = 0; ret = request_irq(current_device->irq, dio_interrupt_handler, SA_SHIRQ, DRIVERNAME, (void *)&dio_res); // Warikomi Bangou no Shutoku if (ret == 0){ dio_res.irq = current_device->irq; printk("IRQ = %X h\n", dio_res.irq); } . . |
「1.2.2 割り込み処理の解除」のfree_irq
関数をdio_cleanup
モジュー
ルに書き込む、割り込みのマスクを0に設定し、割り込み番号が誤っていない
(dio_res.irq > 0)
ときのみ解除するようにする。
void __exit dio_cleanup(void) . . . // Warikomi no Kaijo outb(0, dio_res.io_address[0] + 0x0D); if (dio_res.irq > 0){ free_irq(dio_res.irq, (void *)&dio_res); } . . |
このあとは、以下の処理をドライバ・ソース類に記述する。
dio_ioctl.h
に追加
記述する。
dio_ioctl
関数の
switch文に追加記述し、さらにこのコマンドが呼び出すサブ関数を実装する。
機能拡張したドライバ・ソースを次のようにコンパイルする。
# make clean # make