(主机端)
基础知识
imx6 3.0.35 kernel中内核驱动核心源码实现位置
参数配置文件
板级目录:arch/arm/mach-mx6/
板级文件:arch/arm/mach-mx6/board-myimx6ek***.c (“***”表示200或314)
管脚功能定义:arch/arm/mach-mx6/board-myimx6ek***-6*.h (“***”表示200或314,“*”表示q或u)
管脚标号定义:arch/arm/plat-mxc/include/mach/iomux-mx6*.h (“*”表示q或dl)
实现目的
查看原理图,将D32灯在LED中添加出文件设备以供操作,
查看硬件对应IO口
由图可得IO引脚为EIM_BCLK,查找数据手册 IMX6DQ参考手册(RM)_201507.pdf 中可得,D13的引脚为GPIO6_IO31
在kernel中配置EIM_BCLK引脚为GPIO模式
在arch/arm/mach-mx6/board-myimx6ek200-6q.h中
在kernel中注册EIM_BCLK引脚为LED驱动框架
在kernel中将EIM_BCLK引脚注册到系统LED驱动框架上,修改arch/arm/mach-mx6/board-myimx6ek200.c
//定义需注册的io
//注册到系统led框架数组
//修改系统led驱动IO数组
配置Menuconfig支持LED IO框架
生成镜像uImage并烧录
make uImage -j4
(开发板端)
查看LED框架下得自定义led设备
cd /sys/class/leds
操作LED
//echo 1 > /sys/class/leds/user_led/brightness
//echo 0 > /sys/class/leds/user_led/brightness
编写LED应用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <sys/time.h>
#include <linux/input.h>
void write_int(char *path, int i)
{
char buf[1024];
int fd = open(path, O_RDWR);
if(fd < 0)
{
perror("open");
exit(1);
}
sprintf(buf, "%d", i);
if(write(fd, buf, strlen(buf)) != strlen(buf)) {
perror("write");
exit(1);
}
close(fd);
}
void set_led(int on)
{
write_int("/sys/class/leds/user_led/brightness", on);
// write_int("/sys/class/leds/led1/brightness", on);
}
int main(int argc,char **argv)
{
int v=1;
int i;
for(i=0; i<100000; i++)
{
if(v==0)
v=1;
else
v=0;
printf("write=%d\n",v);
set_led(v);
usleep(1000000);
}
}