之前玩过单片机的同学都知道,搞嵌入式都是从点灯开始的。ELF1开发板左下角有红、绿、黄三个LED灯,核心板有一个LED心跳灯。控制一个LED灯亮灭的方法有很多,可以给灯的两端施加电压差,通过改变上下拉即可。也可以通过Linux中的pinctrl子系统和GPIO子系统,通过配置引脚和系统提供的API进行控制。 而Linux系统通过sysfs,将设备和驱动层的设备属性等信息以文件的形式开放到应用层,供用户使用。在《01-0 ELF1、ELF1S开发板_快速启动手册_V1》中有“echo 1 > /sys/class/leds/led1/brightness”,这个brightness代表的就是sysfs将led1输出来的亮度。 本篇先简单介绍sysfs文件系统,下一篇结合前面介绍过的文件I/O方式写一个点灯的C程序。 板卡的三个LED灯如图: sysfs文件系统 sysfs文件系统概念 sysfs是Linux2.6以上的内核在发展迭代过程中衍生出来的一个功能,它的作用是通过一个内存文件系统将信息导出到用户进程空间。文件系统的目录层次结构组织严格,并且是基于内核数据结构的内部组织。文件系统中创建的文件主要是ASCII文件(每个文件通常只有一个值)。这些特点保证了信息导出的准确性和方便性,方便用户在应用层对设备进行操作。 在Linux系统下一切皆文件,sysfs是一个基于内存的文件系统,被称为虚拟文件系统。它对系统设备进行管理,产生一个包含所有系统硬件层次的视图,同时将内核信息以文件的方式提供给应用层使用。 sysfs文件系统把连接在系统上的设备和总线组织成为一个分级的文件,展示设备驱动模型中各组件的层次关系。sysfs提供了一种机制,可以显式的描述内核对象、对象属性及对象间关系,用来导出内核对象(kernel object,譬如一个硬件设备)的数据、属性到用户空间,以文件目录结构的形式为用户空间提供对这些数据、属性的访问支持。下表描述了内核对象、对象属性及对象间关系在用户空间sysfs中的的表现。 sysfs的存在如同一栋规模宏大的建筑,为了构造它,除了基本的建筑材料外,尚需要一种机制,来向建筑外面的世界(用户空间程序)展示内部的构造,并且通过文件接口的方式实现与外界的沟通与互动。sysfs文件系统就充当了这种角色。 如图一个USB的鼠标设备Mouse 1,其设备类型Classes为输入设备,同时USB总线Buses类型中有归属于usb-hid,在devices一个驱动设备中其属于usb 2中的port 1端口设备dev1:1-0,采用类似于一个矩阵管理形式。 /sys/目录结构解释如下: sysfs文件系统中控制LED状态 给ELF1开发板上电,进入Linux系统后,进入到/sys目录下查看: 进入class目录,找到led设备,进入led1里: 常用的三个属性是brightness,max_brightness,trigger。 查看LED1触发状态,当前状态为none: 将LED1的触发状态改为插入TF卡闪烁,即mmc: 此时插入TF卡后led1红灯闪烁三次,拔出后闪烁一次。
|