一 SYSFS文件系统
sysfs向用户空间展示了驱动设备的层次结构。我们都知道设备和对应的驱动都是由内核管理的,这些对于用户空间是不可见的。现在通过sysfs,可以在用户空间直观的了解设备驱动的层次结构。
我们来看看sysfs的文件系统
block:块设备
bus:系统中的总线
class: 设备类型,比如输入设备
dev:系统中已注册的设备节点的视图,有两个子目录char和block。
devices:系统中所有设备拓扑结构视图
fireware:固件
fs:文件系统
kernel:内核配置选项和状态信息
module:模块
power:系统的电源管理数据
看下 实际测试的情况
重点就是上面一张图 led的几个文件
方括号([heartbeat] )括起来的表示当前 LED 对应的触发模式, none 表示无触发,常用的触发模式包括 none(无触发)、 mmc0(当对 mmc0 设备发起读写操作的时候 LED 会闪烁)、timer(LED 会有规律的一亮一灭,被定时LED 会闪烁)、timer(LED 会有规律的一亮一灭,被定时
二 编程测试
截取一段比较常见的吧
感觉是和linux的驱动开发是差不多的
主要还是一些文件的操作读写等等
fd1 = open(LED_TRIGGER, O_RDWR);
if (0 > fd1) {
perror("open error");
exit(-1);
}
fd2 = open(LED_BRIGHTNESS, O_RDWR);
if (0 > fd2) {
perror("open error");
exit(-1);
}
/* 根据传参控制LED */
if (!strcmp(argv[1], "on")) {
write(fd1, "none", 4); //先将触发模式设置为none
write(fd2, "1", 1); //点亮LED
}
编译注意事项:
source 工具链配置文件
是配置环境变量的意思吗?
source /opt/fsl-imx-fb-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-neon-toolchain-4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
配置好了之后再编译生成可执行文件
三 结果显示
可执行文件改变权限
然后再执行
./led 需要参数
./led on 灯亮
./led off 灯灭
可以看到随着命令LED亮和灭