自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redroid11 集成 nvidia gpu hals

此篇文章中使用 nvidia 相关aosp 库、510.155_Android_R_aarch64_release文件来于原厂提供基础资料,可供 aosp 移植库基本思路。本文记录 redroid11(aosp11) 集成 nvidia gpu 驱动库、 nvidia_omx 驱动库实践记录,以作备忘。

2023-10-28 15:38:42 1144 2

原创 多核 ARM Server 性能调优

设备流表存在于每个网络设备的每个接收队列,表中记录的是每个未完成流使用的CPU号,XPS通过创建CPU到网卡发送队列的对应关系,来保证处理发送软中断请求的CPU和向外发送数据包的CPU是同一个CPU,用来保证发送数据包时候的局部性。. 接收队列映射,基于接收队列的映射来选择CPU,也就是说让接收队列和发送队列在同一个CPU,或指定范围的几个CPU来处理。. 如果当前流使用的CPU未设置或者CPU处于离线状态,那就使用期望CPU表中的CPU号,也就是RPS计算而得的CPU号。

2023-09-28 14:56:57 1164

原创 制作自定义版本 kernel 镜像

采用 make-kpkg 方法编译内核image 和 header 文件。在 Ampere ARM 服务器、 调整PCIe RC驱动相关代码、和AMDGPU 驱动相关内容,为生产部署便捷,给运维组同事直接提供内核头文件.deb 和 kernel.deb 安装包,本篇记录使用 make-kpkg 过程。

2023-09-22 19:30:18 481

原创 Ampere ARM Server 内核版本更新

本篇记录 Ampere ARM Server 服务器上,升级内核版本或部分驱动的方法。安装编译依赖库。

2023-09-18 19:33:27 240

原创 无线定位之一 SX1302 网关源码 thread_up 线程详解

本篇内容就分析线程 thread_up 部分内容、下一篇介绍 thread_down 线程内容;然后笔者将参考loraWan的协议,进一步梳理对照此两块内容。

2023-03-20 17:00:58 1214 3

原创 虚拟摄像头之 十二 v4l2loopback虚拟机摄像头移植实战(完结篇)

本篇记录在 android8 的 IMX8QM 平台移植 v4l2loopback 虚拟摄像头实战过程记录;其中主旨是记录整个过程、已经期间出现的踩坑过程,后期虚拟摄像驱动还有移植到多核ARM平台上,此文以作备忘。

2022-10-13 14:15:00 4800 6

原创 开发 ubuntu 系统串口操作权限

记录 ubuntu系统开放串口权限

2022-10-12 21:39:16 1337

原创 虚拟摄像头之 十一 Camera RequestThread 预览循环之 surface 显示

虚拟摄像头隔帧绿屏bug解决实践记录

2022-10-11 17:49:59 1646

原创 部署 mosquitto broker 服务器过程笔记

本篇记录在 ubuntu18-x64 虚拟机上通过安装的方式部署 mosquitto broker 全过程,做备忘用、同时供有需求的小伙伴参考。

2022-09-06 10:27:31 2205

原创 虚拟摄像头之十: Camera3 DeviceSession 和 CaptureRequest 流程机制

前面九篇系列文章、把 Android Camera 框架逻辑基本描述清晰、从使用API2的角度看、还有 Session 和 CaptureRequest 未详细梳理、导致虚拟摄像头移植过程、出现者两块内容错误时、无法修复bug。因此本篇把这两方面的内容也详细梳理、我们从中就能够看到为什么 Camera api2 比 api1 接口效率高的原理啦。

2022-08-24 17:47:04 2459 1

原创 虚拟摄像头之九: IMX8Q 的 camera.imx8.hal 框架详解

android 系统的 camera hal 框架不同厂家设计思路、不尽相同;本篇梳理 NXP android8 的 camera hal 设计框架。笔者再次特别说明:在《虚拟摄像头之三: 重构android8.1 的 v4l2_camera_HAL 支持虚拟摄像头》文章中声称、虚拟摄像头 HAL 方案计划采用Android8 中的 v4l2_camera_HAL 来重构实现;现在更改为 NXP 的 CameraHAL 框架来实现,因此采用此篇梳理学习笔记内容。

2022-08-20 17:15:07 2272 1

原创 虚拟摄像头之八: 从 Camera api2 角度看摄像头框架

在前面的文章中描述 Android 系统 android.hardware.Camera (api1) 是如何通过JNI接口调用 libcamera_client.so库、管理系统摄像头; 本篇从 CameraManager 看如何使用 android.hardware.Camera2 接口框架来使用相机

2022-08-12 14:42:03 1235

原创 虚拟摄像头之七:《详解 CameraService 都做了什么》之 CameraService 与 cameraclient 通讯

