自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 我所理解的高通UEFI之display的流程和移植

UEFI跟uboot一样在OS加载启动之前,正确的指定启动服务,并向内核传递信息,代替原先的uboot。它包含了上电、驱动实现,以及os环境的建立和应用程序(类似于fastboot)。这个os是UEFI自己独立运行独有。

2023-02-11 11:22:31 3591 2

原创 linux下的自旋锁、信号量、互斥、完成量

linux下的竞态和并发都是比较容易发生的,原子操作只能针对整数进行,因此互斥和自旋锁也就被时常用来保护临界资源以解决竞态和并发的问题。在进程上下文中,保持时间长的情况可以用互斥体,因为可以睡眠,保持时间短的可以用自旋锁,减少上下文的切换时间。中断上下文中可以用自旋锁,不能用互斥体,因为可能会睡眠。但是中断上下文获取自旋锁之前要先禁用本地中断,防止中断嵌套。有自旋锁的代码不能睡眠,并且不能用在递归,否则会引起死锁。

2022-08-23 19:36:42 470

原创 我所理解liunx下的原子操作

原子操作就是要么不执行,一旦执行就会执行完成,是不可被打断的一个,或一系列的动作,即在完成任务前不会被其他事件所打断,就像原子不可被分割成颗粒一样。单处理中,可以用单条指令完成的指令可以被看成是一个原子操作。软件中的原子操作依赖于硬件原子操作的支持。当然原子操作,也可以当引用计数使用。......

2022-08-05 17:19:31 409

原创 LCD之MIPI协议的一些说明

