- 博客(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
2052

原创 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
2155
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
2572

原创 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
470

原创 海思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
2060
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
3598

原创 ffmpeg内存读取音频数据转码后发送到海思AI-」AO
前两节 “从内存中读取数据” “将数据输出到内存”转载自博客https://blog.youkuaiyun.com/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
618

原创 使用智能指针std::shared_ptr std::make_shared管理申请通用内存,含例子
一、介绍首先shared_ptr类型是 C++ 标准库中的一个智能指针,是为多个所有者可能必须管理对象在内存中的生命周期的方案设计的。 在您初始化一个 shared_ptr 之后,您可复制它,按值将其传入函数参数,然后将其分配给其他 shared_ptr 实例。 所有实例均指向同一个对象,并共享对一个“控制块”(每当新的 shared_ptr 添加、超出范围或重置时增加和减少引用计数)的访问权限...
2020-02-21 13:12:04
1518
原创 oom kill行为解析
oom kill 触发一次仅杀死一个进程,如果内存仍然不足,才会触发下一次。在select_bad_process过程中选择的是得分最高的进程,在oom_kill_process中kill的时候如果主子进程不共享mm,则会杀掉子进程。所以在主进程得分最高的时候看到的现象是先杀掉了其创建的子进程,然后内存还是不足才最终杀掉主进程;1、常见的oom大多是内存泄漏导致的,或者瞬时申请的内存较大,触发了低水位的内存保护;2、打开文件资源及其他资源太多,没来得及回收,也会将内存损耗拖入低水位;
2022-11-06 14:53:51
1676
原创 深度学习入门篇(一):环境搭建(PyTorch+Anaconda3+CUDA+PyCharm )
PyTorch:是一个开源的Python机器学习库,基于Torch,底层由C++实现,应用于人工智能领域,如自然语言处理。它主要由Facebook的人工智能研究团队开发,并且被用于Uber的概率编程软件Pyro。PyTorch主要有两大特征:类似于NumPy的张量计算,可使用GPU加速;基于带自动微分系统的深度神经网络。它是一个核心模块,我们所应用的模型工程引用了这个库的接口,这个库实现了核心的机器学习算法。Anaconda3。
2022-08-21 15:58:51
1138
原创 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
1074
原创 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
5566
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
6163
原创 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
714
原创 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
4973
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
9986
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
739
原创 minigui相关硬件加速添加方法
一、关于硬件加速1.1 介绍以海思平台的TDE加速显示模块为例,它主要为OSD和GUI提供快速的图形绘制功能,主要有快速位图搬移,快速色彩填充,快速抗闪搬移、快速位图缩放,画点、画水平/垂直线、位图格式转换,位图alpha叠加,位图按布尔值运算、ColorKey等操作。1.2 应用如何在minigui上应用这些加速模块呢?上一章详解minigui图片加载及显示介绍了从图片解码装载到bitmap,再由bitmap刷新到fb的整个大体流程。所有图片刷新或者window刷新都离不开后面刷新到fb的流程。
2021-08-20 10:01:47
828
原创 详解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
1476
原创 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
2599
原创 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
828
原创 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
4101
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
2232
原创 字符设备文件的打开操作
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
421
原创 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
587
原创 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
2215
原创 一个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
833
原创 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
1020
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
336
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
1526
转载 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
1975
原创 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
873
原创 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
711
原创 live555 rtsp码流服务器移植应用
一、编译1.1下载源码可以登陆live555的官网获取live555最新版源代码,也可从下面这个地址获取到本文移植所使用的源代码:http://download.youkuaiyun.com/detail/yxtouch/7482263解压源代码,进入解压后的目录,输入如下命令生成makefile文件:./genMakefiles linux用于生成ubuntu中makefile,然后运行make&make install完成编译和安装。1.2交叉编译创建所需的config文件用于生成makef
2021-03-11 10:16:30
1055
2
原创 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
14375
6
原创 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
3579
原创 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
2480
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
10989
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
1729
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人