Discussion:
Linux kernel module is not running anymore when switching from mdev to udev
Frank Ihle
2014-03-05 08:49:40 UTC
Permalink
Hi everyone,

there is this problem, that I searched the Internet
for its solution but without success. Here's what it's about, I hope
someone can give me a hint:



I'm using Buildroot 2013.10 to generate my Linux 2.6.39 Images, with the following Kernel module:



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");



When using it with mdev device management. everything works just
fine. But using it with a udev device management, while executing insmod



insmod /usr/modules/measurement_gpio.ko



the following message appeared:



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



Every setting stayed the same (especially the kernel version) but the
device management changes during this test, so actually the module
should be fine. Building the kernel to be able for loading modules for
multiple versions didn't solve it, neither the option "force module
loading"


The way I build my module is:


with Buildroot I'm generating an Image, on the way a Linux 2.6.39 is installed.Afterwards I'm compiling the kernel module with the path to the Linux 2.6.39, that Buildroot has downloaded.When the module is created I'm putting it into a fs-overlay directory, so it will be included into the image on next build.I hit another "make" on Buildroot and i got everything together and a bootable image.


I change nothing, that's why it confuses me even more


How can this be and how to solve it?

Kind Regards,
Frank
Lucas De Marchi
2014-03-07 04:08:36 UTC
Permalink
Hi Frank,
Post by Frank Ihle
Hi everyone,
there is this problem, that I searched the Internet
for its solution but without success. Here's what it's about, I hope
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");
When using it with mdev device management. everything works just
fine. But using it with a udev device management, while executing insmod
I don't see how udev could be related to your problem. Maybe just how
the dependencies were chosen...
Post by Frank Ihle
insmod /usr/modules/measurement_gpio.ko
insmod: can't insert '/usr/modules/measurement_gpio.ko': invalid
module format
Every setting stayed the same (especially the kernel version) but the
device management changes during this test, so actually the module
should be fine. Building the kernel to be able for loading modules for
multiple versions didn't solve it, neither the option "force module
loading"
with Buildroot I'm generating an Image, on the way a Linux 2.6.39 is installed.Afterwards I'm compiling the kernel module with the path to the Linux 2.6.39, that Buildroot has downloaded.When the module is created I'm putting it into a fs-overlay directory, so it will be included into the image on next build.I hit another "make" on Buildroot and i got everything together and a bootable image.
I change nothing, that's why it confuses me even more
How can this be and how to solve it?
I successfully built an image with buildroot using systemd/udev/kmod
some days ago. And inserting modules work fine. If it was a more
recent kernel I'd say it's because you enabled module signature and
your out-of-tree module isn't signed. But it doesn't look like this.

CC'ing buildroot's ML to see if they have a clue.
Post by Frank Ihle
Kind Regards,
Frank
--
To unsubscribe from this list: send the line "unsubscribe linux-modules" in
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Lucas De Marchi
Thomas Petazzoni
2014-03-07 08:15:34 UTC
Permalink
Frank,
Post by Lucas De Marchi
Post by Frank Ihle
there is this problem, that I searched the Internet
for its solution but without success. Here's what it's about, I hope
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");
When using it with mdev device management. everything works just
fine. But using it with a udev device management, while executing insmod
I don't see how udev could be related to your problem. Maybe just how
the dependencies were chosen...
I agree: the kernel module shown by Frank only toggle a GPIO, and does
not expose any device in /dev or anything that would involve udev or
mdev.
Post by Lucas De Marchi
Post by Frank Ihle
insmod: can't insert '/usr/modules/measurement_gpio.ko': invalid
module format
Are you sure you have built your module correctly, against the right
version of the kernel headers that match the kernel you're running?

Best regards,

Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
Loading...