黄石网站建设流程,校园局域网站建设费用,聚划算网站建设分析,南京设计网站建设字符设备控制技术 前面的学习#xff0c;我们学习了驱动程序#xff0c;实现程序的读写功能。现在设备还有一项更重要的功能--控制。 控制设备的函数#xff1a;ioctl。 Cmd#xff1a;参数是我们发送的命令#xff0c;例如重启。 第三个参数#xff1a;是依赖第二个…字符设备控制技术 前面的学习我们学习了驱动程序实现程序的读写功能。现在设备还有一项更重要的功能--控制。 控制设备的函数ioctl。 Cmd参数是我们发送的命令例如重启。 第三个参数是依赖第二个例如我们要修改波特率的值我们就会在第三个参数传上波特率的值。当第二个不需要参数就是空值。 前面知道当我们系统调用read函数的时候系统会自动调用***.read函数。上面是我们ioctl系统调用的时候系统调用的函数版本。参数一一对应传递。 总结我们从上面的学习read和write的内容知道我们在程序里调用read函数在系统会调用***_read函数然后找在内核的相应的实现函数。Write也是一样的write-***_write他在内核的实现。所以现在控制程序ioctl对应系统的unlock_ioctl接下来也是看系统是如何实现的。 定义命令 系统用宏来定义命令 我们知道类型是8位的然后一个字母刚好是8位一个字符例如m。 0是命令的序号最后int是命令的类型。 通过上面知道我们知道了如何实现。下面看程序的实现功能第一实现设备的重启的命令第二是设参数。 首先是定义命令宏memdev.h: 接着就是在mem_fops结构里添加我们的控制函数 接下来就是我实现控制函数 在内核的unlocked_ioctl的函数原型 从上面我们得到 Long mem_iotcl(struct file *filp, unsigned int cmd, unsigned long arg).我们知道里面有一个switch的选择结构。 记得是在struct结构的前面实现 运行的结果 接下来是写个应用程序来测试一下mem_ctl.c: 编译结果 写好了驱动程序memdev.ko和应用程序mem_ctl拷贝到我们的开发板 首先是安装memdev.ko驱动并查看主设备号 接下来创建字符设备文件memdev0: 接下来运行我们的应用程序 ./mem_ctl执行了这个命令之后会输出 Arg is 115200 Restart devices 转载于:https://www.cnblogs.com/FORFISH/p/5188461.html