linux查询video设备类型

想查询 dev/video的类型,找不到命令,闲的蛋疼留个模版

用的时候把video列表写进solve前的 dev_list即可

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

#include <fcntl.h>              /* low-level i/o */
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <asm/types.h>

#include <linux/videodev2.h>

int device_open(char *dev_name)
{
    struct stat st;
    if (-1 == stat(dev_name, &st))
    {
        fprintf(stderr, "Cannot identify '%s': %d, %s\n", dev_name, errno, strerror(errno));
        // exit(EXIT_FAILURE);
    }
    if (!S_ISCHR(st.st_mode))
    {
        fprintf(stderr, "%s is no device\n", dev_name);
        // exit(EXIT_FAILURE);
    }
    int fd = open(dev_name, O_RDWR /* required */ | O_NONBLOCK, 0);
    if (-1 == fd)
    {
        fprintf(stderr, "Cannot open '%s': %d, %s\n", dev_name, errno, strerror(errno));
        // exit(EXIT_FAILURE);
    }
    printf("%s %d : Open %s successfully. fd = %d\n", __func__, __LINE__, dev_name, fd);
	return fd;
}

int device_close(int fd)
{
    if (-1 == close(fd))
    {
    	printf("\tdevice close failed.\n");
    	// exit(EXIT_FAILURE);
    }
    else
    {
    	printf("%s %d : devices close successfully\n", __func__, __LINE__);
    }
	return 0;
}

int device_query(char *dev_name, int fd)
{
	struct v4l2_capability cap;
	memset(&cap, 0, sizeof(cap));
    if (-1 == ioctl(fd, VIDIOC_QUERYCAP, &cap)) // query v4l2-devices's capability
    {
        if (EINVAL == errno)
        {
            fprintf(stderr, "%s is no V4L2 device\n", dev_name);
            // exit(EXIT_FAILURE);
        }
        else
        {
        	return 0;
        	printf("\tvideo ioctl_querycap failed.\n");
            // exit(EXIT_FAILURE);
        }
	}
	else//\tdevice name : %s\n    dev_name,
	{
		printf("\n\tdriver name : %s\n\tcard name : %s\n\tbus info : %s\n\tdriver version : %u.%u.%u\n\n",
			    cap.driver, cap.card, cap.bus_info,(cap.version >> 16) & 0XFF, (cap.version >> 8) & 0XFF, cap.version & 0XFF);
	}
	return 0;
}

int dev_num = 27;
char dev_list[100][20] = {
	"/dev/video6",	"/dev/video7",	"/dev/video11",	"/dev/video12",	"/dev/video13", // 00 - 04
	"/dev/video14",	"/dev/video15",	"/dev/video16",	"/dev/video17",	"/dev/video18", // 05 - 09
	"/dev/video19",	"/dev/video23",	"/dev/video24",	"/dev/video25",	"/dev/video26", // 10 - 14
	"/dev/video27",	"/dev/video28",	"/dev/video29",	"/dev/video30",	"/dev/video31", // 15 - 19
	"/dev/video32",	"/dev/video33",	"/dev/video34",	"/dev/video36",	"/dev/video37", // 20 - 24
	"/dev/video38",	"/dev/video50"
};

int solve()
{
	int i = 0;
	int dev_start = 0;
	int dev_end = dev_num;
	for( i = dev_start; i < dev_end; ++i)
	{
		int fd = device_open(dev_list[i]);
		device_query(dev_list[i], fd);
		device_close(fd);
	}
	return 0;
}

int main()
{
	printf("\nstart game\n");

	solve();

	printf("\nquit game\n");
	return 0;
}

附 rp5410 video info

