Why does this kernel module do nothing when I load it?
#include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> #define DEVICE_NAME "hello-1.00.a" #define DRIVER_NAME "hello" MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(struct platform_device *pdev){ printk(KERN_ALERT "Hello, world\n"); return 0; } static int hello_exit(struct platform_device *pdev){ printk(KERN_ALERT "Goodbye, cruel world\n"); return 0; } static const struct of_device_id myled_of_match[] = { {.compatible = DEVICE_NAME}, {}, }; MODULE_DEVICE_TABLE(of, myled_of_match); static struct platform_driver hello_driver = { .driver = { .name = DRIVER_NAME, .owner = THIS_MODULE, .of_match_table = myled_of_match }, .probe = hello_init, .remove = hello_exit }; module_platform_driver(hello_driver);
It should print Hello, world\n , if I do lsmod , the module loads:
lsmod hello_world 1538 0 - Live 0xbf000000 (O)
but nothing is printed either on the console or in dmesg .
If I use module_init and module_exit everything works, but I need to point the platform_device *pdev to the device, what can I do?
EDIT:
The source module is as follows:
#include <linux/init.h> #include <linux/module.h> static int hello_init(void){ printk(KERN_ALERT "Hello, world\n"); return 0; } static void hello_exit(void){ printk(KERN_ALERT "Goodbye, cruel world\n"); } module_init(hello_init); module_exit(hello_exit);
This entry is present in my blob device tree:
hello { compatible = "dglnt,hello-1.00.a"; reg = <0x41220000 0x10000>; };