Articles of 驱动

批量邮件传输USB Linux

我正在开始为dds生成器编写自己的Linux驱动程序。 当内核调用探测function时,我想写2个大容量的消息给生成器。 但是我不知道如何调用usb_bulk_msg函数。 我希望你能帮我。 HSYNC static int dds_probe(struct usb_interface *interface, const struct usb_device_id *id) { int retval = 0; retval = usb_bulk_msg(); dev_info(&interface->dev, "DDS generator is now attached\n"); return 0; }

来自用户空间Linux的IRQ处理

我正在为FPGA中的合成器件写驱动程序。 该设备有几个IRQ,并在我的驱动程序上请求它们: irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); rc = request_irq(irq, &Custom_driver_handler,IRQF_TRIGGER_RISING , DRIVER_NAME, base_addr); 我的问题是,我希望irq_handler调用用户空间应用程序的function。 有没有办法从内核空间的驱动程序的irq_handler调用我的用户空间应用程序? 我知道我可以从驱动程序保存一个标志,并从用户应用程序的方向进行轮询,但是我想知道的是,如果有更快/更正确的方法。 先谢谢你

未findglXCreateContextAttribsARB(在OpenGL 4.2驱动程序,GLX 1.4上)

奇怪的是,尽pipe我有GLX 1.4,但是在我的回购中没有glXCreateContextAttribsARB 。 我想知道这是否有合理的解释? 这不是一个普遍的问题。 glxinfo name of display: :0 display: :0 screen: 0 direct rendering: Yes server glx vendor string: NVIDIA Corporation server glx version string: 1.4 server glx extensions: GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGI_video_sync, GLX_SGI_swap_control, GLX_EXT_swap_control, GLX_EXT_texture_from_pixmap, GLX_ARB_create_context, GLX_ARB_create_context_profile, GLX_EXT_create_context_es2_profile, GLX_ARB_create_context_robustness, GLX_ARB_multisample, GLX_NV_float_buffer, GLX_ARB_fbconfig_float, GLX_EXT_framebuffer_sRGB client glx vendor string: NVIDIA Corporation client glx […]

Linux USB内核驱动程序如何与USB Wi-Fi卡内的EEPROM交互?

我正在尝试使用RTL8187 Wi-Fi芯片了解与Wi-Fi卡相关的Linux驱动程序源代码。 具体来说,我试图在USB协议层跟踪Linux与ALFA AWUS036H USB Wi-Fi卡的交互。 我一直使用两种方法来做到这一点1)把printk()语句放在源代码中, 2)查看usbmon的hex输出。 使用这两种方法,我可以跟踪发生的低级别事件,但是没有理解为什么它发生在高级别。 在这一点上我特别注意的是,看起来rtl8187驱动程序的第一件事情就是USB设备中的EEPROM上的一整个读/写操作,而且我不太了解USB设备内部(或外部)的EEPROM如何工作。 举一个例子,我已经在/usr/src/linux/drivers/net/wireless/rtl818x/rtl8187/dev.c中的一行代码中join了打印语句,我相信它是从USB Wi-Fi的MAC地址中读取的卡: printk(KERN_INFO "COMMENCING reading MAC address, I think…"); eeprom_93cx6_multiread(&eeprom, RTL8187_EEPROM_MAC_ADDR, (__le16 __force *)mac_addr, 3); printk(KERN_INFO "DONE reading MAC address, I think…"); 现在我已经预料到,像这样的东西可能会产生一些USB控制消息,但是我在eeprom_83cx6_multiread()的子程序中使用的其他printk()语句表明,这个简单的操作产生大约60个或更多的USB控制消息读取和大概是同样多的USB控制写入。 是否有任何一种高级教程解释USB设备内的USB和EEPROM之间的交互? 对于从哪里开始寻找更多的信息,我感到不知所措。 我一直认为像EEPROM这样的东西可以从USB编程器中抽象出来,只需简单的USB信息,设备就可以转换成EEPROM中的任何东西。 进一步挖掘USB驱动程序代码,虽然看起来有高低脉冲被发送到EEPROM,以及操作之间的具体(虽然非描述性)时间延迟,这似乎意味着没有这样的抽象存在。 我真的不知道该从哪里开始了解所有元素如何协同工作。

