需要注意的是makefile的格式$(MAKE)前面要加个tab.
make 编译,不出现错误的话,用ls -al查看linux_modules目录下产生了如下文件:
hello.c hello.mod.c hello.o modules.order
hello.ko hello.mod.o Makefile Module.symvers
其中hello.ko就是可加载的模块文件
现在我们就可以将编译好的模块helloworld加载到内核中去了
#insmod ./hello.ko //这个命令把hello.ko加载到内核
#lsmod|grep hello //lsmod 这个命令可以查看当前所有的驱动模块,结果应该显示hello 680 0
#rmmod hello //这个命令是把hello这个模块移除掉
程序的输出结果可以在(printk 不会输出到终端)
dmesg |grep world
或是/var/log/syslog文件中查看
Hello,World
Goodbye,cruel world
这是程序的输出。
如果在输入insmod ./hello.ko时出现如下错误提示:insmod: error inserting 'hello.ko': -1 Invalid module format
则是因为记载版本号的字符串和当前正在运行的内核模块的不一样,这个版本印戳作为一个静态的字符串存在于内核模块中,叫vermagic,可以从编译模块中间生成的文件helloworld.moc.h中,如果出现这种情况:
1,根据modinfo hello.ko命令查看vermagic的值
2,根据uname -r查看内核版本
3,对比上边两步的值是否相同
若相同,我就不知道了
若不同,采用make -C /lib/modules/此处为你内核版本号对应的文件夹/build M=你模块源码的路径 modules