驱动学习笔记(三)--------字符设备驱动基础

说明

本文为朱老师课程学习笔记

结构

  • 应用
  • API:open,close,read,write
  • 驱动:实际的函数
  • 硬件

驱动的表示

驱动实际上是一组(读写硬件寄存器的)api的组合
存到一个结构体里

file_operations
static const struct file_operations i2cdev_fops = { 
    .owner      = THIS_MODULE,
    .llseek     = no_llseek,
    .read       = i2cdev_read,
    .write      = i2cdev_write,
    .unlocked_ioctl = i2cdev_ioctl,
    .open       = i2cdev_open,
    .release    = i2cdev_release,
};

函数指针,实际函数的地址
一个设备,对应一个结构体变量
驱动向内核注册时提供该结构体类型的变量

注册

驱动向内核注册,上面的结构体file_operations
内核把file_operations,放到数组里

//register_chrdev使用示例
//I2C_MAJOR主设备号,传0代表内核自动分配
res = register_chrdev(I2C_MAJOR, "i2c", &i2cdev_fops);

cat /proc/devices查看内核中已经注册的
在这里插入图片描述

整体过程

insmod
	xxx_init
		register_chrdev

应用程序调用驱动

设备文件

硬件,被抽象成文件,放在/dev下
查看设备号 ls -l /dev/xxx
第一个字母,b块设备,c字符设备
设备号:8主设备号,0次设备号
在这里插入图片描述

用户空间和内核数据交互

//kbuf内核空间的
//ubuf用户空间的
copy_from_user(kbuf, ubuf, count);
copy_to_user(ubuf, kbuf, count);

过程总结

2.6的内核
insmod,调xxx_init;lsmod,显示出加载的驱动
在xxx_init里调用register_chrdev;用cat /proc/devices显示注册的设备及设备号
创建设备文件mknod /dev/xxx c字符设备 主设备号 次设备号
应用可以open,并write或read

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值