首页 > TAG信息列表 > 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 (

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

这个问题已经在这里有了答案:            >            Mapping DMA buffers to userspace [closed]                                    5个我正在为数据获取设备实现Linux设备驱动程序,该设备不断将数据流到在内核

c-request_irq中的dev_id参数是什么?

在函数声明中 int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long irqflags, const char *devname, void *dev_id); dev_id是“ in”参数还是“ out”

使用PF_PACKET类型的套接字时,PACKET_ADD_MEMBERSHIP是什么?

当使用协议类型为ETH_P_IP的PF_PACKET类型的套接字时,man packet文档将讨论多播的套接字选项.套接字选项是PACKET_ADD_MEMBERSHIP. 假设您在PF_PACKET套接字上正确使用了PACKET_ADD_MEMBERSHIP套接字选项,那么此套接字选项有哪些功能,好处和用例? 现在,我收到所有传入的IP数据包,因

为什么我的IOCTL调用可与copy_from_user一起使用,而不能与get_user一起使用?

我正在编写一个简单的驱动程序. 在这里,我正在学习ioctl调用,它们可以在copy_to_user和copy_from_user部分中完美地工作,而在get_user和put_user部分中则不能.如果通过这些功能发送一些数据,它将起作用.问题是当我只需要传递整数或字符值时: long ioctl_funcs(struct file *filp,un

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_root_bus

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

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

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 interval

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

在设备驱动程序中,我正在使用wait_event_interruptible_timeout.如何判断是否发生超时?该宏仅在中断时返回错误代码,但超时不是中断,因此返回“ 0”. 编辑:不确定如何判断是否发生超时,但是条件不会被设置,所以听起来像答案.解决方法:在几周前阅读Linux Device Drivers, Third Editio

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

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

用于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 name,

在Linux中等待队列vs信号量

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

linux-打印到内核日志的限制

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

linux-struct cdev和struct device有什么区别

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

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.dentry->d_inode->f_p

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[] = { {

在Linux内核中使用持久性存储

我试图使用Linux内核中可用的持久性存储(Pstore),但由于内核恐慌而无法以某种方式获取日志,我在内核配置文件中将以下内核模块构建为内置的 ** CONFIG_PSTORE = y CONFIG_PSTORE_CONSOLE = yCONFIG_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)可以给任何人更好地解释在给_

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

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

Linux DMA:使用DMAengine进行分散收集事务

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

从Python更新proc条目的推荐方法是什么

我在/ proc / sys / fs / offs / ts / enable中有一个linux proc条目,可在自定义内核模块中切换标志.将值设置为1将启用模块中的模式,设置为0将禁用该模式. 在bash中,要启用该模式,我只需 echo 1 > /proc/sys/fs/offs/ts/enable 并禁用它, echo 0 > /proc/sys/fs/offs/ts/enable