Linux驱动分析——LED子系统+驱动框架简介

本文介绍了Linux内核驱动框架的概念,重点分析了LED子系统,包括驱动编写者、编程要求以及LED子系统的设备树配置。通过驱动框架,内核能统一管理资源。文中探讨了如何通过sysfs接口控制LED,并分析了4.19内核的led-class.c文件,以及leds-gpio.c中的驱动程序实现。
摘要由CSDN通过智能技术生成

1、驱动是谁写的:

(1)驱动开发工程师

(2)内核维护者

2、驱动编程写作要求:

(1)接口标准化

(2)尽量降低驱动开发者难度

3、到底什么是驱动框架:

(1)内核中驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架。

(2)内核维护者在内核中设计了一些统一管控系统资源的体系,这些体系让内核能够对资源在各个驱动之间的使用统一协调和分配,保证整个内核的稳定健康运行。譬如系统中所有的GPIO就属于系统资源,每个驱动模块如果要使用某个GPIO就要先调用特殊的接口先申请,申请到后使用,使用完后要释放。又譬如中断号也是一种资源,驱动在使用前也必须去申请。这也是驱动框架的组成部分。

(3)一些特定的接口函数、一些特定的数据结构,这些是驱动框架的直接表现。

以下是Linux内核的段链接文件:

以上是朱有鹏老师“驱动框架入门之LED-linux驱动开发第4部分”视频的笔记截图

stm32mp157a芯片、盘古开发板、Linux kernel版本: 4.19.43+

在其盘古wiki上看到LED相关的操作:

这就是linux kernel的led子系统,我在设备树里面添加了几个led设备(设备树这里不做过多描述,上面朱老师的视频是2.6的内核,里面还没有设备树这个功能或者模式),设备树文件如下:

	leds {
		compatible = "gpio-leds";
		cpu {
			label = "cpu";
			gpios = <&gpioi 11 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "heartbeat";
			default-state = "on";
		};
		led2g {
			label = "led2g";
			gpios = <&gpiod 13 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "heartbeat";
			default-state = "on";
		};
		led2r {
			label = "led2r";
			gpios = <&gpiod 12 GPIO_ACTIVE_HIGH>;
			default-state &
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值