草庐IT

c++ - `libusb_attach_kernel_driver` 不工作

我在完全关闭使用libusb的Linux应用程序时遇到问题(内核不回收接口(interface)):intrc;rc=libusb_reset_device(handle_);if(rc问题是重新附加内核驱动程序不起作用。实际上libusb_kernel_driver_active不会返回1,但即使我将其注释掉并始终调用libusb_attach_kernel_driver,我也永远不会取回我的/dev/ttyACM0设备。在这种情况下,我得到LIBUSB_ERROR_NOT_FOUND。 最佳答案 我已经调试了linuxcdc-a

linux - 根据 .config 剥离 Linux 内核源

是否有任何有效的方法(可能通过滥用gcc预处理器?)来获取一组剥离的内核源代码,其中根据.config不需要的所有代码都被排除在外? 最佳答案 我们已经采取了一些步骤来解决问题。首先可以通过以下方式获取使用到的编译命令makeKBUILD_VERBOSE=1|teebuild.loggrep'^gcc'build.log目前,我只选择了一个gcc命令行来执行进一步的步骤。例如kernel/kmod.c的构建,它看起来像:gcc-c-okernel/kmod.okernel/kmod.c我现在删除选项-c、-o...并添加-E,从而禁

linux - 根据 .config 剥离 Linux 内核源

是否有任何有效的方法(可能通过滥用gcc预处理器?)来获取一组剥离的内核源代码,其中根据.config不需要的所有代码都被排除在外? 最佳答案 我们已经采取了一些步骤来解决问题。首先可以通过以下方式获取使用到的编译命令makeKBUILD_VERBOSE=1|teebuild.loggrep'^gcc'build.log目前,我只选择了一个gcc命令行来执行进一步的步骤。例如kernel/kmod.c的构建,它看起来像:gcc-c-okernel/kmod.okernel/kmod.c我现在删除选项-c、-o...并添加-E,从而禁

linux - 可以从 perf.data 文件生成 perf-stat 结果吗?

当我想使用Linux工具套件中的perf-stat和perf-report生成性能报告时perf,我跑:$perfrecord-omy.perf.datamyCmd$perfreport-imy.perf.data和:$perfstatmyCmd但这意味着我要第二次运行“myCmd”,这需要几分钟时间。相反,我希望:$perfstat-imy.perf.data但与perf套件中的大多数工具不同,我没有看到perf-stat的-i选项。是否有其他工具,或者有办法让perf-report生成与perf-stat类似的输出? 最佳答案

linux - 可以从 perf.data 文件生成 perf-stat 结果吗?

当我想使用Linux工具套件中的perf-stat和perf-report生成性能报告时perf,我跑:$perfrecord-omy.perf.datamyCmd$perfreport-imy.perf.data和:$perfstatmyCmd但这意味着我要第二次运行“myCmd”,这需要几分钟时间。相反,我希望:$perfstat-imy.perf.data但与perf套件中的大多数工具不同,我没有看到perf-stat的-i选项。是否有其他工具,或者有办法让perf-report生成与perf-stat类似的输出? 最佳答案

linux - 为什么我们需要在 ARM Linux cpu_idle 中禁用 WFI 之前的中断

ARM的Linux内核基本上在循环中执行CPU_idle:while(1){disalbe_irqwfienable_irq}我可以理解这个逻辑是有效的,因为无论IRQ/FIQ状态如何,“wfi”都会唤醒ARM。但是,为什么“wfi”必须首先用disable_irq和eanble_irq括起来?源码/arch/arm/process.c有如下推荐:*Weneedtodisableinterruptshere*toensurewedon'tmissawakeupcall.但我无法理解它。谁能告诉我在哪种情况下我们会错过叫醒服务? 最佳答案

linux - 为什么我们需要在 ARM Linux cpu_idle 中禁用 WFI 之前的中断

ARM的Linux内核基本上在循环中执行CPU_idle:while(1){disalbe_irqwfienable_irq}我可以理解这个逻辑是有效的,因为无论IRQ/FIQ状态如何,“wfi”都会唤醒ARM。但是,为什么“wfi”必须首先用disable_irq和eanble_irq括起来?源码/arch/arm/process.c有如下推荐:*Weneedtodisableinterruptshere*toensurewedon'tmissawakeupcall.但我无法理解它。谁能告诉我在哪种情况下我们会错过叫醒服务? 最佳答案

Linux 内核 : udelay() returns too early?

我有一个需要微秒延迟的驱动程序。为了创建这种延迟,我的驱动程序使用了内核的udelay函数。具体来说,有一次调用udelay(90):iowrite32(data,addr+DATA_OFFSET);iowrite32(trig,addr+CONTROL_OFFSET);udelay(30);trig|=1;iowrite32(trig,addr+CONTROL_OFFSET);udelay(90);//Thisistheproblematiccall我们的设备存在可靠性问题。经过大量调试,我们将问题追踪到驱动程序在90us之前恢复。(参见下面的“证明”。)我在IntelPentium

Linux 内核 : udelay() returns too early?

我有一个需要微秒延迟的驱动程序。为了创建这种延迟,我的驱动程序使用了内核的udelay函数。具体来说,有一次调用udelay(90):iowrite32(data,addr+DATA_OFFSET);iowrite32(trig,addr+CONTROL_OFFSET);udelay(30);trig|=1;iowrite32(trig,addr+CONTROL_OFFSET);udelay(90);//Thisistheproblematiccall我们的设备存在可靠性问题。经过大量调试,我们将问题追踪到驱动程序在90us之前恢复。(参见下面的“证明”。)我在IntelPentium

linux - 为旧内核编译程序

我在一台最新的Linux机器上静态编译和链接了一个程序,然后在另一个9年前的Linux上运行它。它给了我一个错误“致命:内核太旧”并退出。具体来说,新的是Fedora18(gcc4.7.2,glibc2.16,内核3.7.2),旧的是RHEL4.8(glibc2.3.4,内核2.6.9)。由于它是静态链接,glibc版本应该无关紧要。我想这里的问题是程序调用了不在旧内核中的系统调用。如果无法在旧系统上进行开发,我如何才能在新系统中构建程序并在旧系统中运行(或者更好的是,两者兼而有之)?我一直在寻找一种在兼容模式下运行gcc的方法,它只调用旧的系统调用。还没有运气。