标签 linux-device-driver 下的文章

  • 📂如何在Linux中注册设备教程

    我需要在Linux中注册一个新设备,但我注意到在内核2.6.34中未导出device\_register函数…这可能是解决方案?解决方法:我相信您应该根据设备类型使用register\_blkdev或register\_chrdev.

  • 📂如何移植在2.6内核中编译的linux驱动程序,而不在其他新版本的内核中编译教程

    谢谢大家,这是我面对的一次采访中提出的问题.我有一个在Linux内核版本2.6中编译的Linux设备驱动程序,我想在具有内核3.X的Linux PC中移植相同的驱动程序而无需编译新版本.可能吗 ?如果可以的话,请告诉我.如果不可能,请告诉我为什么不这样做?谢谢&问候 西瓦解决方法:不,您不能将为一个版本编译的模块移植到另一版本.原因如下模块与特定内核版本中定义的数据结构和功能原型紧密相关....

  • 📂linux-在处理请求时将队列锁定在块设备驱动程序中的正确方法教程

    我正在尝试为网络连接的硬盘编写设备驱动程序.我想知道锁定/解锁请求队列的正确方法是什么?在哪里?澄清:我使用blk\_init\_queue创建了一个队列,并将请求处理程序函数和我创建的一个锁(即信号灯)传递给该函数. 我的请求处理程序函数如下所示:struct request *req; int ret; while ((req = blk_fetch_request(q)) != NU...

  • 📂Linux驱动程序:不使用nopage的mmap()内核缓冲区到用户空间教程

    这个问题已经在这里有了答案: > Mapping DMA buffers to userspace [closed] 5个 我正在为数据获取设备实现Linux设备驱动程序,该设备不断将数据流到在内核中分配的循环缓冲区中(使用\_\_get\_free\_pages()).循环缓冲区(由PCIe硬件写入)位于RAM中,我希望用户空间能够mmap()该RAM区域,以便用户空间可以读取其内...

  • 📂PCI / PCIe设备如何在Linux内核中初始化/注册自己?教程

    当内核启动时,PCI子系统为每个物理PCI总线创建一个pci\_bus,然后将pci\_bus添加到pci\_root\_buses(具有PCI配置).但是PCI设备驱动程序通过pci\_register\_driver注册驱动程序,并将PCI驱动程序添加到pci\_bus\_type.我的问题:pci\_bus\_type如何知道PCI配置. pci\_bus\_type和pci\_ro...

  • 📂Linux网络驱动程序MSI中断问题教程

    我正在尝试为自定义硬件创建网络驱动程序.我的目标是Xilinx Zync-7000 FPGA器件.我的问题是CPU端MSI中断的软件处理.我遇到的问题是,当在PCIe设备上触发中断时,驱动程序代码会执行一次中断处理程序并返回,但是当我查看lspci时,PCIe IO会停止工作,并且MSI将重置.内核不会捕获任何将来的中断,PCIe开发人员几乎已经死了.我检查了硬件,没有复位信号发给FPGA,...

  • 📂linux-Raspberry Pi零USB设备仿真教程

    我知道Raspberry Pi Zero支持OTG和USB外设协议,并且这里显示了很多很棒的外设:https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget?view=all#other-modules问题是我需要模拟未出现在此列表中的USB外围设备.我有该设备的供应商ID和产品ID,并且我试图弄清楚...

  • 📂c-Linux中inet_addr_lst内核符号的作用是什么?教程

    我试图了解http://lxr.free-electrons.com/source/net/ipv4/devinet.c#L108中定义的内核符号inet\_addr\_lst的用途是什么?它包含系统上所有IP地址的列表还是其他内容?解决方法:哈希表是一个由struct hlist\_head指针组成的数组,其中每个指针都指向一个不同的列表,并且这些列表中的每个列表都包含所有哈希到同一存储桶...

  • 📂在arc平台上的linux wifi驱动程序上未对齐的地址访问崩溃教程

    我在WIFI Marvell PCIe驱动程序的insmod上崩溃. 我在ARCH = arc OS = linux和little endian上运行WIFI驱动程序. 崩溃回溯表示未对齐的地址访问会导致崩溃. 我做了一些调查,发现了崩溃的地方,下面是代码片段.case NullPktPeriod_i: /** keep alive null data pkt inte...

  • 📂linux-使用wait_event_interruptible_timeout判断设备驱动程序超时是否发生教程

    在设备驱动程序中,我正在使用wait\_event\_interruptible\_timeout.如何判断是否发生超时?该宏仅在中断时返回错误代码,但超时不是中断,因此返回“ 0”.编辑:不确定如何判断是否发生超时,但是条件不会被设置,所以听起来像答案.解决方法:在几周前阅读Linux Device Drivers, Third Edition中对该函数的描述后,我遇到了同样令人困惑的问题...

  • 📂Objdump -S没有显示Linux内核模块的源代码列表教程

    我正在尝试从我的一个内核模块中调试崩溃;我正在尝试获取源代码清单以及objdump的输出,但未列出.我有什么想念的吗? mips-linux-objdump -S <filename.o> > temp 解决方法:最有可能是a)在构建过程中的某个时候从内核模块目标文件中剥离了所有调试信息,或者b)即使存在调试信息,objdump也无法找到源代码文件,在这种情况下,您可以尝试...

  • 📂用于DECLARE_WORK中功能的Linux传输参数教程

    我尝试对事件工作队列进行编程,但是遇到一些问题.我使用Linux 2.6.36内核.并且DECLARE\_WORK函数从3个参数更改为2个.问题是,旧的宣言是 DECLARE_WORK (struct work_struct name, void (*func)(void *), void *data); 而新的是 DECLARE_WORK (struct work_struct ...

  • 📂在Linux中等待队列vs信号量教程

    为什么我们在Linux内核中使用等待队列而不是使用信号量进行同步?使用等待队列与信号量进行同步之间有什么区别?解决方法:信号量是一种变量或抽象数据类型,它提供了一种简单但有用的抽象,用于控制并行编程环境中多个进程对公共资源的访问. (Wikipedia)现在,信号量更多是一个概念,而不是特定的实现.linux信号量数据结构实现使用等待队列.如果没有等待队列,您将不知道哪个进程首先需要资源,这...

  • 📂linux-打印到内核日志的限制教程

    我正在使用Linux设备驱动程序(内核版本2.6.32-37).我主要通过打印到内核日志(使用printk)来调试代码.一切正常,直到我的计算机突然停止响应.我已经一遍又一遍地检查了它,我的代码似乎是正确的. 我的问题是:内核日志中的打印过多是否有可能导致计算机停止响应?非常感谢!Omer解决方法:我怀疑问题是由printk引起的,当然使用printk本身会减慢整个代码的速度,但不会使系统...

  • 📂linux-struct cdev和struct device有什么区别教程

    有人可以给我一些关于struct cdev和struct device之间差异的解释吗?解决方法:在最低级别上,Linux系统中的每个设备都由struct device实例表示.设备结构包含设备模型核心对系统进行建模所需的信息.但是,大多数子系统会跟踪有关其托管设备的其他信息.结果,很少有设备用裸设备结构来表示.取而代之的是,该结构(如kobject结构)通常嵌入在设备的更高级别表示中. ...

  • 📂linux-为什么使用两个参数(struct inode *,struct file *)进行打开调用?教程

    我正在实现一个字符驱动程序.所以我正在注册文件操作.当我注册读取功能时,我以此方式提取了次要号码 myread(struct file * file, char __user * ubuf, size_t lbuf, loff_t *offset) { int minor; minor = MINOR(file->f_path.d...

  • 📂linux-spi_driver.id_table和spi_driver.driver.of_match_table之间的区别教程

    我目前正在尝试了解linux驱动程序的工作方式.据我所知,当内核解析设备树中相应的.compatible字符串时,将调用驱动程序的probe / init函数.但是,在arizona-spi驱动程序中,看起来好像有多个在不同成员中引用的兼容字符串:static const struct spi_device_id arizona_spi_ids[] = { { "wm5102&qu...

  • 📂在Linux内核中使用持久性存储教程

    我试图使用Linux内核中可用的持久性存储(Pstore),但由于内核恐慌而无法以某种方式获取日志,我在内核配置文件中将以下内核模块构建为内置的** CONFIG\_PSTORE = y CONFIG\_PSTORE\_CONSOLE = y CONFIG\_PSTORE\_RAM = y **现在,A / c到文档pstore,我应该在/ sys / fs / pstore / …(或...

  • 📂linux-为什么不能将__GFP_HIGHMEM标志应用于__get_free_page()或kmalloc()教程

    我想基本了解两件事kmalloc是如何工作的,我的意思是kmalloc调用哪个函数来分配内存是alloc\_pages()还是\_\_ger\_free\_pages(). 为什么为什么\_\_GFP\_HIGHMEM标志不能应用于\_\_get\_free\_page()或kmalloc()我从LKD的下面摘录中,罗伯特·洛夫(Robert Love)可以给任何人更好地解释在给\_\_G...

  • 📂Linux内核设备驱动程序需要访问用户空间中的共享对象教程

    我正在尝试为Linux编写网络设备驱动程序.我拥有的设备具有可用的API,该API使我可以通过用户空间中存在的共享对象来访问所需的所有功能.我想编写一个网络驱动程序,以便可以使设备显示为CAN接口.但是,为了与设备进行交互,我需要使用用户空间中存在的特定共享对象.我需要网络设备驱动程序的原因是公开可以通过SocketCAN实用程序进行交互的CAN接口.有没有办法可以在用户空间中编写网络设备驱...

  • 📂Linux DMA:使用DMAengine进行分散收集事务教程

    我尝试使用自定义内核驱动程序中的DMAengine API来执行分散收集操作.我有一个连续的内存区域作为源,我想通过散点列表结构将其数据复制到几个分布式缓冲区中. DMA控制器是PL330之一,它支持DMAengine API(请参见PL330 DMA controller).我的测试代码如下:在我的驱动程序头文件(test\_driver.h)中:#ifndef __TEST_DRIVER...

  • 📂linux-`.dts`文件和`.dtsi`文件有什么区别?教程

    .dts文件和.dtsi文件有什么区别?生成设备树Blob时有区别吗?什么时候使用其中一个?解决方法:Here,由Thomas Petazzoni解释,并在@ mc110的评论之一中指出,您可以找到:.dts<-用于板级定义的文件 .dtsi<-包含文件的文件,通常包含SoC级 定义(dtsi中的i代表“包含”)但是,一旦使用设备树编译器创建了.dtb,如果尝试再次返回以获取...

  • 📂linux-fsync,sync:它确实可以实现预期的功能吗?教程

    我想进一步说明Linux(2.6.31)中sync(8)和fsync函数的功能.是否确保将文件写入相应的存储区?解决方法:http://linux.die.net/man/8/sync它不能确保将文件写入相应的存储.它仅确保将缓存/缓冲的数据刷新到磁盘设备.这是SD卡还是什么都没关系.

  • 📂在Linux上直接控制HCI设备(绕过蓝牙驱动程序)教程

    我需要在没有Linux驱动程序/内核干扰的情况下直接控制HCI设备.例如,在创建到外围设备的LE连接时,驱动程序独立发送“LE连接更新”命令,我想避免.我有两种解决方法:配置蓝牙驱动程序以某种方式禁用对HCI设备的干扰(类似于hciattach上的-r标志),然后使用常规AF\_BLUEOOTH套接字控制HCI设备. 禁用此特定HCI设备,但保留父char设备并直接连接到它.到目前为止,我...

  • 📂将物理地址映射到虚拟地址linux教程

    我正在研究一个小型嵌入式系统.当我的linux启动到用户空间时,我知道我的设备在物理内存中的位置.我想将它们映射到用户空间虚拟地址.目前,我是通过内核模块完成的.我使用vmalloc / kmalloc(取决于大小)然后我在返回的虚拟地址上使用ioremap\_page\_range来映射我的物理地址.我不认为这是正确的方法.首先,我分配内存,然后我要求内核将虚拟地址空间重新映射到一些不同的...

  • 📂如何从用户空间与Linux内核模块通信而不会乱丢/ dev新节点?教程

    从用户空间与内核模块通信的方式有哪些?通过通信,我的意思是在内核模块和用户空间进程之间发送信息和命令.我目前知道两种方式:在已发布的设备节点上打开/关闭/读取/写入/ ioctl. 在导出和挂钩/ proc文件上读/写.更具体地说,有人可以建议与内核模块进行通信的最佳方式,该内核模块实际上并不驱动任何硬件,因此不应该使用仅用于ioctl调用的存根节点乱丢/ dev吗?我主要需要检查其各种状...

  • 📂如何将Linux内核缓冲区映射到用户空间?教程

    假设缓冲区是使用基于页面的方案分配的.实现mmap的一种方法是使用remap\_pfn\_range,但LDD3表示这对常规内存不起作用.看来我们可以通过使用SetPageReserved标记保留的页面来解决这个问题,以便它被锁定在内存中.但是并非所有内核内存都已经不可交换,即已经保留了吗?为什么需要明确设置保留位?这是否与从HIGH\_MEM分配的页面有关?解决方法:在mmap方法中从内核...

  • 📂在构建Linux内核之前仅清理选定的模块教程

    我有一种情况,我需要针对不同的配置构建相同的内核.现在我试图构建内核而不进行make clean,但这给了我一些问题.一个配置有可能内置一些驱动程序,其他驱动程序可能与模块具有相同的驱动器. 在我的情况下,我想避免干净,以节省时间!编译一个新内核需要花费时间,因为我之前编译了相同的内核,只更改了几个驱动程序/模块,我想知道清除整个内核的任何备用选项.谢谢!解决方法:如果您只是在处理几个模块...

  • 📂linux – Docker容器:未找到lsmod教程

    如何在Docker上运行的Ubuntu 14中安装lsmod和modprobe?我需要在容器中安装设备驱动程序,但首先我需要这些命令.(泊坞窗图像最初来自码头中心,来自tomcat:7图像).解决方法:根据@ lan-Abbott的评论.问题解决了.user@host:# apt-get install kmod Reading package lists... Done Building ...

  • 📂linux – cdev_add()在主要117上成功注册后,char设备出现在哪里.教程

    我写了基本的char驱动程序.使用cdev\_alloc,cdev\_init,cdev\_add完成了使用内核注册char设备. Major = 117,Minor = 1.cdev\_add函数retrun成功. 我正在尝试检查是否创建了char设备. 我没有在/ dev /或/ dev / char下找到任何设备,主要没有117.register\_chrdev不会在我们提供NA...