无标题
https://doc.embedfire.com/linux/rk356x/linux_base/zh/latest/linux_app/drm/drm.html 介绍DRM的图像系统可以分为两部分 应用层– libdrm 内核驱动层— GEM, KMS libdrm: 对底层接口进行封装,向上层提供通用的API接口,主要是对各种IOCTL接口进行封装。 KMS(Kernel Mode Setting): 即Mode setting:更新画面和设置显示参数。 更新画面:显示buffer的切换,多图层的合成方式,以及每个图层的显示位置。 设置显示参数:包括分辨率、刷新率、电源状态(休眠唤醒)等。 GEM(Graphic Execution Manager): 主要负责显示buffer的分配和释放,内存管理与同步。 与fb区别 DRM Framebuffer一片存放图像的内存区域, 且需要设置图像的格式(RGB888,YUV,C8等)以及画布的大小 CRTC阴极射线显像管控制器——...
serdes
1 介绍加串器解串器是一种主流的时分多路复用点对点(P2P)的串行通信技术 通过将时间划分为多个时间片(时隙),每个时间片由不同信号轮流占用 将发送端多路低速并行信号转换为高速串行信号,经过光缆或铜线等媒体在接收端变为低速并行信号 大大减少两端排线数量,减少所需的传输信道和器件引脚数目,提升信号的传输速度,从而大大降低通信成本。 背景: a)、时钟到达两个芯片的传播延时不相等(clock skew) b)、并行数据各个bit的传播延时不相等(data skew) c)、时钟的传播延时和数据的传播延时不一致(skew between data and clock)
设备树
https://blog.csdn.net/m0_74712453/article/details/145589379 介绍每一款开发板需要修改许多c文件代码去适配,这些代码文件放在arch/arm/mxch-xxx目录总中,使得内核越来越臃肿;引入设备树,将板级信息的文件与linux内核代码分离,描述板子的细节,比如CPU 数量、外设基地址、总线设备等,放在dts这种数据结构中,用到时dts将硬件细节传输给内核 dts不是直接和内核联系,而是通过bootloader将编译后的文件传输给kernel DTS、DTSI、DTB DTS:设备树描述文件为.dts格式,一般一个dts对应一个arm设备,放置在内核的arch/arm/boot/dts/目录中 DTSI:...
edid
EDID介绍EDID 是显示器给主机发的 “能力说明书”,核心是告诉主机 “我能接收什么格式的视频信号”,避免主机发一个显示器处理不了的信号(比如黑屏、画面撕裂)。 本质是显示器内部一个小存储芯片(通常是 EEPROM)里的二进制数据。 EDID 里包含 3 类关键信息: 基本信息:显示器品牌、型号、出厂日期(比如 “Dell U2723QE”); 显示能力:支持的分辨率(1080P/2K/4K)、刷新率(60Hz/144Hz)、色域(sRGB/DCI-P3); 时序参数:这是核心,决定 “视频信号怎么传、显示器怎么扫” 时序时序的本质是 “主机发信号的节奏” 和 “显示器扫画面的节奏” 的匹配规则。 显示器怎么把 “1920x1080” 的画面显示出来? 是一次性把所有像素怼到屏幕上,而是像 “看书一行一行扫”,先扫第一行所有像素,再扫第二行,直到扫完最后一行(这叫 “逐行扫描”);扫完一整屏(一帧)后,再从头开始扫下一帧,反复循环。 时序参数就是规定 “扫一行 / 一帧的具体时间分配”,分为...
工作队列
工作队列的介绍和使用:https://blog.csdn.net/xiaoheshang_123/article/details/147374327 详解:https://devpress.csdn.net/linux/66d02dcbc618435984a3a31b.html
驱动学习
...
hot100
力扣热题100题型类别心得: 1、哈希表:哈希表的使用是为了O(1)获取已经遍历过的信息 如两数之和=target,暴力直接两个for循环去找到两个和为目标值的数,也就是遍历数组,拿当前数又去遍历一遍后面的数,实际上这些数的信息在第一次遍历时就已经得到了,暴力解法没有保留这些信息以至于每次都要重新获取;哈希表让机器有了信息记忆。我们得出减少一层循环,优化时间复杂度的一个办法就是记忆已经遍历过的信息 再比如要求最长连续序列,就要从最小值开始数最长的连续序列,而这恰好是数组排序O(n^2),获取连续序列也就是要知道这个数的上一个和下一个,而通过两个哈希表就可以记录这段连续序列的左边界和右边界,同时更新左右边界 2、双指针 双指针有几种常见的题型,同向双指针,相向双指针,滑动窗口~ 相向双指针常见于求取一段范围中的值。例如盛水容器和接雨水,就是木桶问题,盛水的多少决定于最短木板,不断更新最短的木板即可 同双双指针常见快慢指针,追及问题等 滑动窗口一般分为定长和不定长,一般我都用不定长的方式来写,然后加上当r-l等于值时就取值
linux0.11
第一部分:进入内核前的苦力活 第二部分:大战前期的初始化工作 第三部分:一个新进程的诞生 第四部分:shell 程序的到来 第五部分:从一个命令的执行看操作系统各模块的运作 第六部分:操作系统哲学与思想 开机主板上写死的BIOS程序将启动区(1扇区)的前512字节放到内存0x7c00中 0盘0道1扇区的最后两个字节为0x55和0xaa,就是启动区 这个启动区存储的就是用汇编写的bootsect.s通过编译的bootsect二进制文件 BIOS干两件事:1、加载内存;2、跳转到该内存地址 bootsect把内核搬到内存 12mov ax,0x07c0mov ds,ax 设置段基地址,早期8086总线20位,物理地址有20位,但是寄存器只有16位,为了使用完物理地址,使用分段存储 物理地址 = 段基址 << 4 +...
asio
介绍传统的socket编程如下: 1、通过一个socket地址结构绑定了ip和地址以及协议族 12345678const char *ip = argv[1];int port = atoi(argv[2]);struct sockaddr_in server_address;bzero(&server_address, sizeof(server_address));server_address.sin_family = AF_INET;server_address.sin_port = htons(port);inet_pton(AF_INET, ip, &server_address.sin_addr); 2、服务端调用获取sockfd,通过socket –》 bind –》 listen 获取连接 123456int sockfd = socket(PF_INET, SOCK_STREAM, 0);assert(sockfd >= 0);int ret = bind(sockfd, (struct sockaddr...
面试题
c++枚举1、C 枚举类型支持不同类型枚举值之间赋值、以及数字赋值、比较,并且具有外层作用域。 2、C++ 中枚举不允许不同类型的值给枚举类型变量赋值,但仍然支持不同类型之间枚举进行比较,枚举符号常量具有外层作用域。 3、C++...







