自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(156)
  • 资源 (3)
  • 收藏
  • 关注

原创 linux进程间通信IPC方式

Linux环境下,进程地址空间相互独立、彼此隔离,因此进程间的数据不能直接访问。如果要交换数据,必须要通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷贝到内核缓冲区,进程B再把数据从内核缓冲区拷贝走,内核提供的这种机制称为进程间通信(IPC, InterProcess Communication)。在Linux下由很多种进程间通信的方式,分别是:匿名管道(PIPE)、命名管道(FIFO)、信号、共享内存、消息队列、信号量、UNIX域套接字。现在常用的进程间通信方式有:管道(使用简单)

2024-03-27 15:02:26 759

原创 进程上下文与中断上下文的理解

内核态:在内核空间执行,通常是驱动程序,中断相关程序,内核调度程序,内存管理及其操作程序。用户态:用户程序运行空间。(1)进程上文:是指进程由用户态切换到内核态是需要保存用户态时cpu寄存器中的值,进程状态以及堆栈上的内容,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。(2)进程下文:其是指切换到内核态后执行的程序,即进程运行在内核空间的部分。

2024-03-27 09:19:25 692

原创 互斥锁与信号量的区别

信号量与互斥锁都是用于多线程编程中,以实现资源共享和线程同步的机制,但它们在应用场景、实现方式和性能特点上有所不同。总结来说,信号量更侧重于资源共享和线程间的协作,而互斥锁更侧重于资源的安全访问和线程间的互斥。

2024-03-26 15:59:26 956

原创 自旋锁和互斥锁的区别

