SAM9X60 curiosity开发板,SYSFS文件系统控制板载三色Led
驱动位于\buildroot-external-microchip\build\linux-custom\drivers\leds
开发板使用sam9x60_curiosity
应用层控制外设的两种不同的方式;
在 Linux 系统下,一切皆文件!
方法一:驱动层设备文件控制外设
包括字符设备文件和块设备文件,设备文件便是各种硬件设备向应用层提供的一个接口,应用层通过对设备文件的 I/O 操作来操控硬件设备,譬如 LCD 显示屏、串口、按键、摄像头等等,所以设备文件其实是与硬件设备相互对应的。设备文件通常在/dev/ 目录下,我们也把/dev 目录下的文件称为设备节点。
方法二:sysfs文件系统控制外设
sysfs 是一个基于内存的文件系统,同 devfs 、 proc 文件系统一样,称为虚拟文件系统;它的 作用是将内核信息以文件的方式提供给应用层使用。
sysfs 文件系统的主要功能便是对系统设备进行管理,它可以产生一个包含所有系统硬件层次的视图。
sysfs 文件系统挂载在 /sys 目录下,
block | 块设备的存放目录,这是一个过时的接口,按照sysfs的设计理念,系统所有的设备都存放在/sys/devides目录下,所以/sys/block目录下的文件通常是链接到/sys/devices目录下的文件 |
bus | 这是系统中的所有设备按照总线类型分类放置的目录结构,/sys/devices 目录下每一种设备都是挂在某种总线下的,譬如 i2c 设备挂在 I2C 总线下。同样,/sys/bus 目录下的文件通常也是链接到了/sys/devices 目录。 |
class | 这是系统中的所有设备按照其功能分类放置的目录结构,同样该目录下的文件也是链接到了/sys/devices 目录。按照设备的功能划分组织在/sys/class 目录下,譬如/sys/class/leds目录中存放了所有的 LED 设备,/sys/class/input 目录中存放了所有的输入类设备。 |
dev | 这是按照设备号的方式放置的目录结构,同样该目录下的文件也是链接到了/sys/devices 目录。该目录下有很多以主设备号:次设备号 (major:minor) 命名的文件,这些文件都是链接文件,链接到/sys/devices 目录下对应的设备。 |
devices | 这是系统中所有设备存放的目录,也就是系统中的所有设备在 sysfs 中的呈现、表达,也是 sysfs 管理设备的最重要的目录结构。 |
firmware | 描述了内核中的固件。 |
fs | 用于描述系统中所有文件系统,包括文件系统本身和按文件系统分类存放的已挂载点。 |
kernel | 这里是内核中所有可调参数的位置。 |
module | 包含当前系统中已加载的模块,包括编译到内核和编译成模块(.ko)的驱动 |
power | 这里是系统中电源选项,有一些属性可以用于控制整个系统的电源状态。 |
上表显示的便是 sysfs 文件系统中的目录,包括 block 、 bus 、 class 、 dev 、 devices 、 firmware 、 fs 、 kernel 、 modules、 power 等,每个目录下又有许多文件或子目录,对这些目录的说明如所示:
Linux 内核中为了尽量降低驱动开发者难度以及接口标准化,就出现了设备驱动框架的概念; Linux 针对各种常见的设备进行分类,譬如 LED 类设备、输入类设备、 FrameBuffer 类设备、 video 类设备、 PWM 设备等等,并为每一种类型的设备设计了一套成熟的、标准的、典型的驱动实现的框架,这个就叫做设备驱动框架。设备驱动框架为驱动开发和应用层提供了一套统一的接口规范,譬如对 LED 类设备来说,内核提供了 LED 设备驱动框架,驱动工程师编写 LED 驱动时,使用 LED 驱动框架来开发自己的 LED 驱动程序,这样做的好处就在于,能够对上层应用层提供统一、标准化的接口、同时又降低了驱动开发工程师的难度。
编写 LED 驱动程序并不仅仅只能使用内核设计的 LED 设备驱动框架,不用内核的 LED 驱动框架也是可以开发出 LED 驱动程序的,但如果你这样写,使用这个驱动程序注册的 LED 那就不是标准设备了,因为该驱动程序向应用层提供的接口并不是统一、标准化接口
(杂项类的由来)除此之外,还有很多硬件外设,尤其是嵌入式系统中所使用到的这些硬件外设,它们可能并不属于 Linux 系统所规划的设备分类当中的任何一种设备类型,譬如在 Linux 系统中,有一种设备类型叫杂散 / 杂项类设备(misc device ),大家可以想一想为啥叫杂散类设备,说明这种设备既不属于这种设备类型、又不属于另一种设备类型,无奈只能把它归为杂项类。
进入到 /sys/class/leds 目录下
这里我们主要关注便是 brightness 、 max_brightness 以及 trigger 三个文件,这三个文件都是 LED 设备的属性文件:
⚫ brightness : 翻译过来就是亮度的意思,该属性文件可读可写;所以这个属性文件是用于设置 LED 的亮度等级或者获取当前 LED 的亮度等级,譬如 brightness 等于 0 表示 LED 灭, brightness 为正整数表示 LED 亮,其值越大、 LED 越亮;对于 PWM 控制的 LED 来说,这通常是适用的,因为它存在亮度等级的问题,不同的亮度等级对应不同的占空比,自然 LED 的亮度也是不同的;但对于 GPIO 控制(控制 GPIO 输出高低电平)的 LED 来说,通常不存在亮度等级这样的说法,只有 LED 亮(brightness 等于 0 )和 LED 灭( brightness 为非 0 值的正整数)两种状态, ALPHA/Mini I.MX6U 开发板上的这颗 LED 就是如此,所以自然就不存在亮度等级一说,只有亮和灭两种亮度等级。
⚫ max_brightness : 该属性文件只能被读取,不能写,用于获取 LED 设备的最大亮度等级。
⚫ trigger : 触发模式,该属性文件可读可写,读表示获取 LED 当前的触发模式,写表示设置 LED 的触发模式。不同的触发模式其触发条件不同,LED 设备会根据不同的触发条件自动控制其亮、灭状态,通过 cat 命令查看该属性文件,可获取 LED 支持的所有触发模式以及 LED 当前被设置的触发模式:
none(无触发)
mmc0(当对 mmc0 设备发起读写操作的时候 LED 会闪烁)
timer(LED 会有规律的一亮一灭,被定时器控制住)
heartbeat(心跳呼吸模式, LED 模仿人的心跳呼吸那样亮灭变化)。
# cd /sys/
# ls
block class devices fs module
bus dev firmware kernel power
# cd class/
# ls
backlight graphics mmc_host rfkill udc
bdi i2c-adapter mtd rtc vc
block i2c-dev net scsi_device video4linux
bluetooth ieee80211 phy scsi_disk vtconsole
devcoredump input power_supply scsi_host wakeup
devlink leds pps sound watchdog
dma mdio_bus ptp spi_master
drm mem pwm tty
gpio misc regulator ubi
# cd leds/
# ls
blue green mmc0:: red
# cd blue
# ls
brightness invert power trigger
device max_brightness subsystem uevent
# echo 1 > brightness
# echo 0 > brightness
# echo 1 > brightness
# echo timer > trigger
# echo heartbeat > trigger
# cat brightness
1
# cat trigger
none rfkill-any rfkill-none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock [timer] heartbeat gpio cpu cpu0 mmc0
echo timer > trigger 现象
SAM9X60 curiosity开发板,SYSFS文件系统控制板载三色Led相关推荐
- SAM9X60 curiosity开发板,U盘拷贝文件到开发板
1. 把U盘插入开发板,开发板命令行提示如下 # usb 1-2: new high-speed USB device number 2 using atmel-ehci usb 1-2: New U ...
- SAM9X60 curiosity开发板,buildroot编译sdcard.img
参考Microchip官方视频,操作 不同的buildroot版本,在dl目录下载的软件包版本不同,可能会引起不同的编译过程,出错等 1. 下载buildroot,按照视频教程buildroot章节下 ...
- Linux系统获取开发板的文件系统并打包成img文件
应用情形: 在实际的开发中,由于原系统包含的功能有限,而根据项目的需要,安装了相应的库及运行项目程序所创建的各种文件,和所做 的各种配置,想将调试好的系统打包发布,进行批量生产,就可参考本文提 ...
- Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所构成的室内安全报警模块
该系统模块主要由Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所组成,MQ-2烟雾浓度传感器 ...
- AT91SAM9G45开发板ARM9工业控制板
◆ 采用ATMEL AT91SAM9G45CPU,400M高速ARM926EJ-S核,是顶级ARM9处理器: ◆ 128MB DDR2 SDRAM: ◆ 采用3.3V NAND FLASH, 简单. ...
- 迅为IMX6开发板Buildroot文件系统4G拨号上网工具测试
给IMX6开发板烧写好 buildroot 的文件系统,连接好 4G 模块和天线并将 SIM 卡插入卡槽启动如下图: 输入用户名 root ,密码 :XXXXXX 开始测试 ppp 拨号,先将 eth ...
- 迅为IMX6Q开发板 Buildroot文件系统mqtt测试
以开发板作为服务器,Ubuntu 开俩个终端作为订阅者和发布者进行测试 我们打开/etc 下面的 mosquitto.conf 文件,添加 user root.如下图所示: 使用以下命令启动开发板的 ...
- linux-2.6.32在mini2440开发板上移植(16)之LED 驱动程序移植
LED 驱动程序移植 编者:对于led的驱动程序,很多文章都有详细的介绍,我的博客里面有一篇专门详解这个的.需要看的,可以找下.led灯的驱动其实就代表了I/O口的驱动.在linux系统下,操作一个I ...
- 【小月电子】安路国产FPGA开发板系统学习教程-LESSON1点亮LED灯
点亮LED灯例程讲解 若要观看该博客配套的视频教程,可点击此链接 根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省去其中一些步骤.比如非常简单的项目,我们 ...
最新文章
- esp freertos_如何开始使用FreeRTOS和ESP8266
- IDEA开启关闭拼写检查
- LuManager使用中典型问题整理集合
- 汤家凤高等数学基础手写笔记-空间解析几何
- 企业级应用WebLogic11g集群配置与项目实施_WebLogic部署培训教程
- cocos2d-x游戏实例(6)-A星算法(2)
- CSS3的弹性盒子flex详解(1)
- ztree 自定义参数_Ztree节点前加上两个自定义按钮
- js cookie 存储checkbox_浏览器数据存储方式总结,网友:“精辟”!
- 深入浅出MyBatis:「映射器」全了解
- 【转载】如何使用docker部署c/c++程序
- StyleGAN v2:对StyleGAN v1的思考与改进
- python清空字典保留变量_python中字典删除元素
- 【拉普拉斯变换】3. 拉普拉斯逆变换
- Python五角星绘制
- 报道|香港科大校友“盐马行”活动成功举办
- 全国计算机等级考试证书电子,全国计算机等级考试证书效力
- 系统分析与设计个人总结
- 教你使用 koa2 + vite + ts + vue3 + pinia 构建前端 SSR 企业级项目
- Dijkstra,A*,DWA,TEB
热门文章
- 计算机音乐安顺学院教务网络管理系统,安顺学院教务网络管理系统jwxt.asu.edu.cn/jwweb/...
- 电到底是怎么工作的?
- 机器学习中的方差和偏差理解
- 电脑tdr太低是什么意思_电脑越来越慢怎么办?我教你一招很简单的
- 若xn>0,且x(n+1)/xn>1-1/n(n=1,2,...),证明级数∑xn发散
- linux系统下MYSQL备份与恢复
- 一座宝塔_书是一座知识宝塔作文600字
- c语言c++通讯录管理系统代码
- Python GUI图形界面开发学习
- 移动网络打不开网页可以上微信,终于解决了。