自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

飞天鱼

越被别人嘲笑的梦想,越有实现的价值……

  • 博客(254)
  • 资源 (5)
  • 收藏
  • 关注

原创 linux休眠唤醒流程

应用请求休眠,系统进入休眠流程,此时如果设备触发了中断,中断处理程序中首先关闭中断,然后调度内核线程去处理work,但假如这个时候此work还未被调度到,系统就进入休眠了,那么这个设备就被永久关闭中断了,再也不能唤醒系统。//平台休眠,但是开启中断,用与响应中断,唤醒系统并继续执行接下来的代码唤醒系统。使用cat /sys/kernel/debug/wakeup_sources看什么在持有休眠锁;设置pm_debug_messages,打印来自系统的调试消息的暂停/休眠内核日志的基础结构。

2025-04-15 11:50:13 592

原创 Linux ALSA音频驱动框架概述

ALSA表示高级Linux声音体系结构(Advanced Linux Sound Architecture)。它由一系列内核驱动,应用程序编译接口(API)以及支持Linux下声音的实用程序组成。ALSA项目发起的原由是Linux下的声卡驱动(OSS/Free drivers)没有获得积极的维护。而且落后于新的声卡技术。Jaroslav Kysela早先写了一个声卡驱动,并由此开始了ALSA项目,随后,更多的开发者加入到开发队伍中,更多的声卡获得支持,API的结构也获得了重组。Linux内核。

2025-02-25 14:35:20 1032

转载 Linux PCI驱动框架分析(三)

本文将讲PCIe Host的驱动,对应为部分,相当于PCI的部分;本文会选择Xilinx的nwl-pcie来进行分析;驱动的编写整体偏简单,往现有的框架上套就可以了,因此不会花太多笔墨,点到为止;PCIe控制器驱动,各家的IP实现不一样,驱动的差异可能会很大,单独分析一个驱动毕竟只是个例,应该去掌握背后的通用框架;各类驱动,大体都是硬件初始化配置,资源申请注册,核心是处理与硬件的交互(一般就是中断的处理),如果需要用户来交互的,则还需要注册设备文件,实现一堆操作函数集;

2025-01-14 13:05:43 248

原创 Linux PCI驱动框架分析(二)

本文将分析Linux PCI子系统的框架,主要围绕Linux PCI子系统的初始化以及枚举过程分析;如果对具体的硬件缺乏了解,建议先阅读上篇文章《Linux PCI驱动框架分析(一)》;话不多说,直接开始。

2025-01-14 13:04:33 787

转载 Linux PCI驱动框架分析(一)

PCI/PCIe总线硬件;Linux PCI驱动核心框架;Linux PCI Host控制器驱动;不排除会包含PCIe外设驱动模块,一切随缘。作为专题的第一篇,当然会先从硬件总线入手。进入主题前,先讲点背景知识。第一代总线包含ISAEISAVESA和等;第二代总线包含PCIAGPPCI-X等;第三代总线包含PCIemPCIem.2等;

2025-01-14 13:03:40 332

原创 PCIe 总线标准

例如:PCIe 2.0 采用的编码方案是 8b/10b,含义是 10bits 数据里面,有 2bits 是额外的开销,实际上只传递了 8bits 的实际数据。所以,PCIe 2.0 每一条 Lane 的带宽为 5GT/s x 8b / 10b = 500MB/s,那么 PCIe 2.8 x 8 Lane 设备的总带宽就是 500MB/s x 8 = 4GB/s。的特性,如果设备支持 PCIe 4.0,但计算机主板支持只支持 PCIe 3.0,那么系统就只能以 3.0 的传输速率运行。,会占用一定量的原始。

2025-01-14 12:54:24 799

转载 Linux源码阅读笔记-USB设备驱动架构

USB系统主机端提供为4个引脚的A型接口,USB外围设备通过4个引脚的B型接口和主机端连接。那4个引脚(一条电压线VBUS、一条地线GND、一条正方向传输数据的D+和一条反方向传输数据的D-线。)USB主机和USB设备收发器可以采用相同型号的芯片。每个端点可以沿上行方向发送数据,也可以沿下行方向接收数据。数据沿下行方向到达设备叫OUT传输。为每个端点分配的地址称为端点地址。每个端点地址都与之相关的传输模式。USB传输模式:控制传输模式,中断传输模式,登时传输模式,批量传输模式。usb设备描述符结构体类型。

2025-01-07 16:28:17 62

原创 多核处理器核间通信

