*********************************************************************************************************************************************
#操作系统:CentOS6.7
#开发板 :fl2440
#cpu :s3c2440(arm920t)
#编译器 :arm-Linux-gcc(buildroot-2012.08)
#linux内核版本:linux-3.0
#开发模块:platform_led
********************************************************************************************************************************************前面我已经分析过了platform_led.c源代码,具体可以参考我的博客http://blog.csdn.net/zouleideboke/article/details/68969544
下面我将源代码进行编译,然后编写一个测试程序进行测试!
1.创建platform_led驱动模块
[zoulei@CentOS ~]$ mkdir LED1
[zoulei@CentOS ~]$ cd LED1
[zoulei@CentOS LED1]$ vim plat_led.c
[zoulei@CentOS LED1]$ vim s3c_driver.h
[zoulei@CentOS LED1]$ vim plat_ioctl.h
[zoulei@CentOS LED1]$ vim Makefile
obj -m:=plat_led.c
C=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
KDIR?=~/fl2440/kernel/linux-3.0
obj-m:=plat_led.o
default:
@$(MAKE) -C $(KDIR) M=`pwd` modules
@make clean
clean:
rm -f *.o *mod.c *.order *.symvers
将上面的.c和.h文件保存,然后进行编译链接
[zoulei@CentOS LED1]$make
[zoulei@CentOS LED1]$ls
Makefile plat_ioctl.h plat_led.c plat_led.ko s3c_driver.h
2编写及编译测试程序
[zoulei@CentOS ~]$mkdir LED1_test
[zoulei@CentOS ~]$ cd LED1_test/
[zoulei@CentOS LED1_test]$ vim s3c_led_test.c
/********************************************************************************
* Copyright: (C) 2017 zoulei<zoulei121@gmail.com>
* All rights reserved.
*
* Filename: s3c_led_test.c
* Description: This file
*
* Version: 1.0.0(04/4/2017)
* Author: zoulei <zoulei121@gmail.com>
* ChangeLog: 1, Release initial version on "04/4/2017 15:03:40 PM"
*
********************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
#define PLATDRV_MAGIC 0x60
#define LED_OFF _IO (PLATDRV_MAGIC,0x18)
#define LED_ON _IO (PLATDRV_MAGIC,0x19)
#define LED_BLINK _IO (PLATDRV_MAGIC,0x1A)
int main(int argc,char**argv)
{
int i;
int led_num;
int cmd_num;
int fd;
char dev_name[10]={0};
if(argc<3)
{
printf("too few parameters,please input:./%s\n",argv[0]);
return -1;
}
snprintf(dev_name,sizeof(dev_name),"/dev/led");
fd=open(dev_name,O_RDWR);
led_num=atoi(argv[1]);
cmd_num=atoi(argv[2]);
switch(cmd_num)
{
case 0:
ioctl(fd,LED_ON,led_num);
break;
case 1:
ioctl(fd,LED_OFF,led_num);
break;
case 2:
ioctl(fd,LED_BLINK,led_num);
break;
default:
printf("failure\n");
break;
}
close(fd);
return 0;
}
[zoulei@CentOS LED1_test] /opt/buildroot_2012.08/arm920t/usr/bin/arm-linux-gcc s3c_led_test.c -o s3c_led_test
[zoulei@CentOS LED1_test]$ ls
s3c_led_test s3c_led_test.c
接下来是将驱动模块及测试程序的可执行文件下载到开发板上!
3.在开发板上的操作
遇到的问题及解决方法;