自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 资源 (16)
  • 收藏
  • 关注

原创 高通ais over hab高概率导致安卓系统起不来原因分析及解决方案

原因在于ais的数据通道内存是安卓分配, client进程crash后,释放流程很大概率会先释放数据通道,再释放控制通道。如果数据通道释放后,这块内存又被分配给内核其他模块使用,但此时控制通道还没有释放,即qnx不知道数据通道释放了,他还往上面填充摄像头数据,导致安卓kernel panic。b)ais的数据通道的建立。安卓端会从ion申请dma_buf(一个buf存放一帧数据),然后会将dma_buf的物理页帧号告知qnx,然后qnx端就可以将摄像头数据放到这块内存上,再通过控制道通通知安卓端。

2024-01-10 17:10:47 992

原创 高通guestOS与hostOS通信框架HAB源码分析——概述

相当于俩端建立了一个连接。如下图所示,qnx,quest_shm@开头的都是HAB physical channel对应的共享内存设备树节点,qnx,quest_shm@xxx节点保存有共享内存的地址(即guestOS看到的物理地址,实际是hostOS的虚拟地址)和通信相关的中断向量信息(guestOS和hostOS通过中断通知对方共享内存上有数据处理)。首先是不同服务的physical channel不同,比如摄像头服务有专门的physical channel,硬编解码服务也有专门的物理channel。

2024-01-04 15:40:12 1904 1

原创 深入内核buddy分配器(芯驰X9/杰发8015 buddy系统明明还有几十M到100多M内存,却分配4k内存失败)

根据log+faddr2line定位到,调用栈为__alloc_pages_slowpath——》get_page_from_freelist——》zone_watermark_fast。2)可以看到28.489040] 265014 total pagecache pages 很大,可以手动drop cache释放内存。可以看到buddy内存低于一定水平,又不能立即触发kswapd回收内存就会失败。如上图内核打印分配4K内存失败,但是normal 类型的buddy系统还有大量内存。

2023-10-31 17:35:12 271

原创 rtos移植到英飞凌tc27x 多核板子(CSA需要注意的问题)

