2012-03-12 26 views
0

私のLinuxディレクトリのC言語で/devicesにcharデバイスを追加します。私がinsmod my_module.koのときだけ存在すべき架空のドライバを作成しているので、私のモジュールで私用のデバイスを作成したい。以下は、私のコードのデバイスを追加する部分ですが、私はcdev structを初期化してカーネルに伝えます。bashスクリプトを使用してC言語でcharデバイスを追加するには

int start_mod(void){ 
    //Because we are dealing with a fictitious device, I want 
    //the driver to create my two devices with arbitrarly 
    //assigned major numbers. 

    alloc_chrdev_region(&dev_num, FIRST_MINOR, COUNT, DEVICE_NAME); // This assigns my device name 
            // as well as asign Major # my driver uses 

    cdev_init(&(my_dev->my_cdev), &fops);// This initializes my cdev struct that the kernel uses to keep track of my device 
    my_dev->my_cdev.owner = THIS_MODULE; 
    my_dev->my_cdev.ops = &fops;// fops is my file operations struct 

    int err = cdev_add(&(my_dev->my_cdev), dev_num, COUNT);// this in theory should give a pointer to the kernel 
    // to my cdev struct that I have setup to exist in my other structure. 

    // Now I need to officially add my device to /devices folder. 
    return 0; 
} 

カーネルにcharデバイスを正式に追加するにはどうすればよいかわかりません。

+1

[mknod(2)](http://linux.die.net/man/2/mknod) –

答えて

2

あなたは、class_createdevice_createのような最新の登録機能をカーネルで使用していますか?これにより、udevはデバイスを作成することができます。

他のドライバーを見ずにドライバーを書いたと言っていますか? 文字デバイスの登録方法の例が不足しているためです。

ルック

drivers/char 

にこれらの前述の機能を使用すると、コードを再配布する場合に意味を持っている方法によって、GPL専用です。

2

mknod()システムコールが使用されていましたが、通常はroot特権プロセスのみが/devにデバイスを作成できます。

+0

私が忘れる前に、exit_moduleを実行するとそのデバイスを削除する方法もありますか? –

+0

'unlink()'システムコールは 'mknod()'によって作成されたエントリを削除します。 –

+0

私はmknodを試しましたが、私が提供したヘッダファイルを見つけることができません。私はこれがユーザー空間fxnなので、そのためにカーネルモジュールでは動作しないと思っています。 –

関連する問題