单CPU非抢占内核下:自旋锁会在编译时被忽略(因为单CPU且非抢占模式情况下,不可能发生进程切换,时钟只有一个进程处于临界区(自旋锁实际没什么用了)单CPU抢占内核下:自选锁仅仅当作一个设置抢占的开关(因为单CPU不可能有并发访问临界区的情况,禁止抢占就可以保证临街区唯一被拥有)多CPU下:此时才能完全发挥自旋锁的作用,自旋锁在内核中主要用来防止多处理器中并发访问临界区,防止内核抢占造成的竞争。

2024-03-26 12:09:00 654

原创 在驱动中创建sysfs接口、procfs接口、debugfs接口

/灯灭//灯亮这是怎么做到呢?实际上,这是因为在驱动中提供了sysfs接口给用户使用,使得用户可以通过cat或者echo命令来查看和修改驱动中某些变量的值。下面介绍驱动中创建sysfs接口的方法。

2023-08-26 17:47:39 548

原创 Linux系统调试之gdbserver远程调试程序

本篇讲解如何使用gdbserver对目标开发板上的程序进行远程调试。

2023-08-23 19:16:24 907

原创 Linux系统调试之stty修改串口波特率

Linux内核启动后,串口的波特率通常是115200或者9600,此时shellsttysttyset tty。即改变并打印终端行设置,用于检查和修改当前注册的终端的通信参数。

2023-08-23 14:15:45 1061

原创 内核编译机制

主要由Kconfig提供图形界面完成主要基于Kbuild编译系统,执行make完成编译主要也是基于Kbuild提供的脚本,然后执行make完成安装。

2023-08-22 17:36:11 100

原创 底层开发必知的内存结构概念

Linux中内存管理子系统使用节点(node)、区域(zone)和页(page)三级结构描述物理内存。

2023-08-21 17:05:23 112

原创 Linux系统调试——核心转储(core dump)

本篇讲解Linux应用程序发生段错误时,如何利用core dump文件定位错误。

2023-08-19 17:45:57 230

原创 Linux内核之神奇的系统请求键SysRq

Linux内核提供了一些与用户空间的通信机制,例如procfs接口和sysfs接口,大部分的这些接口都可以作为获取内核信息的手段。但除了这些接口,内核也提供了专门的调试机制——系统请求键SysRq。SysRq被内核称为“”,即“神奇的系统请求键简单来说,就是可以通过键盘的按键获取内核的信息,用于调试。相当于是一个快捷键。

2023-08-19 16:32:52 217

原创 内核配置知识

是菜单项;菜单项下面的是菜单的属性;菜单都是以config开头,中间有空格,后面大写的就是菜单项。tristate:表示提示信息,在配置菜单中显示的字符串depends:表示依赖于的选项(依赖的选项选上,才能选这个选项)select:表示本菜单选上后,自动选上的菜单Help:帮助文字;Kconfig的语法详细参考:Documentation/kbuild/kconfig-languages.txt。

2023-08-19 16:13:05 112

原创 Linux内核入口函数——initcall

写过Linux驱动的人都知道宏,因为它声明了一个驱动的入口函数。除了宏,你会发现在Linux内核中有许多的驱动并没有使用上述举例的两个驱动入口分别使用了和来声明驱动入口,这些本质上都是对initcall的调用,也如此。

2023-08-18 17:59:00 165

原创 Linux内核常用调试技巧汇总

通过调用关系看出,驱动入口函数hello_init,是由do_init_module调用do_one_initcall,然后再调用到了hello_init。WARN_ON()宏相对会好一些,不会触发panic()函数,使系统主动宕机,但会输出函数调用栈信息,提示开发者可能发生了一些不好的事情。printk打印是全局的,使用动态输出则可以有选择地输出某个模块或某个子系统的打印,pr_debug()就是使用了动态输出。在内核中经常看到BUG()和BUG_ON()宏,这也是内核调试常用的技巧之一。

2023-08-18 17:45:45 179

原创 内核调试之devmem直接读写寄存器

在Linux系统,如果我们想要访问某个寄存器,就需要写一个驱动程序,在驱动中映射寄存器地址,转为虚拟地址后就可以访问。但有时候,我们只是单纯想知道某个寄存器的值,不想这么麻烦,怎么办呢?Linux早就想到这一点了,于是提供了一个工具devmem,通过devmem就可以直接读写寄存器,devmem是一个命令,在shell中输入devmem命令就可以非常方便的读写寄存器。devmem是一个很常用的工具,主要给驱动开发人员在Linux应用层调试使用。

2023-08-18 17:21:18 605

原创 Linux内核死锁检测工具——Lockdep

死锁是指两个或多个进程因争夺资源而造成的互相等待的现象,如进程A需要资源X,进程B需要资源Y,而双方都掌握对方所需要的资源,且都不释放,这会导致死锁。在内核开发中,时常要考虑并发设计,即使采用正确的编程思路,也不可能避免会发生死锁。递归死锁:如在中断延迟操作中使用了锁,和外面的锁构成了递归死锁。AB-BA死锁:多个锁因处理不当而引发死锁,多个内核路径上的锁处理顺序不一致也会导致死锁。Linux内核在2006年引入了死锁调试模块lockdeplockdep。

2023-08-18 16:33:51 771

原创 Linux系统调试——valgrind内存泄露检测

代码可能存在怎么办?使用valgrind可以对代码进行内存泄露检测。

2023-08-18 14:45:38 103

原创 Linux v4l2框架分析

Linux内核中关于视频设备驱动的框架,对上向应用层提供统一的接口,对下支持各类复杂硬件的灵活扩展;V4L2框架,主要包括v4l2-corevideobuf2等模块,这也是本文将要展开的内容,仅提纲挈领;

2023-06-30 11:31:24 530

原创 I2C总线协议详解

当然,并不是所有的字节传输都必须有一个应答位,比如:当从设备不能再接收主设备发送的数据时,从设备将回传一个否 定应答位。在前面我们还提到过,I2C总线上的每一个设备都对应一个唯一的地址,主从设备之间的数据传输是建立在地址的基础上,也就是说,主设备在传输有效数据之前 要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来 数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。

2023-06-29 17:44:10 133

原创 详解20个常见的模拟电路

理想开关模型和恒压降模型:理想模型指的是在二极管正向偏置时,其管压降为0,而当其反向偏置时,认为它的电阻为无穷大,电流为零,就是截止。共集电极放大电路常作为电流放大器使用,它的特点是高输入阻抗,电流增益大,但是电压输出的帽度几乎没有放大,也就是输出电压接近输入电压,而由于输入阻抗高而输出阻抗低的特性,也常作为阻抗变换器使用。差分放大电路是直接耦合放大电路的基本组成单元,该电路对于不同的输入信号有不同的作用,对于共模信号起到很强的抑制作用,而对差模信号起到放大作用,并且电路的放大能力与输出方式有关。

2023-06-29 16:23:40 608

原创 while(1) 和 for ( ; ; )的区别

要回答这个问题,其实你各自编写一段while(1) 和 for(;)的代码,编译对比一下代码大小和汇编文件,你就大概知道了。根据上面的描述,你可能会觉得:while(1) 比 for(;while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。当然,这里额外说一下,不同代码、不同编译器,以及不同优化等级,可能最终结果有所差异。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;

2023-06-29 14:39:40 99

原创 有源、无源晶振的区别

在PCB设计中,晶振(晶体振荡器)是非常重要的电子元器件,相信大部分的PCB工程师对它都不会陌生。而对于有源晶振与无源晶振,很多人却是“傻傻分不清楚”。我们知道,电子线路中的晶体振荡器分为无源晶振和有源晶振两种类型。无源晶振与有源晶振的英文名称不同,无源晶振为crystal(晶体),而有源晶振则叫做oscillator(振荡器)。

2023-06-28 17:31:28 179

原创 I2C总线接上拉电阻的原因

因为线与,如果主设备A拉高SDA时,已经有其他主设备将SDA拉低了,由于 1 & 0 = 0 那么主设备A在检查SDA电平时, 会发现不是高电平,而是低电平。如果SDA是高电平,说明主设备A可以占用总线,然后主设备A将SDA拉低,开始通信。如果上拉阻值过小,VDD灌入端口的电流将较大,功耗会很大,导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为0.4V)。I2C协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况。

2023-06-27 17:54:42 394

原创 推挽输出和开漏输出

GPIO口配置为输出时会有两种模式,一种叫推挽输出,一种叫开漏模式。 如下图所示为将GPIO配置为输出时的内部示意图:由上图可以看出,GPIO的输出状态完全取决于两个MOS管Q1和Q2的导通状态: Q1导通、Q2关断,此时输出接VCC,输出高电平; Q1关断、Q2导通,此时输出接地,输出低电平; Q1关断、Q2关断,此时输出浮空,相对与其它点的电阻无穷大,呈现高阻态; Q1导通、Q2导通,此时VCC直接对地短路,会烧毁MOS管,所以此状态不会也不允许存在。所以,将GPIO配置为

2023-06-27 16:53:34 1682 3

原创 Shell 特殊变量及其含义

shell是我们在linux下编写自动执行程序的常见脚本工具,通常会涉及到以下几个特殊变量,它们分别是:$#、$*、$@、$?

2023-02-20 15:57:53 858 1

原创 Linux 同步管理(上)

因为现代操作系统是多处理器计算的架构,必然更容易遇到多个进程,多个线程访问共享数据的情况,如下图所示:图中每一种颜色代表一种竞态情况,主要归结为三类:进程与进程之间:单核上的抢占,多核上的SMP;进程与中断之间:中断又包含了上半部与下半部,中断总是能打断进程的执行流;中断与中断之间:外设的中断可以路由到不同的CPU上,它们之间也可能带来竞态;这时候就需要一种同步机制来保护并发访问的内存数据。文章分为两部分,这一章主要讨论原子操作,自旋锁,信号量和互斥锁。原子操作是在执行结束前不可打断的操作,也是最小的执行单

2022-12-06 17:51:39 313

原创 MIPI扫盲系列博文

14、MIPI扫盲——Lattice CSI-2 / DSI DPHY Receiver IP介绍。1、MIPI扫盲——What the hell is mipi?2、MIPI扫盲——D-PHY介绍(一)3、MIPI扫盲——D-PHY介绍(二)4、MIPI扫盲——CSI-2介绍(一)5、MIPI扫盲——CSI-2介绍(二)6、MIPI扫盲——CSI-2介绍(三)7、MIPI扫盲——CSI-2介绍(四)10、MIPI扫盲——DSI介绍(一)11、MIPI扫盲——DSI介绍(二)

2022-12-02 14:04:36 857 1

原创 mipi deskew原理理解

何为skew, 从字面意思看是倾斜了,不对齐了;放在mipi的传输中意思就是clock lane和data lane 及data lane与data lane间出现了相位差;一旦出现相位差,大家采样数据时就可能不在同一个节拍上,会出现传输错误。所以就要做deskew,通过做deskew来使得大家重新对齐,在同一个节奏下传输数据. 一般当data rate高于1.5G时建议开启deskew。

2022-11-24 17:58:34 2633

原创 mipi phy理解

PHY 属于 MIPI 接口的最底层部分,也就是物理层,直接涉及到物理连线,信号传输等等,要搞清楚 MIPI 的数据传送,那么从 PHY 入手了解,是一个不错的选择;在 D-PHY 的使用过程中,和其他的总线一样,我们通常会定义个 Master 和 Slave,比如,我们用处理器的 D-PHY 连接到外面显示设备(屏幕)的 D-PHY,那么我们的处理器就是 Master,显示设备就是 Slave;M-PHY 再出来,速度最快,但是与 D-PHY 不兼容,而且受限于其他器件的发展,如此高的带宽,暂时用不上;

2022-11-24 15:55:18 1156

原创 max96712+max96717驱动调试

MAX96712支持视频数据的聚合和复制,使来自多个远程位置的传感器的流能够被组合并路由到一个或多个可用的CSI-2输出。数据还可以基于虚拟信道ID进行路由,从而使来自单个GMSL输入的多个流能够独立地路由到不同的CSI-2输出。CSI-2接口可以通过使用C-PHY或D-PHY来支持2x4 lane和4x2 lane的配置。MAX96712解串器将GMSL2或GMSL1串行输入转换为MIPI CSI-2 D-PHY或C-PHY格式的输出。首先查看相关的模组端原理图和控制器端原理图,熟悉相关的硬件接口情况。

2022-11-16 16:04:04 8172 6

原创 晶振工作原理详解

晶振是石英晶体谐振器(quartzcrystaloscillator)的简称,也称有源晶振,它能够产生中央处理器(CPU)执行指令所必须的时钟频率信号,CPU一切指令的执行都是建立在这个基础上的,时钟信号频率越高,通常CPU的运行速度也就越快。只要是包含CPU的电子产品,都至少包含一个时钟源,就算外面看不到实际的振荡电路,也是在芯片内部被集成,它被称为电路系统的心脏。如下图所示的有源晶振,在外部施加适当的电压后,就可以输出预先设置好的周期性时钟信号,...

2022-07-27 17:46:40 11175 1

原创 以太网驱动详解之RMII、SMII、GMII、RGMII接口

上一章节讲到MII接口虽然很灵活,但是有一个缺点是因为它一个端口用的信号线有14根之多,如果一个8端口的交换机要用到112根线,16端口就要用到224根线,到32端口的话就要用到448根线。一般按照这个接口做交换机是不太现实的。所以现代的交换机的制作都会用到其它的一些从MII简化出来的标准,比如RMII、SMII、GMII等。............

2022-07-22 18:00:57 6252

原创 以太网驱动详解之 MAC、MII、PHY 详解

由于芯片缺货原因,公司原先使用的ksz9031phy芯片价格暴涨,故决定换用LAN8720PHY芯片。KSZ9031提供的是RGMII接口,时钟信号速率到达125MHz;LAN8720A具有RMII接口的10/100Base-T/TX以太网收发器。从硬件角度来看以太网是由CPU,MAC,PHY三部分组成的,如下图示意即媒体访问控制层协议。MAC由硬件控制器及MAC通信协议构成。该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。MAC硬件框图如下图所示。...........

2022-07-22 11:28:33 5125

原创 linux替换目录下所有文件中的某字符串

sed -i “s/oldstring/newstring/g” 其中,oldstring是待被替换的字符串,newstring是待替换oldstring的新字符串,grep操作主要是按照所给的路径查找oldstring,path是所替换文件的路径;-i选项是直接在文件中替换,不在终端输出;-r选项是所给的path中的目录递归查找;-l选项是输出所有匹配到oldstring的文件;实例:将当前目录下的cv22_baolong目录中的所有文件夹中包含walnut字符串替换成新的baolong字符串。..

2022-07-14 11:49:06 5380 1

原创 secureCRT 登录Ubuntu20.04提示Key exchange failed. No compatible key exchange method

之前在Ubuntu18.04上按照博客文章《 ubuntu18.04系统搭建以及配置 》配置ssh 登录是没有问题的,但最新新的项目需要安装Ubuntu20.04,在安装了ubuntu20.04后,以前老版本的secureCRT通过ssh连接后报错sudo vi /etc/ssh/ssh_config打开下面这两行的注释 sudo vi /etc/ssh/sshd_config再加入下面的代码 重启sshd服务sudo service sshd restart重新通过secureCRT连接Ubuntu20.

2022-06-14 16:09:19 1399

原创 sensor 驱动调试小结

14/100目录:前言驱动篇:1、 Micron sensor ISP的原理图2、 sensor 的原理框架3、Sensor 的初始化步骤4、Preview时候的sensor设置5、Capture时候的sensor设置6、工频干扰的调试7、亮度以及夜景模式调试篇:1、 清晰度的测试2、 灰阶重现3、 画面的均匀性以及暗脚补偿4、 畸变5、 白平衡的调试前言Micron sensor 是我们公司所用最多的图像传感器,也是目前市场上评价很高的主流sensor产品。..

2022-05-27 16:25:35 2654

原创 YUV、RGB、RAW DATA 3种Sensor输出格式 详解

颜色的学问(1)颜色的本质是光的波长,是因为有人去看才有了颜色这个概念,所以本质上来说,颜色是主观存在的。(2)颜色的三个关键:亮度、色度、饱和度(3)人的眼睛并非理想完美的颜色识别器件,图像表达也有清晰度和质量高低的差异(4)科学研究如何定义(或者表达、记录、计算)一种颜色?通过一个二进制数来表达,比如RGB888,就是用24位二进制来表达16777216种颜色,每一个不同的数代表一种不同的颜色简单来讲,YUV: luma (Y) + chroma (UV) 格式, 通常状况下sens.

2022-04-15 18:07:48 8984

原创 max9296+max9295驱动调试

富瀚fh8322控制sensor x3c,并输出mipi信号到串行器max9295,max9295接收信号后,通过同轴电缆的方式输出到后端中控器上的max9296,max9296接收解串后,再送给SOC再处理,最后输出到屏幕上。

2022-04-13 15:21:29 10816 18

原创 camera基本概念和工作原理

基本工作原理 光线通过镜头Lens进入摄像头内部,然后经过IR Filter过滤红外光,最后到达sensor(传感器),senor分为按照材质可以分为CMOS和CCD两种,可以将光学信号转换为电信号,再通过内部的ADC电路转换为数字信号,然后传输给DSP(此时的数据格式Raw Data)加工处理,转换成RGB、YUV等格式输出1,Image Sensor类型a)YUV SensorYUV Sensor输出的Data格式为YUV,图像的效果处理使用Sensor内部的ISP,B...