最近freertos已支持SMP,项目需要将它移植到英飞凌tc27x。发现任务没有绑定核,总是会crash。翻了很久文档才找到原因。修正后,运行效果如下图,原因如下下图:运行效果:原因:这是官方datasheet,如上所示,只能在core1和core2之间任务可以在俩个核上调度,任务在core1或core2上跑后,不能再被core0调度,否者会crash。因此,可以将某些任务绑定到core0,某些任务同时绑定core1和core2俩个核。printf(" Starting co

2022-03-28 14:17:48 2024 5

原创 全志r328s1 freertos平台,slab内存管理源码剖析

Linux的内存管理其实也是slab。但是相比较rtos,Linux做了虚拟内存管理(需要硬件MMU,比如MMU的缺页异常)。这里我们只分析slab,个人感觉从rtos入手来学习操作系统是比较明智的,这都是题外话。内存管理分为页管理(每页4k)和slab管理(每个slab_zone 32k,即8个pages)。比如程序需要申请8字节内存,需要先申请一个slab_zone,即8个pages的内存,再从该slab_zone分配8字节出来。首先,我们看内存管理的入口,如下:很明显,入口函数先确

2021-06-27 11:47:16 703 1

原创 精通安卓 linux USB编程

安卓USB编程从入门到精通,安卓USB转串口编程。linux USB编程。了解原理,拒绝做代码的搬运者。https://edu.csdn.net/course/play/23771

2019-07-07 16:46:15 280

原创 安卓自定义view之——可滑动时间轴(时间刻度尺)

如果需要解决在viewpager,horizontalscrollview中滑动事件的冲突,可注入viewpager,horizontalscrollview对象,在down的时候调用requestdisallowInterceptDispatch() 好了先看效果图   看代码:自定义view类package com.example.viewpager;impor

2015-08-21 14:38:12 8485 8

原创 gles+egl+drm+gbm实现开机动画

/ 是否为一个有效的压缩纹理信息。基于安卓开机动画修改。

2024-04-15 19:43:12 882

原创 yocto bb文件直接编译压缩包里面的源码

# FILES 表示这个软件包,需要打包进映像的文件是hellocmake,但决定这个软件包是否参与打包,需要在其他地方配置。# # FILES 表示这个软件包,需要打包进映像的文件是hellocmake,但决定这个软件包是否参与打包,需要在其他地方配置。# 默认就已经继承base.bbclass,以下语句可以省略。# 默认就已经继承base.bbclass,以下语句可以省略。# 这里必须添加,默认S路径不一样为 ${B}# 这里必须添加,默认S路径不一样为 ${B}readline库编译。

2024-04-03 17:27:28 417

原创 yocoto bb文件传自定义变量给cmakelist.txt

这里 MY_CUSTOM_VARIABLE 是你想要在 CMakeLists.txt 中使用的变量名,而 ${MY_CUSTOM_VALUE} 是你想要传递的值。这通常是通过设置 EXTRA_OECMAKE 变量来实现的,该变量允许你向 CMake 命令行添加额外的参数。然后,它打印出变量的值,以便你可以在 CMake 的配置输出中看到它。# FILES 表示这个软件包,需要打包进映像的文件是hellocmake,但决定这个软件包是否参与打包,需要在其他地方配置。bb+cmake的bb文件demo。

2024-04-03 17:16:05 365

原创 linux gles+egl+wayland demo

代码直接用安卓开机动画源码修改的,将surfaceflinger修改为wayland。// 是否为一个有效的压缩纹理信息。

2024-03-28 08:36:15 733

原创 Linux系统明明还有足够的物理内存,调用fork却返回ENOMEM

overcommit_ratio可以在/proc/sys/vm里设定,默认是50,也就是CommitLimt默认是0.5倍的总物理内存。使用systemtab hook fork,定位到报错调用路径SYSCALL_DEFINE0(fork)-》kernel_clone-》copy_process-》copy_mm-》dup_mm-》dup_mmap-》security_vm_enough_memory_mm-》__vm_enough_memory。如果有足够可用的物理内存供使用,则内存分配成功,否则失败.

2024-01-28 19:05:30 447

原创 如何从RTP包的AP类型包,获取h265的PPS、SPS、VPS信息

ffmpeg播放rtp流,为了降低首开延迟,需要在SDP文件中指定PPS、SPS、VPS信息。抓包后发现wireshark无法解析AP包。下图中红色部分是分隔符,橙色是VPS,黑色是SPS,黄色为PPS。根据如上信息,我们可以解析AP包,效果如下。

2023-12-28 17:26:36 865

原创 解决使用傅里叶变换开源库fftw分析音频频谱结果与matlab或audacity不一致的问题

std::cout

2023-12-22 10:10:09 1480

原创 pulseaudio是如何测试出音频延迟的

我们可以实时获取声卡的clock,计算出声卡实际已经处理了多少音频数据,然后应用层往驱动write了多少数据。这俩个数据的偏差,其实就是音频延迟。那么没有专业设备怎么测试出音频延迟呢?如下图,我们可以看到pulseaudio可以测试出硬件音频延迟。那么,他是怎么测试出硬件延迟的呢?他的理论依据是什么呢?接下来我带大伙一起探索一下。通常专业的音频设备生产厂商都有专业的设备来测试精确的音频链路延时。

2023-11-24 16:39:12 753 1

原创 PulseAudio 异步方式播放音频,并控制流的软件音量

default:break;break;break;v += 10000;v = 30000;lastT = tm;int neg;int r;double amp;#if 0for (a=0;a++) {

2023-10-25 16:07:02 302

原创 cmake获取git tag和commid id作为软件版本

通过git获取版本宏 BUILD_TAG_VERSION。# 通过git获取版本宏 BUILD_LOG_VERSION。

2023-08-24 11:19:34 165

原创 安卓如何快速定位native内存泄露。

步骤2)setprop libc.debug.malloc 1 && setprop libc.debug.malloc.options "backtrace leak_track verbose" && setprop libc.debug.malloc.options.program ais_test_hidl(要测试的可执行文件名)后面的泄露比前面的泄露多大概20次,就大概率是泄露。通过泄露的stack快速定位到泄露点。步骤1)cat /proc/pid/status,观察下面俩个指标。

