Articles of 设备

Linux设备驱动程序不安全FXSAVE / FXRSTOR错误 – 任何先例?

有一个令人讨厌的问题,暂时难倒了我公司的一些工程师试图进行debugging。 C ++程序通常运行在具有MPI的多核计算机集群上。 它会跑很长一段时间 – 也许是几天 – 然后突然失败。 大多数工程师已经消除了程序本身出现任何错误的合理可能性,所以他们开始将责任归于可能的硬件问题,但是我怀疑在Linux内核模块或者设备中必定存在软件问题驱动程序。 令人怀疑的是内核模块或设备驱动程序为了执行一些浮点计算,正在以对SMP系统不安全的方式执行FXSAVE / FXRSTOR。 这可能与FXS​​AVE在需要重入的内核例程中的静态缓冲区一样简单。 这将创build一个竞争条件错误,很less会损坏线程的浮点上下文。 在应用程序层面,似乎发生的情况是MXCSR的一个或多个位(即FXSAVE / FXRSTOR上下文的一部分)突然更改,但没有应用程序代码可以对其进行更改。 我在Windows上遇到了类似的问题,最终在video驱动程序中出现了一个错误,例如当应用程序代码被操作系统抢占时,该线程上下文中的某些MXCSR位已损坏。 我不是Linux Kernel黑客或设备驱动程序开发方面的专家,但是我正在读的是重入规则已经发生了很大的变化。 在非SMP和SMP(多核)系统之间; 在内核版本之间; 等等。所以种族条件错误的可能性似乎是合理的。 所以我的问题是: 是否有任何已知的Linux驱动程序(或内核)错误符合该描述? 如果他们有类似的症状,我可以引用任何先例都是有帮助的。 在这一点上,很多涉及到的人都是(IMHO)浪费时间思考“好吧,我的代码中没有错误,所以它肯定是坏的硬件”。 我想让他们超越这个,寻找更有可能成为真正原因的东西。

如何编写Linux驱动程序模块调用/使用另一个驱动程序模块?

我正在开发一个Linux驱动程序可加载模块,我必须在我的驱动程序中使用另一个设备(驱动程序堆叠在另一个驱动程序上) 如何在我的驱动程序中调用/使用另一个驱动程序? 我认为他们都在内核中,所以可能有一种方法可以直接使用另一个驱动程序。

如何检查C中的networking设备状态?

我想检查一个networking设备状态,例如promiscous模式。 基本上像ip显示一个命令。 也许有人能把我推向正确的方向? 我想在Linux中做这个,所以linux特定的头文件可用。

如何确定设备内存的页面帧号?

从LDD3 / Ch。 15 /节“使用remap_pfn_range”和“一个简单的实现”,pfn等同于vm_pgoff字段。 我很困惑。 这怎么可能呢? 请注意,vm_pgoff被描述为: 文件中区域的偏移量,以页面为单位。 当文件或设备被映射时,这是映射在该区域中的第一页的文件位置。 因此,如果映射的第一页也对应于文件的第一页(我认为这很常见),那么vm_pgoff就是0.正确吗? 如果是这样,这似乎不是remap_pfn_range()的pfn参数的正确值。 我在这里错过了什么? 什么是正确的价值? 为便于参考,我正在从下面的LDD3中复制相关的代码(页码426) static int simple_remap_mmap(struct file *filp, struct vm_area_struct *vma) { if (remap_pfn_range(vma, vma->vm_start, vm->vm_pgoff, vma->vm_end – vma->vm_start, vma->vm_page_prot)) return -EAGAIN; … }

与Docker共享设备(摄像头,USB驱动器等)

我需要使用我的docker容器在我的主机Linux机器上从/dev共享特定的设备。 –privileged标志用于在–privileged docker run被调用时共享/dev中的任何设备,但是随后添加或移除的设备不会传播到容器中。 我尝试了docker run -v=/dev:/dev …但是最终导致了像/ dev / pts这样的文件的权限和所有权,导致主机不能创build新的伪terminal。 我也尝试了–device标志,但是这不允许你共享一个尚不存在的设备。 最后,我尝试共享像-v=/dev/video0:/dev/video0这样的设备的卷,但是如果/ dev / video0在运行之前不存在,那么docker会在那里创build一个目录,并且networking摄像头不会在/ dev / video0时插入。 有没有更好的方式来获得这种支持的function?

