linux内核 2.6.35下的驱动例子

创建 设备节点
 
mknod  /dev/hello   c(字符设备)或者b(块设备)   250    1
查看 cat /proc/devices   当前设备节点
insmod 安装 rmmod 删除

编译  Makefile
1.需要配置好的,编译好的内核
Makefile 中的
modules
-c  指的的内核中的  也就是 你编译内核中的 那个大总管 Makefile
 然后 内核中的 总的 Makefile 调用 当前的makefile  (运行生成  .o)
然后在到   kernel/Makefile 
在到 当前Makefile  链接成 .ko 的 文件

看printk  的打印的 优先级   优先级 数字低 的   优先级 高 
  查看 方法     第一个数是指 的 当前终端的 打印 级别
修改 是     
但是 ubuntu  默认是屏蔽 好像是 4 一下的 信息的
dmesg  显示 系统当前到启动所屏蔽的信息  加  -c  表示 删除

linux 字符设备驱动 结构 
有 静态  和 动态 2种
  先要构建   就是 申请设备号  linux 为我们提供了一个宏  MKDEV(主设备号,副设备号)
 还有救是注册 设备号  

dev_t devno = MKDEV(led_major, led_minor);      设备名
result = register_chrdev_region(devno, 1, "s5pc100_led");



cdev_init(cdev, fops);
cdev->owner = THIS_MODULE;
result = cdev_add(cdev, devno, 1);


然后 static struct file_operations   这是一个非常重要的结构体,这个设备是字符驱动的核心,当应用程序操作设备文件的时候所调用的 open,read,write,close等函数时,最终会调用这个结构体中指定的 对应函数。
file_operatios    xx__fops={
.owner = THIS_MODULE //指向拥有该结构的模块,内核使用该结构维护模块使用计数
.open   = XX__open //打开设备函数
.read    =xx__read //读的接口函数
.write   = XX__write// 写的接口函数
.fasync =  xx__fasync// 异步通知的函数
.poll    = xx_poll // poll 函数
.release =xx_release //关闭设备函数
}
异步通知 函数
注意要申请异步通知的结构体
struct fasync_struct  *async_xxxx;
signal(SIGIO,处理函数入口);
fcntl(设备节点,F_SETOWN,getpid);
oflags=fcntl(设备节点,F_GETFL);
fcntl(设备节点,F_GETFL,oflags|FASYNC);

在驱动中 设置接口函数   这样的话 你就可以在应用层 进行调用 



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值