- 博客(109)
- 资源 (4)
- 收藏
- 关注
原创 常见的TSN网络协议之间的区别
这些协议之间有相似性,又有不同点,比如Avnu automotive 协议,继承于2011-as,在2011-as的基础上,针对automotive 的场景做了一些优化。目前TSN的协议有不少规范,有1588,2011-as,2022-as, 802.1DG, Avnu automotive 等。这些协议从属于不通的机构以及标准,但是都属于TSN 协议,相互之间也有千丝万缕的联系。
2024-03-07 09:32:44
649
1
原创 H264 编码原理
由国际标准组织机构(ISO)下属的运动图象专家组(MPEG)和国际电传视讯联盟远程通信标准化组织(ITU-T)开发的系列编码标准。,也被称为高级视频编码(Advanced Video Coding,简称 AVC),是一种被广泛使用的高精度视频的录制、压缩和发布格式。该标准引入了一系列新的能够大大提高压缩性能的技术,并能够同时在高码率端和低码率端大大超越以前的诸标准。,也被称为高效率视频编码(High Efficiency Video Coding,简称 HEVC),是 H.264 的继任者。
2024-03-06 14:57:44
1055
原创 gdb调试core dump 文件
arm64一条指令占4个字节,PC地址还需要-4,为0x782ce77c-4=0x782ce778,为pc2,该地址还在标准库函数中,运用上面的规律,接着往前回溯: fp3为0x0f13ec60, lr3为*(0x0f13ec60+8)=0x78a65190, pc3为0x78a65190-4=0x78A6518C。在0x20a8的位置,从 sp+88的地址处取出值,传给x0,而 sp+88地址的值,又是在0x2068处,写入的0值,
2024-03-06 09:37:47
2282
原创 基于Ti Omap3x 分析v4l2架构
1 概述本文将基于Ti Omap3x这个典型的实例来分析v4l2在具体media场景中的应用。通过分析app层的行为以及driver层的实现来对整个多媒体框架有一个大概的认识。内容主要包括主要包括v4l2-core、meida framework。2. 基本原理分析2.1 v4l2-core2.1.1 应用视角先从应用的角度来看如何使用v4l2吧:上面的框图是对v4l2的一个典型应用。左边的框图是一个video 采集的基本流程,不涉及对子设备的操作,实际使用过程中融合了me.
2022-04-11 19:46:40
1685
1
原创 MIPI csi 接口与协议
Camera mipi通信协议Camera mipi通信协议-技术圈MIPI CSI-2总结: 基于DPHY2.1MIPI CSI-2总结: 基于DPHY2.1 - Gustav杂物间 ~ 个人博客
2022-03-20 15:53:45
588
转载 图像传感器的 DVP 信号
一、 DVP 简述DVP 是数字视频端口(digital video port)的简称,传统的 sensor 输出接口,采用并行输出方式,DVP 总线 PCLK 极限约在 96M 左右,所有 DVP 最大速率最好控制在 72M 以下,DVP 是并口,需要 PCLK、VSYNC、HSYNC、D[0:11]——可以是 8/10/12bit 数据,具体情况要看 ISP 或 baseband 是否支持。DVP 接口在信号完整性方面受限制,速率也受限制。如图 1 所示,并口传输数据需要帧同步信号( Vsync
2022-03-19 13:17:00
6692
3
转载 Linux内存管理之vmap与vmalloc
1. 概述在之前的系列文章中,分析到了Buddy System的页框分配,Slub分配器的小块内存对象分配,这些分配的地址都是物理内存连续的。当内存碎片后,连续物理内存的分配就会变得困难,可以使用vmap机制,将不连续的物理内存页框映射到连续的虚拟地址空间中。vmalloc的分配就是基于这个机制来实现的。还记得下边这张图吗?vmap/vmalloc的区域就是在VMALLOC_START ~ VMALLOC_END之间。开启探索之旅吧。2. 数据结构2.1 vmap_area.
2022-02-05 14:13:33
489
原创 struct vmap_area和struct vm_area_struct
在Linux中,struct vm_area_struct表示的虚拟地址是给进程使用的,而struct vmap_area表示的虚拟地址是给内核使用的,它们对应的物理页面都可以是不连续的。在32位系统中,struct vm_area_struct表示的地址空间范围是0~3G,而struct vmap_area表示的地址空间范围是(3G + 896M + 8M) ~ 4G。struct vm_struct表示的地址空间范围为什么不是3G~4G呢?原来,3G ~ (3G + 896M)范围的地址是用来映射连续的
2022-02-05 13:54:29
1248
转载 linux内存管理笔记(十一)---CMA
在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,对于内核如果申请一块连续的内存空间该怎么处理呢?首先向到的是利用内核提供的kmalloc申请,尽管kmalloc可以申请连续的内存空间,但是在长时间的测试中,会出现内存空间可能申请失败的情况,无法保证能成功分配。使用memblock分配器中提供的方法,称为预留内存,但这么预留的内存只能被特定的Device驱动所使用,System不能分配这部分内容,会导致内存浪费因此,内核设计者设..
2021-12-23 22:54:44
1280
原创 linux dump_stack 栈回溯原理
linux arm架构下的栈回溯主要有两种方式,一种是基于fp栈帧寄存器的栈回溯,还有一种是unwind形式的栈回溯。1 基于fp栈帧寄存器的栈回溯在介绍栈回溯原理前,先贴一下arm的基本寄存器:寄存器 含义 r0-r3 用作函数传参,例如函数A调用函数B,如果A需要向B传递参数,则将参数放到寄存器r0-r3中,如果参数个数大于4,则需要借用函数的栈空间。 r4-r11 变量寄存器,在函数中可以用来保存临时变量。 r9(SB) 静态基址寄存器。 r10(S
2021-11-02 23:12:57
2446
转载 kmemleak的介绍
内核泄露检测(kmemleak)1 介绍:Kmemleak 提供了一种可选的内核泄漏检测,其方法类似于跟踪内存收集器。(http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29#Tracing_garbage_collectors)当独立的对象没有被释放时,其报告记录在 /sys/kernel/debug/kmemleak中。2 用法:CONFIG_DEBUG_KMEMLEAK 在Kernel hacking中被使能
2021-10-10 21:40:59
614
原创 linux ko模块动态加载源码分析
linux内核模块分两种形态,一是静态编译进内核的模块,二是用insmod命令动态加载的模块,也就是后缀名为KO的文件。这里主要讨论linux内核动态加载模块的过程,也就是KO文件被动态加载进内核,并运行的过程。后缀为KO的文件其实是一种ELF格式文件,很类似于ELF目标文件(.o文件),但是又与ELF目标文件有一点小区别。使用readelf工具可以看到,KO文件里有一个叫.gnu.linkonce.this_module的段,而普通目标文件是没有这个段的。这个段的内容其实是一个struct modul
2021-01-26 22:10:18
3317
转载 YUV颜色空间 —— 图像子采样
在开始这篇文章之前,首先得知道,什么是图像子采样,以及为什么要介绍这个话题。首先图像子采样,其实就是图像采样。这个子的含义并没那么高深,可能有的同学一看标题,以为子采样是种多么高深的技术,这里直接按采样来理解就好。我们曾在电视图像数字化中,讲过采样这一步骤,它实质上就是指,用多少点来描述一幅图像,也即图像的像素点有多少个。不过在讲图像采样的时候,我们不说像素点,相应的,我们称它为采样点,其实是一个意思。通常,我们对彩色电视图像进行采样时,会使用两种方法。一种是使用相同的采样频率,对图..
2020-10-26 22:20:39
2967
1
原创 linux kthread_worker
在workqueue中可以使用highpri workqueue来实现高优先级,但是这种方法有个缺陷:如果work的执行时间比较长的话,还是会被normal workqueue的其它任务打断。原因是highpri workqueue只是调整了线程的nice值,只是获得更多的CPU时间片,而不是占有CPU直到任务执行完毕。所以可以用其他的一些方法来实现高优先级的worker。通过 kthread_worker 和 sched_setscheduler设置为SCHED_FIFO,从而将线程的优先级设置为RT
2020-09-09 22:15:46
512
转载 HDR sensor 原理介绍
一.HDR sensor 原理介绍1. 什么是sensor的动态范围(dynamic range):sensor的动态范围就是sensor在一幅图像里能够同时体现高光和阴影部分内容的能力。用公式表达这种能力就是:DR = 20log10(i_max / i_min);//dBi_max 是sensor的最大不饱和电流----也可以说是sensor刚刚饱和时候的电流i_min是sensor的底电流(blacklevel);2. 为什么HDR在成像领域是个大问题:在自然界的...
2020-07-07 23:45:51
7283
3
转载 图像的峰值信噪比(PSNR)的计算方法
PSNR定义与计算峰值信噪比(PSNR), 一种评价图像的客观标准。它具有局限性,PSNR是“PeakSignaltoNoiseRatio”的缩写。peak的中文意思是顶点。而ratio的意 思是比率或比列的。整个意思就是到达噪音比率的顶点信号,psnr一般是用于最大值信号和背景噪音之间的一个工程项目。通常在经过影像压缩之后,通常输 出的影像都会在某种程度与原始影像不同。为了衡量经过处理后的影像品质,我们通常会参考PSNR值来衡量某个处理程序能否令人满意。它是原图像与被处理图 像之间的均方误差相对于(2
2020-06-17 22:42:18
2247
转载 repo的基本使用
repo下的本地开发流程1.1单分支开发: 1 本地新建工作目录并初始化repo库: repo init; 2 下载代码(只取服务器当前分支): repo sync -c; 3 创建本地分支: repo start localDevelop --all; (不带all的话只更新当前目录的git 库,该命令当分支不存在时会创建新的分支,但是该命令和git checkout -b有区别,后者会在当前本地分支的基础上进程创建新的本地分支,而repo命令总是基于清单文件中为项目指定的分支创...
2020-05-29 18:20:31
1444
原创 linux select的使用及其原理实现
linux select和poll的实现机制其实是类似的,而且最终都会使用到内核驱动提供的具体poll方法,poll的使用详解参考这篇文章:https://blog.csdn.net/oqqYuJi12345678/article/details/1063137681 应用层使用举例1.1函数原型int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);
2020-05-24 16:04:53
863
原创 linux poll的使用及其原理实现
1 poll的使用相对于select来说,poll 也是在指定时间内论询一定数量的文件描述符,来测试其中是否有就绪的,不过,poll 提供了一个易用的方法,来实现 i/o 复用。声明如下:#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);其中,struct pollfd 定义为:struct pollfd { int fd; /* file desc
2020-05-24 15:16:34
6650
转载 linux 内核等待队列机制原理分析
1.等待队列数据结构等待队列由双向链表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头(wait queue head),等待队列头是一个类型为wait_queque_head_t的数据结构:struct __wait_queue_head { spinlock_t lock; struct list_head task_list;};typedef struct __wait_queue_head wait_queue_h...
2020-05-23 19:56:43
896
原创 linux netlink机制详解
netlink是一种基于网络的机制,允许在内核内部以及内核与用户层之间进行通信。最早在内核2.2引入,旨在替代笨拙的IOCTL,IOCTL不能从内核向用户空间发送异步消息,而且必须定义IOCTL号。Netlink协议定义在RFC3549中。以前是可以编译成模块,现在直接集成到内核了。与profs和sysfs相比,有一些优势如下:不需要轮询;系统调用和ioctl也能从用户层想内核传递信息,但是难以实现,另外netlink不会和模块冲突;内核可以直接向用户层发送信息;使用标准的套接字即可。/proc
2020-05-10 22:59:42
1600
转载 Linux下的lds链接脚本详解
一、 概论每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制.链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分在程序地址空间内的布局. 但你也可以用连接命令做一些其他事情.连接器有个默认的内置连接脚本, 可用ld –verbose查看. 连接选项-r和-N可以影响默认的连接脚本(如何影响?).-T选...
2020-03-22 15:03:47
459
原创 linux系统加载elf可执行文件源码分析
本文源码基于linux3.10.1 elf文件的组成elf文件可以是可执行程序,可以是目标文件(.o),也可以是动态库,也可以是静态库。可执行文件根据编译方式的不同,又分为静态编译和动态编译。静态链接和动态链接的elf可执行文件在系统加载的时候,当然会有一定的区别。静态链接的,在装入/启动其运行时无需装入函数库映像、也无需进行动态连接;动态连接,需要在装入/启动其运行时同时装入函数...
2020-02-25 20:37:28
1699
原创 linux smp 引导多核源码分析
1 SMP cpu map和操作函数集初始化1.1 初步初始化cpu mapstart_kernel ---------->smp_setup_processor_idlinux 从第一个cpu上面启动以后,先利用smp_setup_processor_id设置cpu indexvoid __init smp_setup_processor_id(void){...
2020-01-22 15:17:52
1895
原创 device tree 详解
在学习device tree的时候,在网上找到几篇写的比较不错的文章。记录一下,以便以后及时回顾。一个是wowo科技的系列文章:Device Tree(一):背景介绍http://www.wowotech.net/linux_kenrel/why-dt.htmlDevice Tree(二):基本概念http://www.wowotech.net/linux_kenrel/dt_...
2020-01-04 21:53:47
470
原创 嵌入式linux 系统iptables 编译及安装
1 iptables下载iptables可以从该网站进行下载:https://www.netfilter.org/projects/iptables/downloads.html这里使用的linux内核为3.10版本的,iptables选择iptables-1.4.20iptbales版本的选择一定要和linux版本的发布日期相近,如果差的太多,会导致编译不过2 编译iptab...
2020-01-02 21:14:40
2242
1
原创 arm平台交叉编译器安装
1准备源码包1.1 binutils-2.22GNU binutils是一组二进制工具集1.2 gcc-4.7.21.3 gmp-5.0.5GMP是一个免费的库,用于任意精度的算术运算,操作有符号整数、有理数和浮点数。除了在GMP机器上运行的可用内存所暗示的精度外,对精度没有实际的限制。GMP具有丰富的功能集合,功能之间有规则的接口。GMP的主要目标应用是密码学应用和研究...
2019-12-21 00:52:04
1024
转载 C语言 目标文件和可执行文件(ELF文件)
1.C语言创建程序1.1C语言创建(分为4个步骤)编辑 编译 链接 执行编辑:就是创建和修改C程序的源代码-我们编写的程序称为源代码。编译:就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。(该部分编译是指汇编器编译汇编语言或者编译器编译高级语言)链接:链接器将源代码由编译器产生的各种模块组合起来,再从C语言提供的程序...
2019-12-16 22:03:07
3255
转载 linux的copy_from_user与copy_to_user详细分析
这两个函数在内核使用的非常频繁,负责将数据从用户空间拷贝到内核空间以及将数据从内核空间拷贝到用户空间。arm架构下,copy_from_user相关的文件主要有arch/arm/include/asm/uaccess.h arch/arm/lib/copy_from_user.S arch/arm/lib/copy_template.S下面先来看copy_from_user,它的...
2019-12-16 19:29:59
1033
原创 linux从ubi文件系统启动分析
在前面linux块设备原理文章中,已经分析过linux如何加载mtd设备。那么linux是如何把真实的根文件系统加载到系统中的呢,这边以ubi文件系统为例,分析linux真实根文件系统的加载。沿着函数调用顺序一步步来看相关代码。1 ubi卷的加载kernel_init --------------->kernel_init_freeable ...
2019-12-12 23:17:52
1863
转载 linux sys_dup
sys_dup()的主要工作就是用来“复制”一个打开的文件号,使两个文件号都指向同一个文件。先看一下涉及到的数据结构:1 数据结构在Linux中每一个进程的数据是存储在一个task_struct结构(定义在sched.h中)中的。struct task_struct { 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。/* filesystem informat...
2019-12-11 20:13:41
354
原创 linux do_initcalls
linux初始化的时候,会在do_initcalls中做很多初始化的工作。把里面的初始化函数打印出来,大概如下: -------------- #define pure_initcall(fn) __define_initcall(fn, 0)ipc_ns_init init_mmap_min_addrnet_ns_init ...
2019-12-11 19:42:31
396
原创 Linux 块设备原理(二)以ext2文件系统为例分析块设备工作原理
在上一篇文章中,分析了如何去写一个基于MTD的flash驱动,大概分析了整个注册流程。整个块驱动就工作起来了。那么文件的读写,与块驱动的关系。文件系统与块驱动的关系,到底是怎么样的呢。这个问题还是值得研究一下的。本文主要分析vfs层到flash驱动层的数据流走向。通过该过程的分析,力求可以看清整个块驱动的工作原理。首先大概了解一下ext2文件系统的基本原理。1 ext2文件系统1.1 ...
2019-12-09 22:24:07
1057
1
转载 Linux 块设备原理(一)Nand Flash驱动(分析MTD层并制作NAND驱动)
1.本节使用的nand flash型号为K9F2G08U0M,它的命令如下: 硬件电路图大概如下: 1.1我们以上图的read id(读ID)为例,它的时序图如下: 首先需要使能CE片选1)使能C...
2019-12-03 16:21:00
964
转载 Linux内核同步机制之(二):spin lock
一、前言在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那么可以考虑使用semaphore或者mutex的锁机制,但是现在中断上下文也参和进来,那些可以导致睡眠的lock就不能使用了,这时候,可以考虑使用spin lock。本文主要介绍了linux kernel中的spin lock的原理以及代码实现。由于...
2019-12-03 11:41:56
260
转载 Linux内核同步机制之(一):原子操作
一、源由我们的程序逻辑经常遇到这样的操作序列:1、读一个位于memory中的变量的值到寄存器中2、修改该变量的值(也就是修改寄存器中的值)3、将寄存器中的数值写回memory中的变量值如果这个操作序列是串行化的操作(在一个thread中串行执行),那么一切OK,然而,世界总是不能如你所愿。在多CPU体系结构中,运行在两个CPU上的两个内核控制路径同时并行执行上面操作序列,有可能...
2019-11-25 20:10:33
324
原创 linux initramfs启动原理
当linux选择支持initramfs方式启动,并且在initramfs source file中选择了要打包的rootfs路径以后,则会尝试以initramfs方式启动。initramfs方式会对rootfs进行压缩,和linux kernel打包在同一个镜像文件中。然后系统加载的时候uboot会把整个镜像文件都加载到内存中。以该种方式加载的rootfs,是没办法修改flash中rootfs的数...
2019-11-23 21:32:55
4185
编译器源码包.rar
2019-12-20
自己编写的ov9650摄像头驱动+测试程序,可用于2410,2440,a8处理器
2015-07-11
小米wifi,360wifi的ap驱动在2410,6410,A8处理器上的移植
2015-07-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人