打击pipe道处理

有谁知道bash如何处理通过pipe道发送数据? cat file.txt | tail -20 该命令是否将file.txt的所有内容打印到缓冲区中,然后通过尾部读取? 或者是这个命令,比如说,将file.txt的内容一行一行地打印出来,然后在每一行中暂停处理,然后请求更多的数据? 我问的原因是我正在一个embedded式设备上编写一个程序,该程序基本上对一些数据块执行一系列的操作,其中一个操作的输出作为下一个操作的input被发送。 我想知道linux(bash)如何处理这个问题,所以请给我一个一般的答案,不是特别是当我运行“cat file.txt | tail -20”时会发生什么情况。 预先感谢您的回复! 编辑:Shog9指出了相关的维基百科文章,这并没有直接引导我的文章,但它帮助我find这个: http : //en.wikipedia.org/wiki/Pipeline_%28Unix%29#Implementation哪些有我正在寻找的信息。 我很抱歉没有说清楚。 当然,你正在使用一个pipe道,当然你正在使用命令的各个部分的标准input和标准输出。 我认为这太明显,不能说明。 我在问的是如何处理/实施。 由于这两个程序不能同时运行,数据如何从标准input发送到标准输出? 如果第一个程序产生的数据比第二个程序快得多,会发生什么? 系统是否运行第一个命令,直到终止或stdout缓冲区已满,然后转到下一个程序,依此类推,直到没有更多的数据需要处理或者存在更复杂的机制?

如何获得列表video捕获设备名称(networking摄像头)在Linux(Ubuntu的)? (C / C ++)

所以我需要的只是简单的 – 一个当前可用的video捕捉设备(networking摄像头)列表。 我需要它在简单的C或C ++控制台应用程序。 按列表我的意思是这样的控制台输出: 1) Asus Web Camera 2) Sony Web Camera 所以我知道如何使用如下代码来获得像W,H等凸轮道具: #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/videodev.h> int main(){ int fd; struct video_capability video_cap; struct video_window video_win; struct video_picture video_pic; if((fd = open("/dev/video0", O_RDONLY)) == -1){ perror("cam_info: Can't open device"); return 1; } if(ioctl(fd, VIDIOCGCAP, &video_cap) == […]

用读取错误模拟出错的块设备?

我正在寻找一种更简单的方法来testing我的应用程序对错误的块设备,当某些块被读取时产生I / O读取错误。 尝试使用已知坏块的物理硬盘是一件痛苦的事情,如果存在软件解决scheme,我希望find它。 我find了Linux磁盘故障模拟驱动程序 ,它允许创build一个接口,可以configuration为在读取特定范围的块时生成错误,但它是针对2.4 Linux内核的,并且尚未针对2.6进行更新。 什么是完美的将是一个losetup和循环驱动程序,也允许您configuration它尝试读取给定的一组块时返回读取错误。

从input事件(linux,c)读取条形码

我有一个从/ dev / input / event4读取条形码的小程序。 这是代码: #include <sys/file.h> #include <stdio.h> #include <string.h> #include <linux/input.h> int main (int argc, char *argv[]) { struct input_event ev; int fd, rd; //Open Device if ((fd = open ("/dev/input/event4", O_RDONLY|O_NONBLOCK)) == -1){ printf ("not a vaild device.\n"); return -1; } while (1){ memset((void*)&ev, 0, sizeof(ev)); rd = read (fd, […]

Windows上的便携式设备path

其实我有一个Windows / Java的问题。 我有一个我想通过Java访问的插入式设备。 通常情况下,你可以通过驱动器盘符访问一个例如USB棒…但是这个平板电脑在Windows上显示为“便携式设备”…这意味着该path类似于“Computer \ Archos 5S”,有没有驱动器号。 我想通过Java访问这个设备上的一个文件,但我无法弄清楚它的正确path。 有一个类似的问题,但没有一个有效的答案。 还是有另一种方式通过Java访问此设备? 其实我还没有解决这个问题…我仍然无法通过Java访问这样的设备。 目前我正在尝试访问Java中的Windows ShellFolder。 Shellfolder,如:“Shell ::: {35786D3C-B075-49b9-88DD-029876E11C01}” 这可能与Java? 最近我发现了sun.awt类“ShellFolder”…这是想要的function? 感谢您的帮助Ripei