您的位置:首页 > 其它

第一个led驱动的加载和实现

2015-04-09 20:10 211 查看
************************************************************************************************************************************************************

这里是接着上次的s3c_led驱动程序的续集http://blog.csdn.net/liuzijiang1123/article/details/44829319

首先我们在虚拟机上编译好我们所需要的文件。

因为是在ARM板下运行,所以我们要改一下Makefile文件(编译驱动的)里面的一个小小的内容。



Makefile文件:

****************************************************************************************************************************

#ARCH=x86

ARCH=arm920t

PROJ=fl2440

PWD=$(shell pwd)



ifneq ("${ARCH}", "x86")

CROSS_COMPILE ?= /opt/buildroot-2011.11/${ARCH}/usr/bin/arm-linux-

KERNEL_DIR = ${PWD}/../../kernel/linux-3.0

else

KERNEL_DIR = /lib/modules/`uname -r`/build

endif





obj-m += s3c_led.o



all:

make -C $(KERNEL_DIR) M=$(PWD) modules

@make clear



clear:

@rm -f *.o *.cmd *.mod.c

@rm -rf *~ core .depend .tmp_versions Module.symvers modules.order -f

@rm -f .*ko.* *ko.* .*.o.cmd



clean:

rm -f *.ko

****************************************************************************************************************************

s3c_led.c实现文件

****************************************************************************************************************************

#include <stdio.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>

#define LED_CNT        4
#define DEVNAME_LEN    10

#define PLATDRV_MAGIC             0x60
#define LED_OFF                   _IO (PLATDRV_MAGIC, 0x18)
#define LED_ON                    _IO (PLATDRV_MAGIC, 0x19)

int main (int argc, char **argv)
{
    int           i;
    int           fd[LED_CNT];
    char          dev_name[DEVNAME_LEN]={0,0,0,0};

    for(i=0; i<LED_CNT; i++)
    {
        snprintf(dev_name, sizeof(dev_name), "/dev/led%d", i);
        fd[i] = open(dev_name, O_RDWR, 0755);
        if(fd[i] < 0)
            goto err;
    }

    while(1)
    {
        for(i=0; i<LED_CNT; i++)
        {
            ioctl(fd[i], LED_ON);
        }
        sleep(1);

        for(i=0; i<LED_CNT; i++)
        {
            ioctl(fd[i], LED_OFF);
        }
        sleep(1);
    }

    for(i=0; i<LED_CNT; i++)
    {
        close(fd[i]);
    }

    return 0;

err:
    for(i=0; i<LED_CNT; i++)
    {
        if(fd[i] >= 0)
        {
            close(fd[i]);
        }
    }
    return -1;
}


**************************************************************************************************************************************

然后将驱动程序(.ko文件)和实现文件(进过交叉编译器编译过后)下载到自己的电脑下,再打开自己的tftp服务。

然后通过tftp传到自己的开发板上

PS:如果是用tftp传的话,就需要使开发板和自己的电脑处在同一个网段,修改你开发板的ip地址,http://blog.csdn.net/liuzijiang1123/article/details/44837355 我的上篇文章介绍了如何去修改。

从服务器获得文件

tftp –g –r filename ipaddr(主机的ip)

上传文件:

tftp –p –l filename ipaddr(开发板的ip)





然后再insmod



这里我们可以看见我们的主设备号是253

接着我们就需要创建设备节点了。





然后再chmod 777 s3c_led ,修改我们的实现文件的权限。

最后./s3c_led就OK啦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: