微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > Linux中加入led驱动及测试程序详解

Linux中加入led驱动及测试程序详解

时间:06-08 来源:互联网 点击:

设备驱动框架有一个大概的了解。

打开linux的源码目录,找到drivers/char/s3c6410-led.c


打开看一下源码,飞凌的这个led驱动程序可以运行,不过不太好,我改了一个小地方,我也看了友善的led的程序,两者如出一辙,不知道是谁copy谁的。大家有兴趣的可以看一下,ioctl中的switch语句,已经有了switch为什么还要在里面用if语句呢,看来高手也有犯小错误的时候。主要起控制led灯亮灭的是这个函数。

static long s3c6410_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)//控制函数

{

        if (arg > 4){//因为只有四个led灯,如果大于四就返回一个错误

                 return -EINVAL;

        }

        switch(cmd) {              //根据命令来设置亮灭

                unsigned tmp;

                tmp = readl(S3C64XX_GPMDAT);

        case 0:                                                //打开

                tmp &= (~(1<<arg));

                break;

        case 1:                                                        //关闭

                tmp |= (1<<arg);

                break;


        default:

                return -EINVAL;

                writel(tmp,S3C64XX_GPMDAT);//数据写回寄存器

                printk (DEVICE_NAME": %d %d\n", arg, cmd);

                return 0;

        }

}

代码中有简单的注释,这里就不多说,我们怎么来测试我们的驱动可以用了呢?

我们写一个测试程序来看一下。

写一个流水灯吧,源码发给大家。

在linux下编译执行


就可以生成ledtest,注意如果把arm-linux-gcc的路径加到PATH环境变量中去,否则会出现找到不命令的错误。

把ledtest通过串口发到开发板中,因为没有执行权限,先运行chmod 777 ledtest

然后再./ledtest


就可以看到流水灯闪动了。


由于闪动的有点快,手机拍下来显示成两个亮了。其实是闪动的。

还有再给大家说一下怎么来把led驱动加到内核中呢,linux的编译用的是makefile管理的,初学者对于makefile的基本结构要知道一些,不用把整个makefile的文档都看一遍,但也要把知道大概,  makefile的格式规则是这样的

target : prerequisites  

            command

我们打开char目录下的makefie看一下,


这一行是把led的驱动加入内核的关键,而我们在编译的时候要配置是加入内核还是编译成模块呢,我们运行make menuconfig的时候是怎么出现的配置的呢?这个要看我们的Kconfig文件


这个里面的FORLINX6410_LEDS和前面的Makefile中的文件


只差了一个前缀,这个就是我们在make menuconfig 的时候的配置选项。

进入到Device DriversàCharacter devices找到LedS driver forlinx6410


我们选上这一项就是编译进内核,如果是M,就是要编译成模块,可以动态加载,如果是空就是不编译。Make menuconfig的时候就是如何剪裁操作

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top