一、项目描述
(1)使用领航者7010开发板,实现一个字符设备驱动创建 2个设备,去控制ps_led0 和 ps_led1,实现一套驱动程序,控制俩个设备
(2)说明代码都是验证过的没有问题,可直接拿去使用,可直接用于领航者7010开发板
二、设备树示例
tasson_leds{
compatible = "tasson,tasson_leds"; /* 这个是必须 */
// led-gpio = <&gpio0 7 GPIO_ACTIVE_HIGH>; /* 这个是必须有 */
// default-state = "on";
gpio-led0{
label = "ps_led0";
status = "okay";
default-state = "on";
led-gpio = <&gpio0 7 GPIO_ACTIVE_HIGH>; /*在第8、第9行定义了宏*/
};
gpio-led1{
label = "ps_led1";
status = "okay";
default-state = "on";
led-gpio = <&gpio0 8 GPIO_ACTIVE_HIGH>; /*在第8、第9行定义了宏*/
};
};
三、测试demo示例
/***************************************************************
文件名 : ledApp.c
作者 : 刘川
版本 : V1.0
描述 : LED驱动测试源文件
其他 : 无
使用方法 : ./ledApp /dev/myled0 0 关闭LED
./ledApp /dev/myled0 1 打开LED
./ledApp /dev/myled1 0 关闭LED
./ledApp /dev/myled1 1 打开LED
日志 : 初版V1.0 2021/2/21 刘川创建
***************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
/*
* @description : main主程序
* @param - argc : argv数组元素个数
* @param - argv : 具体参数
* @return : 0 成功;其他 失败
*/
int main(int argc, char *argv[])
{
int fd, ret;
unsigned char buf[1];
if(3 != argc) {
printf("Usage:\n"
"\t./ledApp /dev/myled 1 @ close LED\n"
"\t./ledApp /dev/myled 0 @ open LED\n"
);
return -1;
}
/* 打开设备 */
fd = open(argv[1], O_RDWR);
if(0 > fd) {
printf("file %s open failed!\r\n", argv[1]);
return -1;
}
/* 将字符串转换为int型数据 */
buf[0] = atoi(argv[2]);
/* 向驱动写入数据 */
ret = write(fd, buf, sizeof(buf));
if(0 > ret){
printf("LED Control Failed!\r\n");
close(fd);
return -1;
}
/* 关闭设备 */
close(fd);
return 0;
}
四、驱动完整代码
/***************************************************************
文件名 : leddriver.c
作者 : 刘川
版本 : V1.0
描述 : platform总线编程示例(一个主设备号二个次设备)
其他 : 无
日志

最低0.47元/天 解锁文章
1863

被折叠的 条评论
为什么被折叠?



