Linux嵌入式驱动初体验(六)--- LED驱动测试程序

时间:2022-06-20 23:38:25

      通过上一篇文章,我们已经写好了一个LED驱动,但是如果光运行这个驱动程序(其实它是一个模块程序,不能称之为运行),LED灯是不会亮的,驱动程序的作用其实就相当于编写了一些库函数一样,当驱动程序通过编译,然后以模块的形式加载到内核之后,这些函数就是可以用的了,然后通过调用这些函数来实现设备的使用。原理就是这么个原理,下面就根据上一篇文章得到的那些函数,来写一个能够让LED闪烁的,称之为测试程序的代码。

      其实代码并不长,重点在于编写的模式和思路。对于一个设备来说,Linux同样把它看成是文件,所以首先肯定是要打开它,而打开会有两种结果,一种是打开成功,一种是打开失败:打开成功了,就要对它进行操作,就可以用我们之前实现的write或者ioctl来控制这个打开的设备,然后用完之后,就要进行关闭;如果打开失败,那么就什么都不能做了,只能exit,结束程序。本着这个思路,我们就可以很容易的实现下面的代码:

 

前面是一些必要的头文件,就不多说了。在Linux中,设备会在/dev中一个对应的文件,我们打开的就是它。在open之后,就是对它进行write和ioctl操作,他们的参数都是对应的,但是并不是所有的参数都有,这在标准C中是不对的,但是这里是合法的,可能它是遵循了其他的标准吧,其实在使用ioctl的时候,完全可以写成ioctl(fd, SET_LED_ON),原理有待考察。。。这就是一个简单的测试程序,其实只要有思路,按模式来写,其中可以改写一些带有花样的设计,这里就不详细说了,大家可以开动脑筋,自己想一些好玩的方案。

      还要特别说明一下,我们写的驱动是针对有Linux系统的SmartArm3250开发板,所以我们的测试程序也是针对它来设计的,所以这个程序一定是在开发板上运行了,所以我们就要用交叉编译器来编译它,让开发板可以认识,我们可以写一个Makefile来编译它:

 

这个Makefile也是比较简单的,大家一看应该就能懂了。其实这篇文章没有什么技术含量,只是上一篇文章的完结篇,对于驱动的开发就是这样,一个是用来创造函数(驱动程序),一个是用来使用函数(应用程序)。

      继续努力!