功能模块,通过MU传递消息进行通信和协调,芯片内的M7控制核和A53处理核通过通过寄存器中断的方式传递命令,最多支持4组MU双向传递消息,既可通过中断告知对方数据传递的状态,也可发送最多4字节数据,还可在低功耗模式下唤醒对方,是保证双核通信实时性的重要手段。一个标志位,用于标识通道正在被占用和空闲的两种状态,这个标志被“发送方”处理器设置为被占用,并被“接收方”处理器清除。(4)Core1收到中断,触发rpmsg的接收回调函数,从used区获取数据所在的共享内存的物理地址,完成数据接收;

2024-12-26 13:42:40 1691

原创 触控算法总结

1.电容变化检测电容式触摸屏通过检测电容变化来确定触摸位置。当手指接触屏幕时,会引起电容的变化。然而,当手指湿润时,水分会影响电容值,导致触摸屏误判成无法正确识别触控点2.噪声过滤:湿手指触控时,水分会在触摸屏上形成导电路径,产生噪声信号。触控算法需要通过噪声过滤技术来抑制这些噪声信号,确保触控信号的准确性。常见的的噪声过滤方法包括低通滤波、高通滤波和带通滤波等,3.信号处理与还原:触控算法需要对采集到的电容信号进行处理和还原。

2024-12-24 19:18:32 801

原创 数据结构面试题整理

由于堆是完全二叉树,所以可以使用数组的索引来表示父子关系,即对于数组中任意位置i的元素,其左子节点的位置是2i+1,右子节点的位置是2i+2,父节点的位置是(i-1)/2(向下取整)。这种栈通常在数组初始化时分配一块连续的内存空间,数组的大小可能是固定的,也可能是动态扩展的(如Java的ArrayList或C++的std::vector)。栈的内存分配方式既可以是静态的(如基于数组的实现,预先分配固定大小的内存),也可以是动态的(如基于链表的实现,按需分配内存)。例如,12 + 1 2 +12+。

2024-12-10 18:40:49 574

原创 常见的面试算法题

例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

2024-12-10 18:36:46 591

原创 嵌入式linux移植篇之Uboot

芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动Linux 内核。当然了,bootloader 的实际工作要复杂的多,但是它最主要的工作就是启动 Linux 内核。其相当于windows中的BIOS。U-Boot、vivi、RedBoot 等等,这些都是常见的bootloader程序。

2024-12-07 10:30:55 802

原创 Linux字符设备驱动:分层/分离思想、总线设备驱动模型和设备树

Linux驱动=驱动框架+硬件操作=驱动框架+单片机;在上篇文章中已经介绍了实现一个字符设备驱动程序的详细过程,本文章以一个简单的例子LED驱动程序来介绍Linux中不同的驱动编写方法;主要介绍驱动编写的三种方法1. 传统写法1. 最简单的驱动程序直接在驱动程序中实现资源,要使用的引脚、以及怎么操作引脚都在驱动代码中,这种方式最简单,但是扩展性差,想改变引脚配置需要直接修改驱动中的代码,不符合驱动设计的思想;

2024-12-06 22:56:12 687

转载 Linux系统移植过程(以及Linux系统详解)

它负责管理系统资源,为硬件和软件之间的交互提供接口,并提供操作系统的基本功能,如进程管理、内存管理、设备驱动、文件系统和网络堆栈等。它支持多种不同的计算机系统结构和处理器架构,如PPC、ARM、AVR32、MIPS、x86等,并且支持多种嵌入式操作系统,如Linux、Android、NetBSD、VxWorks等。内核提供文件系统的支持,负责管理数据的存储和检索。U-Boot主阶段的初始化和重定位:在此阶段,U-Boot执行更复杂的硬件初始化,启用更多的系统功能,并将自身重新定位到RAM中的合适位置。

2024-12-06 19:55:08 651

原创 嵌入式Linux系统移植步骤

另一方面,Linux使用内核机制很好地解决了扩展的问题,一堆代码可以在需要的时候轻松地加载或卸下,象随身听,需要的时候带上,不需要时则锁在抽屉里。因此,在做系统移植的时候,Linux系统移植工作至少要包括上述的内容,除此之外,有一些看不见的开发工作也是不可忽视的,如某个特殊设备的驱动程序,为调试内核而做的远程调试工作等。实际上,还有一些移植工作需要同时考虑,但很难说这是属于内核范畴还是属于驱动程序范畴,比如说显示设备的支持,和内核十分相关,但在逻辑上又不属于内核,并且在移植上也更像是驱动程序的开发。

2024-12-06 17:12:54 883

原创 TEE介绍

2024-12-05 12:03:26 162

原创 指纹识别简介

2024-12-05 11:52:13 126

