Articles of 驱动程序

读(fd,NULL,0); 它有什么作用? 它是明确的吗?

我在几个程序中看到了下面的说法,大部分/全部似乎都是针对Linux的。 rv = read(fd, NULL, 0); 在一些程序中,它是在一个循环中,在一个单一的声明。 它究竟做了什么? 手册页说,像这样的调用可能会或可能不会检查错误… 回报价值的意义是什么? 什么types的文件描述符被支持? 如果rv==0如何区分“没有错误”从例如“套接字closures”。

如何在Linux设备驱动程序中设置errno?

我正在devise一个Linux字符设备驱动程序。 我想在ioctl()系统调用中发生错误时设置errno。 long my_own_ioctl(struct file *file, unsigned int req, unsigned long arg) { long ret = 0; BOOL isErr = FALSE; // some operation // … if (isErr) { // set errno // … <— What should I do? ret = -1; } return ret; } 我该怎么做才能做到这一点? 提前谢谢! 请允许我更详细地解释我的申请。 我的设备位于/ dev / myCharDev。 我的用户空间应用程序是这样的: #define […]

如果设备已经插入,Linux USB驱动程序探测器不会被调用

如果我在Linux上使用经过修改的usb骨架驱动程序,并使用已插入的USB设备对模块进行insmod,则不会调用探测function。 我需要拔下并重新插入设备才能激活驱动程序。 这不是例如串口驱动程序,我做了一些testing。 是否有一个原因? 如何获取调用函数来调用?

Unix下的键盘设备

如何捕获所有的用户input,一次读取一个字节? 我做了这个编码,但它不工作 if ((fd = open("/dev/char", O_RDONLY) != 1) { tty = open("/dev/tty", O_RDONLY); tcsetattr(0, TCSANOW, &orig_info); read (fd, &buf, sizeof(char)); } close(fd); 我希望terminal等待input,但没有。

在Linux源代码中,对特定USB设备的识别是在哪里进行的?

我有一个特定的USB设备的Linux驱动程序源代码,我想检查。 我的理解是,USB驱动程序的第一步是注册自己,能够处理具有特定供应商ID和产品ID的设备。 在我的情况下,供应商ID是0BDA ,产品ID是8187 。 鉴于这些信息,有没有一种方法可以find注册自己能够处理该设备的源文件,然后查看其他源文件实际执行的驱动程序详细信息? 作为参考,我在内核3.2.0-26 。 我试过了一个grep -rl 8187 /usr/src ,但是这列出了一大堆文件,我不知道从哪里开始。

如何为平台驱动程序正确初始化属性组?

编辑#4:我想,我不应该将attr_groups分配给struct platform_driver结构的driver字段中的groups字段。 寻找评论/* WRONGO: should not be assigned here. */ /* WRONGO: should not be assigned here. */下面。 我还没有想出我应该把它分配到哪里… 我的平台驱动程序的代码在读取sysfs属性时,由于NULL引用而导致内核“OOPS”。 我确定这是一个简单的监督下面的代码,但我看不到它: … static int samples_per_frame = SAMPLE_CHANNEL_COUNT; DEVICE_INT_ATTR(samples_per_frame, S_IRUGO | S_IWUSR, samples_per_frame); static struct attribute *attrs[] = { &dev_attr_samples_per_frame.attr.attr, NULL, }; static struct attribute_group attr_group = { .attrs = attrs, }; static const struct attribute_group […]

I2C_SLAVE ioctl的用途

我正在编写代码来实现一个简单的i2c读/写function,使用一般的linux i2c驱动程序linux/i2c-dev.h 我对ioctl : I2C_SLAVE感到困惑 内核文档说明如下: 您可以使用read(2)和write(2)调用来执行简单的i2c事务。 你不需要传递地址字节; 而是在尝试访问设备之前通过ioctl I2C_SLAVE进行设置 但是,我正在使用ioctl I2C_RDWR ,我再次使用i2c_msg.addr设置从站地址。 内核文档还提到了以下内容: 一些ioctl()调用是用于pipe理任务的,由i2c-dev直接处理。 例子包括I2C_SLAVE 那么是否必须使用ioctl I2C_SLAVE ? 如果是这样,我只需要设置一次或每次执行读取和写入? 如果我有一个i2c设备,我可以刚刚在设备上testing代码,不会打扰你们,但不幸的是我现在没有一个。 谢谢您的帮助。

HR定时器精确度研究案例

有了这个话题,我会更好地讨论人力资源计时器和真正的精确度问题。 我研究了大量关于它们的文档,我确信它们是在Linux内核模块中延迟执行问题的最好和最可靠的解决scheme,CPU成本较低,时序精度更高(例如一些时间关键驱动程序使用它们,就像这个https://dev.openwrt.org/browser/trunk/target/linux/generic/files/drivers/pwm/gpio-pwm.c?rev=35328 )。 你也适合吗? 这是我见过的最全面和最详细的文档之一: https : //www.landley.net/kdocs/ols/2006/ols2006v1-pages-333-346.pdf 。 人力资源计时器承诺在jiffies的决议下,但不幸的是,在我的系统,我没有得到低于6毫秒的延迟的预期结果(我会稍后显示更多的细节)。 我的环境是: Windows 10 PRO 64位/ 8Gb RAM / CPU Intel 4 Core VMWare播放器12 虚拟化操作系统Linux Mint 18.1 64位 内核configuration 版本:4.10.0-24 – 通用 CONFIG_HIGH_RES_TIMERS = Y CONFIG_POSIX_TIMERS = Y CONFIG_NO_HZ_COMMON = Y CONFIG_NO_HZ_IDLE = Y CONFIG_NO_HZ = Y CONFIG_HZ_250 = Y CONFIG_HZ = 250 / sys / […]

最好的Linux文件系统filter选项?

我需要一个Linux文件系统filter来强制执行文件系统调用的ACL策略(允许/拒绝读/写基于运行时计算的东西)。 到目前为止,我偶然发现了DazukoFS和相关的工作 。 我不喜欢DazukoFS的是,它必须为每个内核版本进行编译。 有一些用户模式库可以dynamic地过滤文件系统调用吗? 如果没有,是否有一些内核模式库可以dynamic地过滤FS调用,而不是为每个内核版本编译? 如果没有, DazukoFS和其他的最好的select是什么?

将驱动程序编译为内核的一部分,而不是作为模块

我正在尝试为embedded式设备创build一个简约的Linux。 这意味着编译内核和驱动程序的必要性。 一个驱动程序是由它的创build者直接写入设备板,所以它不是一个存储库。 它可以被编译为一个内核模块。 但是由于Linux不可变的性质以及对内存使用量极小的要求,我不想使用模块。 我想要内核中的所有驱动程序。 所有提供的内核驱动都是这样设置的。 所以我的问题是如何编译一个特殊的驱动程序到内核? 所有的search都没有给我提供一个解决scheme – 所有的只是作为模块编译。 谢谢你的帮助。