从mdev切换到udev时,Linux内核模块不再运行

时间:2014-02-24 13:03:50

标签: device udev buildroot

我有一个简单的内核模块:

void GPIO_LED(void) {
   printk(" GPIO: set PC8: '0');
   at91_set_gpio_value(AT91_PIN_PC8, 1);
}
//
int init_module(void) {
  GPIO_LED();
  return 0;
}

MODULE_LICENSE("GPL");

mdev 设备管理一起使用时。一切正常。但是在执行insmod时使用 udev 设备管理

insmod /usr/modules/measurement_gpio.ko

出现以下消息:

insmod: can't insert '/usr/modules/measurement_gpio.ko': invalid module format

另一个测试表明,当使用设备表而不是mdev / udev时会导致相同的错误。每个设置保持不变(特别是内核版本),但设备管理在此测试期间发生了变化,因此实际上模块应该没问题。

怎么可能以及如何解决它?

[编辑:]使内核能够为多个版本加载模块后,我收到以下消息,这让我更加困惑:

measurement_gpio: version magic '2.6.39 mod_unload modversions ARMv5 ' should be '2.6.39 mod_unload ARMv5

[ EDIT2:] 我构建模块的方式是

  1. 使用Buildroot我正在Linux上生成一个Image 2.6.39已安装。
  2. 之后我正在使用Linux 2.6.39的路径编译kernelmodule,这是buildroot已下载的。
  3. 创建模块时,我将其放入fs-overlay中 目录,因此它将被包含在下一个构建的图像中。
  4. 我在buildroot上点了另一个“make”,我把所有东西放在一起,然后是一张可启动的Image。
  5. 我什么都没改变,这就是为什么它让我更加困惑

0 个答案:

没有答案