MIPI:LCD液晶屏的MIPI接口是Mobile Industry Processor Interface的缩写。MIPI(移动行业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准。MIPI是一个比较新的标准,其规范也在不断修改和改进,目前比较成熟的接口应用有DSI(显示接口)和CSI(摄像头接口)。CSI/DSI分别是指其承载的是针对Camera或Display显示应用,都有复杂的协议结构。MIPI—DSI是一种Lane可扩展的接口,1个时钟通道/1-4个数据通道。最多4个通道,每个通

2022-06-02 16:20:02 5478 1

原创 c语言中的几个关键字

auto:自动局部变量,一般我们在定义局部变量的时候,就是auto局部变量,只不过我们写的时候把它省略掉也是一样的效果的,局部变量是保存在栈上的。extern:生命全局变量的。比如我 a.c中定义可 int a, b.c中想调用 这个a 但是没有定义,这时候在b.c中你要使用这个a变量之前,用extern a,来告诉a是在别的文件定义了,就可以使用了。static:有两种用法,第一种是修饰局部变量,叫做静态局部变量。静态局部变量跟赋值了的全局变量一样,保存在数据段,生命周期是一样的。他的连接是...

2022-06-02 15:27:20 149

原创 我所理解的DRM显示框架

什么是DRM:DRM全称是DirectRenderingManager,是linux主流的一种显示框架,支持多图层合成,为用户图层提供统一的API(libdrm),来访问GPU,实现统一管理。它是为了解决多个程序对video card访问协同资源使用而产生的。DRM可以简单的分成三个模块:libdrm:它是一个库,向上层提供通用的 API,是对底层各种 ioctl 的接口进行封装,用来进行图像显示和图像处理。当然用 drm 的 ioctl 或者是用 framebuffer 来操作显示图像也可以。.

2022-05-30 16:54:54 3681

原创 高通LCD连续时钟修改为非连续时钟

一般默认的时钟都是连续时钟,但是有些情况下需要改为非连续时钟。连续时钟:非连续时钟:LK修改:修改hfp的值,增大(多试几次看,修改到屏幕显示正常,修改不对会闪屏) static struct panel_resolution xxx_video_panel_res = { 800, 1280, hfp, 40, 20, 0, 16, 12, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 修改非连续模式hfp-power-m

2022-05-13 11:16:11 552

原创 Linux下进程通信之:信号量

进程通信:进程与进程间的数据交换,称为进程通信。进程通讯的方式有:共享内存、信号量、管道、消息队列、socket等等信号量:可以被看做是一种具有原子操作的计数器,它控制多个进程对共享资源的访问,通常描述临界资源当中,临界资源的数目,常常被当做锁(lock)来使用,防止一个进程访问另外一个进程正在使用的资源。-------------------------sem_test1.c-----...

2022-05-07 16:32:48 245

原创 7862之uboot-lcd的流程及移植

从开机过程中LCD初始化的流程,来分析LCD的驱动架构。在开机的时候首先进行板级的初始化(U-boot/arch/arm/lib/board.c),现在flash中跑board_init_f(),划分一部分Mermory用来跑U-BOOT,划定范围之外的Mermory在U-boot的时候是不能被操作的。同时预留给malloc() arena、U-Boot code, data & bss、VFD display、LCDdisplay、TLB table、PRam、logBuffer等空间。接

2022-05-07 16:29:35 1230

原创 linux下的中断

什么是中断:中断是指在CPU正常运行期间,由内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,保存当前状态,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去,恢复之前的状态,继续运行被暂时中断的程序。Linux中通常分为外部中断(又叫硬件中断、异步中断)和内部中断(又叫异常)中断又分为顶半部和底半部:中断会打断进程正常的调度和运行,然而中断又往往比较耗时,与系统实时性不相符。所以linux内核将中断分为了顶半部和底半部,(上半部)来解决耗时的问题的来提高系

2022-04-27 16:00:00 1177

原创 arm汇编指令记

指令:cpu机器指令的助记符。如 mov 指令,会通过汇编器,解码成机器码(如:00011111),电脑只能识别机器码去执行。而指令就是方便我们记忆的这串机器码的的具体含义。伪指令:本质上不是指令,而是编译环境提供的,是用来指导编译过程。arm有8种寻址方式:寄存器寻址: mov r2,r3 //相当于c中的 r2 = r3,把寄存器 r3 的值赋值给 r2立即寻址: ...

2021-03-19 15:29:47 1008

原创 Linux下 TP(触摸屏)驱动的框架分析

static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id *id){ s32 ret = -1; struct goodix_ts_data *ts; u16 version_info; struct pinctrl *nwt_pinctrl = NULL; struct pinctrl_state *set_upstate; GTP_DEBUG_FUN.

2021-03-16 20:17:47 4396

原创 我所理解的高通平台Lcd驱动框架

mobiledisplay processor :MDP是芯片内部模块,分为PPP和DMA模块,PPP主要负责显示数据的转换和部分图像处理功能,DMA负责图像数据传输。MDP模块主要包括PPP和DMA两大部分,系统可以利用PPP模块对数据进行加速处理,譬如缩放、旋转、叠加等等mdp提供图片格式转换,旋转,overlay等功能,dsi提供传输数据。DSI是MIPI的一个规范,旨在降低移动设备中显示子系统的成本。 DSI定义了串行总线和主机与设备(客户端)之间的通信协议)。 总线包括一个高速时钟车道

2021-03-05 16:45:54 3057

原创 Wi-Fi 发送、接收吞吐率的测试

吞吐率:单位时间内通过某个网络(或信道、接口)的数据量。 如果测试工具:iperf (iperf 是一个网络性能测试工具)、Magic iPerf ,其实它就是iperf。测试准备工作:wifi使用的板子、一台手机。板子需要装 iperf 工具, 手机需要装Magic iPerf 工具。测试 wifi 的 sta 功能的吞吐率需要手机开启热点,wifi 连接这个热点。测试 wifi 的 ap功能的吞吐率需要手机连接 wifi 所建的热点。测试 Wi-Fi 接收的吞吐率(tcp):...

2021-01-07 15:14:16 4732 4

原创 linux内存中静态区、栈、堆间的区别

静态区:保存自动全局变量和 static 变量(包括 static 全局和局部变量)。静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。stack是栈:保存局部变量,其空间是由操作系统自动分配释放。栈上的内容只在函数的范围内存在,程序运行过程中函数调用时参数的传递也在栈上进行,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。当然栈也有动态分配,由 ...

2020-10-13 16:25:06 522

原创 海思3536板子在使用wifi时,开启支持工具 wireless_tools 和 iptables 的内核支持选项时,板子会崩溃的解决方法

wifi的wlan模式需要用到Wireless_tools和wpa_supplicant工具。Wireless_tools用来设置支持LinuxWireless Extension的无线设备,它是一个工具,来使用wifi的功能和修改获取一些参数,不用重启驱动或Linux就能改变参数。wifi的AP热点以nat方式连接到网络,需要用到iptables这个工具来实现网卡的网络转发代理上网的功能,让...

2020-04-30 10:10:30 553

原创 我所理解的回调函数

第一步:定义回调函数类型typedef void (*slGetUvcCallBack)(Sl_usb_info_t* info);第二步:把这个回调函数传到你获取信息的接口函数get_info(slGetUvcCallBack callock)第三步:定义回调函数类型的函数slGetUvcCallBack sl_get_uvc_callback = NULL;第四步:把第二步的...

2020-03-11 11:14:05 217

原创 C 实现 YUV420SP (NV12)和(NV21)的相互转换

YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。YUV420数据的长度,Y = 宽*高, U = 宽*高/4,V= 宽*高/4。NV12数据的排列顺序为:YYYYYYYYY......, UVUVUV.......NV21数...

2020-02-11 11:42:20 3121

原创 FFmpeg、OpenSSL编译:无法解决 R_AARCH64_ADR_PREL_PG_HI21 重定向于符号 “sinh@@GLIBC_2.17” 有冲突

ffmpeg:/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: libavutil/eval.o: relocation R_AARCH64_ADR_PREL_PG_HI21 agains...

2019-11-28 15:48:02 8423

原创 深入浅析Linux下uboot之(七)-----------------------:uboot 启动的第二阶段

uboot 启动的第一阶段远跳转到 start_armboot。 它在uboot/lib_arm/board.c 中,是 uboot 第二阶段代码的入口。第一阶段是汇编语言实现的,而第二阶段的代码是用 C 语言实现的。第一阶段在SRAM中、第二阶段在DRAM中。第一阶段注重SoC内部、第二阶段注重SoC外部Board内部。目录为 gd 和 bd 的分配内存init_sequence函...

2019-08-16 11:33:15 726

原创 深入浅析Linux下uboot之(六)-----------------------:uboot 启动的第一阶段之 lowlevel_init

lowlevel_init 里面实现了cpu 相关硬件初始化:检查复位状态、IO恢复、关看门狗、开发板供电锁存、时钟初始化、DDR初始化、串口初始化并打印'O'、tzpc初始化、打印'K'。lowlevel_init 函数真正的地方,是在uboot/board/samsumg/x210/lowlevel_init.S中。目录检查复位状态:IO 状态的恢复:关看门狗:供电锁存:...

2019-08-07 14:23:28 538

原创 深入浅析Linux下uboot之(五)-----------------------:uboot 启动的第一阶段(详解)

经过上一节 链接脚本 u-boot.lds 分析:ENTRY(_start)用来指定整个程序的入口地址。所谓入口地址就是整个程序的开头地址,可以认为就是整个程序的第一句指令。有点像C语言中的main。因此_start符号所在的文件就是整个程序的起始文件,_start所在处的代码就是整个程序的起始代码。用搜索代码工具搜索到一共7个_start,然后分析搜索出来的7处,发现有2个是api_exampl...

2019-08-07 14:23:02 887

原创 深入浅析Linux下uboot之(四)-----------------------:链接脚本 u-boot.lds 分析

通过之前的 Makefile 的分析,可以知道 在Makefile 中 include $(obj)include/config.mk(133行),定位到跟 Makefile 同目录的config.mk 里面的 144-148行:ifeq ($(CONFIG_NAND_U_BOOT),y)LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-na...

2019-08-06 09:13:56 248

原创 深入浅析Linux下uboot之(三)-----------------------:Makefile分析

Makefile 是配置整个 uboot 的关键。VERSION = 2PATCHLEVEL = 3SUBLEVEL = 4EXTRAVERSION =U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)VERSION_FILE = $(obj)include/version_autogenerat...