原创 调试android 指纹遇到的坑

framework 在enroll 之前会调用 enumedate(),cancel(),pre_enroll() 等函数,如果这些函数,没执行成功,或者return 一个错误的值。把自己jni生成的.so 放在/system/etc/public.libraries.txt 或者/vendor/etc/public.libraries.txt中去。注: push 进去的init.rc 要跟目录里面的其他权限保持一致,指纹的init.rc 文件在系统目录:vendor/etc/init。

2024-12-04 19:20:59 681

原创 android 摄像机驱动框架

(光) -------> [sensor] ----->(raw图像数据) ----->[mipi总线] ----->[图像处理芯片(如ISP)] -----> (NV16/NV12等格式图像数据) raw格式sensor的输出格式,是sensor将光信号转换为电信号时的电平高低的原始记录,没有经过处理的原始数据。第三部分就是ISP部分,有些SOC有ISP图像处理模块,经过MIPI传输的图像进入SOC之后需要在传入SOC的ISP模块对图像进一步进行加工,所以一定是有一部分驱动是描述ISP模块的。

2024-11-29 17:07:27 439

原创 Binder架构

如上图,binder 分为用户层和驱动层两部分,用户层有客户端(Client)、服务端(Server)、服务管理(ServiceManager)。但其实,三者并不是直接通信的,而是各自调用 binder 驱动(ioctl),由 binder 驱动来做通信转发。这一部分是封装在 Binder API 里的,应用使用时完全不需要关心。看起来并不是和 Binder 强绑定的,使用任意的方法都可以支撑这个CS架构,那为啥非 Binder 不可呢?原因就是两个字:效率。这里包含了运行效率和使用效率。

2024-11-28 17:59:31 934

原创 移植LiteOS

RT-Thread系统移植分为三个主要步骤:配置文件调整、内核代码适配、端口代码移植。其中config存放配置文件、core存放内核文件、port存放端口文件、component存放组件。采用STM32F103CBT6芯片用于工程示例,简单介绍一下需要修改的地方。调整配置文件以适应新硬件,配置文件主要是用于配置LiteOS。内核代码是整个系统的核心,包括:任务管理、内存管理、事件等等。端口代码一般是用于适配具体的内核,从而使系统正常工作。arch:存放关于芯片内核的文件。:存放LiteOS内核文件。

2024-11-27 16:44:12 400

原创 V4L2框架--camera

一、V4L2架构二、camera 架构

2024-11-27 16:38:00 218

原创 Android音频框架总结

AudioHwDevice是一种抽象,并不是指扬声器、听筒、耳机这种真实的物理设备,而是指不同的Audio HAL module,比如primary module、a2dp module等,也可以理解成是音频框架层定义的一种虚拟设备。PlaybackThread/RecordThread是由AudioFlinger启动的负责音频数据传输的线程,播放和录制的核心流程都在这里面实现。是策略的执行者,例如具体如何与音频设备通信,如何维护现有系统中的音频设备,以及多个音频流的混音如何处理等等都得由它来完 成。

2024-11-27 15:54:20 714 1

原创 Linux 功耗优化

2024-11-27 15:19:34 159

原创 rtos功耗优化

1、降低时钟频率:根据应用需求动态调整系统时钟频率,降低 CPU 的工作频率来减少功耗。2、优化任务调度:通过实时操作系统(RTOS)或简单的任务调度机制,确保 CPU 在无任务时进入低功耗模式。3、合理使用中断:利用中断机制避免轮询,降低 CPU 的工作负载和功耗。4、关闭未使用的外设:在不使用特定外设时,及时关闭它们以减少功耗。

2024-11-27 15:13:13 786

原创 rtos 内存优化技巧

创建和销毁 RTOS 对象将使用 malloc 和 free,这又是不确定的,可能会导致性能问题。这样,对象的行为就好像它们是静态分配的,而不是动态分配的。通过限制在运行时创建的 RTOS 对象的数量,可以最大限度地减少内存使用。3.监控内存使用情况: 在系统运行过程中,不断监控内存的使用情况是非常重要的。2.选择合适的内存分配策略: 根据系统的实际需求选择合适的内存分配方式,可以是静态内存分配或动态内存分配。4.使用编译器优化选项: 合理使用编译器的优化选项可以进一步优化内存使用情况,提高系统的性能。

2024-11-27 14:20:47 359

原创 android wifi的整体架构

