Linux字符设备驱动疑难问题--printf打印信息发到字符设备write函数中
我在开发中遇到一个奇怪的问题:
1、创建了一个字符设备驱动,为其注册了open、read、write、poll等函数;
2、创建了一个用户空间程序,用来打开1中的字符设备驱动,为的是传递命令到用户空间程序进行处理;
3、当PC端发送一个请求,我们受到后会将其放到请求列表ctrl_list中;
4、字符设备的read函数会循环检测ctrl_list中有没有控制请求,当有控制请求的时候,会通过copy_to_user发送到用户空间程序中;
5、用户空间程序解析4中的请求并执行处理,处理完成后发送结果,在用户空间调用write,我们的请求处理结果最大50字节;
6、在字符设备驱动的write函数中,会出现被写入4096或1024字节数据的情况(依平台不同有所变化),这个是一页的数据;
7、上述一页的数据是我们用户空间程序中所有printf语句的打印信息,并被发送到PC侧,可以从打印log看出;
8、我们通过在内核加panic和在用户空间加指针误操作进行追踪,发现上述4096字节的数据不是我们的用户空间程序调用的,从panic看是文件系统自己调用,并把printf的打印发过去,出现这种情况时,用户空间的打印不会在串口打印出来;
麻烦大家看下有没有遇到过这种问题,为什么会被莫名其妙调到;
不方便贴代码;
谢谢
1、创建了一个字符设备驱动,为其注册了open、read、write、poll等函数;
2、创建了一个用户空间程序,用来打开1中的字符设备驱动,为的是传递命令到用户空间程序进行处理;
3、当PC端发送一个请求,我们受到后会将其放到请求列表ctrl_list中;
4、字符设备的read函数会循环检测ctrl_list中有没有控制请求,当有控制请求的时候,会通过copy_to_user发送到用户空间程序中;
5、用户空间程序解析4中的请求并执行处理,处理完成后发送结果,在用户空间调用write,我们的请求处理结果最大50字节;
6、在字符设备驱动的write函数中,会出现被写入4096或1024字节数据的情况(依平台不同有所变化),这个是一页的数据;
7、上述一页的数据是我们用户空间程序中所有printf语句的打印信息,并被发送到PC侧,可以从打印log看出;
8、我们通过在内核加panic和在用户空间加指针误操作进行追踪,发现上述4096字节的数据不是我们的用户空间程序调用的,从panic看是文件系统自己调用,并把printf的打印发过去,出现这种情况时,用户空间的打印不会在串口打印出来;
麻烦大家看下有没有遇到过这种问题,为什么会被莫名其妙调到;
不方便贴代码;
谢谢
...全文
相关推荐
Unix/Linux中的read和write函数
"这篇文档详细介绍了Unix/Linux操作系统中用于文件操作的两个基本函数:read和write。文件描述符是核心概念,它是一个非负整数,用于标识打开的文件。write函数用于向文件写入数据,而r
Linux:printk与printf的区别
本文主要讨论了Linux系统中的两个重要打印函数:printk与printf,它们在内核层和应用层的不同应用场景以及功能差异。printk是内核层的标准打印函数,用于在内核空间进行日志记录,由于内核代
linux驱动编写
该目录主要用于存放字符设备驱动。
Linux驱动学习总结
例如,`usleep`和`msleep`函数可以用来实现微秒级和毫秒级的延时。#### 八、总线、设备和驱动**8.1 总线、设备和驱动**在Linux设备模型中,总线、设备和驱动之间的关系非常紧密。
触摸屏驱动程序(基于linux)
触摸屏驱动程序的函数实现触摸屏驱动程序中实现了以下函数:* read_xy函数:读取触摸屏的坐标值和压力值。* ts_write_buf函数:将触摸屏的坐标值和压力值写入缓冲区。5.