2019-08-01 14:40:11 429

原创 深入浅析Linux下uboot之(二)-----------------------:uboot的目录分析

一般我们uboot可以通过3种途径去下载获得:uboot官方、SoC官方、具体开发板的官方。所有uboot源头的源代码是uboot官网下载的。SoC厂商在推出一款SoC后,厂商的工程师会去uboot官网下载一个uboot,根据自己的SoC进行第一步的移植,移植的目标是厂商推出的开发板。(譬如三星的S5PV210芯片厂商出的开发板就叫SMDKV210).所以三星的工程师移植的uboot是根据他们...

2019-07-30 15:11:55 408

原创 深入浅析Linux下uboot之(一)-----------------------:前世今生(启动流程总结)

什么是uboot:uboot就是universal bootloader(通用的启动代码),通用的意思就是说uboot具有可移植性。具有在源代码级别的移植能力,可以针对多个开发板进行移植,移植后就可以在这个开发板上使用。uboot是SourceForge上的开源项目,是一个德国人最早发起的项目,被许多人认可使用,然后由整个网络上所有感兴趣的人共同维护发展而来的一个bootloader。在大部分...

2019-07-25 08:59:42 622

原创 Linux下把WIFI网卡设置成AP热点

hostapd工具的移植: 修改Makefile: 在第四行增加CC=arm-hisiv200-linux-gcc 生成hostapd,复制到交叉编译平台的/usr/bin iptables-1.4.1.1工具的移植:Linux下WiFi工具网络转发iptables交叉编译,及其支持iptables使用的内核配置 vi /etc/hostapd.conf (配置hostapd文件)...

