Tag: driver

在linux驱动程序中定期调用spi_write

我正在为LCD显示器编写驱动程序。 根据应用笔记,我需要定期向命令写一个伪SPI写,以最大化其对比度。 为此,我设置了一个定时器,并尝试从定时器处理程序中编写对比度最大化的2字节伪命令。 但是,出现问题是因为s​​pi_write函数导致完整的内核崩溃并出现以下错误: BUG: scheduling while atomic: swapper/1/0/0x00000102 基于以下post: 如何解决“BUG:调度而primefaces:swapper / 0x00000103 / 0,CPU#0”? 在TSC2007驱动程序? “primefaces调度”表示你试图在某个你不应该睡觉的地方睡觉 – 就像在受自旋锁保护的关键部分或中断处理程序中一样。 也许对spi_write的调用会触发某种睡眠行为。 禁止在这里睡觉是有意义的,因为基于堆栈跟踪,我看到代码处于软IRQ状态: [] (schedule_timeout) from [] (wait_for_common+0x114/0x15c) [] (wait_for_common) from [] (spi_sync+0x70/0x88) [] (spi_sync) from [] (plt_lcd_send_toggle_comin_cmd+0x7c/0x84 [plt_lcd_spi]) [] (plt_lcd_send_toggle_comin_cmd [plt_lcd_spi]) from [] (plt_lcd_timer_handler+0xc/0x2c [plt_lcd_spi]) [] (plt_lcd_timer_handler [plt_lcd_spi]) from [] (call_timer_fn.isra.26+0x20/0x30) [] (call_timer_fn.isra.26) from [] (run_timer_softirq+0x1ec/0x21c) […]

在Windows 8下不调用NDIS筛选器驱动程序的FilterAttach例程

每一个人。 我已将NDIS 5协议中着名的数据包捕获软件WinPcap移植到NDIS 6 LWF。 在Win7下一切都很好。 但是,在Win8下永远不会调用FilterAttach例程。 我发现在DriverEntry中调用NdisFRegisterFilterDriver返回NDIS_STATUS_SUCCESS,这太奇怪了。 谁能帮我? 谢谢! 这是DriverEntry的代码 _Use_decl_annotations_ NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { NDIS_FILTER_DRIVER_CHARACTERISTICS FChars; NTSTATUS Status = STATUS_SUCCESS; // NDIS_STRING FriendlyName = NDIS_STRING_CONST(“WinPcap NDIS LightWeight Filter”); // NDIS_STRING UniqueName = NDIS_STRING_CONST(“{5cbf81bd-5055-47cd-9055-a76b2b4e2637}”); //unique name, quid name // NDIS_STRING ServiceName = NDIS_STRING_CONST(“npf6x”); //this to match the service […]

xnu中的vnode和文件描述符,存储文件操作向量的位置

在xnu中,我们有vnode_t实体,它代表全局文件。 每个进程都可以通过设置新的文件描述符并在fg_data下设置vnode来访问该文件(假设它具有正确的权限) fp->f_fglob->fg_data = vp; vnode包含所有相关操作的基本操作列表,并根据文件的FS进行设置。 即HFS +驱动程序实现此类向量并相应地设置其vnode。 int (**v_op)(void *); /* vnode operations vector */ 这是可以在vnode上运行的所有操作的函数指针的向量。 另外,我们有fileops结构,它是文件描述符(fg_global)的一部分,它描述了这些函数的最小子集: 这是一个典型的定义: const struct fileops vnops = { .fo_type = DTYPE_VNODE, .fo_read = vn_read, .fo_write = vn_write, .fo_ioctl = vn_ioctl, .fo_select = vn_select, .fo_close = vn_closefile, .fo_kqfilter = vn_kqfilt_add, .fo_drain = NULL, }; 我们在这里设置: fp->f_fglob->fg_ops = &vnops; 我看到当在本地文件系统(HFS […]