在阅读本篇内容前、你需要首先了解 android 的 Binder IPC 通讯框架基本原理,才好更好理解 CameraServer 与CameraClient 之间通讯原理;此部分描述的是 android.hardware.Camera1 接口相机连接 CameraServer 的逻辑。...

2022-08-12 14:37:54 2020

原创 虚拟摄像头之六: 《详解 CameraService 都做了什么》之 CameraService 与 CameraProvider 通讯

上一篇梳理了 CameraProvider 是独立服务、通过 v4l2 框架管理物理摄像头,本篇主要描述的是 CameraService 如何与 CameraProvider 通讯;android 的 CameraService 是 Camera 子系统核心模块,Camera Api1 和 Api2 的接口、是如何与CameraService 通讯呢?笔者将分两篇来介绍。...

2022-08-12 14:23:46 1714

原创 虚拟摄像头之五: 详解 android8 的 Camera 子系统框架

由于 android 版本差异、 camera子系统框架也有不同调整,本文是采用 android8 源码作为参考对象,对 camera 子系统进行框架梳理,建立起框架性认知后、在进一步分析各模块实现时、就如同有了地图和指南针功用。...

2022-08-05 16:10:46 2916 1

原创 虚拟摄像头之三: 重构android8.1 的 v4l2_camera_HAL 支持虚拟摄像头

接下来将了解Android HAL是如何与相机设备进行交互的,一般各硬件厂商的 camera HAL会有个v4l2_camera_hal.cpp 文件,在这个文件中向frameworks提供HAL的对外接口,该文件会通过 HAL_MODULE_INFO_SYM 修饰一个 camera_module_t 结构体;camera Provider服务就是通过 HAL_MODULE_INFO_SYM 找到 camera_module_t,从而操作Camera HAL达到操作camera设备。...

2022-08-04 18:12:55 3256

原创 虚拟摄像头之四: 谁在调用 v4l2_camera_HAL 摄像头驱动

本篇是虚拟摄像头重构过程的系列文章,本篇博文谨分析二方面内容:(1). 谁在调用 v4l2_camera_HAL 摄像头驱动(2). 如何管理多版本 camera_hal 摄像头设备

2022-08-04 17:56:39 1661

原创 虚拟摄像头之二: 配置v4l2loopback虚拟摄像头为前置或后置摄像头

在android8.1系统中调用摄像头是通过 CameraManager::getCameraIdList() 方法获取系统摄像头列表,从列表中选择满足需要摄像头,用以拍照、录像或全景拍照。上篇中以介绍如何把v4l2loopback移植到android内核,本章介绍如何配置虚拟摄像头参数,以满足android用户程序直接使用。...

2022-08-02 11:18:23 2636

原创 虚拟摄像头之一: android8.1 移植 v4l2loopback 虚拟摄像头

笔者计划通过虚拟摄像头系列文章、让读者完整掌握在android系统中实现过程和应用方法。以作备忘之用、再则让有需求朋友可以参考。

2022-08-02 11:16:20 5160 1

原创 android8.1中用libtinyalsa编写sound-hal驱动

因笔者的项目中需要在android系统中实现虚拟声卡,实现android本地声音播放到远程终端、远程终端MIC录音送至android系统来;验证过使用libmedia库实现AudioRecord和AudioTrack的方案,此方案由于音频路由策略和声音焦点问题,无法实现项目目标。只能重构sound-hal层、通过libtinyalsa库直接控制声卡方式来实现此部分功能;因此就有了这篇记录文章,我们一起梳理如何实现。...

2022-08-01 15:17:24 1918 2

原创 android8.1 用 Native AudioTrack 直接播放PCM源音频文件

此篇博文是笔者验证通过远程MIC采集音频输入送至android8.1系统进行播放,可以理解为给本地的安卓系统添加远程的MIC录音功能。本地播放pcm的音频数据使用libmedia库直接调用native的接口,创建AudioTrack播放。044100构造audioTrack过程,首先newandroidAudioTrack()对象,然后通过androidAudioTrackset()方法来配置该对象;1。...

2022-08-01 12:09:17 762

原创 本地 Android repo 仓库迁移、恢复源码树

迁移本地 Android repo 仓库、还原源码树

2022-06-22 18:23:29 1155

原创 NDK调用android系统库(基于android frameworks自己编写库)过程记录

此篇博文记录android NDK调用系统库、第三方库实践记录,由于笔者在android上实现内录音,此apk是运行在云手机上的后台java程序,直接编译到云手机的镜像中、自动运行。由于android系统的声卡权限问题,故通过C++基于android系统frameworks编写自己的录音库,此库可以通过NDK调用。实现内录音功能。第一部分: 在android源码中、增加自己的so库1.1 在 external 文件夹中创建 audio_record 文件夹,此文件夹是库的目录,文件基本结构如下。

