RK3588s|输入子系统的简单使用|使用输入子系统完成两个按键的检测|LCD屏幕的初步使用|LVGL控件的简易使用

一、输入子系统的使用步骤

1.包含相关头文件

#include <linux/input.h>

 2.申请输入子系统核心结构体的填充和注册

//定义输入子系统核心结构体

struct input_dev *myDev;

//申请输入子系统核心结构体
myDev=input_allocate_device();

myDev->name="xyd_key";
set_bit(EV_KEY, myDev->evbit);
set_bit(KEY_ENTER, myDev->keybit);
//注册输入子系统
 null=input_register_device(myDev);

 

3. 注销输入子系统

input_unregister_device(myDev);    

如果,代码中加入input_free_device(myDev);的话,在卸载模块的时候会报乱码。因为在input_unregister_device函数中已经调用过input_free_device函数了。

4. 事件上报和事件同步

每次事件上报完成之后需要同步函数,不然数据不能有效的传递到应用层

5. 应用层写相关逻辑代码

//包含相关头文件

#include <linux/input.h>

//在超级终端中 通过 cat /proc/bus/input/devices/

//指令查询我们设置输入设备名称

//设备文件会存在于/dev/input/event*

//定义接收结构体

struct input_event myInfo;

//然后通过read函数读取数据到结构体进行相对应的逻辑判断和处理

read(fd,&myInfo,sizeof(myInfo));              

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <poll.h>
#include <linux/input.h>
int value=0;

int main(int argc,char *argv[])
{
	if(argc<2)
	{
		printf("error\n");
		return 0;
	}
	int fd = open(argv[1],O_RDWR);
	int value =0;
	struct input_event myInfo;
	printf("111111111111111\n");
	while(1)
	{
		read(fd,&myInfo,sizeof(myInfo));
		if(myInfo.code== KEY_ENTER)
		{
			if(myInfo.value==1)
			{
				printf("key1 press!!!\n");
			}
			else if(myInfo.value==2)
			{
				printf("key2 press!!!\n");
			}else if(myInfo.value==3){
				printf("key2 unpress!!!\n");
			}else if(myInfo.value==0){
				printf("key1 unpress!!!\n");
			}
		}
	}
}

二、使用输入子系统完成两个按键的检测

我们通过设备树相关中断和GPIO的配置,通过平台设备总线获取中断号和GPIO号,然后在加载函数中初始化输入子系统的相关结构体,当按键中断触发时,我们将事件同步和上报个应用层的read阻塞函数,我们就可以通过子系统获取按键的状态。main函数同上

#include <linux/module.h>
#include <linux/kernel.h>
//输入子系统的头文件
#include <linux/input.h>
//平台设备总线头文件
#include <linux/platform_device.h>
#include <linux/of_gpio.h>
#include <linux/gpio.h>
//中断相关头文件
#include <linux/interrupt.h>
#include <linux/irq.h>

struct input_dev *myDev;
//定义相关结构体
struct of_device_id info =
{
	.name="xyd-key",
	.compatible ="key-platdata"
};
struct platform_driver	myPlatdriver;
int key1_gpio=0;
int irq1_num=0;
int key2_gpio=0;
int irq2_num=0;
int null=0;

irqreturn_t key1_interrupt (int irq,void* data)
{
    if(gpio_get_value(key1_gpio)==0)
    {
    	//事件上报
		input_event(myDev
内容概要:本文系统介绍了RK3588处理器在多屏显示适配方面的技术原理与实现方法,涵盖硬件连接、开发环境搭建、显示系统架构(DRM/KMS框架)、设备树配置、驱动代码实现及常见问题解决方案。重点剖析了RK3588支持HDMI、MIPI-DSI、DP等多种显示接口的能力,最多可实现四屏异显,适用于智能座舱、工业自动化、会议大屏等场景。通过详细的设备树配置示例和DRM/KMS驱动代码,展示了如何实现多屏输出与图层合成,并针对花屏、闪屏、显示模式不匹配等问题提供了时钟配置优化、电源噪声抑制和EDID解析处理等实用解决策略。; 适合人群:具备嵌入式Linux开发经验,熟悉ARM架构和设备树配置的工程师,以及从事显示系统开发的技术人员;尤其适合工作2-5年、参与智能硬件或多屏显示项目研发的开发者。; 使用场景及目标:①掌握RK3588多屏异显的完整开发流程,包括硬件连接、内核配置与驱动调试;②理解DRM/KMS框架在多屏合成中的作用机制;③解决实际开发中常见的信号稳定性与显示模式匹配问题;④应用于智能座舱、工业控制、数字标牌等多屏显示产品开发。; 阅读建议:建议结合RK3588开发板进行实践操作,边读边调试设备树和驱动代码,重点关注时序参数设置、VOP端口映射和EDID解析日志分析,同时使用modetest等工具辅助验证显示配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值