- 博客(154)
- 收藏
- 关注
原创 Linux内存管理深度理解
这种做法的唯一缺点便是内核空间和用户空间均变小了。按照虚拟化的定义,虚拟内存与物理内存的映射关系是非线性的、随机的,但这种随机映射,在访问内存效率上会低一些,由于内核在系统运行周期是一个最高等级的常驻“进程”,并且资源是紧张的,因此内核建立一套自己”特殊“的映射规则,大大增加了软件复杂度,但为了提高效率,软件如何复杂都是有意义的!2、换言之,BSS段和数据段本质上可以不划分,软件层面的优化措施,一来节省文件空间,二来可以统一初始化,提升效率,对于嵌入式系统而言,资源就是成本,成本就是竞争力,是有必要的;
2025-10-06 10:33:09
1077
原创 Amlogic BSP-HDMI模块驱动分析
HDMI涉及的知识较多,这里做一些HDMI的简要分析,希望能给大家提供一些思路所在层次名称代码路径kerneldriver//注意TV没有tx的应用场景kerneldtsrelease/aml-comp/kernel/aml-5.4/arch/arm/boot/dts/amlogic/t5d_t950d4_am301_linux_1.5g.dts //1.5g指ddr内存//以上修改的话最好一起修改,覆盖不同芯片多个方案kernelpinctrl子系统bootboothdmi。
2023-12-29 23:25:24
2587
2
原创 重新理解Linux交叉编译及编译流程
文章目录一、背景二、gcc和arm-linux-gcc的常用选项二、交叉编译的四个流程及实例说明1、预处理(preprocessing)2、编译(compilation)3、汇编(assembly)4、链接(linking)参考书籍1、编译原理2、嵌入式Linux应用开发一、背景编译性程序源文件需要经过编译才能生成可执行文件,比如一个C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)等4步才能变成可执行文件。
2022-03-12 23:19:09
41786
16
原创 Android selinux详解
SELinux简介与架构摘要 SELinux(Security-Enhanced Linux)是由NSA开发的Linux安全模块,采用强制访问控制(MAC)机制。它通过为每个进程和资源打上安全上下文标签,严格规定访问权限(如进程对文件的读写)。主要特点包括: 工作模式:强制模式(拦截违规)、宽容模式(仅记录)和完全关闭 决策三要素:主体(进程)、客体(资源)和动作(读/写/执行) 架构原理:通过LSM框架在内核系统调用入口插入钩子,查询策略数据库(AVC缓存)进行权限检查 应用场景:Android 5+系统
2026-07-04 17:27:36
266
原创 Android子系统之蓝牙调试
本文总结了Android蓝牙开发的调试方法和工具链,重点介绍了HCI日志(btsnoop)和空中报文抓取技术。内容包括:1) Android蓝牙架构组件图示;2) 多层级调试手段(系统日志、BTSnoop、内核日志等);3) 详细配置btsnoop日志的步骤;4) 专业抓包工具Ellisys的使用;5) 利用AI辅助分析复杂的蓝牙协议数据。文章还提供了实战技巧,如组合日志过滤命令、MAC地址抓包方法等,为蓝牙开发人员提供了一套完整的调试解决方案。
2026-06-28 23:39:35
222
原创 Android子系统之蓝牙架构
文章摘要:Android蓝牙架构与技术方案解析 本文系统介绍了Android蓝牙技术的发展与架构设计,主要内容包括: 蓝牙协议栈演变:从BlueZ到Bluedroid的转变,以及不同版本Android(4.2-14)的架构差异; 技术方案对比:详细分析了SOC+HCI芯片、全集成芯片、MCU+模组三种实现方案的适用场景; 分层架构解析:从应用层到硬件驱动的完整通信路径,包括协议栈分层(HOST/Controller)和BLE架构; 源码目录指引:提供Android蓝牙模块的关键代码路径,涵盖Framewor
2026-06-28 23:35:42
289
原创 Android Bluetooth之概念基础
蓝牙技术概述与学习资源整理 本文整理了蓝牙技术相关学习资料和基础概念,包括: 推荐了5个技术博客专栏、3本专业书籍、官方协议文档和培训课程资源 概述了Android蓝牙协议栈的学习方法,建议先掌握基础框架和核心场景 解释了关键术语:蓝牙Profile(A2DP/HFP/GATT等)、HCI接口等 介绍了蓝牙技术分类:经典蓝牙与BLE的区别,单模/双模设备差异 说明了蓝牙版本演进(1.0-6.0)和工作模式(BR/EDR/LE) 解释了蓝牙设备类型和基本概念:UUID服务标识、PIN码认证机制等 适合作为蓝牙
2026-06-28 23:26:43
207
原创 Linux内核框架之IIO子系统详解
本文介绍了Linux内核中的IIO(Industrial Input/Output)子系统框架及其应用。IIO子系统专为处理ADC、DAC及工业传感器(如加速度计、陀螺仪、磁力计)设计,通过统一的用户接口(/sys/bus/iio/devices/)和标准化数据结构简化设备访问。其核心功能包括支持多种设备类型、数据获取方式(单次/连续)及通信协议(I2C/SPI),并提供事件触发机制(如阈值中断)。架构上分为设备驱动层、IIO核心层和用户空间接口,包含缓冲区管理(环形缓冲)和触发模式(硬件/软件/定时器)。
2026-06-28 23:15:05
191
原创 Android binder(RPC) 通信概念与架构
本文摘要介绍了Android Binder通信机制的核心特点与优势。Binder作为Android核心IPC/RPC机制,通过mmap实现单次数据拷贝,在效率、安全性和易用性上优于传统IPC方式。文章对比了Binder与共享内存、socket等技术的性能差异,分析了Binder的面向对象特性、引用计数、线程池优化等关键设计。同时介绍了Treble架构下的三大Binder域划分,包括framework、hwbinder和vndbinder的用途差异。Binder机制通过内核级仲裁和对象化封装,在保持较高性能的
2026-06-28 23:11:36
299
原创 Linux/Android文件系统分区和构建
1、逻辑上安全隔离不同用途数据(系统/应用/日志),避免互相影响;–> 如同windows上的C/D/E/F盘2、多系统共存(Windows/Linux),单硬盘安装多个操作系统,不同的分区装不同的;3、性能优化(不同分区不同IO策略)4、相对Linux设备、Android上的分区为什么这么多?–> 越复杂的系统分区就越多,系统场景需要更多的精细划分!1)Android分区结构众多,有着复杂且精细控制的分区方案;
2026-04-06 16:55:45
414
原创 Linux文件系统之根文件系统rootfs
1.rootfs是需要Linux系统启动初期能够识别的,因此最好的方案是使用ram filesystem;2.包含基本的目录结构和启动程序;3.Linux设备的rootfs一般作为过渡使用,Android不仅用作启动,还作为文件系统的顶层框架;4.Linux和Android上的rootfs一般为initrd和initramfs (有ramfs和tmpfs),它们都是ram filesystem;5.ramdisk依赖VFS?所有文件系统都需依赖VFS。
2026-04-06 16:50:25
401
原创 Linux文件系统之ext2/ext4和proc
4、临时的文件系统由于读写都在RAM,一般比较简单,具备基本文件系统元素(VFS等的四大要素-superblokc/inode/file/dentry),但没有复杂的IO算法操作;1、文件系统磁盘保留区域: 文件系统在磁盘上保留一段小的连续区域(默认128MB),作为需要快速写入磁盘的“重要”数据的存放地。2、数据写入过程: 一旦重要数据事务完全写入磁盘,将其从磁盘写缓存中刷出,被提交的数据一份记录也被写入日志。3、proc是临时的文件系统,没有存放在磁盘,所有文件是 系统运行起来动态生成的;
2026-04-06 16:45:37
214
原创 Linux文件系统之虚拟文件系统VFS
4)inode 唯一标识一个文件(可以理解为文件头header,索引节点),存储文件的管理元数据 (权限、大小、时间戳) 和数据块指针,文件名和inode通过Dentry关联;不同的文件类型(文件与目录、字符设备、socket文件、fifi管道、硬链接 软链接)有不同的struct,使用的操作接口也不一样;5)file 文件对象,描述进程打开的文件状态,包含文件指针、访问模式,多个进程打开同一文件,会生成多个fd,但共享一个inode;3)内核副本:内核访问文件时会在内存中创建inode结构体副本。
2026-04-06 16:41:01
437
原创 Linux/Android文件系统架构深度剖析
1)文件系统作为内核的五大模块之一1、Linux的运行离不开文件系统;2、驱动开发更离不开文件系统这个框架 (用户态与内核态的交互的基础);2)虽然文件系统实现极其庞大复杂,但实际开发项目中,很少去开发文件系统功能,bring up阶段,我们要做的是几类工作:1、配置文件系统类型;2、配置分区 - GPT、fstab1)增加customer客制化的分区;2)制作烧录bin、升级固件;3、裁剪内容 - 根据存储器件容量调整分区3)文件系统本质是内核和用户空间交互的”中间件“!
2026-04-06 16:19:09
483
1
原创 Android电源管理子系统-软件架构
1)在嵌入式领域中,电源管理是可以说是无处不在,并且遍布整个系统,核心思想动态调配功耗资源,让设备在性能和续航之间取得最佳平衡,从而提供最流畅、持久的用户体验;2)产品场景电池产品考虑得更多-续航是个非常重要的特性;非电池场景相对而言 没那么严格 - 满足能耗法律法规即可;3)站在不同的角度看电源管理从用户功能来看:息屏、STR、非STR从设备角度来看:CPU电源管理、音频子系统的电源管理、WIFI/BT低功耗、各类硬件都基本会有电源管理从BOOT/PM角度来看:开关机、重启。
2026-02-11 00:35:22
603
原创 Android电源管理子系统-现代异构多核的SoC电源硬件架构
1、由于电源架构设计到SOC上的每一个模块,复杂度高,不加以管控则会导致混乱失控,因为务必有巨头来设计对应规范,让软件硬件设计更加规范;比如ARM推出PSCA规范来让硬件和软件设计更加规范!大家都可以参照PSCA来设计自己的ARM体系电源架构;2、规范只是参考(大而全),实际上厂商都会根据自家产品来定制电源架构,总体上会符合规范思想;3、电源管理架构 依赖于硬件设计;1)PCSA 定义了系统控制处理器。
2026-02-11 00:29:19
1081
原创 Andorid camera系统部分
2)Camera 涉及到视频采集端的一系列模块,其中 RAW图像采集、ISP、Scale 模块是必须要有的,只有它们全部组合起来才能够完成完整的最基础的视频采集工作。在此基础上会有其它的扩展项:畸形矫正、Jpeg编码、人脸检测、图像视觉等等;1)在相机领域,User space 这部分完全就是百家争鸣的状态,没有一个统一的标准来限定这部分应该怎么做,而且各家手机厂商系统繁杂的功能需求也导致了架构设计上的不统一。Android使用哪些?Android实现自己的camera HAL。市面上有哪些开源流媒体库?
2026-02-02 16:11:21
260
原创 Linux camera之Media子系统
1)Media子系统 : Linux内核中的一种媒体框架,用于拓扑结构的管理;因为由于音视频的快速发展,涉及的处理模块很多,硬件上可以有各种组合搭配(因为要满足嵌入式领域的各种产品的不同搭配),加上各个厂商的设计也不一样,Subdev子系统和Media子系统就应运而生;2)Subdev和Media适用于什么场景?vin和vout都需要,图像处理的模块太多,并且不同厂商的硬件拓扑结构各不相同,因此需要借助Subdev和Media的帮助;
2026-02-02 16:09:29
835
原创 Linux camera之V4L2子系统详解
1、subdev比较好理解,一个模块对应一个subdev,ov5640摄像头的CCI就可以划分为一个subdev(I2C驱动),对于CSI接口,只需要配置使能MIPI控制器即可工作,后续无需用户介入,因此不需要抽象出subdev;4、UVC框架也用到Subdev,但是没有具体实现,只是预留(因为UVC的模块相对固定,已经有规范约束,因此没有复杂变化拓扑结构)3、试想一下,假如将十几个模块都写在一个驱动里面,将会变得无比庞大且混乱,这就是引入V4L2-subdev的原因!2)APP调用ioctl流程。
2026-02-02 16:04:41
755
原创 Linux V4L2 camera应用程序
1)UVC(USB Video class)相对V4L2的操作,稍微有些不同,有少量UVC的特定操作,但大体都使用V4L2 IOCTL来工作;在了解摄像头内核驱动框架之前,先来看看简单的摄像头应用程序,毕竟内核设计的功能理应服务与应用程序,了解“客户的需求”很有必要,也是首要任务!1)重点在于Buffer的管理,APP作为消费者,摄像头则是生产者;2)基于USB摄像头的。
2026-02-02 15:58:51
452
原创 Android camera之硬件架构
1、MIPI指的是一类接口,针对移动设备(手机/平板等,移动设备的特点是传输距离短、集成度和传输速度尽可能高,必然是因为当前没有合适的选择,才去重新设计!)设计的一系列标准接口,比如MIPI协议的各类接口在手机内部的应用如下:2、MIPI-CSI-2协议是MIPI联盟协议的子协议(常用D-PHY),专门针对高清摄像头芯片的接口而设计,D-PHY如下3、MIPI-CSI-2插槽3)D-PHY接口典型图例如下:摄像头发送数据,它被称为:CSI Transmitter。
2026-02-02 15:55:53
946
原创 Android camera子系统概述
2)这里重点关注摄像头RAW图像数据的获取,由于当代的相机系统图像处理部分硬件(涉及的图像处理模块多则达到十几个)、软件、算法都相当庞大,属于一个专业领域,这里不做深入;图像白平衡、去马赛克、去噪、颜色空间、色彩重建。ISO、快门、光圈值、白平衡。1)从左到右,复杂度递增;1、V4L2框架专栏。1)摄影上常见的术语。
2026-02-02 15:29:41
557
原创 Linux-ARM-Bootloader概述
1)官方源码(与Linux一样):https://elixir.bootlin.com/u-boot/v2025.10/source/Licenses2)由于uboot体量不大,没有成体系的书籍,大多数是工程笔记文档 - 启动分析、移植最易懂的U-Boot概述:https://blog.csdn.net/robin__su/article/details/132509344U-boot官方文档(最佳学习资料):https://docs.u-boot.org/en/latest/
2026-01-25 21:47:36
761
原创 Linux PCI/PCIe子系统深度剖析
1)PCI/PCIe的特点和差别1、PCI是并行接口 - 信号线接口巨多,且高速速度受限,已逐渐给PCIe代替2、PCIe是串行接口(差分)- 支持极高速度,与HDMI/LVDS/TypeC/MIPI一样,差分信号是高速信号实现的必备条件;传输速率:(2.5GT/s, 5GT/s, 8GT/s, 16GT/s)2)哪些设备使用PCI/PCIe?高速设备1、PCI - 传统台式电脑\工业 等旧架构2、PCIe - LAN Card、Graphics Card、WIIF芯片、SSD固态硬盘。
2026-01-25 16:49:58
860
原创 Linux-ARM-GIC interrupt子系统深度剖析
1、从微观的角度来看,中断就是为了能够让CPU处理具有优先级的多种任务,任务的单位是“一条指令”;–> CPU每执行完一条指令,都会去检查是否有中断/异常发生;2、参照人的思维模式,在同时处理多个任务的策略,我们会先给任务排个优先级,然后依次处理;当有更高优先级的任务到来,我们也应该放下当前任务(保存好现场,方便后续快速接入),然后切换到更高优先级的任务处理,以此类推;3、CPU是人所设计,当然也会使用这种机制(中断、异常机制)来处理多种任务;
2026-01-21 10:59:55
846
原创 Android14显示系统 - DRM框架
1)传统的基于FB显示开发已经不能满足当下日益发展的显示硬件,有很多新的硬件技术产生,多层合成(即HWC)、VSYNC(HWC功能之一)、ION/DMA-BUF(android的gralloc)、异步更新、fence机制,这些驱动互相独立存在,开发DRM则为了解决这些问题;统一架构集中管理的需求迫在眉睫;1)假如没有DRM,则kernel下的Display 相关的模块则是独立,应用层使用它们也是互相独立,则会出现以下情况,试想一下,用户层调用将会是多么的繁琐,扩展性也差;
2026-01-09 00:07:58
1157
原创 Android14显示系统框架概述
1、最简单的窗口系统?一个APP+FB显示,这只能做一些简单的显示,比如单片机。2、Android上的窗口系统实现不同平台,不同系统,窗口系统的实现多种多样,应当专注于当前的项目平台,不要迷失方向;Android Framework 实现的SurfaceFlinger、WMS、View、Activity等等都属于窗口系统内容,是Android平台的特有实现,涉及内容生成-产生窗口、多个内容如何呈现 - 窗口组织管理,以便呈现出各种各样的窗口效果。
2026-01-09 00:00:20
1004
原创 Android14显示系统 - HWComposer
【Android】硬件合成器 HWC :https://blog.csdn.net/lijian2017/article/details/147565151Android P 图形显示系统(一)硬件合成HWC2 :https://www.cnblogs.com/hellokitty2/p/17637480.html1)硬件类型:DPU(Data processing Unit) 或 2D渲染芯片,HWC和GPU一样,由于HWC模块有一定的自主性,因此厂家一般闭源;
2026-01-08 23:47:53
1493
原创 Android14显示系统 - VSYNC机制
Android SurfaceFlinger 理解Region:Rect代表一个矩形区域Region它代表屏幕上的一个区域,它是由一个或多个 Rect(矩形)组成的;从上到下,从左到右排序;span也是一个区域的概念,也是由一个或多个 Rect 组成,可以认为它是一种特殊的 Region;示意图。
2026-01-08 23:41:45
460
原创 Android14显示系统 - SurfaceFlinger
由于图形库OpenGL-ES是开源软件,会适应到各种系统(Windows/Android等),图形库产生的数据如何写到特定系统的内存块中呢,OpenGL-ES使用ANativeWindow本地窗口来对接各种平台,Android要使用OpenGL-ES,需要按照OpenGL-ES规范来设计,比如Android Surface需要继承ANativeWindow,实现对应的接口;1、APP向Surface写数据流程:APP->EGL->OpenGL-ES->ANativeWindow ->Surface。
2026-01-08 23:37:47
1034
原创 Android14显示系统 - 开源图形库Mesa3d
1、mesa是一个免费的图形栈,支持多种GL(openGL、Vulkan) 和 平台(Linux、windows、mac),MESA同时实现了Vulkan、OpenGL、OpenGL ES、OpenCL、EGL、WGL、VA、VDPAU等规范,源码目录非常庞大杂乱,实现也十分复杂;2、mesa的作用(本身就是OpenGL ES 、EGL的实现)1)对接各种GPU硬件,将应用层对GL API的调用转换到对硬件GPU的调用上;
2026-01-08 23:27:57
949
原创 Android14显示系统 - 图形库canvas\HWUI\skia
是一个跨平台的 2D 图形渲染库(百万代码行级别),由 Google 开发并维护,在 Android 系统中,Skia 是底层图形渲染的核心引擎,canvas和skia是Android图形库体系中的一部分,硬件渲染才会通过HWUI使用skia,对于图形库,我们把握框架即可。1)canva是java层的一个绘图工具(提供java应用层的绘图接口 - 矩形、三角形),native层实现是skia;Google官网: https://code.google.com/p/skia。注意skia的资料相对匮乏!
2026-01-08 23:18:16
1188
原创 Android 显示系统 - View体系、WMS
SurfaceFlinger是摄像机、View系统是演员、InputManagerService是用户给系统传达命令的通讯设备、AMS是剧本、而WMS则是导演,根据用户的意图和既定的剧本来演绎 “舞台剧”;1)WMS是显示框架中唯一不依赖硬件,纯软件实现的模块,重点是管理窗口的层级和属性 - 简单理解操控窗口的XYZ轴,既然是管理,必然和其它GUI显示相关的组件 密切相关;3)精细的窗口内容则是view,view才是UI内容真正的生产者,Activity和Window都是布局;
2026-01-07 22:41:28
814
原创 Android14显示系统 - ARM GPU完全剖析
1)GPU/CPU基础知识: https://www.cnblogs.com/tully/p/183791142)GPU是一种专门为图像渲染、视频图像编解码的并行计算机任务而设计的芯片;3)GPU器件形态:1、在大型机器上,GPU可以是独立的扩展卡(即我们PC机器常说的显卡,显卡会集成大容量内存)2、在嵌入式领域,也可以集成在SoC(System on a Chip 系统芯片)中3、ARM T950D4平台GPU架构图4、GPU逻辑功能框图。
2026-01-06 21:44:52
1206
原创 Android显示系统 - 图像和图形显示基础
本文系统介绍了Android显示子系统的基础知识,重点区分了图像显示(预存文件)和图形显示(实时渲染)的概念差异。详细阐述了3D图形显示原理、图形处理管线流程以及Linux和Android系统的图形软件栈架构。同时分析了视频编解码机制、2D/3D图形引擎硬件差异,并以RK3568平台为例说明了显示硬件模块的功能分工。最后指出不同应用对显示硬件的需求差异,强调系统需提供多层次的显示能力支持。全文为深入理解Android显示子系统提供了全面的概念框架和技术背景。
2025-12-22 10:11:28
1181
原创 基于Framebuffer的Android LCD驱动详解
本文摘要: 文章系统介绍了LCD驱动开发的核心知识,重点分析了TFT-LCD的硬件原理与驱动实现。内容涵盖:1)LCD显示原理(像素构成、灰阶、数据格式);2)TFT-LCD电路结构(时序控制器TCON、Source驱动IC等关键部件);3)主控与屏幕的接口方案(RGB-TTL、MIPI等);4)Framebuffer显存管理机制。通过时序图详解了显示控制信号(VSYNC/HSYNC/DCLK)的协同工作,并对比了不同接口特性(8080/MCU接口与RGB接口差异)。最后指出LCD驱动属于字符设备,强调内核
2025-12-22 00:52:09
1151
makefile全套资料&lds链接脚本&通用makefile例子.rar
2020-01-19
Altium_designer_summer教材&&pcb设计教程.rar
2020-04-07
sourceInsight3.5&4.0操作手册.rar
2020-07-19
cmake实践&中文手册.rar
2020-10-28
SourceInsight3.5看代码神器+破解文件
2018-02-21
编写linux内核模块时 C库函数不能用了,需要用到字符操作库函数怎么办?
2020-09-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