【嵌入式Linux学习笔记】platform设备驱动和input子系统
创始人
2025-06-01 05:52:39

在这里插入图片描述

对于Linux这种庞大的操作系统,代码重用性非常重要,所以需要有相关的机制来提升效率,去除重复无意义的代码,尤其是对于驱动程序,所以就有了platform和INPUT子系统这两种工作机制。

学习视频地址:【正点原子】STM32MP157开发板

platform子系统

platform 驱动框架分为总线、设备和驱动。总线在Linux内核提供,不需要我们进行考虑,所以只需考虑设备和驱动。
因为目前的Linux内核都支持设备树了,所以platform_device设备信息都通过设备树进行描述了,因此只需要在代码中编写platform_driver驱动代码

Linux驱动的分离与分层示意图

在这里插入图片描述

GPIO电气属性配置

采用的是设备树中的pinctrl控制器,在STM32MP1中,pinctrl配置只在platform平台上被引用。

创建设备的pinctrl节点

led_pins_a: gpioled-0 {pins {pinmux = ;	# 设置 PI0 复用为 GPIO 功能。drive-push-pull;						# 设置 PI0 为推挽输出。bias-pull-up;							# 设置 PI0 内部上拉。output-high;							# 设置 PI0 默认输出高电平。slew-rate = <0>;						# 设置 PI0 的速度为0档,也就是最慢。};
};

在设备树中创建设备节点

gpioled {compatible = "alientek,led";pinctrl-names = "default";status = "okay";pinctrl-0 = <&led_pins_a>;led-gpio = <&gpioi 0 GPIO_ACTIVE_LOW>;
};

兼容属性

 // 定义兼容属性表static const struct of_device_id led_of_match[] = {{ .compatible = "alientek,led" }, /* 兼容属性 */{ /* Sentinel */ }};// 声明设备匹配表MODULE_DEVICE_TABLE(of, led_of_match);// 定义platform驱动static struct platform_driver led_platform_driver = {.driver = {.name = "stm32mp1-led",.of_match_table = led_of_match,},.probe = led_probe,.remove = led_remove,
};

检查引脚复用配置

STM32MP1 的一个引脚可以复用为多种功能,但是在配置设备树时,一个引脚只能复用为一个功能。

检查GPIO占用

尽管引脚配置上只复用为了一个功能,但是可能存在该引脚被多个设备使用的情况,所以需要检查设备树,确保只有一个设备在使用该GPIO引脚。

linux,default-trigger属性设置

这个属性可以将LED配置为某个特定模式。

backlight:LED 灯作为背光。
default-on:LED 灯打开。
heartbeat:LED 灯作为心跳指示灯,可以作为系统运行提示灯。
disk-activity:LED 灯作为磁盘活动指示灯。
ide-disk:LED 灯作为硬盘活动指示灯。
timer:LED 灯周期性闪烁,由定时器驱动,闪烁频率可以修改。

MISC驱动系统

定位:当某些外设无法进行分类的时候就可以使用MISC驱动。MISC驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动。

设备定义

所有的MISC设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。定义一个 MISC 设备(miscdevice 类型)以后需要设置 minor、name 和 fops 这三个成员变量。
在这里插入图片描述

设备注册

int misc_register(struct miscdevice * misc)

设备注销

int misc_deregister(struct miscdevice *misc)

input子系统

系统架构
在这里插入图片描述

input子系统的所有设备主设备号都为13,我们在使用 input 子系统处理输入设备的时候就不需要去注册字符设备,只需要向系统注册一个input_device即可。

驱动编写流程

API函数

// 申请input_dev结构体变量
struct input_dev* input_allocate_device(void)
// 释放input_dev结构体变量
void input_free_device(struct input_dev* dev)
// 注册input_dev
int input_register_device(struct input_dev* dev)
// 注销input_dev
void input_unregister_device(struct input_dev* dev)

事件类型
在这里插入图片描述

初始化(以按键为例)

/* 申请设备内存 */
inputdev = input_allocate_device();
inputdev->name = "test_inputdev";/* 设置事件和事件值 */
keyinputdev.inputdev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
input_set_capability(keyinputdev.inputdev, EV_KEY, KEY_0);/* 注册设备 */
input_register_device(inputdev);

上报事件

/* 通用的事件上报函数 */
void input_event(struct input_dev *dev, unsigned int type, unsigned int code,  int value)/* 衍生所得的上报函数 */
void input_report_rel(struct input_dev *dev, unsigned int code, int value)
void input_report_abs(struct input_dev *dev, unsigned int code, int value)
void input_report_ff_status(struct input_dev *dev, unsigned int code, int value)
void input_report_switch(struct input_dev *dev, unsigned int code, int value)
void input_mt_sync(struct input_dev *dev)/* 事件上报完成后,需要用该函数上报一个同步事件 */
void input_sync(struct input_dev *dev)

相关内容

热门资讯

