- 博客(55)
- 资源 (1)
- 收藏
- 关注
原创 linux内存之系统命令
通过vmalloc分配的内存都统计在/proc/meminfo的vmallocused值中,但是要注意,这个值不止包括了分配的物理内存,还统计了VM_IOREMAP、VM_MAP等操作的值,辟如VM_IOREMAP是把IO地址映射到内核空间,并未消耗物理内存,所以要把他排除在外,从物理内存的分配角度,只关心VM_ALLOC操作,这可以从/proc/vmallocinfo中的vmalloc记录看到。可以看出,min_free_kbytes随着内存的增大不是线性增长,没有必要也线性的预留出过多的内。
2024-06-12 13:20:30
955
原创 c++并发线程之创建线程、 join、detach、joinable、线程临时变量问题、ref使用
c++并发线程之创建线程、 join、detach、joinable、线程临时变量问题、ref使用
2022-06-30 17:20:02
275
原创 Python 常见类型BUG
Python 常见错误类型错误案例正确案例未定义赋值的变量 进行比较错误案例正确案例== 是比较 =是赋值错误案例正确案例索引越界append()方法使用错误案例正确案例
2022-06-01 15:03:54
186
原创 八、V4L2 ioctl 控制接口 调用流程
V4L2 ioctl 控制接口 调用流程当 使用v4l2打开配置好video节点后,还可能需要对设备进行参数 sensor 或者ISP的参数配置,例如自动对焦、自动曝光、亮度、对比度、锐度、色度、白平衡、测试图案等等V4L2_CID_BRIGHTNESS我们举例 设置亮度static void set_sensor_brightness(int videofd, int brightness){ struct v4l2_control ctrl; ctrl.id = V4L2_C
2022-05-11 17:10:45
2353
2
原创 七、V4L2 ioctl 标准接口 调用流程
V4L2 ioctl调用流程当video节点注册完成之后,用户层就会通过 该节点的字符设备接口接入到内核中去在 三、video设备初始化中就讲解了video的初始化,vdev->cdev->ops = &v4l2_fops; 代表着用户层的ioctl会调用到v4l2_fops的unlocked_ioctl = v4l2_ioctl;结构体 file_operationsstatic const struct file_operations v4l2_fops = {
2022-05-11 16:46:32
2668
原创 二、安装Android studio 之 下载安装 Android Studio
一、下载Android Studio进入官网https://developer.android.com/studio点击Downloade下载即可二、安装Android Studio双击下载好的文件安装完后会提示不能访问Android SDK,先不管,直接Cancel选择自定义安装Android SDK 安装路径左边列表中 带红*需要全部点accept,不然 finish是灰色的,点击不了...
2022-05-11 15:36:24
808
2
原创 六、v4l2 ctrl 函数初始化---增加自定义接口v4l2_ctrl_new_custom
v4l2_ctrl_new_custom每一个ISP都有自定义的功能,例如 bypass某个算法模块、内部测试图案等等//v4l2_ctrl_new_custom( hdl_cst_ctrl, xxx_v4l2_ctrl_test_pattern , null);/*static const struct v4l2_ctrl_config xxx_v4l2_ctrl_test_pattern = { .ops = &isp_v4l2_ctrl_ops_custom, .id
2022-05-11 15:30:59
1510
4
原创 一、安装Android Studio 之 下载 & 安装 JDK
一、下载Android JDK进入https://www.oracle.com/index.html 官网点击Products点击Java点击 DownLoad Java点击 Java archive选择一个你需要的JDK版本选择你电脑系统的安装版本如果你没有oracle账号,需要注册一个账号才能下载二、安装JDK下载完的JDK如下图,双击开始安装自定义一个安装目录后面会提示 jre的安装向导直接退出即可,jdk中包含了jre安装成功...
2022-05-09 14:47:00
6101
原创 四、V4L2 control结构框架图
首先介绍下几个核心的结构体struct v4l2_ctrl:control的结构体抽象,一个control就用一个实例化的v4l2_ctrl变量来表示struct v4l2_ctrl_ref:一个实例化的v4l2_ctrl的引用,可以看到该结构体里面包含一个struct v4l2_ctrl*类型的指针变量,该指针成员指向的就是与之一一对应的v4l2_ctrl实例化对象struct v4l2_ctrl_handler:control的集合,就比如一个设备他有很多个control,这些这些众多的contr
2022-05-06 14:41:31
1250
原创 五、v4l2 ctrl 函数初始化---增加标准接口v4l2_ctrl_new_std
xxx_v4l2_ctrl结构体定义struct xxx_v4l2_ctrl { struct v4l2_device *v4l2_dev; struct video_device *video_dev; uint32_t ctx_id; struct v4l2_ctrl_handler ctrl_hdl_std_ctrl; struct v4l2_ctrl_handler ctrl_hdl_cst_ctrl;};v4l2_ctrl_handler结构体定义struct v4l2_ctr
2022-05-05 19:54:41
4550
原创 三、video设备初始化
video_device结构体struct video_device{#if defined (CONFIG_MEDIA_CONTROLLER) struct media_entity entity; struct media_intf_devnode *intf_devnode; struct media_pipeline pipe;#endif const struct v4l2_file_operations *fops; u32 device_caps;
2022-05-05 18:56:53
1749
原创 二、V4L2设备注册
v4l2_device 结构体struct v4l2_device { struct device *dev; struct media_device *mdev; struct list_head subdevs; spinlock_t lock; char name[V4L2_DEVICE_NAME_SIZE]; void (*notify)(struct v4l2_subdev *sd,
2022-05-05 16:50:34
1183
原创 一、V4L2应用层调用流程
1、打开设备相机设备基本上都是videox节点,以/dev/video0节点为例 int fd = open("/dev/video0",O_RDWR);2. 获取摄像支持的格式 struct v4l2_fmtdesc v4l2fmt; v4l2fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; int i = 0; while(1) { v4l2fmt.index = i++; ioctl(fd, VIDIOC_ENUM_FMT, &v4l2f
2022-04-28 17:21:48
1907
原创 三、CameraService总流程
1、Camera provider启动camara provider 服务启动,等待上层调用它camara provider在启动的时候,就已经调用了自己的initialize()函数2、camera service 启动camera service 启动,最后会调用到 CameraProviderManager::initialize–>providerInfo→initialize();frameworks/av/services/camera/libcameraservice/comm
2022-01-04 20:07:24
3340
原创 二、CameraProvider启动流程
在第一节中讲解完了 camera service的启动后,再讲解provier的启动流程1、启动脚本hardware/interfaces/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rcservice vendor.camera-provider-2-4 /vendor/bin/hw/android.hardware.camera.provider@2.4-service class ha
2021-12-29 15:57:06
2140
2
原创 一、CameraService启动流程
1、启动脚本//framework/av/camera/cameraserver/cameraserver.rc//通过init进程启动cameraserver进程,启动路径为/system/bin/cameraserverservice cameraserver /system/bin/cameraserver class main user cameraserver group audio camera input drmrpc io
2021-12-27 20:05:20
2852
原创 CameraService之服务流程图
CameraService之服务流程图一、CameraService启动流程二、CameraProvider启动流程三、CameraService总流程
2021-12-27 19:43:00
702
原创 make编译 出错常见问题
1、defined but not used [-Werror=unused-variabl]在Makefile中添加如下命令即可ccflags-y += -Wno-unused-variable
2021-11-26 11:43:19
981
原创 Makefile独立编译ko文件
在工作的过程中,经常需要编译一些Ko模块,如果是单个的c文件编译直接在内核源码里面 obj-m=xxx.o就好如果这个ko文件需要多个c文件共同编译生成的话,最好以如下的模板来完成编译较好#首先指定好编译链工具CROSS_COMPILE=/opt/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-#指定用哪个内核去编译KDIR=/mnt/nfsroot/zhengshuai.zhu/IPCSDK/ipc-
2021-11-25 21:14:53
6562
原创 linux下添加PATH环境变量
$PATH$PATH决定了shell将到哪些目录去寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接查看PATJ环境变量1、命令行下直接输入export会看到所有的环境变量2、echo $PATH 指令可以单独看到环境变量信息添加环境变量PATH1、一次性添加环境变量,关闭终端就会失效export PATH=路径: $PATH查看命令: echo $PATH2、永久添加环境变量,关机后也生效在/etc/profile中来修改PATHv
2021-11-25 20:24:00
732
原创 RGB转NV21/YUYV转NV21/UYVY转NV21
RGB_2_NV21static void rgb8888_2_nv21(unsigned char *s, unsigned char *iYuv, int width, int height) { int ui = width * height; int i = 0; int j, k; unsigned char sR,sG,sB; for (j = 0; j < height; j++) { for (k = 0; k < width;
2021-10-29 18:57:09
1365
原创 raw/rgb/yuv/nv21图像格式总结
1、RAWraw格式sensor的输出格式,是sensor将光信号转换为电信号时的电平高低的原始记录,没有经过处理的原始数据raw数据在输出的时候使用一定的顺序的,主要有四种: GRBG, RGGB, BGGR, GBRGraw数据主要有3中常见的格式: raw8, raw10, raw122、RGBrgb格式:即每一个像素由三原色R、G、B蓝色组成RGB565 每个像素用16位表示,RGB分量分别使用5位、6位、5位RGB555 每个像素用16位表示,RGB分量分别使用5位、5位、5位(剩
2021-10-29 18:50:43
7118
原创 5 文件操作
程序运行时产生的数据都是属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化c++中对文件操作需要包含头文件 fstream文件的类型分为两种:1、文本文件 - 文件以文本的ASCII码形式存储在计算机中2、二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂操作文件的三大类ofstream: 写操作ifstream: 读操作fstream: 读写操作写文件void test01(){ //1、 包含头文件 //2、 创建流对象 ofst
2021-09-23 13:24:24
242
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人