我正在研究一个需要处理来自另一个模块的数据的内核模块。 如何分享缓冲区? 我曾尝试使用EXPORT_SYMBOL来访问数组 char my_test_buffer[100]; EXPORT_SYMBOL(my_test_buffer); 如何在其他模块访问这个?
我正在尝试安装ODBC驱动程序,并且遇到砖墙。 [root@Crux pkg]# isql -v [IM002][DataDirect][ODBC lib] Data source name not found and no default driver specified [ISQL]ERROR: Could not SQLConnect [root@Crux pkg]# isql -3 SUBS2A [IM003][DataDirect][ODBC lib] Specified driver could not be loaded [ISQL]ERROR: Could not SQLConnect 我的INI文件如下: ODBCINST.INI [ProgressOpenEdge] Description = ODBC for Progress OpenEdge Driver = /usr/dlc/odbc/lib/pgoe1023.so ;Setup = /usr/dlc/odbc/lib/pgoe1023.so FileUsage = […]
我需要修改位于Linux 3.2.0的内核模块。 在drivers/staging/bcm ,驱动程序应该支持设备ID 198F:015E ,而不是在InterfaceInit.h文件中,它被提及为198F:15E ,我将其改为015E但是在编译成功之后,新设备ID没有被内核拾取。 这里是modinfo的输出: filename: <somewhere/>bcm_wimax.ko license: GPL version: 5.2.45 description: Beceem Communications Inc. WiMAX driver srcversion: D6016018ABCFFD16AF31D22 alias: usb:v19D2p0007d*dc*dsc*dp*ic*isc*ip* alias: usb:v0489pE017d*dc*dsc*dp*ic*isc*ip* alias: usb:v19D2p0132d*dc*dsc*dp*ic*isc*ip* alias: usb:v198FpBCCDd*dc*dsc*dp*ic*isc*ip* alias: usb:v198Fp0220d*dc*dsc*dp*ic*isc*ip* alias: usb:v198Fp0210d*dc*dsc*dp*ic*isc*ip* alias: usb:v198Fp0300d*dc*dsc*dp*ic*isc*ip* depends: vermagic: 3.2.0-26-generic-pae SMP mod_unload modversions 686 parm: debug:Debug level (0=none,…,16=all) (uint) 我的198F:015E还没有出现! 开始编译之后奇怪的是,我可以看到一个名为bcm_wimax.mod.c的文件在模块源文件夹中生成。 在里面,我发现了modinfo别名的东西。 看起来像: #include <linux/module.h> #include […]
我有一个PCI设备,它的Linux驱动程序和一个用户空间应用程序。 应用程序mmap是通过驱动程序的PCI设备的第一个BAR。 所有的访问都是通过32位整数完成的,这是很重要的,因为读/写寄存器可能有副作用(启动操作等)。 在x86平台上,这工作得很好。 不过,我刚刚搬到了ARM平台,而且我有一个奇怪的行为: 从驱动程序读取/写入行为正确 从用户空间读取触发一个64字节的PCI读取请求,这是我的设备无法实现的,因为它只接受32位访问(+因为副作用,我不想那么做)。 我认为问题是,mmap想要预取一些数据,并发出这64字节的读取。 我是否错过了一个标志或可能会禁用某种mmap预取? 我目前在驱动程序方面的mmap实现很简单 vma->vm_flags |= VM_RESERVED; remap_pfn_range(vma,vma->vm_start, pfn, Size_UL, vma->vm_page_prot)
我想通过软件模型(我们称之为(B))来模拟一个昂贵的设备,而不是真正的设备与/ dev / device进行交互 目前已经存在一个内核模块来pipe理链接到/ dev / device的真实设备 (我们称之为(A))。 (A)将数据发送到/ dev / device,(B)读取这个数据,准备一个响应并将其发送回/ dev / device ,并且(A)读取这个响应? 如果存在一个更简单的解决scheme来做我想做的事情(即用软件模型模拟硬件设备),不要犹豫,build议。
我对这些硬件是如何工作的背景知之甚less,但现在我需要学习如何为Android设备编写Linux帧缓冲区驱动程序。 我很困惑的Linuxgraphics堆栈。 据我所知,在台式计算机上,合成窗口pipe理器与DRM进行交互, DRM然后将数据发送到特定的video卡驱动程序。 另一方面,还有一些控制器通过DMA从GPU's内存中检索数据并将其发送到监视器,正如这里的答案所示。 另外,通过本书page 29的图表,我发现帧缓冲区驱动程序位于实际的graphics设备之上,因此它必须与特定的video卡驱动程序交互,例如nVidia驱动程序。 但是,当我为embedded式设备写一个帧缓冲区驱动程序时,结果表明,如果驱动程序直接负责与LCD ,所以它看起来像它甚至低于video卡驱动程序。 那么一个帧缓冲驱动器实际上是一个video卡驱动程序?
我有一个分配内存的内核模块,我想与用户进程共享这个内存。 在正常模式下,我们只能使用:mmap,/ proc,shmem等,但在单用户模式下,对于embedded式设备,是不是有办法共享一个简单的指针?
如果一个线程正在等待来自networking的数据,那么它将被内核取消调度以让其他线程使用CPU。 一旦networking设备提供了数据,如果其优先级大于正在运行的线程,则必须重新调度该线程。 谁负责重新运行调度程序,处理中断的设备驱动程序或内核(哪个部分)? 马努
我写一个linux字符设备驱动程序来模拟一个文件。 数据存储在一个数组中,我想实现一个“读取文件”处理程序… static ssize_t data_read(struct file *f, char __user *buf, size_t count, loff_t *f_pos){ char *msg_pointer; int bytes_read = 0; if(vault.storage==NULL) return -EFAULT; msg_pointer = vault.storage + *f_pos; while (count && (*f_pos < vault.size) ) { put_user(*(msg_pointer++), buf++); count–; bytes_read++; ++*f_pos; } return bytes_read; } vault.storage是一个指向kmalloc创build的指针。 如果我通过使用dd进行复制来testing代码,则按预期工作,但是当我想用C打开文件时 if((fp_data = open("/dev/vault0", O_RDWR)) < 0){ perror("could not […]
请允许我通过说明我是驾驶员开发新手来限定这个问题。 我想了解使用RealTek 8187L芯片的USB Wi-Fi卡的驱动程序源代码。 基于对我以前的问题的一个很好的回答,我确定需要检查的相关驱动程序源代码在drivers/net/wireless/rtl818x/rtl8187/dev.c (在Linux内核源代码中)。 做一些阅读,似乎USB驱动程序实例化一个usb_driver结构,它向内核注册,该结构描述(除其他之外)驱动程序支持的设备( .id_table ),支持的设备连接时执行的function.probe )以及可选的一组文件操作( .fops ),用于与用户空间进行交互。 与8187L驱动程序相关联的usb_driver结构不包含.fops : static struct usb_driver rtl8187_driver = { .name = KBUILD_MODNAME, .id_table = rtl8187_table, .probe = rtl8187_probe, .disconnect = __devexit_p(rtl8187_disconnect), .disable_hub_initiated_lpm = 1, }; module_usb_driver(rtl8187_driver); 因此,我很好奇用户空间程序如何与这个驱动程序交互来发送和接收数据。 在一篇旧的Linux期刊 (2001)上,有以下摘录: fops和次要variables是可选的。 大多数USB驱动程序挂钩到另一个内核 子系统,如SCSI,networking或TTY子系统。 这些types的驱动程序向其他内核子系统注册,并通过该接口提供任何用户空间交互。 但对于没有匹配内核子系统的驱动程序,如MP3播放器或扫描仪,需要一种与用户空间交互的方法。 USB子系统提供了一种方法来注册一个次要的设备号和一组file_operations [fops]函数指针来启用这个用户空间的交互。 所以这听起来像8187L驱动程序可能是“挂钩到另一个内核子系统”。 所以我想我的问题是,对于没有提供.fops函数指针的驱动程序, 与其他内核子系统发生的交互如何 ? 最终,我希望能够在驱动程序代码中find实际与之交互的驱动程序代码来发送和接收数据,以便我可以继续分析代码的工作原理。