正确解决 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • javah详解[通俗易懂]

    javah详解[通俗易懂]java开发中如果使用到JNI,则难免需要使用javah来生成C++或C的头文件信息,下面就讲解javah的命令:第一种:直接cd到当前程序的target/class目录下(一定不能是子目录)(maven项目,如果是普通项目则到bin目录下)。然后使用:javahcom.yongcheng.liuyang.utils.TestJni,其中javah后面的是需要生成头文件类的全路径(包名+类名),当然生成的.h文件位于当前class的目录下。第二种:直接在运行中cmd到dos窗口,使用如下命令:j

    2022年9月25日
    0
  • 什么是SQL_SQL SERVER

    什么是SQL_SQL SERVER参考:SQL中的declare用法sql中的变量定义declare变量是在批处理或过程的主体中用DECLARE语句声明的,并用SET或SELECT语句赋值。而SQL中是以GO语句来区分批处理的。所以在例子中一个简单的if语句中定义的变量,可以在if语句外面使用。…

    2022年8月20日
    2
  • 学生注册idea_学生证怎么绑定身份证

    学生注册idea_学生证怎么绑定身份证一、安装进入官网下载适合自己系统的版本,下载地址:https://www.jetbrains.com/idea/download/#section=windows安装中选择适合本机的64位(32位)版本,其他一直next即可二、激活成功教程先下载jar包JetbrainsCrack.jar,把它放到你认为合适的文件夹内,我直接放在了安装目录C:\ProgramFiles\JetBrai…

    2022年9月23日
    0
  • 查看是否安装apache_查找手机应用安装位置

    查看是否安装apache_查找手机应用安装位置如果你是问linux自动安装的APACHE的话,直接使用apachectl -v命令,如果告诉你没有这个方法就可以知道系统没有安装apache,如果已经安装了则显示apache的版本,至于安装目录,使用apachectl -c就可以知道了。

    2022年9月21日
    0
  • matlab灰度最大值和最小值_matlab灰度直方图

    matlab灰度最大值和最小值_matlab灰度直方图这里有两个版本的泛洪填充算法:第一个,更简单的一个包含两个未定义的变量,但这是一个工作版本:importnumpyasnpimportscipyasspimportscipy.ndimagedefflood_fill(test_array,h_max=255):input_array=np.copy(test_array)el=sp.ndimage.generate_bin…

    2022年9月12日
    0
  • Windows内核之进程的终止和子进程

    Windows内核之进程的终止和子进程

    2021年12月4日
    45

发表回复

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

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