自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 rk3399 kernel时钟设置分析

以vop时钟设置为例//gpu/drm/rockchip/rockchip_drm_vop.c +2860static void vop_crtc_enable(struct drm_crtc *crtc)clk_set_rate(vop->dclk, adjusted_mode->crtc_clock * 1000);clk_core_set_rate_nolock(clk->core, rate);clk_change_rate(top);core->ops-&g

2021-01-28 23:02:19 1778

原创 rk3399pro交叉编译工具链安装|qt安装

Qt Creator下面介绍 Qt Creator 的使用说明,在操作前,请先按前面的步骤配置好交叉编译环境和运行环境。安装进入 Qt 官方下载页面,下载 qt-opensource-linux-x64-5.9.4.run,下载完成之后,运行安装,一路next。配置安装完成后,启动 Qt Creator,打开菜单 Tools -> Options,找到 Kits。配置 Qt Versionsqmake:/home/cks/fireFlyLinuxSdk/firefly/linux_sdk

2020-12-09 21:49:09 1963 3

原创 rk3399pro buildroot SDK编译及烧录

一、工具及平台开发环境:ubuntu14.04代码管理:repo平台:firefly RK3399pro二、下载源码Firefly_Linux_SDK源码包提取码:ffly三、编译环境sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler \gcc-aarch64-linux-gnu mtools parted libudev-dev

2020-12-09 21:24:18 2371

原创 qml c++混合编程 天气插件例子

本文的demo中列举了1、如何将c++对象导入qml从而解决qml调用c++接口传递数据即qml==>>c++的问题;2、通过建立信号槽的方式解决c++通知qml层并调用qml函数及往qml传递数据即 c++==>qml的问题.主要功能:天气插件,实现显示及更新气象的功能。cks@cks:~/weather$ tree.├── deployment.pri├── main.cpp├── main.qml├── qml.qrc├── Res│ ├── 0.png

2020-09-27 00:06:32 379

原创 海思3536 emmc驱动调试记录

hi3536 emmc驱动记录一、kernel menuconfig配置mmc相关驱动Device Drivers ---> <*> MMC/SD/SDIO card support ---> (8) Number of minors per block device //分区数 <*> himci v200 emmc/sd/mmc device support ---> --- himci v200 emmc/sd/mmc

2020-08-11 11:40:03 1713 2

原创 海思gpio控制(应用层用例和驱动用例)及寄存器操作

一、海思设置寄存器操作标题方法一:使用应用层的调试工具 himm~ # himm*** Board tools : ver0.0.1_20121120 *** [debug]: {source/utils/cmdshell.c:166}cmdstr:himmusage: himm <address>. sample: himm 0x80040000 [error]: exit:0XFFFFFFFF.{source/tools/himm.c:45}[END]使用方式是 him

2020-07-06 10:17:26 2633

原创 ffmpeg内存读取音频数据转码后发送到海思AI-」AO

前两节 “从内存中读取数据” “将数据输出到内存”转载自博客https://blog.csdn.net/leixiaohua1020/article/details/12980423/从内存中读取数据ffmpeg一般情况下支持打开一个本地文件,例如“C:\test.avi”或者是一个流媒体协议的URL,例如“rtmp://222.31.64.208/vod/test.flv”其打开文件的函数是avformat_open_input(),直接将文件路径或者流媒体URL的字符串传递给该函数就可以了。

2020-07-02 11:41:17 519

原创 使用智能指针std::shared_ptr std::make_shared管理申请通用内存,含例子

一、介绍首先shared_ptr类型是 C++ 标准库中的一个智能指针,是为多个所有者可能必须管理对象在内存中的生命周期的方案设计的。 在您初始化一个 shared_ptr 之后,您可复制它,按值将其传入函数参数,然后将其分配给其他 shared_ptr 实例。 所有实例均指向同一个对象,并共享对一个“控制块”(每当新的 shared_ptr 添加、超出范围或重置时增加和减少引用计数)的访问权限...

2020-02-21 13:12:04 1292

原创 oom kill行为解析