6、经常reconnect是因为 连接的AP信号太弱这时又没有发现有信号更好的AP,导致断线,当此AP信号稍好时又一次scan到此AP,这样才叫reconnect;而 roaming是指连接的AP信号太弱这时发现有信号更好的AP,连接到信号更好的AP,这样叫roaming。5、四次握手的时候发生的失败,失败应该是客户密码输入错误。1、动态权限请求:如果你要控制WiFi,可能需要在Android 6.0及以上版本申请必要的权限,如ACCESS_WIFI_STATE和CHANGE_WIFI_STATE。

2024-11-27 12:22:13 198

原创 MTK 展锐 高通 sensorhub架构

因为对于日常生活来说有一部分sensor是使用频率是很高的,所以必然也伴随着手机功耗的增加如果每次都是CPU进行处理的化,而且CPU一旦休眠还伴随着sensor会停止工作,为了优化手机使用Google和MTK分别开发了CHRE 和SCP 进行sensor控制。SCP 是用来处理sensor和audio相关功能和其他客制化需求的一个协处理理器,MTK SCP选择freeRTOS作为操作系统,CHRE是处理传感器相关操作的专门任务,它的架构如下。如果以前的调用尚未完成,CHRE将无法调用队列中的一个任务。

2024-11-25 22:02:53 1664

原创 三种蓝牙架构实现方案

一些蓝牙设备功能比较强大,它需要一颗功能非常强大的MCU来做主应用,而。

2024-11-25 21:31:46 2056

原创 蓝牙 AVRCP 协议详解

随着无线音频设备的普及,蓝牙已经成为智能设备间通信的主流方式之一。除了传输音频流的 A2DP 协议外,AVRCP(Audio/Video Remote Control Profile,音频/视频远程控制协议)为用户提供了对蓝牙音频设备的控制能力,例如播放、暂停、调整音量等功能。本文将详细介绍 AVRCP 协议的基本概念、工作原理及在 Android 中的典型应用场景,同时列举常见问题及其解决方案,帮助开发者更好地利用 AVRCP 实现音频设备的交互控制。

2024-11-25 21:05:07 3317

转载 蓝牙音乐协议分析之A2DP和AVRCP连接流程

