ywlzh 发表于 2016-7-6 16:50:24

[求教]QT开发从应用层怎么看ARM内核驱动接口

实在是有点迷糊了,做过window下的QT开发串口啊,网络啊,这些都可以懂,

可是到ARM板子下的Linux 就迷糊了 概念没有转换过来

实现基本控件,显示还行,到板子的功能部件比如串口,SPI,IIC......之类的就迷糊了,我知道那都是有驱动了,关键是我打开那个驱动,却不知道这个驱动为我提供了哪些接口

大神们,你们如果拿到一份内核源代码,用相应的QT开发程序时,是怎么调试板子功能驱动了,支个招吧,谢谢

imjacob 发表于 2016-7-6 17:40:03

设备文件

ywlzh 发表于 2016-7-6 17:54:12

imjacob 发表于 2016-7-6 17:40
设备文件

能 再详细点说明吗?我有点不懂了

mangocity 发表于 2016-7-6 17:55:56

设备文件。

例如 SPI 可以这么干:
fd = open(“/dev/spi0”,O_RDWR);
然后各种 ioctl 配置一下速度,格式,超时等。
最后标准 write/read 操作
ret = write(fd,tx_buf, count);

lanqilove 发表于 2016-7-6 18:02:29

linux中一切皆文件,设备也是一个文件。通常对一个接口的操作无非就是
1、调用open打开设备;
2、调用ioctl去设置接口的参数;
3、调用write发数据;
4、代用read接受数据。

根据这思路可以搜索到类似的代码:
http://www.th7.cn/system/lin/201503/96810.shtml

ywlzh 发表于 2016-7-6 21:08:21

mangocity 发表于 2016-7-6 17:55
设备文件。

例如 SPI 可以这么干:


谢谢 我知道这个流程了

那怎么通过设备号找到对应的驱动程序呢?我先看看驱动程序

ywlzh 发表于 2016-7-6 21:09:17

lanqilove 发表于 2016-7-6 18:02
linux中一切皆文件,设备也是一个文件。通常对一个接口的操作无非就是
1、调用open打开设备;
2、调用ioctl ...

怎么找到这个设备对应的驱动代码呢?它在源代码中哪里?我改怎么查找

first_blood 发表于 2016-7-7 14:34:52

百度搜,哪里不会搜哪里

imjacob 发表于 2016-7-8 08:58:42

ywlzh 发表于 2016-7-6 21:09
怎么找到这个设备对应的驱动代码呢?它在源代码中哪里?我改怎么查找

看下韦东山的书第19章,比较好的写了这个问题。然后觉得还不够,read the xxx code

ywlzh 发表于 2016-7-9 13:27:59

imjacob 发表于 2016-7-8 08:58
看下韦东山的书第19章,比较好的写了这个问题。然后觉得还不够,read the xxx code ...

好的 谢谢

ywlzh 发表于 2016-7-9 13:29:47

first_blood 发表于 2016-7-7 14:34
百度搜,哪里不会搜哪里

呵百度搜 和 向专业人士请教 哪个好一些

况且,百度也不是面面俱到

luguobing 发表于 2016-7-9 13:38:51

一般我都找例子,然后修改,比如安卓--串口 ,肯定有例子,太底层的驱动不需要懂的,还去看系统源码,那效率就低了。知道怎么设置参数 、 打开设备、   收   、发   , 完事啦,还有一种情况是系统裁剪了设备,需要注意就可以了。

ywlzh 发表于 2016-7-9 13:46:43

luguobing 发表于 2016-7-9 13:38
一般我都找例子,然后修改,比如安卓--串口 ,肯定有例子,太底层的驱动不需要懂的,还去看系统源码,那效 ...

恩 昨天试了一下,对这板子的功能部件的应用例程,QT也能搞

但以前学过字符设备驱动,知道是那么回事,看不到对应的源码,心里总是有点芥蒂。

做过几年单片机开发,不让我看驱动,那就一个心酸

luguobing 发表于 2016-7-9 14:15:00

ywlzh 发表于 2016-7-9 13:46
恩 昨天试了一下,对这板子的功能部件的应用例程,QT也能搞

但以前学过字符设备驱动,知道是那么回事, ...

额难道你还要重新写驱动才开心,下次要用网络难道你要把所有的协议都弄懂?有现成了就用,速度速度开发才是正道!

ywlzh 发表于 2016-7-9 14:21:03

luguobing 发表于 2016-7-9 14:15
额难道你还要重新写驱动才开心,下次要用网络难道你要把所有的协议都弄懂?有现成了就用,速度速度 ...

恩就看看他们驱动是怎么写的,至少要看懂吧,真有兴趣可以自己写写驱动呀

NJ8888 发表于 2016-7-9 16:48:34

本帖最后由 NJ8888 于 2016-7-9 16:58 编辑

最省事办法是mmap,前提你有详细数据手册,执行效率比普通写驱动高好多。比四楼描述方法快。曾经SPI发送5字节,mmap方式消耗时间只有ioctl方式的1/20

ywlzh 发表于 2016-7-9 20:25:34

NJ8888 发表于 2016-7-9 16:48
最省事办法是mmap,前提你有详细数据手册,执行效率比普通写驱动高好多。比四楼描述方法快。曾经SPI发送5字 ...

你这个方法是不是跳过驱动层,直接配置寄存器?

直接在应用层获取寄存器里的数据?

NJ8888 发表于 2016-7-9 20:28:45

ywlzh 发表于 2016-7-9 20:25
你这个方法是不是跳过驱动层,直接配置寄存器?

直接在应用层获取寄存器里的数据? ...

对,跳过驱动,省了应用到内核以及内核到应用的两次数据拷贝

ywlzh 发表于 2016-7-9 20:34:45

NJ8888 发表于 2016-7-9 20:28
对,跳过驱动,省了应用到内核以及内核到应用的两次数据拷贝

恩 谢谢 现在还没有达到那个高度,只能远观 还是想先看看驱动,一看源代码那么多,就是不知道那些个配置好的驱动源代码在哪

NJ8888 发表于 2016-7-9 20:44:45

ywlzh 发表于 2016-7-9 20:34
恩 谢谢 现在还没有达到那个高度,只能远观 还是想先看看驱动,一看源代码那么多,就是不知道那些个配置 ...

我也不会写驱动,所以耍花招用mmap直接访问,我还把linux时钟片的中断关过导致系统卡死在我的程序中换不出去,哈哈
页: [1]
查看完整版本: [求教]QT开发从应用层怎么看ARM内核驱动接口