「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