AVRCP全称:Audio/Video Remote Control Profile,即音频/视频远程控制配置文件。AVRCP设计用于提供控制TV,Hi-Fi设备等的标准接口,此配置文件用于许可单个远程控制设备(或其他设备)控制所有用于可以接入的A/V设备。AVRCP定义了如何控制流媒体的特征。包括暂停、停止、启动重放、音量控制及其他类型的远程控制操作(其实和DLNA的指令控制类似AVRCP是一种在蓝牙协议栈A2DP/AVRCP上实现的控制技术;

2024-11-25 19:00:32 484

原创 蓝牙协议之AVDTP

AVDTP协议指定音频或视频分发的传输协议,简称AVDTP,通过蓝牙空中传输流媒体音频或视频。音频和视频数据流需要同步的数据传输能力,A/V分发传输协议的传输机制和消息格式,基于《RFC 3350》中定义的RTP,其中由两大协议组成:RTP数据传输协议(RTP)和RTP控制协议(服务器)。

2024-11-25 18:42:19 930

原创 HDMI接口与协议

一、HDMI接口的工作原理 这张图是HDMI接口的架构示意图。从左边的信号源中你可以看到,HDMI接口的信源可以是任何支持HDMI输出的设备,而接入端也可以是任何带有HDMI输 入接口的设备。无论他们是音频设备、视频设备还是控制设备,HDMI接口都可以应用其中。 在HDMI接口中的数据信号采用的是TMDS最小化传输差分信号协议。这种数据传输协议曾经在DVI接口上得到广泛的应用。而HDMI接口上的数据信号也 沿用了这种协议。这种协议会将标准8bit数据转换为10bit信号,并且在转换过程中使用微.

2024-11-25 18:36:29 1559

原创 智慧屏内核崩溃问题分析

后来经过分析,该问题的根因是kmap_atomic和kunmap_atomic函数的调用不匹配导致的,kmap_atomic函数中禁用了抢占但未打开,导致zs_map_object函数内部BUG_ON检查失败,引发panic重启。从图中可以看出,在2021-09-29 18:30:22时发生kernel panic,对应崩溃前的内核日志保存在20210929183022-12999199目录下的last_kmsg文件中。在版本路径中有vmlinux,这个文件就是内核符号表文件。(3)解析函数的实际地址。

2022-11-26 10:19:27 902

转载 彻底理解Linux 进程调度所有知识点

其中 x19-x28 是 arm64 架构规定需要调用保存的寄存器,可以看到处理器状态切换的时候将前一个进程(prev)的 x19-x28,fp,sp,pc 保存到了进程描述符的 cpu_contex 中,然后将即将执行的进程 (next) 描述符的 cpu_contex 的 x19-x28,fp,sp,pc 恢复到相应寄存器中,而且将 next 进程的进程描述符 task_struct 地址存放在 sp_el0 中,用于通过 current 找到当前进程,这样就完成了处理器的状态切换。

2022-11-03 10:49:16 617

转载 鸿蒙OS内核分析|解读鸿蒙源码

操作系统(Operating System): 操作系统的功能是负责管理各种硬件设备,同时对底层硬件设备进行抽象,为上层软件提供高效的系统接口。操作系统设计和实现的优劣直接决定了系统栈的各个方面,比如性能,可靠性,甚至安全性。操作系统的设计实现是计算机系统研究最古老最困难的方向之一。因为底层设备的复杂性,操作系统实现的代码量巨大。从系统架构上可以将操作系统分为三类:宏内核(Monolithic Kernel)操作系统,微内核(Microkernel)操作系统,外内核(Exokernel)操作系统。内核(k

2022-11-02 14:52:22 3658

转载 git仓库过大致使clone失败的解决方法

compression 表示压缩,从 clone 的终端输出就知道,服务器会压缩目标文件,然后传输到客户端,客户端再解压。取值为 [-1, 9],-1 以 zlib 为默认压缩库,0 表示不进行压缩,1…9 是压缩速度与最终获得文件大小的不同程度的权衡,数字越大,压缩越慢,得到的文件会越小。仓库分支过多,提交历史超过了1G,直接clone会报错:git。经过分支名称去拉取分支信息以及checkout。尝试一:增大postBuffer。尝试三:浅层clone。

2022-10-13 15:20:04 3426 1

转载 十大滤波算法程序大全(Arduino精编无错版)

最近用Arduino做电子秤,为了解决数据的跳变研究了不少滤波算法。网上能找到大把的十大滤波算法帖子,每一篇都不太一样,都号称精编啊,除错啊什么的,可是放到板子里却没一个能正常跑起来的。于是决定自己整理一下这些程序,完美移植到Arduino中。所以大家看到这个帖子的时候,不要怀疑我重复发帖。我的代码都是经过反复试验,复制到Arduino中就能开跑的成品代码,移植到自己的程序中非常方便。而且都仔细研究了各个算法,把错误都修正了的(别的程序连冒泡算法都是溢出的,不信自己找来细看看),所以也算个小原创吧,在别人基

2021-12-30 12:02:29 1081

转载 智能笔算法总结

智能笔算法总结 一周前,我在CocoaChina和博客园的问答区都提了一个问题,就是本篇文章将要描述的“智能笔问题”。遗憾的是,至今没有朋友给予有效地回复,但是,还是感谢回复我的朋友们。经过一周的琢磨和研究,终于在昨天搞定了这个问题。看着上图,回想自己渴求帮助的心情,想必有的朋友还是需要这样的算法的,再者在此也做一个总结,所以记录一下,互相学习指正。首先描述下这个功能的需求:在平板上,用手指自由地一笔画出一个图形,然后智能识别用户所画图形的类型,比如直线、圆、三...

2021-11-11 10:57:27 336

转载 图解PCIE原理(从软件角度)

1 PCIE基本概念1.1 PCIE拓扑架构图1.2 PCIE Switch内部结构图1.3 PCIE协议结构图2 PCIE枚举原理2.1 Type0&Type1配置头空间2.2 拓扑示例连接Device0的端口设为Port0,连接Device1的端口设为Port1 (Port可以看作PCI Bridge)2.3 枚举过程Port0、Port1的相关Bus Register变化过程如...

2021-11-11 10:54:17 2509

数独游戏 带网络功能的

这是一个带网络对战功能的数独游戏,无意中下载的,现在拿出来分享!!!!!! 用在qt4下可以运行(windows)

2010-04-22

鼠鼠 qt 小游戏 小动画

像游戏又像动画,既不是游戏,也不是动画!!! 对于学习qt有很大的好处!!!!!!

2010-04-22

wince蓝牙驱动以及 测试程序

wince 驱动 蓝牙 测试程序wince 驱动 蓝牙 测试程序wince 驱动 蓝牙 测试程序wince 驱动 蓝牙 测试程序wince 驱动 蓝牙 测试程序wince 驱动 蓝牙 测试程序wince 驱动 蓝牙 测试程序wince 驱动 蓝牙 测试程序

2011-03-31

windows CE经典资源(包您满意)

windows CE嵌入式系统的经典教材,包括经典实验和课件。自己感觉不错哦!!!!!!!!!!!

2010-06-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除