implicit declaration of function `ctrl_outb'
http://wave2.iobb.net/doc/summary/sh3wiki/wifky.cgi?p=LED%C0%A9%B8%E6%A5%C9%A5%E9%A5%A4%A5%D0%A4%CE%BA%EE%C0%AE
Linux-2.6.39.4でこちらの記事の内容を試そうとしたら、デバイスドライバのmakeで以下のお叱りを受けました。
$ make ARCH=sh CROSS_COMPILE=sh3-linux- [~/t-sh7706lsr/leddev-2.6.39.4/ledmodule] make -C ../linux-2.6.39.4 M=/home/cupnes/t-sh7706lsr/leddev-2.6.39.4/ledmodule modules make[1]: ディレクトリ `/home/cupnes/t-sh7706lsr/leddev-2.6.39.4/linux-2.6.39.4' に入ります CC [M] /home/cupnes/t-sh7706lsr/leddev-2.6.39.4/ledmodule/led.o /home/cupnes/t-sh7706lsr/leddev-2.6.39.4/ledmodule/led.c: In function `led_write': /home/cupnes/t-sh7706lsr/leddev-2.6.39.4/ledmodule/led.c:38: error: implicit declaration of function `ctrl_outb' /home/cupnes/t-sh7706lsr/leddev-2.6.39.4/ledmodule/led.c:38: error: implicit declaration of function `ctrl_inb' /home/cupnes/t-sh7706lsr/leddev-2.6.39.4/ledmodule/led.c: In function `led_init': /home/cupnes/t-sh7706lsr/leddev-2.6.39.4/ledmodule/led.c:64: error: implicit declaration of function `ctrl_outw' /home/cupnes/t-sh7706lsr/leddev-2.6.39.4/ledmodule/led.c:64: error: implicit declaration of function `ctrl_inw' make[2]: *** [/home/cupnes/t-sh7706lsr/leddev-2.6.39.4/ledmodule/led.o] エラー 1 make[1]: *** [_module_/home/cupnes/t-sh7706lsr/leddev-2.6.39.4/ledmodule] エラー 2 make[1]: ディレクトリ `/home/cupnes/t-sh7706lsr/leddev-2.6.39.4/linux-2.6.39.4' から出ます make: *** [all] エラー 2
どうも、2.6.36あたりからctrl_inやctrl_outあたりのI/Oを操作するための関数の名前が変わったそうで、
上記の記事で紹介されている「led.c」の関数名を以下の様に書き換えるとmakeが通り、動作が確認できました。
置換元 | 置換先 |
---|---|
ctrl_inb | __raw_readb |
ctrl_outb | __raw_writeb |
ctrl_inw | __raw_readw |
ctrl_outw | __raw_writew |
参考
こちらの記事の、elijahさんのコメントを参考にしました。
patch for landisk kernel - forester3の日記