oom kill 触发一次仅杀死一个进程,如果内存仍然不足,才会触发下一次。在select_bad_process过程中选择的是得分最高的进程,在oom_kill_process中kill的时候如果主子进程不共享mm,则会杀掉子进程。所以在主进程得分最高的时候看到的现象是先杀掉了其创建的子进程,然后内存还是不足才最终杀掉主进程;1、常见的oom大多是内存泄漏导致的,或者瞬时申请的内存较大,触发了低水位的内存保护;2、打开文件资源及其他资源太多,没来得及回收,也会将内存损耗拖入低水位;

2022-11-06 14:53:51 1253 1

原创 深度学习入门篇(一):环境搭建(PyTorch+Anaconda3+CUDA+PyCharm )

PyTorch:是一个开源的Python机器学习库,基于Torch,底层由C++实现,应用于人工智能领域,如自然语言处理。它主要由Facebook的人工智能研究团队开发,并且被用于Uber的概率编程软件Pyro。PyTorch主要有两大特征:类似于NumPy的张量计算,可使用GPU加速;基于带自动微分系统的深度神经网络。它是一个核心模块,我们所应用的模型工程引用了这个库的接口,这个库实现了核心的机器学习算法。Anaconda3。

2022-08-21 15:58:51 1015

原创 onvif gsoap 设备端接口方法部署示例及gsoap代码调用分析

一、获取并编译gsoap下载gsoap环境准备 sudo apt-get install flex bison libssl-dev unzip zlib1g-dev ffmpeg编译安装unzip gsoap_2.8.*.zipcd gsoap-2.8./configure --prefix=PREFIX makesudo make install二、编译生成onvif core lib 相关库新建soap目录,从gsoap-2.8/gsoap拷贝相关文件到soap目录

2022-04-26 23:54:54 859

原创 onvif使用介绍及ipc设备构建

onvif入门思路及快速理解开发过程和协议抓取分析。

2022-04-10 20:57:34 6159

原创 lvgl 视频叠加图标显示

环境平台基于lvgl实现的播放视频的同时叠加图标控件。硬件平台:anyka37Elvgl版本:v7.11单fb节点 , 不具备多硬件图层叠加功能,仅有/dev/fb0基本思路采用img obj作为视频的载体,构建图标与视频的层级关系//新建一个video frame img 实例 类型为LV_IMG_CF_TRUE_COLOR_ALPHA,data地址为frame data缓存地址 lv_img_dsc_t img_lv_dec_video = { .header.always_ze

2021-09-09 11:26:32 4466 14

原创 lvgl硬件加速

基于lvgl v7.11.0一、关于硬件加速LVGL提供了一些GPU的硬件加速接口 lv_hal_disp.h可以在lv_conf.h 中将宏打开。#define LV_USE_GPU 1 /*Only enables `gpu_fill_cb` and `gpu_blend_cb` in the disp. drv- */相关接口如下: /** MANDATORY: Write the internal buffer (VDB) to the displa

2021-09-03 14:39:49 5009

原创 minigui 的中文字体部署及支持&窗口模态、非模态

一、minigui支持ttf字体1.1 首先我们准备两个素材song-gb2312.ttf gb2312编码的中文字体库times.ttf ISO8859编码英文字符串1.2 将其添加到 MiniGUI.cfg[truetypefonts]font_number=2name0=ttf-fixed-rrncnn-0-0-GB2312-0fontfile0=/mnt/minigui_debug/res/font/song-gb2312.ttfname1=ttf-times

2021-08-26 10:58:21 568

原创 LVGL linux arm平台上的详细移植过程(下)

本文接着上一篇 LVGL linux arm平台上的详细移植过程 开始讲解驱动部分和main.c demo部分的移植和编写。一、显示驱动和触摸屏驱动添加驱动部分我们需要将 src\lvgl\examples\porting 底下的这几个文件 src ├── lvgl ├── examples └── porting ├── lv_port_disp_template.c ├── lv_por

2021-08-25 11:42:38 4247 3

原创 LVGL linux arm平台上的详细移植过程(上)