2023-08-11 15:50:47 391

原创 多开引擎virtualAPP适配安卓9到安卓11

github上的virtualApp只兼容到了安卓8,需要自己适配安卓9到11的hook机制。

2023-06-28 15:47:30 612 5

原创 记录一次安卓unix domain socket卡死,导致整个系统卡死的问题

2)使用ss工具查看该uds的缓冲区,发现居然是0。猜测是需要打开内核模块的某个配置才行。找到缓冲区数据结构的关键信息,反推内核源码,发现是需要打开CONFIG_UNIX_DIAG。1)dump出monkey的call trace,发现是unix socket write阻塞。分析内核源码,发现只有缓冲区满了,才会阻塞。

2023-04-13 20:58:07 303

原创 png图片转RGBA数组,保存到头文件

png转数组

2022-11-28 16:27:19 593

原创 各种格式音视频文件下载

音视频下载

2022-09-29 17:11:25 536

原创 android native层使用mediacodec(硬编解码) mediamuxer mediaExtractor做转码工具。

native mediacodec

2022-08-17 11:14:00 1205

原创 qt5.11.12移植到安卓,并适配surfaceflinger,或自定义qpa

qt

2022-08-04 10:15:14 933

原创 SDL2.2 移植适配安卓surfaceFlinger,移植适配自定义display框架,及其遇到的问题。

sdl surfaceflinger

2022-07-21 15:05:35 237

原创 安卓libc setenv函数内存泄漏

安卓 libc 内存泄漏

2022-06-27 15:37:18 400 3

原创 Linux 动态库更新需要注意的坑

linux VFS快速入门,请参考我的博客如何在linux添加一个最简单的自己写的文件系统。源码今日头条,视频演示https://m.toutiaoimg.com/i6753964400429761031/?gd_ext_json=%7B%22enter_from%22%3A%22click_creation_center%22%2C%22category_name%22%3A%22creation_center%22%7D&enter_from=click_creation_center&am..

2022-04-02 11:13:21 4723 1

转载 arm 1b

在启动脚本里面经常出现1b 这个东西,找了很久一直不知道是什么,下面帖子讲的很好,于是转载了转载地址:http://blog.chinaunix.net/uid-20551291-id-1926997.htmlhead.S中初始化内存有以下一段程序:ENTRY(memsetup)@ initialise the static memory@ set memory control registersmovr1, #MEM_CTL_BASEadrlr2, mem_cfg_v...

2022-03-14 11:44:09 126

原创 打通Linux内存管理任督二脉

1)MMU的作用?什么是页表?如何编程使用MMU?什么是虚拟地址、物理地址、链接地址? 2)内核的MMU初始化过渡阶段,即CPU使用物理地址转换为使用虚拟地址的过程。 3)内核内存管理buddy+slub是如何管理内存?(struct page结构体如何关联虚拟地址与物理地址) a)虚拟地址与物理地址的转换。 b)高低端内存映射。 4)用户空间进程如何做到3G虚拟地址空间独立? 5)用户空间内存申请过程。为什么要这么做? 6)dma_alloc_coherent 与kmall...

2022-03-04 16:05:10 716

原创 cmake获取git tag,git log

# 通过git获取版本宏 BUILD_TAG_VERSIONexecute_process(COMMAND git describe --tags TIMEOUT 5 OUTPUT_VARIABLE GIT_TAG_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)message(STATUS "building from git tag ${GIT_TAG_VERSION}")add_definitions(-DBUILD_TAG_VERS.

2022-01-29 14:49:14 667

原创 ffmpeg源码剖析之IO open

https://www.toutiao.com/i6978298463293342222/播放器要播放一个本地的音视频文件,或者说要播放一个网络音视频流,那么他肯定要对这个文件或者说网络流进行IO操作,即open read write seek,socket connect recv send等操作。我们以http音视频网络流为例,http的相关操作封装如下:constURLProtocol ff_http_protocol = {.name ="http",.url_op..