2022-05-25 23:07:41 2219 7

原创 android8.1 的HIDL接口、添加 ALSA 声卡驱动

此篇博文是上一篇文章 《Android 7.1 系统裁剪、定制化实践 snd-aloop 内录音》 的延续. 链接如下:https://blog.csdn.net/weixin_38387929/article/details/123506727?spm=1001.2014.3001.5502早期验证 ALSA 声卡内录音的功能,是在 android7.0 系统上,待向 android8.1 系统上移植时,我尴尬了 -因为硬件驱动 HIDL 的接口在 android8.0 版本的引入,致使我只能在梳理

2022-05-13 16:26:23 1470

原创 IMX8MQ MEK 开发板安卓 8.1-2.0.0 环境搭建过程记录

本篇是记录使用NXP官方开发板环境搭建过程记录,以防备忘。这次在无原厂技术支持的环境下,把整个流程梳理一下:(a). 选的开发板获取该开发板资料;(b). 搭建android8.1 源码开发环境;©. SD 卡分区并烧写android系统镜像;(d). 使用自己编译镜像在开发板上验证;第一条 研发资料说明1). android_O8.1.0_1.3.0_8M_tools.tar.gz 文件是 mfgtool 下载工具.可以制作 sd 卡镜像、烧写镜像至 emmc 中。2). imx-o8.

2022-04-23 17:05:14 4326

原创 IMX8MQ 的 Android8.1 源码编译过程记录

本篇主要是记录采用,nxp 官方开发板 MEK-IMX8MQ 搭建 android8.1 系统的工作记录,以防备忘。环境说明虚拟机 ubuntu-20-64 系统。step 1: Installing necessary software packages#sudo apt-get install flex bison gperf build-essential tofrodos python-markdown libxml2-utils xsltproc# sudo apt-get insta

2022-04-05 17:02:55 3369 1

原创 OpenWRT 系统增加自定义 machine 型号名称

记录在 mtk7688 平台上、修改 machine 名称,配置系统网卡数量,如何在 mtk 平台、通过设备树方式添加 RTC 时钟过程。本篇内容是工作笔记,以做备忘。setp 1>. setNetmode file configopenwrt 系统启动时会读取 etc/init.d/setnetmode 脚本,根据脚本配置内容,配置网络 switch 芯片 phy 接口数量和类型。下面时修改 mtk7688 仅有 wan 接口的设置方法,内容如下。@ package/base-file

2022-03-20 21:56:54 6745

原创 Android 7.1 系统裁剪、定制化实践 snd-aloop 内录音

背景描述:此篇是对《Android音频框架之一 详解audioPolicy流程及HAL驱动加载》、《Android音频框架之二 用户录音启动流程源码走读》 和《Android音频框架之三 用户录音启动流程源码走读 startRecord》的延续内容;本篇描述是 android8.1 源码中,如果增加 TinyAlsaHAL的源码,并配置 Android 系统启动和加载库项目,移植 tinyalsa 至 hikey960-Androi8.1 平台,以完成这个系列博文所实现的功能。Android 7.0

2022-03-15 16:55:57 7372

原创 Android音频框架之三 用户录音启动流程源码走读 startRecord

前言此篇是对《Android音频框架之一 详解audioPolicy流程及HAL驱动加载》 和《Android音频框架之二 用户录音启动流程源码走读》的延续,此系列博文是记录在Android7.1系统即以后版本实现内录音功能。当用户使用 AudioRecord 录音 API 创建 new AudioRecord 后,会创建文件流把 AudioRecord 的音频流写入到文件流或网络流中,调用的方法时 audioRecord.read() 方法,把数据写入到文件流中,源码如下public class

2022-03-14 18:58:20 6430

原创 Android音频框架之二 用户录音启动流程源码走读

