分类目录归档: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/目录下,供用户空间程序读取或修改。

2.class_attribute使用API接口

class_attribute结构体构成:

struct class_attribute {
    struct at

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

glibc和uclibc

1.说明

ANSI C是基本的C语言函数库,包含了C语言最基本的函数库。 1)glibc 是Linux下GNU C的函数库 常见的桌面和服务器GNC/Linux类的系统,都是用C语言标准库,其实现了常见的C库函数,支持多种系统平台,功能很全。 2)uclibc是一个小型C标准库,主要用于嵌入式linux。 uclibc比glibc小很多,它是独立的,为了应用于嵌入式系统,和glibc在源码结构和二进制上,都不兼容。

2.差异说明

2.1)glibc 这是gnu发布的libc库,也是c运行库,主要提供了如下: string,字符串处理 signal,信号处理 dlfcn,管理共享库的动态加载 d

Read more

ASAN分析内存相关问题

1.简介

  在使用ASAN(Address Sanitizer,也就是地址消毒技术)之前,很多内存检查都使用valgrind,通过valgrind工具,检查内存问题,例如:堆栈溢出,段错误等等。 ASAN可以用来检查内存问题,例如:堆栈溢出,悬空指针的非法访问等。并且相比Valgrind工具,使用ASAN作为内存错误监测工具对程序性能损耗也非常低。 对比Valgrind只能检测到堆内存的越界访问和悬空指针的访问,ASAN不仅可以检测到堆内存的越界和悬空指针的访问,还能检测到栈和全局对象的越界访问。 所以ASAN成为目前较优秀的内存检测工具。   简单原

Read more

qemu构建linux模拟环境

1.内核编译

内核编译是为了生成zImage文件。 我们通过编译vexpress_defconfig进行示例。

export PATH=$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4

编译内核需要关注两个产物,一个是内核产物zImage, 一个设备树产物*.dtb。

2.根文件系统

Read more

Linux上设备树使用

1.简介

  DTS, Device Tree Source设备源码树,是一种描述硬件的数据结构体,dts的加入,先将
dts解析成树型结构,然后放在内存中,等待内核后面注册device 和 driver的时候再来铺开调用。
  DTS由一系列被命名为节点node和属性property组成,而节点本身可以包含子节点,所谓属性
就是成对出现的name和value。

2.DTS使用

  DTS在内核中,dts使用各种device node形式存在,而这些device node对于大部分的内核驱动\ 模型platform driver来说,

Read more

Linux内核编译过程中遇到的问题

1.简介

本文档主要是记录一下,linux内核编译过程中遇到的一些问题,因为最早内核是在linux上编译通过, 然后后期由于将代码下载到了windows上,造成了一些问题,主要是一些文件软链接丢失,还有一个是 不同平台上,大小写区分(windows上大小写是一样的,但是Linux上是不同的)。

2.问题记录

2.1 linux-event-codes.h 语法不对

   编译过程中遇到的,参考实际上linux该文件

linux-event-codes.h -> ../../uapi/linux/input-event-codes.h

可以发现 linux-event-codes.h 该

Read more