我正在编写一个简单的Linux字符设备驱动程序,通过I / O端口将数据输出到一个硬件。 我有一个函数执行浮点运算来计算硬件的正确输出; 不幸的是这意味着我需要在用户空间中保留这个函数,因为Linux内核不能很好地处理浮点操作。 这是一个设置的伪代码(请注意,这段代码没有做任何特定的事情,它只是显示了我的代码的相对布局): 用户空间function : char calculate_output(char x){ double y = 2.5*x; double z = sqrt(y); char output = 0xA3; if(z > 35.67){ output = 0xC0; } return output; } 内核空间代码 : unsigned i; for(i = 0; i < 300; i++){ if(inb(INPUT_PORT) & NEED_DATA){ char seed = inb(SEED_PORT); char output = calculate_output(seed); […]
今天我已经下载了新的AMD Catalyst驱动程序,当安装过程中,出现错误信息“安装过程中出现错误 ”,这里是安装步骤:** sudo update && sudo升级完成,重启。 卸载AMD Catalyst旧驱动程序(AMD_Catalyst-13.4): $ sudo sh /usr/share/ati/amd-uninstall.sh 系统环境恢复完成 (没有错误) 重启 安装新驱动程序 $ sudo sh amd-catalyst-13.12-linux-x86.x86_64.run 安装过程错误: http : //postimg.org/image/675x7cio9/ 这里是fglrx-install.log: Supported adapter detected. Check if system has the tools required for installation. Uninstalling any previously installed drivers. Creating symlink /var/lib/dkms/fglrx/13.251/source -> /usr/src/fglrx-13.251 DKMS: add completed. Kernel preparation unnecessary for […]
我试图写一个Linux驱动程序到一个设备,我有Windows驱动程序(类似于这里描述的情况下,但不同的设备) 我使用Libusb在Linux端进行通信,并使用SourceUSB作为我的USB嗅探器(在Windows机器上)。 现在我想我已经正确地复制了控件和块,但是我不能真正在Windows上testinglinux日志。 我在虚拟机上运行Ubuntu 12.04。 所以我的问题是: 是否有多平台logging器? 这可以真正简化日志比较过程。 当我将USB设备连接到VM时 – 我在Windows中获得VM驱动程序。 嗅探这个设备给我什么设备看到的,对吧? 我的意思是 – 这是我想要闻的地方吗? 编辑:我编译我的应用程序在Windows(libusb是跨平台 – 非常感谢libusb开发人员做了这么好的工作),我的应用程序正常工作。 当在Linux上运行我的应用程序时嗅探虚拟机驱动程序时,我将VENDOR_DEVICE而不是CONTROL_TRANSFER和BULK_OR_INTERRUPT的请求视为USB。 这似乎是如果我理解正确的问题,因为这是设备“看到”。 所以我想现在我的问题是为什么Linux发送我的请求作为供应商。 另一个编辑:解决的问题: 听VM驱动程序给了我错误的请求(我正在听VM驱动程序的stream量,而不是,因为我想,我的USB Linux驱动程序的stream量 Libusb是完美的多平台。 我花了几分钟让我的代码在windows下编译,从那里debugging和比较日志非常简单
我试图了解与USB摄像头接口的软件层。 据我所知: 标准networking摄像头适合“USBvideo设备类”或“UVC”类别 。 在Linux中, Video4Linux(V4L,V4L2)封装了所有video捕获设备。 V4L(2)提供了两个API:一个用于想要获取和使用捕获设备数据的程序。 另一个API是内部的,对于驱动程序本身,所以这些驱动程序可以通过V4L(2)的外部API被程序访问。 其中一个V4L(2)驱动程序是UVC驱动程序 ,它包含所有符合标准的USBnetworking摄像头。 我的问题: 查看UVC驱动程序的主页,显示支持的设备列表。 这些设备中的每一个都是在UVC驱动程序内单独照顾的? 或者只有当设备有特殊需要处理? 换句话说,所有符合标准的USBnetworking摄像头是否应该自动与UVC驱动程序一起工作,无论它们是否在列表中? 谢谢
我正在修改/开发一个SDIO UART驱动程序。 并想知道: 读/写操作期间,tty驱动程序如何与UART驱动程序交互? 我对缓冲区pipe理感兴趣。 我在网上search,但没有find必要的信息。 有人可以指出这一点吗? 先谢谢你。
我正在尝试为embedded式Linux系统构build自定义游戏杆/手柄设备。 我正在寻找一个库或系统API,这将允许我在用户空间代码的/ dev / input中创build一个节点。 我想这是因为: 定制硬件可以使用现有的SPI或I2C驱动程序与系统进行通信(这是我的硬件devise,所以我可以做任何最具技术意义的) 内核模块不能使用其他驱动程序,只能从其他模块导出符号 我明白制作内核模块的唯一方法是使用内核代码并将其编译为内核模块。 我不是试图用用户空间代码实现一个内核模块。 我正在寻找一个API,允许我创build一个文件,当这个文件被读取或写入,函数被调用。 这是angular色驱动程序的一般概念。 我不需要内核提供或施加的特权或限制。 必须有一些方法来模拟不涉及编写全新内核模块的文件I / O。 谢谢!
我正在研究Linux内核的FPGA驱动程序。 代码似乎在x86上正常工作,但在x86_64上我有一些问题。 我实现了streamDMA。 所以它就像 get_user_pages(…); for (…) { sg_set_page(); } pci_map_sg(); 但pci_map_sg返回的地址,如0xbd285800 ,这不是由PAGE_SIZEalignment,所以我不能发送完整的第一页,因为PCIE规范说 “请求不能指定一个地址/长度组合,导致一个内存空间访问跨越一个4 KB的边界。” 有没有办法让地址一致,还是我错过了一些重要的东西? DMA的源代码 。
我有一个Linux字符设备驱动程序,它创build一个/dev/mything条目,然后是一个打开设备并使用它的C ++ / Qt程序。 如果程序退出正确, exit() ,设备closures,驱动程序正确地重置自己。 但是,如果程序exception退出,通过segfault或SIGINT或其他东西,设备没有正确closures。 我当前的解决方法是重新加载驱动程序,如果它卡在“打开”状态。 驱动程序中的这一行尝试同时阻止多个使用该设备的程序: int mything_open( struct inode* inode, struct file* filp ) { … if ( port->rings[bufcount].virt_addr ) return -EBUSY; … } 然后这清理它: int mything_release( struct inode* inode, struct file* filp ) { … port->rings[bufcount].virt_addr = NULL; … } 我认为exit()导致mything_release被调用,但SIGINT不是。 我该如何让这位车手更加强壮? 编辑: 这是我执行的操作。 也许我错过了什么? static struct file_operations fatpipe_fops […]
我正在实现一个Linux字符设备驱动程序。 linux / fs.h头文件列出了没有参数名称的file_operations。 例如 struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t); ssize_t (*aio_write) […]
所以我正在摆弄Raspberry Pi,只是觉得“所有这些司机都是从哪里来的”。 特别是对SNES控制器即时通讯使用….如何在地球上有人弄清楚如何写这个。 我知道C体面和C ++ …好吧。 但这一直是我想到的东西。 这很酷,因为它的水平低到足以理解硬件上可能发生什么事情……但也很好的了解操作系统。 我从哪里开始呢? 我猜这样做的窗口将WAYYYY不同。 谢谢