编译编写的驱动并拷贝到网络文件系统
装载模块,用cat /proc/mymsg是没有用的,因为cat时会调用到读函数,读函数里环形缓冲区还没有内容。
编译另外的驱动
出现没有定义的函数,链接时会帮我们找到的,因为这是1个外部函数,把编译好的驱动拷贝到文件系统里面
如果函数myprink的驱动没有装载,先装载我们的first_drv驱动会出现错误,所以要先装载包含函数myprink的驱动
因为在open函数里面调用myprintk函数打印信息,所以需要测试程序进行调用驱动程序的open函数,才能调用myprintk函数
myprintk函数里面的内容没有打印出来,因为myprintk函数是把信息放到环形缓冲区里面,要想把缓冲区的数据读出来,要用cat /proc/mymsg,但没有打印信息
让其在后台运行
用ps命令查看进程状态(是sleep状态)
使用kill -9 790 杀进程790
在mymsg.c驱动中的read函数加入
//printk("%s %d\n", __FUNCTION__, __LINE__); //printk("count = %d\n", count); //printk("mylog_r = %d\n", mylog_r); //printk("mylog_w = %d\n", mylog_w);
看下面,读写位置都为31那么环形缓冲区就是空的。
修改驱动后重新测试
但是再用cat /proc/mymsg时确打印不出东西,要使它能再次打印
在读函数里面做处理,也就是读指针在读取完一次数据后再回复到刚开始的状态,需要一个指针保存读开始的指针。
另外在循环读取的时候,因为需要写入数据造成原来的数据丢失,所以在写函数里面读位置的初始值也需要进行更新