正确解决 Invalid module format[通俗易懂]

正确解决 Invalid module format[通俗易懂]原言 http://blog.csdn.net/dreamtdp/article/details/8036419实现 功能:在PC的LINUX实现驱动测试,不用在2440上测试解决insmod:errorinserting’hello.ko’:-1Invalidmoduleformat第一次写Linux驱动,环境搭建了好久,第一次可能是由于GCC的版本问题,编译

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原言  http://blog.csdn.net/dreamtdp/article/details/8036419

实现 功能:在PC的LINUX实现驱动测试,不用在2440上测试

解决insmod: error inserting ‘hello.ko’: -1 Invalid module format

第一次写Linux驱动,环境搭建了好久,第一次可能是由于GCC的版本问题,编译出来的驱动只能insmod,而无法rmmod

然后是make时使用的内核版本和本系统的版本不一致

导致出现insmod: error inserting ‘hello.o’ :-l invalid module format错误

 

我一直在玩开发板,下载的是linux-2.6.30内核,以前为 开发板编译驱动时,比较顺利。

而我的上位机linux系统是fedora10  实验需要,需要为我的上位机写一个驱动。可是写好了以后,

当我 insmod hello.ko时,却一直有一个错误

         insmod: error inserting ‘hello.ko’: -1 Invalid module format。

网上一查,原因很明确:编译时用的hello.ko的kenerl 不是 我的pc的kenerl版本。

但解决起来,就比较麻烦了,百度一下,说什么要重新编译pc上的内核,还要修改grub。

PC机上的驱动,其实与开发板上的驱动 一点关系都没有。

我只要以pc机的内核为基准,在makefile 那改变内核路径就可以了,可以顺利地编译了!

注意,我是在fedora10 下

cd /usr/src

ls

发现内核头文件,如下

/usr/src/kernels/2.6.27.5-117.fc10.i686

 

解决方法:为生成hello.ko

其Makefile改为如下内容:

 

###############
  1 KERNELDIR=/usr/src/kernels/2.6.27.5-117.fc10.i686  //在此添加内核路径
  2 
  3 PWD:=$(shell pwd)
  4 INSTALLDIR=$(PWD)
  5 #CC=arm-linux-gcc    
  6 CC=gcc

  8 obj-m := hello.o
  9 modules:     
 10         $(MAKE) -C $(KERNELDIR) M=$(PWD) modules  
 11 
 12 clean:     
 13         rm -rf *.o *.ko *.mod.c *.markers *.order *.symvers     
 14 .PHONY:modules clean

 

make

insmod hello.ko
看输出信息
cat /var/log/messages | tail -6
ubleshootd_t:s0 key=(null)
Oct  2 11:08:07 tdp setroubleshoot: SELinux is preventing updatedb (locate_t) “sys_resource” locate_t. For complete SELinux messages. run sealert -l 42f53b70-53bb-42db-b6cb-39c247a562ea
Oct  2 11:44:19 tdp kernel: Hello, world!!
Oct  2 11:44:19 tdp kernel: this is my hello world!!
哈哈 ,成功啦

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175247.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常用的web漏洞扫描工具_十大常用管理工具

    常用的web漏洞扫描工具_十大常用管理工具Webscantool推荐10大Web漏洞扫描程序Nikto这是一个开源的Web服务器扫描程序,它可以对Web服务器的多种项目(包括3500个潜在的危险文件/CGI,以及超过900个服务器版本,还有250多个服务器上的版本特定问题)进行全面的测试。其扫描项目和插件经常更新并且可以自动更新(如果需要的话)。Nikto可以在尽可能短的周期内测试你的Web服务器,这在其日志文件中…

    2022年9月12日
    5
  • 阅读《构造之法》第8,9,10章读后感

    阅读《构造之法》第8,9,10章读后感

    2021年9月15日
    52
  • Shift 后门 简单学习

    Shift 后门 简单学习https://www.cnblogs.com/BOHB-yunying/p/11695140.html过程参考上文链接提出问题:整个过程并不复杂,但要实现攻击的前提条件,是已经打入目标主机,将C:\windows\system32\sethc.exe替换成C:\windows\system32\cmd.exe,所以这一步到底要如何做到?明白shift后门是如何产生的就是windows系统自带的5次shift键强制打开C:\windows\system32\sethc.exe,为了..

    2022年9月18日
    5
  • adb下载安装及使用[通俗易懂]

    adb下载安装及使用[通俗易懂]adb介绍:AndroidDebugBridge(安卓调试桥)tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者是设备之间的交互。ADB是一个C/S架构的应用程序,由三部分组成:运行在pc端的adbclient:命令行程序”adb”用于从shell或脚本中运行adb命令。首先,“adb”程序尝试定位主机上的ADB服务器,如果找不到ADB服务器,“adb”程序自动启动一个A…

    2022年4月27日
    69
  • USB转RS485/RS422接线说明

    USB转RS485/RS422接线说明       

    2022年6月6日
    80
  • CollectGarbage 垃圾回收

    在IE中,调用window.CollectGarbage()方法会立即执行垃圾收集,在Opera7及更高版本中,调用window.opera.collect()也会启动垃圾收集例程。转载于:https://www.cnblogs.com/wujidns/p/5462372.html…

    2022年4月7日
    70

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号