p5、2.1字符设备驱动回顾与数据流程
驱动到硬件,通过ioremap()函数把无论地址映射到虚拟地址
五个步骤写驱动程序
p6、入口出口细讲
第一个驱动程序
在这里插入图片描述
如果不想用init_module()这个函数,可以改,如下,
不过下面的注释就需要改成下图所示,这样才能认识这个入口
_exit()只要在编进内核的时候才有意义,其它时候无意义
p7、字符设备调用关系实验
按照5步骤写驱动
`make
sudo insmod hello_drv.ko
cat /proc/devices(查看驱动设备号)
通过设备节点访问
sudo mknod /dev/xyz(name) c(类型) 241(主设备) 0(次设备)
ls -l /dev/xyz
sudo ./hello_drv_test -r
驱动里面的open并不是必须的
注意这里把设备节点改成了xyz,和hello没有任何关系
成功打开了文件,但是写和读失败
继续写驱动程序,实现应用层调用
make
sudo rmmod hello_drv(先卸载,因为用用下面用make新生成的驱动程序)
sudo insmod hello_drv.ko
dmesg(查看)
sudo ./hello_drv_test -r
sudo ./hello_drv_test -w sdfd
以上,调用的流程就打通了
p8、数据交互
这里的头文件还有其它的,注意,以下没有全部包含
下面的asm要改成linux,要保护它的顶层文件
应用层和驱动层之间用copy_to_user/copy_from_user访问
先切换到root用户