“妖王”惠城环保3年15倍,扣... 在5月30日股价创下历史新高后,惠城环保2022年11月以来的累计涨幅超过15倍,系同时间段A股市场...
不慌!港股深 v,a50 期指... 今天早盘港股大跳水,搞得很多股民对节后行情比较担忧。但港股盘中触底反弹,收盘已收回盘中跌幅,a50期...
刚刚,杀出一个医药大白马,挑战... 重重挑战激发无限动力!集采、竞争,仿佛是医药企业头顶的两座大山。连恒瑞医药、华东医药都不免因此出现短...
香港四大家族之一,有麻烦了……... 原创 刘博团队又一家知名大房企,惊爆财务困境。今天,香港四大家族之一——郑裕彤家族控股的、在香港上市...
002875,明日停牌!节前已... 2025.06.02本文字数:279,阅读时长大约1分钟A股“童装第一股”安奈儿正筹划公司控制权变更...
争议升级!两家上市公司深夜互相... 5月中旬以来,玻尿酸、重组胶原蛋白之争引发热议,频频登上网络热搜,且有愈演愈烈之势。6月1日晚间,医...
两宗券商“老鼠仓”曝光:中信证... 地方证监局最新披露的罚单,让两起券商从业人员“老鼠仓”案件浮出水面,2家龙头券商中信证券、华泰证券牵...
土耳其主要银行业指数上涨1.5... 每经AI快讯,6月2日,土耳其主要银行业指数上涨1.5%。
【12366问答】离境退税相关... 12366 热点梳理 问答来啦 退税商店在向境外旅客开具《离境退税申请单》后,如发生境外旅客退货等...
高凌信息:终止发行股份购买资产... 新京报贝壳财经讯 高凌信息6月2日发布公告,公司于2024年12月启动筹划实施重大资产重组,拟通过发...
赛诺菲斥资超90亿美元收购罕见... 当地时间6月2日,法国制药巨头赛诺菲与美国生物药企Blueprint Medicines公司宣布达成...
黔源电力:董事长罗涛因工作原因... 新京报贝壳财经讯 黔源电力6月2日晚间公告,公司董事长罗涛因工作原因申请辞去公司董事长、董事、董事会...
京沪高铁:已完成约10亿元股份... 新京报贝壳财经讯 6月2日,京沪高铁(601816.SH)公告称,公司已使用自有资金约10亿元,以集...
恒宝股份:实控人在股票交易异常... 新京报贝壳财经讯 6月2日,恒宝股份发布异动公告,公司控股股东、实际控制人在股票交易异常波动期间存在...
机构论后市丨关注核心资产;对科... 沪指本周累计跌0.03%,深成指累计跌0.91%,创业板指累计跌1.4%。A股后市怎么走?看看机构怎...
宏信证券更名天府证券,中小券商... 因实控人将发生变化,时隔13年,宏信证券再次更名。国家企业信用信息公示系统信息显示,宏信证券有限责任...
最新!全球9大汽车集团总负债:... 谁是车界负债之王?在企业的经营生产中,负债是难以避免的。企业通过合理的负债水平,是有助于其快速发展的...
韩国紧急商讨应对美上调钢铝关税   新华社首尔6月2日电(记者黄昕欣 陆睿)韩国产业通商资源部2日召集钢铝产业代表召开紧急会议,商讨...
二次育肥“禁令”来了?有猪企回... 二次育肥禁令来了? 今天上午,猪肉板块异动拉升。有市场消息称,“昨天,相关部门开会,透露引导生猪行业...
恒指探底回升跌0.57% 黄金...   中新经纬6月2日电 周一,港股三大指数集体低开,此后探底回升。截至收盘,恒生指数跌0.57%报2...
在下沉市场,找不到中国汽车的未... 原本已经渐入缓和的车市价格战,随着年中6月的到来而再度升温。下到5万元接近老头乐的“车市踢脚线”,上...
全维度突破!雅迪冠能S长续航进... 文 | 无锈钵“你可能不认识我们,但你一定见过我造的车。”5月26日,浙江宁波,雅迪全球产品及技术副...
晶科能源:收到政府补助9800... 晶科能源(688223)公告,5月29日收到政府补助人民币9800万元,属于与收益相关的政府补助款项...
国际金价年内上涨超25%,5月... 首先来看美股上周交易的情况。受美欧贸易谈判出现积极信号、美国国际贸易法院一度“叫停”特朗普政府多项关...
全球人造草坪老二青岛青禾“躺平... 5月26日-6月2日,沪深北合计有3家企业终止审核,分别为沪市主板申报企业青岛青禾人造草坪股份有限公...
MiniMax正暗戳戳憋大招 ... 出品|虎嗅科技组作者|宋思杭编辑|苗正卿头图|视觉中国AI六小虎之一的MiniMax正在憋大招,而这...
今日起招股发售价9.75港元,... 6月2日,车来了母公司元光科技启动全球发售,发售价9.75港元,预计将在6月10日在港交所挂牌。元光...
港股午评:恒生指数跌2.20%... 新京报贝壳财经讯 6月2日,港股午间收盘,恒生指数跌2.20%,恒生科技指数跌2.43%。石药集团跌...
夏乐:美债压力与美元走弱 全球... 原创 财联社 蜂网专家2025年05月29日《首席说》是财联社倾力打造的一档高端直播联线栏目。面向泛...
罗志恒:财政政策不应受3%赤字... 罗志恒系粤开证券首席经济学家、中国首席经济学家论坛理事自2008年以来,本轮积极财政政策实行了长达1...