C實(shí)例編程:C語(yǔ)言創(chuàng)建自己的設(shè)備

字號(hào):

我們?cè)趦?nèi)核里面有時(shí)候項(xiàng)紀(jì)錄一些自己的東西,其中有個(gè)好方法就是創(chuàng)建一個(gè)自己的特有的設(shè)備。這樣我們可以在需要記錄東西的地方,就調(diào)用這個(gè)設(shè)備的接口函數(shù),這樣很方便。
    這里我們創(chuàng)建一個(gè)很基本的設(shè)備驅(qū)動(dòng),主要是看看一個(gè)設(shè)備驅(qū)動(dòng)的框架,這個(gè)例子重的設(shè)備驅(qū)動(dòng)沒(méi)有任何實(shí)際的功能。:)
    #define module
    #define __kernel__
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    static int driver_open(struct inode *i, struct file *f)
    {
    printk(\"<1>open function\\n\");
    return 0;
    }
    static struct file_operations fops = {
    null, /* owner */
    null, /*lseek*/
    null, /*read*/
    null, /*write*/
    null, /*readdir*/
    null, /*poll*/
    null, /*ioctl*/
    null, /*mmap*/
    driver_open, /*open, take a look at my dummy open function*/
    null, /*release*/
    null, /*fsync...*/
    null,
    null,
    null,
    null,
    null
    };
    int init_module(void)
    {
    if(register_chrdev(30, \"mydriver\", &fops)) return -eio;
    return 0;
    }
    void cleanup_module(void)
    {
    /*unregister our driver*/
    unregister_chrdev(30, \"mydriver\");
    }
    在上面的代碼中最重要的一個(gè)函數(shù)是:register_chrdev(...),這個(gè)函數(shù)在系統(tǒng)里面注冊(cè)了我們的驅(qū)動(dòng)程序,主設(shè)備號(hào)碼是30。如果我們需要訪問(wèn)這個(gè)設(shè)備,則要這樣做:
    # mknod /dev/driver c 30 0
    # insmod mydriver.o
    然后你就可以在自己的程序里面使用這個(gè)設(shè)備了。
    the file_operations 結(jié)構(gòu)體提供了所有的函數(shù),直接使用就可以了。注意,如果需要在設(shè)備里面log一些東西的話(huà),就可以自己處理了。例如在write這個(gè)函數(shù)里面提供一些處理之類(lèi)的