社区
Linux_Kernel
帖子详情
ioctl 驱动代码里加打印信息,工作不正常
hhll26
2010-09-27 01:51:49
有个wifi的驱动,在ioctl的代码里,加了一句打印,
printk("tbm WLAN_CMD_BSS_SCAN..begin \n");
后,驱动就不能正常工作,不会出错,但是搜索不到无线网络了,去掉这句,马上就可以搜索到了。
请问,可能是什么原因呢?
...全文
238
12
打赏
收藏
ioctl 驱动代码里加打印信息,工作不正常
有个wifi的驱动,在ioctl的代码里,加了一句打印, printk("tbm WLAN_CMD_BSS_SCAN..begin \n"); 后,驱动就不能正常工作,不会出错,但是搜索不到无线网络了,去掉这句,马上就可以搜索到了。 请问,可能是什么原因呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
deep_pro
2010-09-29
打赏
举报
回复
会用source insight这样的工具是非常必要的
hhll26
2010-09-29
打赏
举报
回复
内核中struct device 和struct net_device 都是很常见很重要的数据结构
具体的结构是什么,到哪里可以查到?linux/netdevice.h中吗?
hhll26
2010-09-29
打赏
举报
回复
#define net_device device
----------------------
不知道你在哪看到的,内核中struct device 和struct net_device 都是很常见很重要的数据结构,他们不可能相同
这个是驱动代码里的。
把你的目标板上的镜像先导入pc,挂载成nfs调试
请问,怎么把目标板上的镜像导入pc?
deep_pro
2010-09-29
打赏
举报
回复
不能把整个nfs下的东西制作成镜像烧进目标板,因为目标板装不下那么多。
---------------
那用nfs就没什么意义 还不如把你的目标板上的镜像先导入pc,挂载成nfs调试
如果我想把struct __device_info里的dev的一些值打印出来看,怎么做呢?
-----------------
printk啊 ,这个有什么问题?
#define net_device device
----------------------
不知道你在哪看到的,内核中struct device 和struct net_device 都是很常见很重要的数据结构,他们不可能相同
hhll26
2010-09-29
打赏
举报
回复
不能把整个nfs下的东西制作成镜像烧进目标板,因为目标板装不下那么多。
比如,目标板上就必须用busybox,而nfs下不是的。
刚刚看了一下驱动的代码,有个问题,不明白,请教大家,在代码里,定义了
typedef struct __device_info {
// netdev
struct usb_device* usb;
struct net_device* dev;
struct net_device_stats stats;
...
而这里的net_device,确是宏定义为
#define net_device device
如果我想把struct __device_info里的dev的一些值打印出来看,怎么做呢?
宏定义里的device,是什么?
deep_pro
2010-09-29
打赏
举报
回复
就是nfs下和目标板上,文件系统不是完全一样的。但是没有办法做到完全一样
-------------------
为什么没办法呢 ,一般都是nfs测试好了就把nfs制作成镜像烧进目标板啊
hhll26
2010-09-29
打赏
举报
回复
奇怪的问题,困扰了很久,就是wifi的驱动,nfs下工作正常,下载到目标板上,就不正常了。
并不报错,在nfs挂载方式下,可以搜索到无线网络,下载到目标板后,就搜索不到了。
kernel是一样的,就是nfs下和目标板上,文件系统不是完全一样的。但是没有办法做到完全一样。
另外,文件系统东西太多,不知道怎么查起?
hhll26
2010-09-29
打赏
举报
回复
如果怀疑这里在nfs和目标板上有差异,导致问题,请问,可以查哪些东西?
比如,insmod加载了wifi模块后,ifconfig eth1 up命令后,可以查哪些地方,来看是否正常?
deep_pro
2010-09-27
打赏
举报
回复
把printk 换个延时试试呢
其实加打印信息是为了调试。我这个驱动有个怪问题,在nfs挂载下,可以正常工作,可以搜索到无线网络。但是下载到目标板后,就搜索不到了,因此想加打印信息找找原因。
------------------------------
我也遇到过类似现象,最后发现在nfs里设置的/etc/hostname 在烧写后不起作用,只得手动执行hostname修改
所以nfs也不能全信啊
pottichu
2010-09-27
打赏
举报
回复
从 ioctl 的上下文来看, 加个打印信息应该是不会有问题的。
hhll26
2010-09-27
打赏
举报
回复
其实加打印信息是为了调试。我这个驱动有个怪问题,在nfs挂载下,可以正常工作,可以搜索到无线网络。但是下载到目标板后,就搜索不到了,因此想加打印信息找找原因。
丰满
2010-09-27
打赏
举报
回复
打印影响的哦,不要打印算了
Linux
驱动
开发—
ioctl
命令构成,设备
驱动
基础使用
ioctl
详解
ioctl
(输入/输出控制)是一种系统调用,用于设备
驱动
程序与用户空间应用程序之间进行设备特定的输入/输出操作。它通常用于对设备执行标准文件操作(如读取、写入、打开和关闭)之外的特殊操作。
ioctl
提供了一种通用的机制,通过文件描述符与设备进行交互,支持各种类型的设备操作和控制。
ioctl
定义命令和参数:设备
驱动
程序和用户空间应用程序之间的交互是通过命令和参数来实现的。命令通常是一个宏,表示特定的操作,而参数则是传递给
驱动
程序的数据。调用
ioctl
系统调用:用户空间应用程序通过文件描述符调用
ioctl
。
ioctl
调用不执行问题的解决
在
驱动
开发中,
ioctl
是很常用的应用层与内核通信的接口,今天调试过程中遇到一个
ioctl
调用不执行的问题,有点意思,写篇博客记录一下。 对于网络设备,内核通过宏SIOCDEVPRIVATE给各个设备预留了一组私有
ioctl
命令,
驱动
可以自行定义响应函数来执行相应的操作。今天接到一个需求,要在
驱动
里添加一个清空用户统计信息的功能,于是相应的就需要增加一个
ioctl
命令供应用层调用。看了
驱动
代
【Linux】设备
驱动
中的
ioctl
详解
ioctl
是一个通用的系统调用,用于对打开的文件描述符执行各种控制操作。在Linux中,
ioctl
控制设备:应用程序可以通过
ioctl
发送命令给设备
驱动
,实现对设备的控制。获取设备信息:应用程序可以通过
ioctl
从设备
驱动
获取设备的状态信息。在内核空间,每个
ioctl
命令都由一个宏定义来表示。这个宏定义通常包含命令的类型(读、写、读写)、命令号、数据类型和数据长度等信息。
驱动
与用户层通信之
ioctl
的使用
驱动
与用户层通信之
ioctl
的使用一、
驱动
中注册netdev二、
驱动
中的处理
ioctl
通信的函数三、 内核中相关定义规范四、
驱动
中存取ifreq中数据五、 用户层的软件
代码
:总结 一、
驱动
中注册netdev
驱动
中注册net_device_ops全局变量结构体: static const struct net_device_ops myNetDeviceOptions = { .ndo_open = ..., .ndo_stop
linux
驱动
开发-
ioctl
TOCTOC在内核中,
ioctl
(input/output control)是一个系统调用,用于设备
驱动
程序和用户空间程序之间的通信。它允许用户空间程序向设备
驱动
程序发送命令,以执行特定的操作或获取设备的状态信息。
ioctl
是一个非常灵活的接口,因为它可以根据设备类型和需求定义不同的命令。
ioctl
的基本结构。
Linux_Kernel
4,469
社区成员
17,458
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章