前言此篇是对《Android音频框架之一 详解audioPolicy流程及HAL驱动加载》的延续,此系列博文是记录在Android7.1系统即以后版本实现内录音功能。当用户使用 AudioRecord 录音 API 时,private void init() { int minBufferSize = AudioRecord.getMinBufferSize(kSampleRate, kChannelMode, kEncodeFormat);

2022-03-14 16:45:07 7184

原创 C 语言中获取 Luci 配置内容实战记录(openwrt )

本篇记录是续上一篇、openWRT 中 Web 配置参数的延续,系统中有web的配置方法,程序中需要获取配置内容,更新程序运行状态。下面直接把程序贴上来,不解释什么了。#include <chrono>#include <iostream>#include <thread>#include <mutex>#include <fstream>#include <stdint.h>#include <unistd.h

2022-03-05 18:55:37 725

原创 OpenWRT 添加 WEB 配置界面实战记录

本篇是记录在 Openwrt 镜像中添加 自定义的 web 配置界面过程,编译进 openwrt 的系统镜像中。第一步 建立项目文件目录mkdir -p feeds/luci/applications/luci-app-Gatewaymkdir -p feeds/luci/applications/luci-app-Gateway/config mkdir -p feeds/luci/applications/luci-app-Gateway/luci mkdir -p feeds/luci/ap

2022-03-05 17:46:04 5537

原创 Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置

前言此音频架构梳理笔记、主要是因工作上需要在 Android8.1 以上版本中,增加 snd-aloop 虚拟声卡做前期准备工作,本篇文章提纲挈领的把音频框架主线梳理清晰,通过这篇文章能够清晰如下内容:1>. 声卡服务框架是什么时间产生、如何引发?2>. 声卡框架主要模块都是什么,他们基本功能如何分配? audioFlinger、audioService、audioPolicyMannager等3>. audio_policy_configuration.xml 与 audio_

2022-02-25 16:44:46 9680 1

原创 阿里云服务器的 webRTC 系统搭建与验证

本篇内容是对本次实验过程记录,即可以备忘、也能给有需求朋友提供一些参考。环境说明:服务器环境:阿里云ecs的 cetos7 系统.虚拟机ip:inet 172.26.43.146 netmask 255.255.240.0 broadcast 172.26.47.255公网IP:39.99.xx.xx房间与信令服务: SkyRTC,连接地址,https://github.com/dtltljb/webrtc_server_node.git客户端环境测试手机: 2部华为手机安卓测试代码:

2022-02-09 16:21:31 2068

原创 ubuntu 20 使用命令行 snd-aloop 实现内录音、录制音乐播放器的音频

实验环境:win10 + vmware-15 + ubuntu-201>. 安装alsa 相关应用sudo apt-get install alsa-base alsa-utils alsa-tools加载 snd-aloop 模块驱动sudo modprobe snd-aloop pcm_substreams=1查看 aloop 驱动加载情况robot@ubuntu:~$ aplay -l**** List of PLAYBACK Hardware Devices ****ca

2022-01-10 15:28:52 4035

原创 centos 系统 iptables 应用实例详解

此篇文章记录,通过xl2tp二层传输协议,在阿里云服务器中启用 iptables 服务,把特定端口转发至公司ARM服务器的组网应用。从而解决公司ARM服务器与阿里云服务器之间专用网络传输功能。

2021-12-24 19:09:11 1482

原创 ijkplayer 代码走读之 ijkPlayer 轮廓特征综合概述

在 read_thread() 线程中调用 stream_component_open(ffp, st_index[AVMEDIA_TYPE_VIDEO]); 函数,此函数 decoder_start(&is->viddec, video_thread, ffp, “ff_video_dec”) 启动了 video_thread 线程,本篇代码走读 video_thread 线程都做了什么内容。第 1 部分 wideo_thread 线程来源//>源码路径: libavforma

2021-11-30 11:54:14 3384

原创 ijkplayer 代码走读之 read_thread 线程中 av_read_frame() 数据流读取过程详解

回顾ijkplayer 开机过程:用户在 Android 程序中,调用封装接口 IjkLibLoader 方法,装载 ijkffmpeg、ijksdl和ijkplayer三个库文件到安卓系统;初始化播放器,调用的JNI接口程序 native_setup() 函数,此函数创建播放器消息队列和播放其相关参数;用户在 Android 程序中,调用 createPlayer() 和 prepareAsync() 封装接口函数创建播放器,并让播放器进入待播放状态;启动播放器。前面分析过 prepare

2021-11-29 18:58:29 1014

原创 scrcpy 客户端代码走读 H264 裸流解码过程详解

本篇主要是捋顺 scrcpy 客户端 解码流程,按照如下流程梳理:1>. decoder_init(&s->decoder); ///> 5. decoder_init();2>. stream_init(&s->stream, s->server.video_socket, &stream_cbs, NULL);3>. stream_add_sink(&s->stream, &amp

2021-11-25 12:14:25 1695

原创 ijkplayer 代码走读之 h264 解封装器应用详解

本连续记录 IJKPLAYER 代码走读文章,其主要的目的是在 IPKPLAYER 中增加私有网络通讯协议和私有解封装器。 本篇文章是成果输出记录,通过实例再次阐述 IJKPLAYER 的解协议、解封装的实现逻辑。并在本文中把实现过程做详细记录,供大家参考,以防个人备忘。第一 H264 解封装ffmpeg实现过程分析///> 源码文件路径 libavformat/h264dec.c/* 1、找到nalu定位符0x00 0x00 0x01 2、解析nalu头

2021-11-19 18:16:49 2661

空空如也

空空如也

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

TA关注的人

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