2

私は、ldd に基づいて単純な文字ドライバー スカルを書いています。私のサンプル キャラクター ドライバでは、モジュールはアンロードされていますが、メジャー番号を持つデバイスは /proc/devices に存在します。それを取り除く方法は?

私のモジュール出口機能は

void scull_exit(void)
{
    unregister_chrdev(Major, "scull1");
    cdev_del(my_cdev);  
    printk(KERN_ALERT "Good Bye\n");

}

同じものをアンロードした後に新しいモジュールをロードすると、古いデバイスとそのメジャー番号が表示されました。

4

2 に答える 2

3
  1. cdev_delmy_cdev がポインターであることを確認してください。

    void cdev_del(struct cdev *);

  2. それはcdev_del、最初に、そしてunregister_chrdev later、あなたはそれを逆にしたようです。cdev_del最初 に使用してからunregister_chrdev_region

  3. unregister_chrdev の古い表記と cdev_del の新しい表記を混同しています。

    • 登録unregister_chrdevに使用する場合は、どちらかを使用する必要がありますregister_chrdev

      また

    • " cdev_init/ cdev_addafter " は " before "register_chrdev_regionと組み合わせて使用​​する必要がありますcdev_delunregister_chrdev_region

于 2013-10-19T12:03:48.273 に答える