- 博客(131)
- 资源 (12)
- 问答 (1)
- 收藏
- 关注
原创 Linux内存管理深度理解
这种做法的唯一缺点便是内核空间和用户空间均变小了。按照虚拟化的定义,虚拟内存与物理内存的映射关系是非线性的、随机的,但这种随机映射,在访问内存效率上会低一些,由于内核在系统运行周期是一个最高等级的常驻“进程”,并且资源是紧张的,因此内核建立一套自己”特殊“的映射规则,大大增加了软件复杂度,但为了提高效率,软件如何复杂都是有意义的!2、换言之,BSS段和数据段本质上可以不划分,软件层面的优化措施,一来节省文件空间,二来可以统一初始化,提升效率,对于嵌入式系统而言,资源就是成本,成本就是竞争力,是有必要的;
2025-10-06 10:33:09
899
原创 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
2378
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
40204
16
原创 Android14显示系统 - DRM框架
1)传统的基于FB显示开发已经不能满足当下日益发展的显示硬件,有很多新的硬件技术产生,多层合成(即HWC)、VSYNC(HWC功能之一)、ION/DMA-BUF(android的gralloc)、异步更新、fence机制,这些驱动互相独立存在,开发DRM则为了解决这些问题;统一架构集中管理的需求迫在眉睫;1)假如没有DRM,则kernel下的Display 相关的模块则是独立,应用层使用它们也是互相独立,则会出现以下情况,试想一下,用户层调用将会是多么的繁琐,扩展性也差;
2026-01-09 00:07:58
303
原创 Android14显示系统框架概述
1、最简单的窗口系统?一个APP+FB显示,这只能做一些简单的显示,比如单片机。2、Android上的窗口系统实现不同平台,不同系统,窗口系统的实现多种多样,应当专注于当前的项目平台,不要迷失方向;Android Framework 实现的SurfaceFlinger、WMS、View、Activity等等都属于窗口系统内容,是Android平台的特有实现,涉及内容生成-产生窗口、多个内容如何呈现 - 窗口组织管理,以便呈现出各种各样的窗口效果。
2026-01-09 00:00:20
370
原创 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
511
原创 Android14显示系统 - VSYNC机制
Android SurfaceFlinger 理解Region:Rect代表一个矩形区域Region它代表屏幕上的一个区域,它是由一个或多个 Rect(矩形)组成的;从上到下,从左到右排序;span也是一个区域的概念,也是由一个或多个 Rect 组成,可以认为它是一种特殊的 Region;示意图。
2026-01-08 23:41:45
86
原创 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
344
原创 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
321
原创 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
635
原创 Android 显示系统 - View体系、WMS
SurfaceFlinger是摄像机、View系统是演员、InputManagerService是用户给系统传达命令的通讯设备、AMS是剧本、而WMS则是导演,根据用户的意图和既定的剧本来演绎 “舞台剧”;1)WMS是显示框架中唯一不依赖硬件,纯软件实现的模块,重点是管理窗口的层级和属性 - 简单理解操控窗口的XYZ轴,既然是管理,必然和其它GUI显示相关的组件 密切相关;3)精细的窗口内容则是view,view才是UI内容真正的生产者,Activity和Window都是布局;
2026-01-07 22:41:28
279
原创 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
748
原创 Android显示系统 - 图像和图形显示基础
本文系统介绍了Android显示子系统的基础知识,重点区分了图像显示(预存文件)和图形显示(实时渲染)的概念差异。详细阐述了3D图形显示原理、图形处理管线流程以及Linux和Android系统的图形软件栈架构。同时分析了视频编解码机制、2D/3D图形引擎硬件差异,并以RK3568平台为例说明了显示硬件模块的功能分工。最后指出不同应用对显示硬件的需求差异,强调系统需提供多层次的显示能力支持。全文为深入理解Android显示子系统提供了全面的概念框架和技术背景。
2025-12-22 10:11:28
1004
原创 基于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
1000
原创 深入Linux内核之块设备子系统
1)块设备驱动模型(Block Device Driver Model):适用于块设备驱动的模型。驱动程序通过块设备驱动接口(Block Device Driver Interface)与块设备进行通信。2)块设备基本都很稳定,为什么很少出现问题?块设备的实现主体是内核提供,并且硬件相对规范成熟,基本能自适应?3)纷繁复杂的储存器件,如何做到统一?
2025-09-16 01:31:13
1020
原创 深度剖析Linux内核无线子系统架构
1、Network configuration - 网络协议栈实现//IP层实现//无线栈实现2、Network device configuration - 网络设备驱动程序实现1、WIFI驱动子系统 也是基于网络设备(net_driver),属于扩展子系统;2、如何学习无线子系统?1)基于传统linux网络子系统进行差异化学习;linux网络子系统本身也很庞大复杂,先消化这块,否则再叠加无线部分,难度会非常大2)无线子系统 较于有线子系统 有哪些新的模块?
2025-09-12 00:40:48
2246
原创 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
1164
原创 Linux网络设备驱动程序深度理解
1、网络设备驱动模型(Network Device Driver Model):适用于网络设备驱动的模型。驱动程序通过网络设备驱动接口(Network Device Driver Interface)与网络设备进行通信。2、有了字符设备驱动程序的基础,学习网络驱动程序应该进行差异化学习线路3、网络上很多教程都只是简单介绍?由于linux网络协议栈内容非常庞大,要讲清楚极其困难,系统协议栈已经非常稳定和成熟,对于新增一个网络设备驱动程序,只需要实现对应接口即可。4、多个应用同时申请网络数据,怎么区分?
2025-09-07 17:54:06
1008
原创 Linux内核网络子系统框架介绍
1、Linux内核网络协议栈的 实现很庞大复杂,专业的网络工程师才需要精通,驱动工程师专注于 根据驱动模型 开发对应驱动即可,网络协议栈底下有很多子系统(IPV4路由选择子系统、邻接子系统、Netfilter子系统、Linux无线子系统、InfiniBand子系统、蓝牙子系统、NFC子系统、PCI子系统),无线子系统只是其一。2、linux内核网络栈实现了计算机网络协议中的三个层级1)网络设备驱动层 就位于数据链路层,网络设备驱动程序 将接收来自网络层的数据包sk_buff或传递给网络层;
2025-09-06 12:37:57
977
原创 Linux总线设备驱动模型深度理解
物理上的总线是一堆电路线路连线(比如I2C总线、SPI总线、USB总线等等),软件上用来描述控制器与外设的连接关系,内核使用Bus结构体来描述这种连接关系,本质上总线Bus只是一个数据结构,它的名字用对应通信接口命名罢了,而一些驱动程序没有实际对应的通信接口(比如GPIO),那就用platform来命名吧,我们冠名为虚拟的总线!2、接下来看总线设备驱动模型和各类子系统(以platform设备驱动为例子,platform可以理解为通用简单的总线设备驱动的实现之一)的实现细节;2、总线设备驱动 的含义?
2025-08-23 23:25:14
1009
原创 Linux统一的设备模型深度理解
1)使用文件目录、列表来管理设备,将设备信息都映射成文件;2)文件内容是动态更新的,设备文件也随系统进行增删改查;1)kobject相当于一个”基类“,kset/ktype辅助基类;2)kobject、kset、ktype共同作用,将设备组织成一个关系模型;3)内核的组织有了,如何将这些关系网,也呈现给用户层?答案是通过sysfs,将这个关系模型以目录文件呈现下面来逐一介绍1)术语2)源码目录3)数据结构#endifchar *buf);
2025-08-23 01:21:08
1102
原创 Linux设备树Device Tree深度理解
1、设备树本身不复杂,就是一套机制,实现数据分离(本质上与ini是一致的),会用即可(类似JNI/HAL类型);2、类似makefile/cmake/Android.mk,还是有大量 常规语法/特殊语法 - 代码实现解析,需要理解背诵;3、专业术语fdt : flattened(解析展开) device treecompatible属性 : 兼容的?指的是兼容性?兼容一个或多个,按顺序排列4、boot下如何使用dtb?需要移植fdt库,方法如下,与内核的一致。
2025-08-20 01:53:43
879
原创 一文搞懂Linux字符设备驱动程序
编写Linux字符设备驱动相对简单,但由于存在多个版本,令人混淆,下面来一一梳理讲解,彻底搞清楚字符设备驱动1、Linux字符设备驱动Linux驱动实践:你知道【字符设备驱动程序】的两种写法吗?Linux驱动实践:一步一步编写字符设备驱动程序(新API) : https://cloud.tencent.com/developer/article/19091532、实现一个字符设备驱动程序大致的步骤1)构造file_operations;2)告诉内核 register_chrdev(一个数组项里)
2025-08-20 00:51:16
1001
原创 Linux内核驱动程序框架介绍
注意:研究内核驱动,必然要对内核有一定的了解,驱动程序与其它子系统有或多或少的交集!1)设备驱动程序的框架概述1、提供一套框架罢了,真正开发时,使用 能够与内核的其它部分无缝结合的标准API 即可完成驱动任务;2)linux驱动(.ko)基本框架 :2)设备驱动的设计思想掌握设计思想和背景让我们能够更好地理解 驱动程序框架。
2025-08-20 00:22:10
750
原创 Linux内核综述-对各个关键技术进行深度分析
1)linux内核本质是什么?1、内核就是一个庞大且独立的 “裸机” 程序!- 记住这点很重要,贯穿整个内核的学习;2、内核本身就是一个完整独立的“进程” - 不依赖外部,也就意味着任意一个错误导致此“程序”崩溃,即系统崩溃!3、内核中的通信方式还是比较单一 - 基本都是依赖函数间调用,因为内核本身就是一个完整“进程”,当然支持线程kthread4、所谓的操作系统 - 无非就是从无序到有序!2)为什么linux内核生命力如此顽强?
2025-08-19 01:49:23
1025
原创 Android14音频子系统-Framework分析
先来看看一个APP播放多媒体音频示例程序// 音频采样率// 音频通道配置// 音频格式// 创建 AudioTrack 对象.build();// 生成示例音频数据(1秒 440Hz 的正弦波)// 秒// Hz// 最大振幅(16位PCM)i++) {// 开始播放// 将音频数据写入 AudioTrack// 停止播放并释放资源APP播放音频流只需要简单的几个步骤疑问:1、音频数据格式 谁来解析处理?编解码模块(Codec)负责处理。
2025-06-26 10:25:42
1328
原创 Android14-HAL分析
1、HIDL HAL是什么?1)HIDL全称HAL interface definition language,而HIDL HAL则为,使用HIDL语言描述HAL层的对外接口,2)注意HIDL语言只是一个Google提供的辅助工具,必须使用?不是,自己也可以自行实现所有代码2、与传统HAL的区别?1)传统HAL:用户<->HAL<->驱动2)HIDL HAL:用户(client) <-> HIDL(hidl-gen) <-> HAL(service) <-> 驱动。
2025-06-26 00:05:30
1444
原创 Android14音频子系统-Audio HAL分析
1、回顾HAL、tinyalsa与linux driver的关系2、与AudioFlinger的关系3、1、如何判断当前平台用的是哪个库?可尝试注入错误代码,单编 验证一下 > 但编了也不一定会用!2、hal的作用?隐藏了什么细节,还是说只是为了符合Android框架而写?>>播放数据之前的,设置的步骤和参数就是厂家要保护的内容3、HAL如何对接tinyalsa?把tinyalsa当做一个库接口使用即可。
2025-06-25 23:43:09
1430
原创 Android14音频子系统-ASoC-ALSA之DAPM电源管理子系统
ALSA声卡驱动中的DAPM详解之一 :https://blog.csdn.net/DroidPhone/article/details/12793293基本概念>>可以当做ASoc-ALSA系统下的一个子系统,构造也是相当复杂,但声卡驱动需要熟悉此框架,使用其框架的宏和API来构造(电源)寄存器对象;产生的背景:1)ASOC框架中动态音频电源管理子系统 - 设计的目的是省电2)同时也达到减少暴露给应用的操作(寄存器操作)效果 - 比如封装打开某个input通道、MUX、mixer操作等等;
2025-06-25 23:32:03
895
原创 Android14音频子系统-Linux音频子系统ASoC-ALSA
1、linux ALSA ASoc架构: https://blog.csdn.net/weixin_45437140/article/details/1286375212、alsa框架介绍:https://blog.51cto.com/u_93011/8854396 原文(付费):https://blog.csdn.net/RadianceBlau/article/details/79432661。
2025-06-25 23:25:48
1195
原创 Android14音频子系统-Linux音频子系统ALSA
面对多种多样的codec芯片和总线,音频子系统需要做的就是兼容所有设备,换做是你的话该怎么设计?1、ALSA如何统一规范?1)ALSA驱动本质上是对字符设备驱动的进一步封装,由于抽象更统一的接口使其变得复杂一些;2)封装字符设备的操作,向上统一提供接口,驱动程序必须使用其提供的API注册声卡设备;>>三层file_operations结构:顶层->控制->playback/capture3)使用ALSA的大部分是PCI设备,即个人电脑上的声卡;
2025-06-25 23:17:02
1444
2
原创 Android14音频子系统 - 系统框架概述
2、Native层的AudioFlinger管理着系统中的输入输出音频流,并承担着音频数据的混合,通过读写Audio硬件实现音频数据的输入输出功能;3)由于Android更新相当频繁,需要设计统一的接口(audio_hw_device、audio_stream_out、audio_stream_in);厂商提供的HAL库:audio.a2dp.default.so、audio.primary.default.so、audio.usb.default.so。1、hal库(Android8以下);
2025-06-25 22:59:23
2604
原创 如何在Android系统上单编ko?
/$(CROSS_COMPILE)strip --strip-debug 裁剪ko,去掉冗余信息,由于Android系统会统一后处理,不会体现在单个模块的mk里,需要加上。1、完整编译kernel的环境,驱动编译需要依赖kernel的生成物;1、在Android系统编译LOG上找到编译器信息(一般都会打印出来)3)进入docker,在此makefile目录下敲make。2、基于源MK构造 可独立运行的makefile。3、将所需环境变量配置在当前mk里;2、编译器及编译选项;
2025-04-10 20:40:04
970
原创 深度学习之学习路线
文章目录一、机器学习的关联技术二、机器学习的基本概念三、机器学习的应用现状四、机器学习学习资料一、机器学习的关联技术1、二、机器学习的基本概念1、三、机器学习的应用现状1、四、机器学习学习资料1、...
2022-02-16 22:53:43
5578
原创 机器学习之绪论
文章目录一、机器学习的关联技术二、机器学习的基本概念三、机器学习的应用现状四、机器学习学习资料一、机器学习的关联技术1、二、机器学习的基本概念1、三、机器学习的应用现状1、四、机器学习学习资料1、...
2022-02-16 22:52:38
601
原创 计算机中各个重要长度指标分析
学习计算机中各类长度指标很容易混淆,梳理总结如下:看图理解1、机器字长:简称字长,计算机一次能处理的最大二进制数据的位数,如32/64位系统指的就是机器字长,一般与内部寄存器(ACC、MQ、通用寄存器等)和ALU数据通路相等;2、存储字长:一个存储单元所储存的二进制数据的长度,由MDR的位数决定;3、指令字长:一个指令字中包含二进制数据的位数,由操作码+地址码位数决定,一般取存储字长的整数倍;4、PC位数:一般由MAR的位数决定;以上指标都必须是字节的整数倍;...
2022-01-04 21:08:41
3579
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订阅