嵌入式linux驱动与软件详解之一 led驱动与程序

  其实从大三的时候就接触过一些嵌入式linux的东西,只不过当时基础不扎实,周围的师兄和老师也没有能弄明白的,苦苦弄了一年之后还是决定先暂时放弃。后来扎实的学过了stm32和软件编程后,基本的设计思路已经清晰了,所以打算开始学习实践一下三年前未完成的夙愿。

       今天先从最简单的led程序说起,简单的弄明白了,复杂的也不会有多难了,闲话少说,开始整理思路。我选用的开发平台是mini2440开发板,在友善之臂的配套开发板中,有其内核源码和简单的几个例子,今天就从他们给出了led例子说起(hello例子太白痴了,实在是不想浪费时间整理这东西了)。

       先打开led.c文件,代码比较简单,直接贴出来了:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/ioctl.h>

int main(int argc, char **argv)

{

int on;

int led_no;

int fd;

if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||

   on < 0 || on > 1 || led_no < 0 || led_no > 3) {

fprintf(stderr, "Usage: leds led_no 0|1\n");

exit(1);

}

fd = open("/dev/leds0", 0);

if (fd < 0) {

fd = open("/dev/leds", 0);

}

if (fd < 0) {

perror("open device leds");

exit(1);

}

ioctl(fd, on, led_no);

close(fd);

return 0;

}

先解释以下这几个头文件,别看简单,对于初学者来说,不弄明白还是心理有阴影的,呵呵。

stdio.h  意思就是说带缓冲的标准输入输出,所以用到标准输入输出函数时,就要调用这个头文件。

stdlib.h  即standard library标准库头文件,头文件里包含了C、C++语言的最常用的系统函数

unistd.h 是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数。

ioctl.h   ioctl()是I/O操作的杂货箱,很多事情都要依靠它来完成。除了摄像头,视频采集卡之类的与video相关的操作其实也都与此类似。ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下: 

                                                                                           int ioctl(int fd, ind cmd, …); 

其中fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和cmd的意义相关的。 

 

     好了,下面我一点点深入去分析,

int on;   //定义led的状态,0或者1;

int led_no;  //定义控制哪个LED,0-3,一共四个

int fd; //led设备文件描述符的变量

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值