/*

start game
	device name :video6
	driver name : MFC
	card name : decoder
	bus info :
	driver version : 1.0.0

	device name :video7
	driver name : MFC
	card name : encoder
	bus info :
	driver version : 1.0.0

	device name :video11
	driver name : s5p-jpeg
	card name : s5p-jpeg
	bus info :
	driver version : 1.0.0

	device name :video12
	driver name : s5p-jpeg
	card name : s5p-jpeg
	bus info :
	driver version : 1.0.0

	device name :video13
	driver name : exynos5-jpeg-hx
	card name : exynos5-jpeg-hx
	bus info :
	driver version : 1.0.0

	device name :video14
	driver name : exynos5-jpeg-hx
	card name : exynos5-jpeg-hx
	bus info :
	driver version : 1.0.0

	device name :video16
	driver name : s5p-mixer
	card name : mxr0_graph0
	bus info : 0
	driver version : 0.1.0

	device name :video17
	driver name : s5p-mixer
	card name : mxr0_graph1
	bus info : 1
	driver version : 0.1.0

	device name :video18
	driver name : s5p-mixer
	card name : mxr1_graph2
	bus info : 2
	driver version : 0.1.0

	device name :video19
	driver name : s5p-mixer
	card name : mxr1_graph3
	bus info : 3
	driver version : 0.1.0

	device name :video23
	driver name : exynos-gsc
	card name : exynos-gsc
	bus info :
	driver version : 3.4.5

	device name :video24
	driver name : exynos-gsc
	card name : exynos-gsc
	bus info :
	driver version : 3.4.5

	device name :video26
	driver name : exynos-gsc
	card name : exynos-gsc
	bus info :
	driver version : 3.4.5

	device name :video27
	driver name : exynos-gsc
	card name : exynos-gsc
	bus info :
	driver version : 3.4.5

	device name :video29
	driver name : exynos-gsc
	card name : exynos-gsc
	bus info :
	driver version : 3.4.5

	device name :video30
	driver name : exynos-gsc
	card name : exynos-gsc
	bus info :
	driver version : 3.4.5

	device name :video32
	driver name : exynos-gsc
	card name : exynos-gsc
	bus info :
	driver version : 3.4.5

	device name :video33
	driver name : exynos-gsc
	card name : exynos-gsc
	bus info :
	driver version : 3.4.5

	device name :video50
	driver name : exynos5-scaler
	card name : exynos5-scaler
	bus info :
	driver version : 3.4.5

quit game

*/
时间: 2024-07-30 19:57:23

linux查询video设备类型的相关文章

Linux查询系统信息命令

Linux查看系统信息是比较基础的知识,所以这个应该都需要掌握,命令和解释如下: #uname -a           查看操作系统.内核.CPU信息 #head -n 1 /etc/issue    查看操作系统版本信息 #cat /proc/cpuinfo    查看CPU信息 #hostname   查看计算机名 #env 查看环境变量 #free -m  查看内存使用和交换区使用 #df -h 查看各分区使用情况 #du -sh <目录名>  查看指定目录大小 #grep MemTo

linux 查询管道过滤,带上标题字段

linux查询过滤, 带上标题字段例: 一个简单的查询 ps -e | grep httpd 上面经过grep 过滤后, 标题没了, 但是为了看上去更方便,有标题字段看起来更方便一些, 那么可以按下面的写法来实现 命令: ps -e | head -1;ps -e | grep httpd 看一下效果吧: 说明: head -1 就是取第一行  其实就是进行了两次查询, 第一次只取标题, 如果你有更好的方法, 欢迎留言 END/ 原文地址:https://www.cnblogs.com/alex

linux查询cpu核心数

linux怎么查询cpu核心数 1.查看逻辑CPU个数: #cat /proc/cpuinfo |grep "processor"|sort -u|wc -l24 2.由于有超线程技术有必要查看一下物理CPU个数:#grep "physical id" /proc/cpuinfo|sort -u|wc -l 2#grep "physical id" /proc/cpuinfo|sort -u physical id : 0physical id

linux 查询目录下包含关键字的所有文件

linux查找目录下的所有文件中是否含有某个字符串 查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "IBM" -l 1.正则表达式    (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/.*.?等)组成.   (2)基本元字符集及其含义       ^

linux查询系统负载

linux uptime命令主要用于获取主机运行时间和查询linux系统负载等信息.uptime命令过去只显示系统运行多久.现在,可以显示系统已经运行了多长时间,信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系统在过去的1分钟.5分钟和15分钟内的平均负载. uptime命令用法十分简单:直接输入 # uptime 即可. 输入样例: 18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00 1可

一次电话Java面试的问题总结(JDK8新特性、哈希冲突、HashMap原理、线程安全、Linux查询命令、Hadoop节点)

面试涉及问题含有: Java JDK8新特性 集合(哈希冲突.HashMap的原理.自动排序的集合TreeSet) 多线程安全问题 String和StringBuffer JVM 原理.运行流程.内部结构 Linux 查询含有某字符串内容的命令grep 查询进程.GC状态.杀死进程 Hadoop五种节点介绍 -----------------------------------------------------------------------------------------------

Linux查询命令整理

在linux中,查找命令主要有find和grep,以及mlocate/locate 区别: (1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等.  (2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找. (3)mlocate(locate) 命令用来查找文件或目录,速度快. 一.find命令 find 是文件层次的查找(包括子目录,就是对当前路径树查找) 基本格式:find  path  n

Linux查询错误日志

-- 1错误日志目录一般在 /usr/oracle/app/diag/rdbms/orcl/orcl/trace 根据PID模糊查询对应的错误日志 find -name "*ora*3159*.trc" more orcl_ora_3159.trc --  2 查询归档日志 select * from v$recovery_file_dest; -- 3 删除归档日志

linux查询文件中某几行

查询文件中某几行: sudo cat /etc/tinyproxy.conf | head -n 32 | tail -n +29 [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000 [二]显示1000行到3000行 cat filename| head -n 3000 | tail -n +1000 *注意两种方法的顺序 分解: tail -n 1000:显示最后1000行 tail -n