创建 设备节点
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);
在驱动中 设置接口函数 这样的话 你就可以在应用层 进行调用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)