当前位置: 技术问答>linux和unix
Linux系统上用QT编写ARM9控制继电器程序的问题
来源: 互联网 发布时间:2017-04-06
本文导语: 我刚刚接触QT,目前还是在windows上学习QT 。 想写个QT界面程序到arm板子上,就是通过界面的按钮来控制继电器的开关。但是不知道怎么去实现 求高手指点 | 你驱动写好了吗,先弄驱动,...
我刚刚接触QT,目前还是在windows上学习QT 。 想写个QT界面程序到arm板子上,就是通过界面的按钮来控制继电器的开关。但是不知道怎么去实现 求高手指点
|
你驱动写好了吗,先弄驱动,把驱动加载好后,然后就写QT程序,就好了,最简单的就是一个界面上 两个按钮,开启与关闭。感觉很简单,是吧!!!!
|
你到底是卡在哪块了呢?是驱动还是应用层?
先解决驱动的问题:
继电器,用I/O就可以控制了是吧,给高就通,给低就断,或者反着。
驱动程序内部建立一个状态记录量。用字符设备驱动就可以做了,有open,close,ioctl 3个就OK了。ioctl里面,一个读取状态命令(返回状态的方式有两种,通过返回值返回但是不规范,另一种就是通过传参指针返回),一个设置状态命令(也可以拆成2个,一个设置成开一个设置成关,这样就不用解析第二个变量了)。写个驱动程序,默认加载后通。然后改一下,加载后默认关。先验证你的驱动能正常控制硬件设备。读的问题不管,流程是一样的,设置好了,读也就差不多了。但需要应用程序配合,所以这个读状态到后面做。
然后写应用程序,打开设备文件,调用应用程序的ioctl发送通或者是开,两个按钮,或者是一个按钮带切换状态的。这样就差不多了,带个读状态功能也不难,只要ioctl设置是好的,这个读取状态也是和设置状态一样的流程,一样简单的改改就好了。QT上加个按钮,这很简单吧,这可是最简单的。
整个功能还是很简单的。不管是驱动还是应用程序,都是只要找到了简单的例子程序,很简单的改改就OK了。自己先试试,再有问题再说。
|
你没有把你手上开发板自带的资料都通读一遍吗。
那个是有教程的,你编译生成的Linux可执行文件有一下几种方法放到开发板上:
1.把U盘或SD卡插接到PC上,把程序存到U盘或SD里面,然后插接到开发板上,拷贝出程序就可以了。
2.通过网络的方法,例如tftp(很常用)或ftp,也有其他的网络方法,这里就不说了,初学者应该学会最常用的。
3.其他方法就不再介绍了。
建议初学者自己要多多阅读资料,不要一心急着问问题,答案一般都在手边,勿需舍近求远。
查阅拟定资料也是一项很重要的能力,这个就是在锻炼这个能力。
|
makefile文件是怎么弄的?是自己写的,还是原模原样的搬过来的,还是经过自己修改的?还是?
make之后,编译显示的信息有没有报错?
有错的话,需要查看导致错误的原因。是代码写得有问题,还是makefile不对。
没有报错的话,那么要么生成的*.ko不在当前目录下而在其他的路径下,自己查看makefile文件
要么makefile写得有问题,编译通过了但就是没有生成*.ko文件。
|
你是直接在内核模块中加的驱动编译呀
这个我不是很熟悉,但建议你不要怎么干。
你对这个的选项是Y还是M,这是由区别的。我要没记错的话,如果选的是Y的话,可能这个驱动已经被打包起来了,当然也就看不到了。选M,是以模块化的方式生成的,那就会有*.ko的文件。
但是,你这是在编一个大内核里面的,修改、调试都很麻烦不觉得吗!!!
开发驱动好的作法是,以模块化的方式编译,最好是单独编译。调试时手工加载驱动。不要编译到内核,不要随机加载,那是等你把驱动都做得没有问题了,确认基本没有风险了才这样做的。
给你一个Makefile的范例,自己对着改改吧。
obj-m := beep.o //改成你要的驱动文件的名字,注意不要用ko,它自己会给你生成ko的
PWD =$(shell pwd)
KERNELSRC =/homeS3C2440_ker/kernel //内核路径
all:
rm -rf *.ko* *.o *.mod.c Module.symvers
make -C $(KERNELSRC) M=$(PWD) modules
clean:
rm -rf *.ko* *.o *.mod.c Module.symvers
|
你用的我给的makefile改后编译出来gpio没定义的错误是吗?
你给的内核路劲应该有问题了
|
继电器接ARM板的GPIO,然后写个程序控制GPIO的高低电平就可以了。