一、环境准备pc系统:Ubuntu 16.04 LTSsudo apt-get install gitsudo apt-get install cmake二、下载代码我们需要下载lvgl v7.11.0版本的三个代码包如下1、lvgl 核心绘图代码git clone https://github.com/lvgl/lvgl.git 切到tag v7.11.0或者直接下载压缩包https://github.com/lvgl/lvgl/tree/v7.11.02、lv_drivers

2021-08-24 17:43:52 7994 3

原创 minigui重要的DC memory绘图过程

一、引言上一章 minigui相关硬件加速添加方法 介绍了从绘图到显示的整体流程,以及最终调用到的硬件加速方法。如果我们不用DC MEM的话那将是每一次FillBoxWithBitmap ,以及DrawText,settext都会是直接调用到硬件的updateRect直接画出来,可以看到icon以及字符是一个一个刷出来的,这个也可以在updaterect处加打印验证。为了避免这样的问题,我们使用DC mem可以在整个window画完后再调用updateRect将整个window更新到framebuffer

2021-08-23 23:11:26 609

原创 minigui相关硬件加速添加方法

一、关于硬件加速1.1 介绍以海思平台的TDE加速显示模块为例,它主要为OSD和GUI提供快速的图形绘制功能,主要有快速位图搬移,快速色彩填充,快速抗闪搬移、快速位图缩放,画点、画水平/垂直线、位图格式转换,位图alpha叠加,位图按布尔值运算、ColorKey等操作。1.2 应用如何在minigui上应用这些加速模块呢?上一章详解minigui图片加载及显示介绍了从图片解码装载到bitmap,再由bitmap刷新到fb的整个大体流程。所有图片刷新或者window刷新都离不开后面刷新到fb的流程。

2021-08-20 10:01:47 658

原创 详解minigui图片加载及显示

本文基于minigui3.0.12版本一、接口方法//加载图像内容bitmap到内存bmp句柄int GUIAPI LoadBitmapFromFile (HDC hdc, PBITMAP bmp, const char* file_name);//释放bmp句柄void GUIAPI UnloadBitmap (PBITMAP bmp);//加载bitmap到framebuffer;BOOL GUIAPI FillBoxWithBitmap (HDC hdc, int x, int y, i

2021-08-08 23:14:21 1220

原创 repo多仓库管理简介

1.应用场景:现在App Project 有多个Module,每个Module是各自团队自己维护编写的,每个Module都有自己的git地址。 Project Main = Module A + Module B + Module C。2.问题:如果团队A想编写并测试自己的Module A,必须要三个Module都clone下来,然后自建一个project引入 Module B 和 Module C然后才能修改运行,改代码的时候必须注意哪些文件不能加入git跟踪,不然不能提交。三个团队都要这样,非常麻

2021-06-29 22:08:21 2136

原创 shared_ptr定制删除器

定制删除器shared_ptr的另一种形式的构造函数share_prt(Y* p, D d), 参见boost shared_ptr基本用法介绍它的第一个参数是要被管理的指针,而第二个删除器参数d则告诉shared_ptr在析构时不是使用delete来操作指针p,而是要用d来操作,即把delete p 换成 d (p)。在这里d可以是一个函数对象,也可以说一个函数指针,只要它能够像函数那样被调用,使得d ( p )成立即可。对删除器的要求是它必须可以拷贝,行为也必须也像delete那样,不能抛出异常。

2021-06-07 22:48:18 764

原创 boost shared_ptr基本用法介绍

