
嵌入式开发
文章平均质量分 94
Trump. yang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux驱动开发—在自己总线下注册设备和驱动
在 Linux 内核编程中, 用于将符号(例如变量、函数)导出到内核符号表中,使其可以被其他内核模块或驱动程序引用和使用。具体来说:导出符号的机制使得一个模块可以将某些符号公开给其他模块使用,而不需要将所有的实现都暴露出来。这对于模块化开发和代码复用非常有用。如果一个符号通过 导出,在另一个模块中可以直接使用这个符号,而无需显式地声明或定义它。为了使用导出的符号:内核中,已经提供了一个API供开发者来调用,原创 2024-08-29 11:30:57 · 1190 阅读 · 0 评论 -
Linux驱动开发—创建总线,创建属性文件
在 Linux 内核中,总线(Bus)是用于描述系统中各类设备之间连接关系的一个抽象概念。总线不仅仅指物理上的数据传输路径,也可以是逻辑上的连接结构。Linux 内核通过总线来组织和管理系统中的设备,并提供统一的接口和框架,以便设备驱动程序可以与硬件进行交互。原创 2024-08-28 11:08:58 · 1030 阅读 · 0 评论 -
Linux驱动开发—设备模型框架 kobject创建属性文件
在 Linux 内核中,属性文件(Attribute Files)指的是通过sysfs文件系统暴露给用户空间的文件,这些文件通常用于在用户空间与内核空间之间进行简单的数据交换或配置。上述暴露出一个问题,如果某个设备属性文件过多,如何优化if的次数?这样会让读写文件很臃肿,最好的方法,应该是一个属性对应一个show和store可以使用ATTR宏定义来实现这个功能mykobj结构体包含了一个kobject对象以及两个整型成员变量reg_count和reg_status。kobject。原创 2024-08-27 17:08:45 · 1064 阅读 · 0 评论 -
Linux驱动开发—设备模型框架 kset和 kobject 详解
设备模型(Device Model)是 Linux 内核中的一个抽象层,用于统一管理和组织系统中的各种硬件设备及其驱动程序。它为设备、驱动、总线和电源管理等提供了一个统一的接口和结构,使得内核能够更加高效和一致地管理系统中的硬件资源。原创 2024-08-16 10:49:44 · 1369 阅读 · 0 评论 -
I2C子系统框架入门—i2c驱动示例
在这个流程中,驱动程序(即你的代码)负责发起I²C命令请求,而实际的数据传输和命令执行由I²C控制器完成。I²C控制器是硬件层面的存在,它通过I²C总线执行读写操作,将驱动程序的请求发送到物理设备上。原创 2024-08-12 09:43:06 · 1452 阅读 · 0 评论 -
Linux驱动开发—设备树传递给内核,匹配驱动过程分析
内核解析设备树二进制文件(DTB)的过程主要分为几个步骤,从设备树的传递到最终的硬件配置。内核解析设备树二进制文件(DTB)的过程主要分为几个步骤,从设备树的传递到最终的硬件配置。内核启动时,会在启动代码中处理传递过来的 DTB 地址,并将其保存在全局变量中。内核将解析的设备树节点注册到设备模型中,通常通过位于drivers/of/platform.c的。设备树解析后,内核会根据设备树中的信息来匹配相应的驱动程序,并进行设备初始化。内核在初始化过程中会调用设备树相关的函数来解析 DTB。原创 2024-08-06 19:36:18 · 1257 阅读 · 0 评论 -
Linux驱动开发—设备树描述引脚复用 Pinmux 与Pinctrl
Pinmux,或 Pin Multiplexer,是一种在电子电路设计中使用的技术,用于在一个芯片上多路复用(共享)引脚的功能。通过 pinmux,可以将一个引脚配置为多种功能,例如 GPIO(通用输入输出)、UART(通用异步收发传输器)、I2C(集成电路间总线)、SPI(串行外设接口)等。这样可以在有限的引脚资源下实现更多的功能,增加芯片的灵活性和可扩展性。pinmux 广泛应用于嵌入式系统设计、微控制器、系统级芯片(SoC)等领域,特别是在需要实现多种外设功能且引脚资源有限的情况下。原创 2024-08-06 17:07:03 · 4062 阅读 · 0 评论 -
Linux驱动开发—设备树分析:GPIO,中断,时钟信息,CPU信息
这段设备树描述了一个含有两个簇(Cluster)的多核系统,其中第一个簇包含四个Cortex-A53 CPU核心,第二个簇包含两个Cortex-A72 CPU核心。每个CPU节点包含兼容性、寄存器地址、启用方法、时钟、操作点等属性。还定义了两个二级缓存节点,并描述了系统的空闲状态。这样,操作系统可以根据设备树信息正确地初始化和管理各个CPU核心及其相关硬件。在驱动开发过程中,不需要过多关注如何在设备树中编写时钟信息,而是更应该关注如何在驱动代码中获取和解析这些时钟信息。原创 2024-08-06 12:23:15 · 2127 阅读 · 0 评论 -
Linux驱动开发—设备树基本概念,语法详解
设备树(Device Tree,简称DT)是一种数据结构,用于描述硬件的布局和连接方式。它最初由Open Firmware引入,后来被Linux社区采用,用于解决在嵌入式系统中硬件描述的问题。设备树通过一种独立于硬件平台的方式,向操作系统内核提供设备信息,使得内核不再需要内置具体的硬件配置代码,从而提高了系统的可移植性和灵活性。平台独立性:设备树使硬件描述从内核代码中分离出来,通过一份设备树文件(通常是.dts文件)来描述硬件。这样,同一内核可以运行在不同硬件平台上,只需提供相应的设备树文件。原创 2024-08-05 21:54:56 · 2299 阅读 · 0 评论 -
Linux驱动开发—平台总线模型详解
Linux 平台总线模型(Platform Bus Model)是一种设备驱动框架,用于处理那些没有标准总线(如 PCI、USB 等)的嵌入式设备。它为这些设备提供了统一的设备驱动模型,简化了设备驱动程序的编写和管理。原创 2024-08-05 18:15:34 · 1284 阅读 · 0 评论 -
Linux驱动开发—中断,中断号,中断控制器GIC,中断子系统架构详解
函数在 Linux 内核中用于注册中断处理程序。它是设备驱动程序中常用的函数,用于为特定中断向量分配中断处理程序。函数在 Linux 内核中用于注册中断处理程序。它是设备驱动程序中常用的函数,用于为特定中断向量分配中断处理程序。以下是函数的详细介绍和一个与相机设备相关的示例。函数原型参数说明irq: 中断号,表示你要注册的中断向量。handler: 中断处理程序,当指定的中断发生时,系统将调用这个处理程序。flags: 标志,用于指定中断类型和处理选项。常见的标志包括(上升沿触发),(下降沿触发),原创 2024-08-05 11:21:16 · 1776 阅读 · 0 评论 -
Linux驱动开发—ioctl命令构成,设备驱动基础使用ioctl详解
ioctl(输入/输出控制)是一种系统调用,用于设备驱动程序与用户空间应用程序之间进行设备特定的输入/输出操作。它通常用于对设备执行标准文件操作(如读取、写入、打开和关闭)之外的特殊操作。ioctl提供了一种通用的机制,通过文件描述符与设备进行交互,支持各种类型的设备操作和控制。ioctl定义命令和参数:设备驱动程序和用户空间应用程序之间的交互是通过命令和参数来实现的。命令通常是一个宏,表示特定的操作,而参数则是传递给驱动程序的数据。调用ioctl系统调用:用户空间应用程序通过文件描述符调用ioctl。原创 2024-08-04 20:19:55 · 5278 阅读 · 0 评论 -
Linux驱动开发—Linux内核定时器概念和使用详解,实现基于定时器的字符驱动
每个滴答的时间长度由系统的时钟中断频率决定,通常是 1 毫秒(即 1000 Hz)或 10 毫秒(即 100 Hz),但具体取决于内核配置。在 Linux 内核中,定时器是用来管理和调度延迟操作的机制。Linux 内核提供了几种不同类型的定时器,每种定时器都有不同的特点和用途。定时器在内核中的实现涉及到多种机制,包括定时器队列、定时器中断以及内核调度机制等。在 Linux 驱动模块中使用定时器,通常有两种主要方式:使用软定时器和高精度定时器。是内核中时间管理的一个基本概念,广泛用于定时器和延迟操作。原创 2024-08-04 10:04:14 · 1118 阅读 · 0 评论 -
Linux驱动开发—并发与竞争,原子操作,自旋锁,信号量详解
自旋锁在等待锁的时候不会引起调度器的上下文切换,而是不断地循环检查锁的状态,直到锁可用为止。是指多个线程或进程在没有适当同步的情况下访问和修改共享资源时,操作的执行顺序影响到最终结果,从而导致不确定性和错误的情况。是指两个或多个线程或进程在等待彼此持有的资源,导致所有参与者都无法继续执行的情况。:原子操作在多线程环境中是安全的,多个线程可以并发执行而不会引起竞态条件。:原子操作是不可分割的,执行过程中不会被中断,确保操作的完整性。此时,线程A和B都在等待对方释放资源,形成循环等待,导致死锁。原创 2024-08-02 18:33:59 · 884 阅读 · 0 评论 -
字符设备驱动开发基础—从驱动中进行读写操作
本文主要介绍的是 如何通过Linux驱动模块进行设备的模拟读写操作。原创 2024-08-02 11:26:59 · 840 阅读 · 0 评论 -
字符设备驱动基础—sys文件系统,udev介绍,驱动模块在内核空间注册设备
udev是 Linux 系统中的一个设备管理工具和守护进程,负责在用户空间管理设备节点。它是设备管理框架的一部分,用于响应系统中的设备事件,并在/dev目录中创建和删除设备节点。udev是 Linux 系统中处理设备管理的重要组件。它提供了一种灵活而强大的方式来响应和管理设备事件,确保系统中的设备节点和权限设置是动态更新和适当配置的。对于系统管理员和开发者来说,理解和利用udev可以大大简化设备管理的工作。原创 2024-08-01 16:53:12 · 1026 阅读 · 0 评论 -
字符设备驱动开发基础—静态/动态注册设备号,使用cdev注册驱动
在Linux和类Unix操作系统中,设备文件用于表示各种硬件设备和虚拟设备。每个设备文件通过一个唯一的设备号进行标识,该设备号由主设备号和次设备号组成。设备号帮助操作系统将设备文件与实际的设备驱动程序关联起来,以便正确处理对设备的操作请求。在Linux内核中,cdev结构体是字符设备驱动程序的核心数据结构之一,用于表示和管理字符设备。字符设备是通过字符设备文件接口与用户空间进行交互的设备,例如终端、串口、鼠标等。原创 2024-08-01 09:39:15 · 1649 阅读 · 0 评论 -
Linux驱动开发—编写第一个最简单的驱动模块
在Linux系统中,管理内核模块的常见命令包括lsmod、insmod、rmmod、modinfo等。这些命令用于列出、加载、卸载和查看内核模块的详细信息。原创 2024-07-31 22:02:07 · 2263 阅读 · 0 评论 -
Linux驱动入门—什么是驱动?体系结构,驱动的分类,开发驱动需要注意的问题
在广义上,"Linux驱动"可以指在Linux操作系统下运行的所有硬件驱动程序。这些驱动程序是软件组件,允许Linux内核与硬件设备进行通信和交互。广义的Linux驱动包括各种设备的驱动程序,如显示器、键盘、网络接口、存储设备等。它们使操作系统能够识别、管理和使用这些硬件设备原创 2024-07-31 20:09:18 · 2454 阅读 · 0 评论 -
MIPI CSI-2 协议介绍,CSI-2构成,数据多通道分布和合并详细解析
MIPI(Mobile Industry Processor Interface)协议是由MIPI联盟(MIPI Alliance)制定的一套标准,用于移动设备中的芯片间通信。MIPI协议涵盖了从图像传感器、显示屏、存储、音频到射频和物联网设备的广泛应用。MIPI协议的目的是提供高效、低功耗、低成本的解决方案,以满足现代移动设备和其他嵌入式系统的需求。 CSI-2规范定义了发射器和接收器之间的标准数据传输和控制接口。定义了两种高速串行数据传输接口选项。原创 2024-07-30 17:01:24 · 5654 阅读 · 0 评论 -
i2c中结构体 数据传输 i2c Tools使用
传输消息函数会遍历msgs数组中的所有i2c_msg,并逐一通过指定的 I2C 适配器进行传输。处理读写操作根据i2c_msg结构体中的flags,确定是进行读操作还是写操作,并将数据从缓冲区发送到设备或从设备接收。同步执行所有消息按顺序执行,传输完成后函数返回。原创 2024-07-30 14:00:24 · 590 阅读 · 0 评论 -
I²C介绍、I²C协议设计、I²C信号、数据格式、传输过程详解
I²C(Inter-Integrated Circuit)协议是一种串行通信协议,用于在微控制器和其他外围设备之间进行低速数据传输。它由飞利浦公司(现为恩智浦半导体公司)在20世纪80年代初开发,广泛应用于各种嵌入式系统。双线通信:I²C协议使用两根线进行通信,一根是数据线(SDA),另一根是时钟线(SCL)。这两条线是双向的,可以同时进行发送和接收数据。多主多从:I²C总线上可以有多个主设备和多个从设备。主设备是发起通信并控制时钟信号的设备,而从设备则响应主设备的请求。原创 2024-07-29 18:00:00 · 1711 阅读 · 0 评论 -
嵌入式开发—C++使用websocketpp 创建WebSocket服务器,并向浏览器发送图片
嵌入式开发—C++使用websocketpp 创建WebSocket服务器,并向浏览器发送图片 简单实现demo原创 2024-06-03 16:05:41 · 2499 阅读 · 0 评论