1 Linux-2.0 から Linux-2.2 へのデバイスドライバの移植

既にお持ちの Linux-2.0 用デバイスドライバをご自分で Linux-2.2 に移植する方 のためのメモです。

  1. struct file_ops open と close の間に flush を追加します。
  2. xx_read(), xx_write()
    static int xx_read(struct inode*, struct file *, char *buf, size_t count);
    static int xx_write(struct inode *, struct file *, char *buf, size_t count);
    
    から、
    
    static size_t xx_read(struct file *, char *buf, size_t count, loff_t *ptr);
    static size_t xx_write(struct file *, char *buf, size_t count, loff_t *ptr);
    
    に変更します。
    
  3. MINOR
    MINOR は
    
    MINOR(file->f_dentry->d_inode->i_rdev)
    
    で求めます。
    
  4. memcpy_fromfs(), memcpy_tofs()
    #include <asm/segment.h>
    memcpy_fromfs(), memcpy_tofs()
    
    から
    
    #include <asm/uaccess.h>
    copy_from_user(), copy_to_user()
    
    に変更します。パラメータは同じです。
    
  5. interruptible_sleep_on() の後の signal チェック
    (current->signal & ~current->blocked)
    
    から
    
    signal_pending(current)
    
    に変更します。
    
  6. クルティカルなコードの保護
    cli() と sti()
    
    をそれぞれ
    
    unsigned long flags;
    
    save_flags(flags); cli(); と restore_flags(flags);
    
    に変更します。
    
  7. pci バス
    #include <linux/bios32.h>
    
    をインルードしないように変更します。
    

2 Linux PCMCIA Package の変更

pcmcia-cs-3.1.8 等、最近の Linux PCMCIA Package では、システムファイルの構成 が少し変わって、昔の PCMCIA カードのデバイスドライバ・キットでは動作しなくな ることがあります。原因は /var/run/stab という PCMCIA カードの現在の設定状況 に関する情報をサブシステム間で受渡しするためのファイルの置場所が変わったため、 カードが挿入されたとき、デバイス・ファイルの作成等を行う /etc/pcmcia/ ( は "gpib" 等) といったスクリプトファイルがうまく動作できなきくなる ためで、スクリプトの中の、 stab ファイルのパスを変更することで解決します。

最近の Linux PCMCIA Package では、/var/lib/pcmcia/stab になっていますが、 /var/state/pcmcia/stab になっているものもありますので、注意してください。

なお、最近の Linux PCMCIA Package では、stab ファイルのパスを統一して管理で きるように /etc/pcmca/ ファイルの中では考えなくてもよいようになって いますので、他のファイルを参考に、書き換えるほうが良いと思います。