Linux字符驱动程序的基本结构与函数

基本的函数与结构

函数

//驱动注册,注销函数
module_init(void (*func));
module_exit(void (*func));

这两个函数,将会在执行insmod和rmmod时对传入的函数进行回调。

intregister_chrdev(unsignedintmajor,constchar*name,
struct file_operations*fops);

其中参数major如果等于0,则表示采用系统动态分配的主设备号;不为0,则表示静态注册。

int unregister_chrdev(unsignedintmajor,constchar*name);

注销字符设备可以使用unregister_chrdev函数。

//打开文件
int open(const char *pathname, int flags, mode_t mode);

//读取文件到buf
int read(int fd, const void *buf, size_t length);

//写buf到文件
int write(int fd, const void *buf, size_t length);

//ioctl是设备驱动程序中对设备的I/O通道进行管理的函数
//用于应用函数到驱动程序的传参
int ioctl(int fd, ind cmd, …); 

结构

struct file_operations {
    struct module *owner;

    ssize_t (*read)(struct file *,charchar *, size_t, 
    loff_t *);
    //从设备同步读取数据  

    ssize_t (*write)(struct file *,const charchar *, 
    size_t, loff_t *);  
    //向设备同步写入数据

    int (*ioctl) (struct  inode *,  struct file *, 
    unsigned int,  unsigned long);
    //执行设备IO控制命令  

    int (*open) (struct inode *, struct file *);
    //打开  
    ...
}

应用程序函数与驱动程序函数的关系

当在应用程序中用open打开某个设备时,在file_operations 结构体的open指向的成员函数,将会被回调;相应的,read,write,ioctl等函数都会如此的调用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值