2019-07-14 19:16:59 1909

原创 FFmepeg:从摄像头获取RTSP(h264、h265)视频流,解码成YUV并保存成文件

ffmpeg:FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward,是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。平时我们下载的电影的文件的后缀(avi,mkv,rmvb等)就是所谓的封装方式,解封装就是将这些封装格式转为压缩的视频数据(h264)和压缩音频数据(aac),解码就是把压缩的视频数据(h264)和压缩音频数据(aac...

2019-07-12 14:59:21 11038 2

原创 FFmepeg: avio_open()返回负值时的解决方法

avio_open(),是FFmepeg早期版本。avio_open()比avio_open2()少了最后2个参数。而它前面几个参数的含义和avio_open2()是一样的。从源代码中可以看出,avio_open()内部调用了avio_open2(),并且把avio_open2()的后2个参数设置成了NULL,因此它的功能实际上和avio_open2()都是用于打开FFmpeg的输入输出文件的。其...

2019-07-12 14:06:01 11882 11

原创 FFmepeg:avformat_alloc_output_context2(),初始化AVFormatContext返回空值时的解决方法

avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。#include "libavformat/avformat.h"#include "libavcodec/avcodec.h"#include "libswscale/swscale.h"#include "libswresample/swresample...

2019-07-11 20:40:09 2372

原创 FFmepeg:av_guess_format()返回空值时的解决方法

AVFormatContext *pFormatCtx;av_register_all();pFormatCtx = avformat_alloc_context();AVOutputFormat *oformat;oformat = av_guess_format("mpegts", NULL, NULL);问题:在我们运行代码的时候,av_guess_format()函数会返...

2019-07-10 14:45:09 11476

原创 FFmepeg在编译执行文件时遇到的问题及解决方法

问题1:/home/xy/ffmpeg/ffmpeg-4.1.3_1/out/lib//libswscale.a(utils.o):在函数‘handle_formats’中:utils.c:(.text+0x238):对‘pow’未定义的引用utils.c:(.text+0x248):对‘lrint’未定义的引用问题 1 解决方法:在编译时加入:-lm问题 2:/home/xy...

2019-07-10 14:07:29 1927

原创 FFmpeg从RTSP获取流时:h264、h265 判断 I 帧的方法

H264中 I 帧的判断:这是用ffmpeg接口:av_read_frame ()从IPC摄像头获取得到每一帧数据的前几十个字节,一般00 00 00 01分割之后的下一个字节就是NALU类型,NALU类型是可以用来判断帧的类型是I帧,还是P帧。即第5字节可以用来判断帧的类型,如:61 、67 之类或者其他值。第5字节中:0x61 可以表示:0110 0001 、0x67可以表示...

2019-07-04 19:45:29 10695 5

原创 Vmware虚拟机Ubuntu下,命令完成磁盘的扩容

一般我们在使用虚拟机时,用着用着磁盘就不够用,这时候我们只能进行虚拟硬盘容量的扩容操作。1、关闭虚拟机,打开Vmware的启动页面,点击:编辑虚拟内存设置。2、点击:硬盘,再点击:扩展。3、改成你想要扩展的数值的大小,再点击扩展,保存所设置的内容。4、在配置完成后,启动Ubuntu(因为要重新添加分区、格式化分区、挂载后才可以使用)。5、添加分区:在shell终端输...

2019-06-05 22:35:48 4030 1

原创 linux下WIFI网卡设置为wlan模式,连接无线路由器

内核的配置:make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- menuconfig (配置)b)General setup ---> Kernel compression mode (LZMA) --->LZMA [*] Networking support ---> Networking opt...

