分类目录归档:Linux系统

Linux上input子系统使用

1.简介

  本文档主要记录input子系统使用,我们通过驱动Linux上iic连接的手势识别传感器paj7620来展开。
(于2019年开发瑞芯微平台上使用)涉及到的驱动模块:
DTS设备树input子系统I2C模块workqueue工作队列

2.传感器驱动

2.1 传感器数据结构

构造好传感器的数据结构,涉及到i2c模块,延时工作队列,input_device用来上报消息。

//paj7620传感器
struct gesture_sensor{
    struct i2c_client *client;
    struct delayed_work poll

Read more

Linux上设备类属性

1.设备类属性

在Linux上,设备类属性(sysfs)是一种用于访问和修改设备属性的机制,sysfs提供了 一个虚拟文件系统,它代表了内核中的设备树,通过这个文件系统,可以查看和修改设备 及其属性状态,在硬件调试阶段非常实用。 再简化理解: class_attribute是一种用于向用户空间暴露设备类(class)属性的机制, 它允许内核驱动将设备类的特定信息,导出到/sys/class/目录下,供用户空间程序读取或修改。 文件系统类接口,备注:

1.1 sysfs

内核设备模型的核心文件系统/sysfs, 驱动通过class_create , device_create, sysfs_cr

Read more

Linux上probe流程理解

1.简介

  在实际开发中,我们通过配置设备树里面的compatible属性,在将这个platform_driver注册到系统platform总线上时, 通过compatible属性匹配时,就会自动调用probe函数,进行platform_driver的初始化工作。在probe之前,其实有一些操作过程已经默认被执行了, 其整体流程如下:

2.platform_device生成时机

  platform_device是自动在早期生成的。

2.1) 设备树解析时机

内核启动早期

  • bootloader传递dtb给内核
  • 内核入口->setup_arch-

Read more

Linux上部分函数接口差异对比

1.简介

Linux上部分接口名字很类似,但是涉及到的内容有不一样,这样导致这些接口 使用的场景差异(底层实现上也是有差异的),比如一些gpio的一些操作,devm_ 接口的操作等等。

2.GPIO子系统中

GPIO子系统中将操作分为:普通(原子)操作 和 cansleep操作。 本质上是为了适配不同硬件访问方式 和不同使用上下文,差异上:

2.1 底层实现核心差异

gpio_get_value: 硬件访问方式,直接访问GPIO寄存器(内存映射IO),它是原子操作(禁用本地中断), 支持中断上下文,可也以用于进程上下文,速度快,比如一些片上SOC内置(如ARM GPIO控制器)。 gpio_g

Read more

Linux死机分析方法--(下)--死锁导致的--panic

1.概述

之前也提及到死机,由OOPS导致的,当然也有由于死锁导致的panic,分析途径都是一样的,主要是配置如何检测。

2.实际例子

在实际使用中,主要是由于相互请求对方的锁,导致线程卡死。 配置参考:

Kernel hacking → Lock debugging (spinlocks, mutexes, etc.)
CONFIG_LOCKDEP=y    #追踪锁的依赖关系,定位死锁路径
CONFIG_DETECT_HUNG_TASK=y   #检测hung task(卡死的线程)触发panic
CONFIG_PAINC_ON_HUNG_TASK=y #检测到hung task后触发ke

Read more

Linux死机分析方法-(上)-OOPS

1.概述

Linux开发过程中,难免遇到死机问题,死机问题主要分层两类死机:

Kernel Oops:内核执行非法操作(如空指针、数组越界),触发软中断,但可能未完全死机 较低 输出 Oops: 日志,含寄存器、栈回溯

Kernel Panic:致命错误(如内核死锁、中断风暴),系统无法继续运行,触发重启 较高 输出 Panic: 日志,含触发原因(如 BUG: soft lockup)

2.测试案例

在实际Linux驱动开发过程中,需要对Linux编译进行配置,开启必要的选项,比如要生成带调试符号的内核(或者ko模块),要开启CONFIG_FRAME_POINTER 如果没有开启,会导

Read more

Linux设备树-component组件使用说明

1.简述

在实际linux驱动开发过程中,解决设备树节点对应的驱动初始化依赖问题,使用component框架是比较常见 的方法,component框架核心是将存在依赖的驱动,拆分成“组件”, 由核心层统一管理初始化顺序, 确保被依赖组件,先完成初始化,再初始化依赖组件

2.component框架原理

component框架通过“匹配” + “聚合”机制工作,其工作机制流程如下:

2.1 组件注册

每个驱动模块都注册成一个“component”,并声明自己的匹配原则(比如非常常见的设备树compatible属性)。

2.2 组件聚合

所有匹配到的component会被聚合到一个“Master(

Read more

Linux驱动设备树解析说明

1.简介

主要是描述一下linux驱动中,使用的设备树解析API,在实际使用中,设备树节点,翻译为platform_device的过程中,会主动翻译 我们常见的内容,部分客制化内容,需要我们手动进行翻译解析。 主要了解内容概述:

- 1.哪些资源自动解析,比如寄存器地址、中断、时钟、DMA等等。

- 2.非标准资源,怎么使用ofproperty 接口解析。

- 3.分清楚物理地址,虚拟地址,内核操作虚拟地址,如何将物理地址、硬件中断转化为虚拟地址、软中断号。

备注: Open Firmware 开源固件,体现到linux开发上,主要是设备树(Device Tree)机制。

  • 当 CONFIG_

Read more

Core dump进行分析进程dump

1. core dump说明

core dump是该进程实际使用的物理内存的“快照”,所以对于分析Linux 应用程序非常有帮助。我们在实际使用中也是使用core dump文件获取应用 程序崩溃时的现场信息,如程序运行时CPU寄存器值,堆栈指针,栈数据,函数 调用栈等信息。

2. core dump工作机制

首先core dump是基于Linux信号实现的,Linux中信号是一种异步事件 处理机制,每种信号都应有默认的异常处理操作,默认操作包括忽略该信号(Ignore), 暂停进程(Stop),终止进程(Terminate),终止并产生core dump(Core)等。 参考常见一些信号: S

Read more

Linux驱动之设备树

1.简介

本wiki主要记录一下设备树的使用,简单介绍内容涵盖,设备树dts作用,解析原理,常见语法。

2.设备树概念

设备树,作用,早期linux上驱动,有很多相关代码,后续开发中为了替换driver中过多的platform_device部分的 静态资源,从而将硬件资源抽象出来,由系统统一解析,这样可以有效避免各驱动中对硬件资源的大量重复定义。 设备树中的节点目标是转换成platform_device结构,在驱动开发时,只需要添加相应的platform driver部分进行 匹配。 流程: DTS--> DTB-->device_node --> platform_de

Read more