OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5939|回复: 12

发现IMX.6UL驱动开发手册一则问题

[复制链接]

41

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2019-8-20
在线时间
83 小时
发表于 2020-3-6 13:02:02 | 显示全部楼层 |阅读模式
最近一直在看字符驱动设备一章节,40.4.4运行测试一节中3、chrdevbase 设备操作测试
描述如下:
“一切准备就绪,接下来就是“大考”的时刻了。使用 chrdevbaseApp 软件操作 chrdevbase 这
个设备,看看读写是否正常,首先进行读操作,输入如下命令:
./chrdevbaseApp / dev / chrdevbase 1 ”
“从图 40.4.4.8 可以看出,首先输出“kernel senddata ok!”这一行信息,这是驱动程序中
chrdevbase_read 函数输出的信息,因为 chrdevbaseAPP 使用 read 函数从 chrdevbase 设备读取数
据,因此 chrdevbase_read 函数就会执行。chrdevbase_read 函数向 chrdevbaseAPP 发送“kernel
data!”数据,chrdevbaseAPP 接收到以后就打印出来,“read data:kernel data!”就是 chrdevbaseAPP
打印出来的接收到的数据。”
我查看了源码,读取的操作函数并无打印内核读取信息的部分,这段是不是描述有问题?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2020-3-6 13:19:02 | 显示全部楼层
chrdevbaseAPP中调用read->系统调用->驱动中的read(调用copy_to_user函数将内核数据拷贝至用户层,再打印kernel senddata ok),这时chrdevbaseAPP中调用read结束,chrdevbaseAPP中再打印read data:kernel data
具体流程如上,你再理解理解
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

41

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2019-8-20
在线时间
83 小时
 楼主| 发表于 2020-3-6 14:00:19 | 显示全部楼层
szczyb1314 发表于 2020-3-6 13:19
chrdevbaseAPP中调用read->系统调用->驱动中的read(调用copy_to_user函数将内核数据拷贝至用户层,再打印ke ...

谢谢,解惑解惑。。。兄台最近上班了么
回复 支持 反对

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2020-3-6 14:05:32 | 显示全部楼层
sn3707 发表于 2020-3-6 14:00
谢谢,解惑解惑。。。兄台最近上班了么

2.10就上班了啊,你们还处于在家状态?
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

41

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2019-8-20
在线时间
83 小时
 楼主| 发表于 2020-3-6 14:56:28 | 显示全部楼层
szczyb1314 发表于 2020-3-6 14:05
2.10就上班了啊,你们还处于在家状态?

2.17上班,再请教一个问题,还是这个例程,我用户read函数读出来返回值是0,但是我驱动明明按照手册给定的写进去了啊,copy_to_user? 您碰到过么。。
回复 支持 反对

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2020-3-6 15:13:04 | 显示全部楼层
返回0 表示read到了驱动设备文件的末尾,
Capture.JPG
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

41

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2019-8-20
在线时间
83 小时
 楼主| 发表于 2020-3-6 15:25:53 | 显示全部楼层
szczyb1314 发表于 2020-3-6 15:13
返回0 表示read到了驱动设备文件的末尾,

求教,这是指我读取的长度大于驱动缓冲区了?所以遇到了结束符?
回复 支持 反对

使用道具 举报

41

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2019-8-20
在线时间
83 小时
 楼主| 发表于 2020-3-6 15:51:56 | 显示全部楼层
szczyb1314 发表于 2020-3-6 15:13
返回0 表示read到了驱动设备文件的末尾,

我查了下,read 返回0 说明缓存没数据啊,就是内核没有给用户数据?但是我明明做了 copy_to_user- -.. 好像是和读取数字和大小无关的 这个
回复 支持 反对

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2020-3-6 15:55:31 | 显示全部楼层
是的,原子的例程是APP中读50个字节,其实驱动设备文件中绝没有50个字节给你读,所以read返回的结果肯定是0,即读到了文件的末尾,但是原子read之后的判断是返回值<0认为出错,other认为正确,当然返回的0肯定是不满足<0,所以程序打印出了read data:kernel data

                retvalue = read(fd, readbuf, 50);
                if(retvalue < 0){
                        printf("read file %s failed!\r\n", filename);
                }else{
                        /*  读取成功,打印出读取成功的数据 */
                        printf("read data:%s\r\n",readbuf);
                }
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

41

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2019-8-20
在线时间
83 小时
 楼主| 发表于 2020-3-6 16:15:54 | 显示全部楼层
szczyb1314 发表于 2020-3-6 15:55
是的,原子的例程是APP中读50个字节,其实驱动设备文件中绝没有50个字节给你读,所以read返回的结果肯定是0 ...

谢谢,清楚点了,
我尝试了读取两个字节,也是0啊。。
“kernel data”这个怎么都是不会只有2个啊
而且我加了打印字符串就报错。。segment fault
回复 支持 反对

使用道具 举报

41

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2019-8-20
在线时间
83 小时
 楼主| 发表于 2020-3-6 16:42:06 | 显示全部楼层
szczyb1314 发表于 2020-3-6 15:55
是的,原子的例程是APP中读50个字节,其实驱动设备文件中绝没有50个字节给你读,所以read返回的结果肯定是0 ...

打搅了,是不是我在想,驱动这里要不要初始化。我用户空间写完全没问题。
读也是打印有问题。感觉好像是过来的数据未初始化
回复 支持 反对

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2020-3-9 13:29:57 | 显示全部楼层
sn3707 发表于 2020-3-6 16:42
打搅了,是不是我在想,驱动这里要不要初始化。我用户空间写完全没问题。
读也是打印有问题。感觉好像是 ...

这个应该不会,你可以初始化试试
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

41

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2019-8-20
在线时间
83 小时
 楼主| 发表于 2020-3-10 15:05:25 | 显示全部楼层
szczyb1314 发表于 2020-3-9 13:29
这个应该不会,你可以初始化试试

被领导拉去做另外一个事情了,这事情我判断也不是初始化,但是确实死在printf这个函数,等稍后我有空测试下再更新此事进度
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 08:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表