一、介绍share_ptr包装了new操作符在堆上分配的动态对象,但他实现的是计数型的智能指针,share_ptr早期的名字就是counter_ptr,可以自由拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0时)它才删除被包装的动态分配的对象。share_ptr也可以安全地放到标准容器中,是在STL容器中存储指针最标准的解法。template<class T>class shared_ptr{ public: typedef T element_type; //

2021-06-06 19:00:09 3717 2

原创 rk mpp架构文档翻译

mpp设计:mpp是Rockchip SoC的跨平台媒体处理器的中间件库。mpp的主要目标是在多媒体(主要是视频和图像)处理器上提供高性能,高灵活性和扩展性。mpp设计的主要目标是链接不同的Rockchip硬件内核驱动和不同的用户应用。Rockchip有两套硬件内核驱动程序第一套是vcodec_service/vpu_service/mpp_service,是一种高性能五状态帧基础硬件内核驱动。这一驱动支持所有硬件能够提供的有效解码器。这一驱动目前应用于Android/Linux。第二套是为Chr

2021-05-23 15:07:18 1954

原创 字符设备文件的打开操作

sys_openfdo_sys_openfd = get_unused_fd_flags(flags);//获得文件描述符fb;struct file *f = do_filp_open(dfd, tmp, &op, lookup);//通过tmp==filename(/dev/filename)查找与之对应的设备文件的inode,在linux文件系统中,每个文件都有一个inode与之对应。path_openatfilp = get_empty_filp();//调用这个函数为每个打开的文

2021-04-11 20:21:20 355

原创 imx6q添加虚拟声卡

1、添加codec设备节点kernel-imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi+ sound-mic {+ compatible = "fsl,imx6q-sabresd-mic1388",+ "fsl,imx-audio-mic1388";+ model = "mic1388-audio";+ cpu-

2021-03-31 21:11:43 504

原创 rk3399 simple-card alsa架构分析

一、 概念CPU DAI:主控端的 Audio Data Interface,比如 I²S,Spdif,Pdm,Tdm (通常所说的platform层)CODEC DAI:即 Codec将数字信号转换为模拟音频输出的新品(通常所说的codec层)DAI_LINK:绑定 Cpu_Dai 和 Codec_Dai 为一个声卡,等同于 Machine Driver。(通常所说的platform层)DMAENGINE:用于 Cpu 和 I²S/Spdif 等 Dai 之间的 Dma 传输引擎,实际是通过

2021-03-26 09:35:31 1858

原创 一个c写的线程安全fifo队列

git目录如下:https://github.com/rdhananjaya/thread-safe-fifo-queuefifo.h#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <string.h>#ifndef FIFO_H#define FIFO_Hstruct _node { void *data; struct _node * next;

2021-03-23 22:23:25 592

原创 ffmpeg 解码acc,mp3音频并使用alsa lib播放例子

ffmpeg以流的方式读取acc mp3音频文件解码并重采样后使用alsa lib 声卡card0播放的例子代码如下:#include <stdlib.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include

2021-03-21 11:44:59 864 1

原创 i2c设备驱动分析

平台设备模型i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned len)该函数会注册board device总线设备链表 ,在平台init函数中运行.compatible = “fsl,imx1-i2c”,platform_driver_register(&i2c_imx_driver);i2c_imx_probe(pdev)device端的流程:1、构建adaptstrlcp

2021-03-15 23:18:12 283 2

原创 android hal文件的编写

一、hal主体框架解析hal:模板:hardware/libhardware/modules/overlay/如图所示jni与hal层主要数据结构和函数调用:首先jni层通过hw_get_module函数传入LED_MODULE_ID 即hal库的字符串名称,来找到hal库并加载它,加载后为pmodule赋值拿到led_hw_module_t 结构体实现。然后再通过pmodule->common.methods->open函数给pdevice赋值,拿到led_hw_device_t的结

2021-03-15 22:19:59 1323

转载 linux alsa驱动讲解

转载自:https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/477412/程式前沿幫助程式設計師解決問題,增加專業技能,提升個人能力與未來世界競爭力。程式語言前端開發IOS開發Android 開發雲端運算人工智慧伺服器搜尋資料庫軟體開發工具Linux ALSA音訊系統:platform,machine,codec2018.07.17程式語言Linux ALSA音訊系統:platform,machine,codecHOME程式語言Lin

2021-03-14 11:33:22 1771

原创 imx6 添加配置一路i2s

1、确定具体的i2s外部引脚,如图:我添加的一路是ssi3->int-port7->ext-port5; ext-port5 这路是可以软件上修改的。也就是ext-prot是可以随意搭配的。这样就确定了管脚用的是哪些了。2、配置dtsi使其能使用对应功能的引脚。 在pinctrl_audmux: audmuxgrp 节点添加对应的管脚。对占用的管脚进行屏蔽。3、添加imx-mic1388 codec机器层对应的节点。 sound-mic { comp

2021-03-12 16:37:56 754

原创 stm32 SPI设置

1、问题描述由于一开始时整板还没做出来,只能拿一块stm32f103的开发板和另一块FPGA板子来调。接线使用杜邦线连接了spi的CS片选SCK clk时钟信号,MOSI/MISO数据输入输出信号,4根线,配置详情为10~15Mhz时钟,stm32为主模式。发现电平有文波。2、配置SPI_Mode_Master,spi clock polarity 时钟空闲时极性为低电平SPI_CPOL_Low即一开始电平拉低,FPGA端clk下降沿数据改变clk上升沿数据采样,故spi clock phrase设为

2021-03-12 14:38:37 561

原创 live555 rtsp码流服务器移植应用

一、编译1.1下载源码可以登陆live555的官网获取live555最新版源代码,也可从下面这个地址获取到本文移植所使用的源代码:http://download.csdn.net/detail/yxtouch/7482263解压源代码,进入解压后的目录,输入如下命令生成makefile文件:./genMakefiles linux用于生成ubuntu中makefile,然后运行make&make install完成编译和安装。1.2交叉编译创建所需的config文件用于生成makef

2021-03-11 10:16:30 777 1

原创 rk3399 rkmpp 在ffmpeg上实现硬编解码

一、编译指令:--enable-cross-compile --cross-prefix=/home/cks/fireFlyLinuxSdk/firefly/linux_sdk/buildroot/output/rockchip_rk3399pro/host/bin/aarch64-buildroot-linux-gnu- --sysroot=/home/cks/fireFlyLinuxSdk/firefly/linux_sdk/buildroot/output/rockchip_rk3399pro/ho

2021-03-10 09:57:16 12264 3

原创 DRM用户空间内存操作

一、定义数据结构为了便于说明, 额外定义一个外部内存结构:// drm相关操作需要引用该头文件#include <drm.h>struct bo { int fd; // /dev/dri/card0节点fd void *ptr; // 用户空间虚拟地址 size_t size; //大小 size_t offset; size_t pitch; unsigned handle;};二、获取设备节点:struct bo* bo;bo = (struct bo*)ma

2021-03-03 14:33:16 2851

原创 rk3399 Android mpp使用

一、 下载源代码MPP 源代码发布官方地址: https://github.com/rockchip-linux/mpp, 发布分支为 release 分支。下载命令: git clone -b release https://github.com/rockchip-linux/mpp.git二 、编译MPP 源代码编译脚本为 cmake,需要依赖 2.8.12 以上的版本,建议使用 2.8.12 版,使用高版本的 cmake工具可能会产生较多的 warning。2.1 Android 平台交叉

2021-03-01 08:56:35 2039 1

原创 rk3399 DRM显示框架介绍及demo解析

一、什么是DRMDRM( Direct Rendering Manager)即直接渲染管理器。它是为了解决多个程序对 Video Card 资源的协同使用问题而产生的。它向用户空间提供了一组 API,用以访问操纵 GPU。简单理解,DRM是Linux下的图形渲染架构,用来管理显示输出和分配buffer。应用程序可以直接操纵 DRM的 ioctl 或者是用 framebuffer 提供的接口进行显示相关操作。后来封装成了 libdrm 库,让用户可以更加方便的进行显示控制。总体框架如下二、DRM包含

2021-02-25 00:13:14 9774 2

原创 rk3399drm使用

介绍1.Direct Rendering ManagerThe Direct Rendering Manager (DRM) is a subsystem of the Linux kernel responsible for interfacing with GPUs of modern video cards. DRM exposes an API that user-space programs can use to send commands and data to the GPU and pe

2021-02-05 15:21:54 1558

空空如也

空空如也

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

TA关注的人

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