如何将数据从中断处理程序传输到用户应用程序?

产生中断的设备由内核中的处理程序pipe理。 我需要发送带有标志的消息,以便用户应用程序接收到发生中断的通知,从而可以执行一个程序。 例如,唤醒一个进程。 我该怎么做呢?

使用linux的I2C驱动程序

我有一个要求,写一个Linux设备驱动程序接口的外围显示板上有button和LED。 在驱动程序中,我需要通过I2C读写外设板上的另一个I2C设备,然后将button事件发送到驱动程序内的应用程序代码。 我想我已经设法使用input子系统“模拟”键/button事件,直到应用程序,我对这部分需求非常满意。 然而,我正在苦于如何通过I2C总线与外围I2C设备进行通话。 我不想写新的I2C通信例程,因为我希望可以使用已经存在的I2C通信API。 我的问题是,有很多关于如何在应用程序(用户空间)中使用I2C的文档,通过在内核中使用i2c-dev,但没有发现有用的解释如何在特定的I2C调用I2C总线,从我自己的驱动程序(我的驱动程序调用i2c驱动程序??)。 我希望这是有道理的,我已经在网上看了很多东西,但似乎没有解释的东西简单。 任何帮助apprciated, 谢谢

如何重写一个硬件linux驱动程序为Android使用

最近,我正在做一个学校项目上的一个beagleboard有android 2.2移植。beagleboard是这样的 。 我必须将一个名为phidgets 1056的传感器连接到电路板上。 但是,驱动程序提供者只能获得Linux的驱动程序。 linux驱动程序在这里可用 。 是否有可能重写在Linux驱动程序的源代码,以便Android可以使用它们? 如果是这样,我该怎么做呢? 我现在真的需要帮助,谢谢

rt2x00驱动程序(内核版本2.6.24)如何处理扫描请求

我使用lpia(Intel Atom)平台上的Ubuntu 8.04(内核版本2.6.24)上的rart rt73 usb设备。 该设备由作为内核一部分的rt2x00驱动程序处理。 扫描程序执行不正确(例如检测到错误的信号质量和冗余networking)。 我想解决这些问题,但是我无法在驱动程序代码中find提及这些值的位置。 不幸的是,司机都没有详尽logging,也没有项目的网站提供了有用的信息。 我想跟踪ioctl命令是如何执行的(例如SIOCSIWSCAN或SIOCGIWSCAN命令),但是它们在代码中没有提到( grep SIOCSIWSCAN *什么也不返回)。 此外,存储扫描结果的struct iwreq ( struct iwreq )在代码中不存在。 我对司机很新鲜,所以也许我以错误的方式来解决问题。 你能把我推向正确的方向吗?

Linux内核结构文件指针

是否保证结构文件指针不会被解除分配,并在其打开的生命周期中重新分配给内存中的其他位置? 我想唯一标识传递给设备驱动程序的文件结构(通过读/写/打开等),并想知道如果我可以只使用指向文件结构的指针进行标识。 我所看到的唯一的另一种select是在private_data中存储唯一的标识符,如果不能保证结构文件指针不会改变的话。

用户空间中的ALSA PCM播放设备

我很难弄清楚如何制作完全在用户空间工作的Linux PCM播放设备。 当应用程序调用snd_pcm_open / snd_pcm_readi / writei时,我想要调用最终用户空间驱动程序和pcm数据在用户空间驱动程序初始化时创build的线程中处理。 audio处理线程将调用实际的ALSA内核驱动程序,该驱动程序将输出pcm到HW。 这基本上是我想要的: 应用程序 – > ALSA(pcmC1D0p) – >audio进程线程(用户空间) – > ALSA(pcmC0D0p) – > HW 我已经看了一些插件,但不知道这是做到这一点的正确方法吗? 也不知道如何真正启动我的插件? 我已经编译.so文件不知道在哪里放置它或如何/什么调用它? 任何指针将不胜感激。