刚刚根据开发手册动手练习,使用insmod的时候,出现了怪现象。
现象如下:
1,在串口线连接电脑情况下进入com1,执行insmod example.ko
$ insmod example.ko
insmod: init_module 'example.ko' failed (Operation not permitted)
2,用usb线连接电脑,在windows下cmd执行adb shell,然后执行insmod example.ko
#insmod example.ko
insmod example.ko
执行#dmesg
在最后打印:<4>[4316.335436] example init
奈何我是菜鸟,不懂原因,百度了一下,有几位网友提到是主设备号次设备号的问题,可是解决不了我这个问题,因为在我的module__init里面就只执行了一句打印:
1 #include <linux/kernel.h>
2 #include <linux/init.h>
3 #include <linux/module.h>
4
5 static int __init example_init(void)
6 {
7 printk("example init\n");
8 return 0;
9 }
10 module_init(example_init);
11
12 static void __exit example_exit(void)
13 {
14 printk("example exit\n");
15 }
16 module_exit(example_exit);
17
18 MODULE_LICENSE("GPL");
19
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
写到一半,发现了一个问题,$和#,想到not permiited,然后在串口线的情况下执行:
$sudo insmod example.ko
sudo not found
看手册,应该用;
$su
#insmod example.ko
#dmesg
example init
哈哈,成功打印,我真是笨啊