在内核3.10 (7.3OS)中移植自定义pci驱动程序时,我面临一个问题。内核在执行ioctl访问或对驱动程序的任何访问时崩溃。怀疑坠机是否是因为下面的信息,
警告:- 629.090891_pcie:加载树外模块会污染内核。629.090921 pcie:模块验证失败:签名和/或所需的密钥丢失-污染内核。
但是,当我在RHELOS6.5中移植相同的驱动程序时,我不会面临这个警告/错误。
禁用Linux7.3中的内核模块签名并引导自定义操作系统是否会清除此警告?或者不需要重新编译操作系统就可以清除警告。
发布于 2018-10-08 05:40:18
引用的信息本身并不是坠机的原因。“内核污染”是对内核开发人员的一个通知,即用户已经加载了一个不来自对内核开发人员友好的环境的模块。有些人认为这是不支持这类用户和/或设置的正当理由。
崩溃的原因是内部内核ABI (二进制接口)不稳定,在不同版本之间(甚至在同一版本的不同配置之间)会发生变化。内核有一些防止加载二进制不兼容模块的保护,但通常是禁用的和/或可以绕过的。一旦二进制不兼容模块进入内核,试图执行它往往会导致崩溃和其他错误行为:模块是为不同的ABI编译的,因此模块内部的代码试图以错误的偏移访问结构字段,使用错误寄存器中的参数调用函数,等等。
为了避免崩溃,至少必须针对正在运行的内核重新编译模块。虽然这可能会失败的情况下,有变化,不仅在ABI,也在API。在后一种情况下,需要将模块的源代码移植到更新的API中。
https://stackoverflow.com/questions/52614219
复制相似问题