点击这里给我发消息 点击这里给我发消息

一个简单的C语言创建自己的设备的例子

添加时间:2013-12-7
    相关阅读: 程序 linux 框架 C语言 系统

    我们在内核里面有时候项纪录一些自己的东西,其中有个好方法就是创建一个自己的特有的设备。这样我们可以在需要记录东西的地方,就调用这个设备的接口函数,这样很方便。
    这里我们创建一个很基本的设备驱动,主要是看看一个设备驱动的框架,这个例子重的设备驱动没有任何实际的功能。:)

    #define module
    #define __kernel__
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/string.h>
    #include <linux/fs.h>
    #include <linux/malloc.h>
    #include <asm/unistd.h>
    #include <sys/syscall.h>
    #include <asm/fcntl.h>
    #include <asm/errno.h>
    #include <linux/types.h>
    #include <linux/dirent.h>

    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\");
    }

    在上面的代码中最重要的一个函数是:register_chrdev(...),这个函数在系统里面注册了我们的驱动程序,主设备号码是30。如果我们需要访问这个设备,则要这样做:

    # mknod /dev/driver c 30 0
    # insmod mydriver.o

    然后你就可以在自己的程序里面使用这个设备了。
    the file_operations 结构体提供了所有的函数,直接使用就可以了。注意,如果需要在设备里面log一些东西的话,就可以自己处理了。例如在write这个函数里面提供一些处理之类的。

相关一个简单的C语言创建自己的设备的例子

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册