insmod出现loading out-of-tree module taints kernel
2017-06-13 14:45
591 查看
你好!这里是风筝的博客,欢迎和我一起交流。
如果本篇博客对您有帮助,或许可以在下方评论给我留个言。
之前把Linux Kernel移植好,就把驱动程序加载进去
结果发现:
/ # ls
bin first_drv.ko linuxrc root tmp
dev firstdrvtest mnt sbin usr
etc lib proc sys
/ # insmod first_drv.ko
first_drv: loading out-of-tree module taints kernel.
/ # lsmod
lsmod: can't open '/proc/modules': No such file or directory
/ # random: crng init done
/ # insmod first_drv.ko
insmod: can't insert 'first_drv.ko': File exists
/ #
好坑,insmod提示 loading out-of-tree module taints kernel.
而且lsmod也提示 can't open
'/proc/modules': No such file or directory...
纠结了半天,发现Kernel打印出来的log有一句:
cann't run '/etc/init.d/rcS':Permission denied.
原来是rcS没有得到运行,加上执行权限即可:
sudo chmod u+x /work/nfs/root/etc/init.d/rcS
这样,重启开发板,进行文件系统后,
insmod虽然还会提示:loading out-of-tree module taints kernel.
但是lsmod是会看到刚刚安装好的驱动的了。
loading out-of-tree module taints kernel.
这个好像是因为内核在编译的时候选择支持内核签名机制,据说在3.7版本后面就支持
模块签名了。这是为了Kernel安全加上的。
其中,内核配置项:
CONFIG_MODULE_SIG=y
表示开启了签名机制。
CONFIG_MODULE_SIG_FORCE=y
则模块必须有正确的签名才能正常使用。
CONFIG_MODULE_SIG_ALL=y
内核在编译的时候,会主动去给模块签名。
我在Kernel的menuconfig看了下,我的
CONFIG_MODULE_SIG是=n的啊。奇怪。
不管了,提示taints kernel就提示吧,反正能把驱动加载上去就行。
估计CONFIG_MODULE_SIG=y的话就不能正常把驱动加载上去吧。
需要给驱动签名.
然后,insmod和lsmod都没问题了,现在试试rmmod卸载驱动.
需要在lib目录下建一个空文件夹加能使用rmmod.
mkdir -p /lib/module/4.8.17
但是rmmod时还会出现一个问题:
Unable to handle kernel paging request at virtual address fffffffc
pgd = c3b40000
在卸载驱动时出这个错,估计是内存访问错误了。
后来经大佬提醒,在驱动卸载时,device_destroy函数的第一个参数是struct class *类型.
之前我程序的参数传入错误,传了个struct class_device *类型的参数进行.
这个还是新内核导致的差异啊。
总的来说,加载和卸载驱动,都需要:
init函数: 1. devno注册 2. class注册 3. device申请
exit函数: 1. device销毁 2. class释放 3. devno释放
如果本篇博客对您有帮助,或许可以在下方评论给我留个言。
之前把Linux Kernel移植好,就把驱动程序加载进去
结果发现:
/ # ls
bin first_drv.ko linuxrc root tmp
dev firstdrvtest mnt sbin usr
etc lib proc sys
/ # insmod first_drv.ko
first_drv: loading out-of-tree module taints kernel.
/ # lsmod
lsmod: can't open '/proc/modules': No such file or directory
/ # random: crng init done
/ # insmod first_drv.ko
insmod: can't insert 'first_drv.ko': File exists
/ #
好坑,insmod提示 loading out-of-tree module taints kernel.
而且lsmod也提示 can't open
'/proc/modules': No such file or directory...
纠结了半天,发现Kernel打印出来的log有一句:
cann't run '/etc/init.d/rcS':Permission denied.
原来是rcS没有得到运行,加上执行权限即可:
sudo chmod u+x /work/nfs/root/etc/init.d/rcS
这样,重启开发板,进行文件系统后,
insmod虽然还会提示:loading out-of-tree module taints kernel.
但是lsmod是会看到刚刚安装好的驱动的了。
loading out-of-tree module taints kernel.
这个好像是因为内核在编译的时候选择支持内核签名机制,据说在3.7版本后面就支持
模块签名了。这是为了Kernel安全加上的。
其中,内核配置项:
CONFIG_MODULE_SIG=y
表示开启了签名机制。
CONFIG_MODULE_SIG_FORCE=y
则模块必须有正确的签名才能正常使用。
CONFIG_MODULE_SIG_ALL=y
内核在编译的时候,会主动去给模块签名。
我在Kernel的menuconfig看了下,我的
CONFIG_MODULE_SIG是=n的啊。奇怪。
不管了,提示taints kernel就提示吧,反正能把驱动加载上去就行。
估计CONFIG_MODULE_SIG=y的话就不能正常把驱动加载上去吧。
需要给驱动签名.
然后,insmod和lsmod都没问题了,现在试试rmmod卸载驱动.
需要在lib目录下建一个空文件夹加能使用rmmod.
mkdir -p /lib/module/4.8.17
但是rmmod时还会出现一个问题:
Unable to handle kernel paging request at virtual address fffffffc
pgd = c3b40000
在卸载驱动时出这个错,估计是内存访问错误了。
后来经大佬提醒,在驱动卸载时,device_destroy函数的第一个参数是struct class *类型.
之前我程序的参数传入错误,传了个struct class_device *类型的参数进行.
这个还是新内核导致的差异啊。
总的来说,加载和卸载驱动,都需要:
init函数: 1. devno注册 2. class注册 3. device申请
exit函数: 1. device销毁 2. class释放 3. devno释放
相关文章推荐
- insmod时出现module license 'unspecified' taints kernel
- 解决Subclipse进行commit的时候出现 file out of date和remains in tree-conflict的方法
- 出现insmod: can't insert 'kernel_hello.ko': invalid module format解决方法
- Adding a device from a kernel module the udev way (pi, a device that prints out the value of pi)
- 出现 malformed or corrupted AST file: 'Unable to load module ".pcm": module file out of date'错误
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法-缓存
- Genymotion 运行Android虚拟机出现错误:Unable to staart the virtual device.To find out the cause of the problem
- 超大文件上传到服务器,实现流式传输,不再出现java.lang.OutOfMemoryError: Java heap space
- Eclipse、Idea启动web项目出现OutOfMemoryError: PermGen space
- 将nutch源码配置到MyEclipse中出现java.lang.OutOfMemoryError: Java heap space错误
- Android开发使用adb时出现adb server is out of date的解决方法
- matlab中增加Java VM 的堆空间(解决xml_io_tools出现的OutOfMemory问题)
- 解决eclipse中出现Resource is out of sync with the file system问题
- Spring,hibernate,struts2(SSH)项目在tomcat中多次reload时出现OutOfMemoryError:PermGen Space
- 问题-Delphi编译到最后Linking时总是出现与ntdll.dll有关的错误还有Fatal Error Out of memory错误
- 在eclipse中的tomcat中出现报错 Java.lang.OutOfMemoryError: PermGen space
- 如何设定tomcat启动时JVM内存大小,以免出现java.lang.OutOfMemoryError
- tomcat6.0.29 性能调优 出现java.lang.OutOfMemoryError: PermGen space
- 使用insmod安装驱动文件时,提示platform_driver_unregister:relocation 28 out of range
- 解决eclipse中出现Resource is out of sync with the file system问题