草庐IT

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 - PCIE linux 内核驱动程序中的流式 DMA

我正在为Linux内核开发FPGA驱动程序。代码似乎在x86上运行良好,但在x86_64上我遇到了一些问题。我实现了流式DMA。就这样get_user_pages(...);for(...){sg_set_page();}pci_map_sg();但是pci_map_sg返回了类似0xbd285800的地址,这些地址没有按PAGE_SIZE对齐,所以我无法发送完整的第一页,因为PCIE规范说"RequestsmustnotspecifyanAddress/LengthcombinationwhichcausesaMemorySpaceaccesstocrossa4-KBboundary

linux - PCIE linux 内核驱动程序中的流式 DMA

我正在为Linux内核开发FPGA驱动程序。代码似乎在x86上运行良好,但在x86_64上我遇到了一些问题。我实现了流式DMA。就这样get_user_pages(...);for(...){sg_set_page();}pci_map_sg();但是pci_map_sg返回了类似0xbd285800的地址,这些地址没有按PAGE_SIZE对齐,所以我无法发送完整的第一页,因为PCIE规范说"RequestsmustnotspecifyanAddress/LengthcombinationwhichcausesaMemorySpaceaccesstocrossa4-KBboundary

linux - 坏的 USB 设备是否应该能够使无错误的 Linux 内核崩溃?

我知道我的问题很宽泛,但我一直想知道这个问题很长一段时间。一点背景。我在物理实验室工作,所有实验室计算机都运行Debian(旧版本和Lenny的混合)或最近的Ubuntu10.4LTS。我们编写了很多自定义软件来与实验硬件和其他计算机进行交互。我们有很多控制实验各个部分的FPGA板,它们通过USB连接到不同的计算机。在升级控制实验的计算机后,我们开始看到运行所有激光器的计算机崩溃/锁定。这曾经是完全稳定的。我的问题是:如果整台电脑因为一个问题而死机a)Python/GTK软件图形用户界面b)USB设备驱动程序或者c)实际设备这能归咎于Linux内核(或操作系统的其他级别)吗?要求lin

linux - 坏的 USB 设备是否应该能够使无错误的 Linux 内核崩溃?

我知道我的问题很宽泛,但我一直想知道这个问题很长一段时间。一点背景。我在物理实验室工作,所有实验室计算机都运行Debian(旧版本和Lenny的混合)或最近的Ubuntu10.4LTS。我们编写了很多自定义软件来与实验硬件和其他计算机进行交互。我们有很多控制实验各个部分的FPGA板,它们通过USB连接到不同的计算机。在升级控制实验的计算机后,我们开始看到运行所有激光器的计算机崩溃/锁定。这曾经是完全稳定的。我的问题是:如果整台电脑因为一个问题而死机a)Python/GTK软件图形用户界面b)USB设备驱动程序或者c)实际设备这能归咎于Linux内核(或操作系统的其他级别)吗?要求lin

linux - 映射到虚拟地址空间的内核符号表——为什么?

什么是/proc/ksyms和/proc/kallsyms,为什么它映射到进程地址空间?它有什么作用?是否用于系统调用时内核的上下文切换? 最佳答案 ksyms(7d)的Solaris联机帮助页解释这个。数据仅供引用,内核以这种方式通过/dev/ksyms将其当前使用的符号表公开给内核调试器和/或内核模块加载器。Linux通过/proc/kallsyms做同样的事情;/proc/ksyms-如果存在-是一个“传统”文件,表示相同数据的子集(即已弃用)。与Linux/Solaris一样,不同之处在于Linux版本显示文本,而Solar

linux - 映射到虚拟地址空间的内核符号表——为什么?

什么是/proc/ksyms和/proc/kallsyms,为什么它映射到进程地址空间?它有什么作用?是否用于系统调用时内核的上下文切换? 最佳答案 ksyms(7d)的Solaris联机帮助页解释这个。数据仅供引用,内核以这种方式通过/dev/ksyms将其当前使用的符号表公开给内核调试器和/或内核模块加载器。Linux通过/proc/kallsyms做同样的事情;/proc/ksyms-如果存在-是一个“传统”文件,表示相同数据的子集(即已弃用)。与Linux/Solaris一样,不同之处在于Linux版本显示文本,而Solar

c - 在没有 open() 的情况下获取内核空间中的文件描述符和详细信息

谁能提供解决这个问题的代码?在给定文件/dev/driver1的情况下,我们如何有效地从内核级别获取structinode*?在用户空间中给出:intfd;fd=open("/dev/driver1",O_RDWR|O_SYNC);在内核空间:staticlongdev_ioctl(structfile*file,unsignedcmd,unsignedlongarg)structdev_handle*handle;handle=file->private_data;假设,我们不走那条路,我们如何在内核中获取,例如。硬编码要处理的file->private_data?

c - 在没有 open() 的情况下获取内核空间中的文件描述符和详细信息

谁能提供解决这个问题的代码?在给定文件/dev/driver1的情况下,我们如何有效地从内核级别获取structinode*?在用户空间中给出:intfd;fd=open("/dev/driver1",O_RDWR|O_SYNC);在内核空间:staticlongdev_ioctl(structfile*file,unsignedcmd,unsignedlongarg)structdev_handle*handle;handle=file->private_data;假设,我们不走那条路,我们如何在内核中获取,例如。硬编码要处理的file->private_data?

c - 内核 block 设备

我目前正在尝试实现一个(不是那个?)简单的内核block设备驱动程序。我的灵感主要来自这本书LinuxDeviceDrivers,3rdEdition由于它于2005年发布,因此不再完全是最新的。无论如何,逻辑仍然存在,我从中学到了很多东西。然而,示例并不是真正有效,因为自2005年以来许多事情都发生了变化。我找到了一个githubrepository应该更新示例以在最近的内核上工作,但我认为还有一些东西需要更新,因为我无法调整示例以使其在kernel4.9.0上工作我的模块是这样制作的:初始化时:使用register_blkdev将模块注册为block设备分配设备数据缓冲区初始化自旋