DragonBoard 410c手把手Linux控制LED
2016-04-14 12:59
579 查看
上篇文章中我绕过Eclipse开发环境与交叉工具链。直接在DragonBoard 410c的终端上编写了程序并成功编译与运行,在终端输出!!hello字符,这意味着我们已经能基本控制DragonBoard 410c了。
但是各位应该还是对上一篇文章所做的事情不怎么感冒,毕竟仅仅是输出一个hello world而已,并没有什么新奇的效果。那么我们本文将直接对DragonBoard 410c的硬件进行控制,在Linux系统中调用DragonBoard 410c自带的LED模块并使其进行闪烁。如果你听到这里已经迫不及待了,那就和我进入到下面的课程吧。
在这个类下还包括了很多有意思的特性,比如LED的trigger事件。 一个trigger是led事件中的内核源。 Trigger既可以很简单也可以无比复杂。Trigger可以支持ide-disk、nand-disk以及shapsl-charge等,此处与本文内容无关,只是提及一下,如果打击有兴趣,可以在这个链接进行详细的学习。
Stdlib.h:标准库头文件。stdlib.h里面定义了五种类型、一些宏和通用工具函数类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t;宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等;常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()srand()、exit()等等
Stdio.h:“standard input & output”(标准输入输出)头文件 Fcntl.h:
fcntl()针对(文件)描述符提供控制.参数fd
是被参数cmd操作(如下面的描述)的描述符.针对cmd的值,fcntl能够接受第三个参数int arg
Unistd.h:unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称。该头文件由POSIX.1 标准(单一UNIX规范的基础)提出,故所有遵循该标准的操作系统和编译器均应提供该头文件(如 Unix 的所有官方版本,包括Mac OS X、Linux 等)。
接下来使用第一篇文章的方法在DragonBoard 410c中进行编译:
那么DragonBoard 410c就会按照固定的频率进行开关LED十次
开始运行
![](http://img.blog.csdn.net/20160414133607270)
开始闪烁
![](http://img.blog.csdn.net/20160414133618536)
程序退出
![](http://img.blog.csdn.net/20160414133628604)
欢迎各位经常与我交流DragonBoard 410c的开发心得
但是各位应该还是对上一篇文章所做的事情不怎么感冒,毕竟仅仅是输出一个hello world而已,并没有什么新奇的效果。那么我们本文将直接对DragonBoard 410c的硬件进行控制,在Linux系统中调用DragonBoard 410c自带的LED模块并使其进行闪烁。如果你听到这里已经迫不及待了,那就和我进入到下面的课程吧。
基本背景知识
DragonBoard 410c下debian的安装与配置
这一部分大家可以查看上一章的教程配置debian并运行:Linux系统下对LED模块的简单控制方法
Linux系统中的LED处理在所有驱动控制中是最简单的形式, LED class允许开发者在用户空间对LED进行操作。 所有的LED显示与/sys/class/leds/文件夹下。我们可以在这个文件夹下控制LED的属性。 举例来说,LED的最大亮度取决于文件夹下的max_brightness文件。 该文件可以设置LED的亮度。只不过很多硬件中所带的LED没有亮度控制所以一般该文件都设置为非零值就OK。因此本文中我们就可以在C代码中直接引用该文件夹下的LED文件属性对LED进行直接控制。在这个类下还包括了很多有意思的特性,比如LED的trigger事件。 一个trigger是led事件中的内核源。 Trigger既可以很简单也可以无比复杂。Trigger可以支持ide-disk、nand-disk以及shapsl-charge等,此处与本文内容无关,只是提及一下,如果打击有兴趣,可以在这个链接进行详细的学习。
DragonBoard 410c的LED控制程序编写
/* ============================================================================ Name : BlinkyLED.c Author : ZhouJunyu Version : 0.0.1 Copyright : Your copyright notice Description : Simple Hardware access example that blinks user-LED4 ============================================================================ */ #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <unistd.h> //定义控制LED的路劲 #define LED4 "/sys/class/leds/apq8016-sbc\:green\:user3/brightness" int main( void ){ //获得对LED的亮度控制文件权限 int led4_fd = open( LED4, O_WRONLY); if(led4_fd < 0){ printf("Could not open File: %s", LED4); return 0; } int i; for( i=0; i<10;i++){ //LED闪烁程序 write( led4_fd, "1", 2 ); //Turning the LED ON by writing 1 into the brightness file sleep( 1 ); write( led4_fd, "0", 2 ); //Turning the LED OFF by writing 0 into the brightness file sleep( 1 ); } close(led4_fd); }
DragonBoard 410c的LED控制程序解释
头文件结构:
#include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <unistd.h>
Stdlib.h:标准库头文件。stdlib.h里面定义了五种类型、一些宏和通用工具函数类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t;宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等;常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()srand()、exit()等等
Stdio.h:“standard input & output”(标准输入输出)头文件 Fcntl.h:
fcntl()针对(文件)描述符提供控制.参数fd
是被参数cmd操作(如下面的描述)的描述符.针对cmd的值,fcntl能够接受第三个参数int arg
Unistd.h:unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称。该头文件由POSIX.1 标准(单一UNIX规范的基础)提出,故所有遵循该标准的操作系统和编译器均应提供该头文件(如 Unix 的所有官方版本,包括Mac OS X、Linux 等)。
定义LED在文件系统中的访问路径
#define LED4 "/sys/class/leds/apq8016-sbc\:green\:user3/brightness"
获得LED的文件标识符,打开LED的亮度文件
int led4_fd = open( LED4, O_WRONLY);
如果led4_fd的文件标识符小于零,说明我们无法打开文件
if(led4_fd < 0){ printf("Could not open File: %s", LED4); return 0; }
循环十次对led4进行开关
int i; for( i=0; i<10;i++){ //LED闪烁程序 write( led4_fd, "1", 2 ); //Turning the LED ON by writing 1 into the brightness file sleep( 1 ); write( led4_fd, "0", 2 ); //Turning the LED OFF by writing 0 into the brightness file sleep( 1 ); }
退出文件控制
close(led4_fd);
接下来使用第一篇文章的方法在DragonBoard 410c中进行编译:
Gcc BlinkyLED –o hello Chmod u+x BlinkyLED Sudo ./hello
那么DragonBoard 410c就会按照固定的频率进行开关LED十次
开始运行
开始闪烁
程序退出
总结
本次我们通过编写linux系统下最简单的LED控制,了解了嵌入式Linux系统中控制硬件的具体方式。当然,嵌入式中包含的硬件与模块千奇百怪,而且纷繁复杂。越到后面需要了解的内容越多,难度也越大。欢迎各位经常与我交流DragonBoard 410c的开发心得
相关文章推荐
- Linux内核设计与实现第八周读书笔记
- CentOS 7 简单命令总结一(随着使用持续更新)
- Linux 文件描述符详解
- lunix常用命令和技巧(Red Hat Enterprise Linux Server release 6.2)
- 20135239 益西拉姆 linux内核分析 读书笔记之第四章
- CentOS 7下安装配置FTP
- Linux上如何查看Deb和RPM软件包的更新日志
- Linux 用命令把同一个用户加入多个组
- Linux集群配置ntp时间同步服务
- 关于 CentOS 7 里面 普通用户 Ulimit max user processes 值的问题
- Linux shell script 的语法汇总
- 关于Linux下面msyql安装后并未设置初始密码,但是登录报错“Access denied for user 'root'@'localhost' (using password: NO)”的解决方案
- 第七章:Linux文件与目录管理
- 《Linux内核分析》之第四章读书笔记
- linux 的schedule函数
- Linux Centos 6.6搭建SFTP服务器
- 《Linux内核》第七周 进程的切换和系统的一般执行过程 20135311傅冬菁
- Linux系统中备份和恢复文件权限设置的教程
- Linux下perl文件的执行
- Linux内核分析之理解进程调度时机跟踪分析进程调度与进程切换的过程