- 博客(148)
- 资源 (12)
- 问答 (1)
- 收藏
- 关注
原创 Linux内存管理深度理解
这种做法的唯一缺点便是内核空间和用户空间均变小了。按照虚拟化的定义,虚拟内存与物理内存的映射关系是非线性的、随机的,但这种随机映射,在访问内存效率上会低一些,由于内核在系统运行周期是一个最高等级的常驻“进程”,并且资源是紧张的,因此内核建立一套自己”特殊“的映射规则,大大增加了软件复杂度,但为了提高效率,软件如何复杂都是有意义的!2、换言之,BSS段和数据段本质上可以不划分,软件层面的优化措施,一来节省文件空间,二来可以统一初始化,提升效率,对于嵌入式系统而言,资源就是成本,成本就是竞争力,是有必要的;
2025-10-06 10:33:09
1000
原创 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
2463
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
40879
16
原创 Linux/Android文件系统分区和构建
1、逻辑上安全隔离不同用途数据(系统/应用/日志),避免互相影响;–> 如同windows上的C/D/E/F盘2、多系统共存(Windows/Linux),单硬盘安装多个操作系统,不同的分区装不同的;3、性能优化(不同分区不同IO策略)4、相对Linux设备、Android上的分区为什么这么多?–> 越复杂的系统分区就越多,系统场景需要更多的精细划分!1)Android分区结构众多,有着复杂且精细控制的分区方案;
2026-04-06 16:55:45
289
原创 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
323
原创 Linux文件系统之ext2/ext4和proc
4、临时的文件系统由于读写都在RAM,一般比较简单,具备基本文件系统元素(VFS等的四大要素-superblokc/inode/file/dentry),但没有复杂的IO算法操作;1、文件系统磁盘保留区域: 文件系统在磁盘上保留一段小的连续区域(默认128MB),作为需要快速写入磁盘的“重要”数据的存放地。2、数据写入过程: 一旦重要数据事务完全写入磁盘,将其从磁盘写缓存中刷出,被提交的数据一份记录也被写入日志。3、proc是临时的文件系统,没有存放在磁盘,所有文件是 系统运行起来动态生成的;
2026-04-06 16:45:37
159
原创 Linux文件系统之虚拟文件系统VFS
4)inode 唯一标识一个文件(可以理解为文件头header,索引节点),存储文件的管理元数据 (权限、大小、时间戳) 和数据块指针,文件名和inode通过Dentry关联;不同的文件类型(文件与目录、字符设备、socket文件、fifi管道、硬链接 软链接)有不同的struct,使用的操作接口也不一样;5)file 文件对象,描述进程打开的文件状态,包含文件指针、访问模式,多个进程打开同一文件,会生成多个fd,但共享一个inode;3)内核副本:内核访问文件时会在内存中创建inode结构体副本。
2026-04-06 16:41:01
358
原创 Linux/Android文件系统架构深度剖析
1)文件系统作为内核的五大模块之一1、Linux的运行离不开文件系统;2、驱动开发更离不开文件系统这个框架 (用户态与内核态的交互的基础);2)虽然文件系统实现极其庞大复杂,但实际开发项目中,很少去开发文件系统功能,bring up阶段,我们要做的是几类工作:1、配置文件系统类型;2、配置分区 - GPT、fstab1)增加customer客制化的分区;2)制作烧录bin、升级固件;3、裁剪内容 - 根据存储器件容量调整分区3)文件系统本质是内核和用户空间交互的”中间件“!
2026-04-06 16:19:09
389
1
原创 Android电源管理子系统-软件架构
1)在嵌入式领域中,电源管理是可以说是无处不在,并且遍布整个系统,核心思想动态调配功耗资源,让设备在性能和续航之间取得最佳平衡,从而提供最流畅、持久的用户体验;2)产品场景电池产品考虑得更多-续航是个非常重要的特性;非电池场景相对而言 没那么严格 - 满足能耗法律法规即可;3)站在不同的角度看电源管理从用户功能来看:息屏、STR、非STR从设备角度来看:CPU电源管理、音频子系统的电源管理、WIFI/BT低功耗、各类硬件都基本会有电源管理从BOOT/PM角度来看:开关机、重启。
2026-02-11 00:35:22
560
原创 Android电源管理子系统-现代异构多核的SoC电源硬件架构
1、由于电源架构设计到SOC上的每一个模块,复杂度高,不加以管控则会导致混乱失控,因为务必有巨头来设计对应规范,让软件硬件设计更加规范;比如ARM推出PSCA规范来让硬件和软件设计更加规范!大家都可以参照PSCA来设计自己的ARM体系电源架构;2、规范只是参考(大而全),实际上厂商都会根据自家产品来定制电源架构,总体上会符合规范思想;3、电源管理架构 依赖于硬件设计;1)PCSA 定义了系统控制处理器。
2026-02-11 00:29:19
974
原创 Andorid camera系统部分
2)Camera 涉及到视频采集端的一系列模块,其中 RAW图像采集、ISP、Scale 模块是必须要有的,只有它们全部组合起来才能够完成完整的最基础的视频采集工作。在此基础上会有其它的扩展项:畸形矫正、Jpeg编码、人脸检测、图像视觉等等;1)在相机领域,User space 这部分完全就是百家争鸣的状态,没有一个统一的标准来限定这部分应该怎么做,而且各家手机厂商系统繁杂的功能需求也导致了架构设计上的不统一。Android使用哪些?Android实现自己的camera HAL。市面上有哪些开源流媒体库?
2026-02-02 16:11:21
238
原创 Linux camera之Media子系统
1)Media子系统 : Linux内核中的一种媒体框架,用于拓扑结构的管理;因为由于音视频的快速发展,涉及的处理模块很多,硬件上可以有各种组合搭配(因为要满足嵌入式领域的各种产品的不同搭配),加上各个厂商的设计也不一样,Subdev子系统和Media子系统就应运而生;2)Subdev和Media适用于什么场景?vin和vout都需要,图像处理的模块太多,并且不同厂商的硬件拓扑结构各不相同,因此需要借助Subdev和Media的帮助;
2026-02-02 16:09:29
745
原创 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
550
原创 Linux V4L2 camera应用程序
1)UVC(USB Video class)相对V4L2的操作,稍微有些不同,有少量UVC的特定操作,但大体都使用V4L2 IOCTL来工作;在了解摄像头内核驱动框架之前,先来看看简单的摄像头应用程序,毕竟内核设计的功能理应服务与应用程序,了解“客户的需求”很有必要,也是首要任务!1)重点在于Buffer的管理,APP作为消费者,摄像头则是生产者;2)基于USB摄像头的。
2026-02-02 15:58:51
424
原创 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
871
原创 Android camera子系统概述
2)这里重点关注摄像头RAW图像数据的获取,由于当代的相机系统图像处理部分硬件(涉及的图像处理模块多则达到十几个)、软件、算法都相当庞大,属于一个专业领域,这里不做深入;图像白平衡、去马赛克、去噪、颜色空间、色彩重建。ISO、快门、光圈值、白平衡。1)从左到右,复杂度递增;1、V4L2框架专栏。1)摄影上常见的术语。
2026-02-02 15:29:41
529
原创 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
682
原创 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
742
原创 Linux-ARM-GIC interrupt子系统深度剖析
1、从微观的角度来看,中断就是为了能够让CPU处理具有优先级的多种任务,任务的单位是“一条指令”;–> CPU每执行完一条指令,都会去检查是否有中断/异常发生;2、参照人的思维模式,在同时处理多个任务的策略,我们会先给任务排个优先级,然后依次处理;当有更高优先级的任务到来,我们也应该放下当前任务(保存好现场,方便后续快速接入),然后切换到更高优先级的任务处理,以此类推;3、CPU是人所设计,当然也会使用这种机制(中断、异常机制)来处理多种任务;
2026-01-21 10:59:55
747
原创 Android14显示系统 - DRM框架
1)传统的基于FB显示开发已经不能满足当下日益发展的显示硬件,有很多新的硬件技术产生,多层合成(即HWC)、VSYNC(HWC功能之一)、ION/DMA-BUF(android的gralloc)、异步更新、fence机制,这些驱动互相独立存在,开发DRM则为了解决这些问题;统一架构集中管理的需求迫在眉睫;1)假如没有DRM,则kernel下的Display 相关的模块则是独立,应用层使用它们也是互相独立,则会出现以下情况,试想一下,用户层调用将会是多么的繁琐,扩展性也差;
2026-01-09 00:07:58
1045
原创 Android14显示系统框架概述
1、最简单的窗口系统?一个APP+FB显示,这只能做一些简单的显示,比如单片机。2、Android上的窗口系统实现不同平台,不同系统,窗口系统的实现多种多样,应当专注于当前的项目平台,不要迷失方向;Android Framework 实现的SurfaceFlinger、WMS、View、Activity等等都属于窗口系统内容,是Android平台的特有实现,涉及内容生成-产生窗口、多个内容如何呈现 - 窗口组织管理,以便呈现出各种各样的窗口效果。
2026-01-09 00:00:20
921
原创 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
1308
原创 Android14显示系统 - VSYNC机制
Android SurfaceFlinger 理解Region:Rect代表一个矩形区域Region它代表屏幕上的一个区域,它是由一个或多个 Rect(矩形)组成的;从上到下,从左到右排序;span也是一个区域的概念,也是由一个或多个 Rect 组成,可以认为它是一种特殊的 Region;示意图。
2026-01-08 23:41:45
417
原创 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
963
原创 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
861
原创 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
1051
原创 Android 显示系统 - View体系、WMS
SurfaceFlinger是摄像机、View系统是演员、InputManagerService是用户给系统传达命令的通讯设备、AMS是剧本、而WMS则是导演,根据用户的意图和既定的剧本来演绎 “舞台剧”;1)WMS是显示框架中唯一不依赖硬件,纯软件实现的模块,重点是管理窗口的层级和属性 - 简单理解操控窗口的XYZ轴,既然是管理,必然和其它GUI显示相关的组件 密切相关;3)精细的窗口内容则是view,view才是UI内容真正的生产者,Activity和Window都是布局;
2026-01-07 22:41:28
714
原创 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
1130
原创 Android显示系统 - 图像和图形显示基础
本文系统介绍了Android显示子系统的基础知识,重点区分了图像显示(预存文件)和图形显示(实时渲染)的概念差异。详细阐述了3D图形显示原理、图形处理管线流程以及Linux和Android系统的图形软件栈架构。同时分析了视频编解码机制、2D/3D图形引擎硬件差异,并以RK3568平台为例说明了显示硬件模块的功能分工。最后指出不同应用对显示硬件的需求差异,强调系统需提供多层次的显示能力支持。全文为深入理解Android显示子系统提供了全面的概念框架和技术背景。
2025-12-22 10:11:28
1099
原创 基于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
1090
原创 深入Linux内核之块设备子系统
1)块设备驱动模型(Block Device Driver Model):适用于块设备驱动的模型。驱动程序通过块设备驱动接口(Block Device Driver Interface)与块设备进行通信。2)块设备基本都很稳定,为什么很少出现问题?块设备的实现主体是内核提供,并且硬件相对规范成熟,基本能自适应?3)纷繁复杂的储存器件,如何做到统一?
2025-09-16 01:31:13
1114
原创 深度剖析Linux内核无线子系统架构
1、Network configuration - 网络协议栈实现//IP层实现//无线栈实现2、Network device configuration - 网络设备驱动程序实现1、WIFI驱动子系统 也是基于网络设备(net_driver),属于扩展子系统;2、如何学习无线子系统?1)基于传统linux网络子系统进行差异化学习;linux网络子系统本身也很庞大复杂,先消化这块,否则再叠加无线部分,难度会非常大2)无线子系统 较于有线子系统 有哪些新的模块?
2025-09-12 00:40:48
2435
原创 Android网络之WIFI技术网络模型概述
1、IEEE802家族IEEE802家族是由一些列局域网(Local area network,简称LAN)技术规范所组成的,802.11是其中之一。IEEE802规范的重心放在OSI模型的最下面两层,因为它们同时涵盖了物理层(physical,简称PHY)与数据链路层(data link)组件。2、为啥IEEE802重点是定义数据链路层和物理层?与OSI模型的关联?
2025-09-07 20:08:22
1223
原创 Linux网络设备驱动程序深度理解
1、网络设备驱动模型(Network Device Driver Model):适用于网络设备驱动的模型。驱动程序通过网络设备驱动接口(Network Device Driver Interface)与网络设备进行通信。2、有了字符设备驱动程序的基础,学习网络驱动程序应该进行差异化学习线路3、网络上很多教程都只是简单介绍?由于linux网络协议栈内容非常庞大,要讲清楚极其困难,系统协议栈已经非常稳定和成熟,对于新增一个网络设备驱动程序,只需要实现对应接口即可。4、多个应用同时申请网络数据,怎么区分?
2025-09-07 17:54:06
1062
原创 Linux内核网络子系统框架介绍
1、Linux内核网络协议栈的 实现很庞大复杂,专业的网络工程师才需要精通,驱动工程师专注于 根据驱动模型 开发对应驱动即可,网络协议栈底下有很多子系统(IPV4路由选择子系统、邻接子系统、Netfilter子系统、Linux无线子系统、InfiniBand子系统、蓝牙子系统、NFC子系统、PCI子系统),无线子系统只是其一。2、linux内核网络栈实现了计算机网络协议中的三个层级1)网络设备驱动层 就位于数据链路层,网络设备驱动程序 将接收来自网络层的数据包sk_buff或传递给网络层;
2025-09-06 12:37:57
1041
原创 Linux总线设备驱动模型深度理解
物理上的总线是一堆电路线路连线(比如I2C总线、SPI总线、USB总线等等),软件上用来描述控制器与外设的连接关系,内核使用Bus结构体来描述这种连接关系,本质上总线Bus只是一个数据结构,它的名字用对应通信接口命名罢了,而一些驱动程序没有实际对应的通信接口(比如GPIO),那就用platform来命名吧,我们冠名为虚拟的总线!2、接下来看总线设备驱动模型和各类子系统(以platform设备驱动为例子,platform可以理解为通用简单的总线设备驱动的实现之一)的实现细节;2、总线设备驱动 的含义?
2025-08-23 23:25:14
1084
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订阅