2019-06-05 09:44:33 1172

原创 移植FFmpeg在arm交叉编译时遇到的问题

遇到的问题1:aarch64-himix100-linux-gcc is unable to create an executable file.C compiler test failed.解决方法:1、首先查看移植时具体出现的问题:vi ffbuild/config.log ,config.log是在./congfigure遇到问题时的记录日志,直接查看最后一行出现:...

2019-05-09 11:03:43 4420

原创 Linux下c语言函数中:指针参数的传入、指针参数的传出

函数指针参数的传入:int型#include <stdio.h>#include <string.h>void fun(int *p){ *p = 8; //这边(*p)表示传进来的是a的地址,改变(*p)的值,就是改变a的地址里面的值 printf("函数:p指向:%p, p指向地址中的值: %d,p的地址:%x \n",p,...

2019-04-22 15:44:37 1281

原创 Linux下onvif客户端获取ipc摄像头 GetStreamUri:rtsp地址(h264、h265)

GetStreamUri:rtsp地址鉴权:但是在使用这个接口之前是需要鉴权的。ONVIF协议规定,部分接口需要鉴权,部分接口不需要鉴权,在调用需要鉴权的接口时不使用鉴权,会导致接口调用失败。实现鉴权的方式之一可以调用gSOAP源码中的soap_wsse_add_UsernameTokenDigest()函数。要安装依赖库OpenSSL关于完整ipc摄像头设备的发现、GetCapabil...

2019-03-22 10:05:46 1876 2

原创 Linux下onvif客户端获取ipc摄像头 GetProfiles:获取h265媒体信息文件

GetProfiles:获取媒体信息文件鉴权:但是在使用这个接口之前是需要鉴权的。ONVIF协议规定,部分接口需要鉴权,部分接口不需要鉴权,在调用需要鉴权的接口时不使用鉴权,会导致接口调用失败。实现鉴权的方式之一可以调用gSOAP源码中的soap_wsse_add_UsernameTokenDigest()函数。要安装依赖库OpenSSL关于完整ipc摄像头设备的发现、GetCapabi...

2019-03-21 21:33:57 1618

原创 Linux下onvif客户端获取ipc摄像头 GetServices:获取媒体地址(有的h265摄像头必须要这个接口)

GetServices:获取媒体地址(有些h265的摄像头必须用到这个接口,得到获取能力时没获取到的另一个媒体地址)鉴权:但是在使用这个接口之前是需要鉴权的。ONVIF协议规定,部分接口需要鉴权,部分接口不需要鉴权,在调用需要鉴权的接口时不使用鉴权,会导致接口调用失败。实现鉴权的方式之一可以调用gSOAP源码中的soap_wsse_add_UsernameTokenDigest()函数。要安...

2019-03-21 15:54:40 1362

空空如也

空空如也

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

TA关注的人

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