2021-06-27 11:44:53 265

原创 ffmpeg+alsa 实现的mp3播放器

压力测试如下:循环播放N次,无内存泄露源码如下:#include <stdio.h>#include <libavformat/avformat.h>#include <libavcodec/avcodec.h>#include <alsa/asoundlib.h>#include <unistd.h>#include <string.h>#define max_buffer_time 500000snd_.

2021-01-29 15:38:42 1122 2

原创 uinput模拟一个ubuntu支持的触摸板设备

const修饰全局变量与局部变量的区别c++揭秘,诡异的const局部变量

2020-05-09 13:35:12 228

原创 安卓语音通话、语音识别交互之—回声消除,降噪,自动增益、静音检测—单独编译移植webrtc 各个模块

源码:https://edu.csdn.net/course/play/8542课程计划:

2020-04-30 17:26:48 3232 5

原创 mosquitto源码剖析---bridge模式是如何偷梁换柱的

https://www.toutiao.com/i6821040671533564427/

2020-04-29 16:05:23 289

原创 QNX与linux中互斥锁的差异

https://www.toutiao.com/i6804717749596586510/

2020-03-16 16:21:50 349

原创 linux使用mosquitto 客户端死锁

客户端使用mosquitto的问题:发现在linux中使用,不能在disconnect的回调函数中去调用mosquitto_reconnect或mosquitto_connect等函数,会造成pthread_mutex_unlock(&mosq->current_out_packet_mutex)死锁。但是在QNX却不会死锁,可以正常reconnect。void my_d...

2020-03-12 11:16:23 212

原创 手把手写一个最简单的linux文件系统

https://www.toutiao.com/i6793888307945144843/

2020-02-16 11:58:25 720

原创 芯片运行在极限的边缘,怪异问题集(一)创建消息队列,错误码EMFILE

https://www.toutiao.com/i6756374821291950600/

2019-11-07 13:29:00 132

原创 深入理解linux内核Epoll机制,源码分析

https://www.toutiao.com/i6748299406518256135/#6649976-qzone-1-84791-3c8d8e8bb11b3fb9a4fd89478693d6c1epoll嵌套限制头条号:s无邪

2019-10-19 09:07:31 235

gcc-arm-none-eabi-5_4-2016q3-20160926-linux_cf.7z

编译工具链。

2020-06-04

圈圈教你玩USB part2

高清带书签。。。。。。。usb从入门到精通。。。。需要与part1一起才能解压

2019-04-18

圈圈教你玩USB part1

高清带书签。。。。。。。usb从入门到精通。。。。需要与part2一起才能解压

2019-04-18

marvell 88W8686 Host Interface Registers寄存器说明

88W8686寄存器手册,完整版。

2018-12-30

Linux设备驱动开发详解4.0内核(带书签 宋宝华)

Linux设备驱动开发详解4.0内核(非扫描版)。。

2018-12-08

深入理解Android WiFi NFC和GPS卷(邓凡平)

带书签 深入理解Android WiFi NFC和GPS卷(邓凡平)

2018-10-27

深入理解安卓卷3

带书签,去除重复页面,纠正不正确的书签。

2018-10-13

面向低成本的安卓系统裁剪

安卓系统裁剪

2018-10-11

自定义Recycleview

重写recyclerview,支持下拉刷新、下拉加载更多、addHeader、addFoot、setEmptyView

2016-06-26

安卓camera入侵检测

打印出的iDiffNum值越大,越表明入侵。用手机测试检测效果很是灵敏

2016-01-22

安卓下拉刷新上拉加载更多的listview

参考了别人的代码,修复了他的BUG.

2015-12-15

opencv4android3.0判断俩张图片是否一样

opencv4android3.0判断俩张图片是否一样

2015-12-14

ksoap2-android-assembly-3.4.0-jar-with-dependencies

ksoap2-android-assembly-3.4.0-jar-with-dependencies

2015-11-25

安卓stickyGridHeader

安卓使用stickyGridHeader实现数据分组

2015-11-23

日历控件好用的

很好用的日历控件

2013-03-15

空空如也

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

TA关注的人

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