2022-03-23 11:30:32 3645

原创 platform驱动的probe过程

probe()函数是什么时候被调用,设备和驱动是怎么联系起来的??1 总线注册阶段:内核启动初始化时,main.c文件中platform平台初始化的路径: kernel_init() -->do_basic_setup() -->driver_init() -->platform_bus_init(...

2022-03-22 16:00:06 1584

freeRTOS实时内核实用指南

《FREERTOS 实时内核实用指南》是学习freeRTOS非常好的入门文档,要多读几遍才好,并且里面的例子可以快速帮忙我们进行理解。

2020-11-06

奔跑吧Linux内核

本书内容基于Linux 4.x内核,主要选取了Linux内核中比较基本和常用的内存管理、进程管理、并发与同步,以及中断管理这4个内核模块进行讲述。全书共分为6章,依次介绍了ARM体系结构、Linux内存管理、进程调度管理、并发与同步、中断管理、内核调试技巧等内容。本书的每节内容都是一个Linux内核的话题或者技术点,读者可以根据每小节前的问题进行思考,进而围绕问题进行内核源代码的分析。 本书内容丰富,讲解清晰透彻,不仅适合有一定Linux相关基础的人员,包括从事与Linux相关的开发人员、操作系统的研究人员、嵌入式开发人员及Android底层开发人员等学习和使用,而且适合作为对Linux感兴趣的程序员的学习用书,也可以作为大专院校相关专业师生的学习用书和培训学校的教材。

2018-09-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除