正确解决 Invalid module format

国产ARM笔记本TN140A2蓝牙驱动缺失解决:基于Debian 11内核模块编译与固件配置 在ARM64架构(aarch64)Linux系统中,驱动适配是常见挑战,尤其是蓝牙模块因内核版本差异或固件缺失而无法工作。其原理在于内核驱动模块负责硬件通信,而固件文件由厂商提供,需正确加载才能初始化设备。技术价值在于通过编译匹配的内核模块和配置固件,恢复外设功能,提升系统兼容性。应用场景包括国产ARM笔记本如TN140A2运行麒麟桌面系统时,蓝牙驱动缺失的排查与修复。本文聚焦于利用Debian GNU/Linux 11的软件源和内核源码,在保留原系统前提下,解决蓝牙驱动问题,涵盖模块编译、固件提取及稳定性 阅读详情
AI摘要

本文详细介绍了在PC Linux环境下实现驱动测试的方法,包括解决insmod错误的步骤,通过修改Makefile中内核路径,成功编译并insmod驱动。同时,解释了错误产生的原因以及解决过程。

原言  http://blog.youkuaiyun.com/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!!
哈哈 ,成功啦

EU 2021/646 eCall工程拆解:MSD、测试模式与型式核准 紧急呼叫系统(eCall)是车载通信中面向事故救援的安全功能,其原理是在碰撞或人工触发后,通过蜂窝网络向公共安全应答点发送最小数据集(MSD),并建立语音链路。技术价值在于缩短救援响应时间、提升事故后生存率,应用场景覆盖乘用车、轻型商用车及车载T-Box等前装通信模块。面向欧盟市场时,EU 2021/646把eCall从安装要求推进到型式核准测试,关注触发链路、备用电源、GNSS定位、MSD字段、音频质量与回拨能力。工程落地需要围绕测试模式、字段校验、配置管理和送检样件建立可交付合规方案。 阅读详情

相关推荐

深入解析mSATA与mini-PCIE接口的硬件设计要点

本文深入解析mSATA与mini-PCIE接口的硬件设计要点,涵盖信号定义、电源设计、高速信号处理及PCB布局布线等关键内容。通过实战案例和调试技巧,帮助工程师规避常见设计陷阱,提升电路设计效率,特别适合工业控制和嵌入式系统开发场景。

weixin_28741413的博客 316

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

实现 功能:在PC的LINUX实现驱动测试,不用在2440上测试 解决insmod: error inserting 'hello.ko': -1 Invalid module format 第一次写Linux驱动,环境搭建了好久,第一次可能是由于GCC的版本问题,编译出来的驱动只能insmod,而无法rmmod 然后是make时使用的内核版本和本系统的版本不一致, 导致出现insmod:

非淡泊无以明志,非宁静无以致远 4万+

UE5热更新(通过Pak包加载关卡资源,并添加到流关卡)

请先阅读我上一篇文章)**

xialuhui的博客 6456

insmod提示“Invalid module format”

1.现象:编译usb驱动程序,提示 2.原因:在不同机器上编译了驱动导致无效格式 3.解决:在目标机器搭建好编译环境,执行编译内核操作即可 make make install modprobe usbnet insmod XXX.ko modprobe XXX ...

wangzhicheng2013的专栏 3601

Synopsys SpyGlass 进行 RTL 功耗估计

通过上述脚本,您可以使用 Synopsys SpyGlass 对纯 RTL 代码和带有 FSDB 波形的 RTL 代码进行功耗估计,并支持将 SDC 文件转换为 SGDC 文件。

yumingqinglong的博客 2186

Mac---安装Navicat

把这个填充好的字符串放入刚才打开的RSA在线加解密的网站中的第二个框框(替换之前的请求码),第一个框框不动(还是之前第10步骤中的私钥),点击RSA私钥加密,这时会得到一个加密的字符串,这个就是激活码。{“K”:“你的K值”, “N”:“52pojie”, “O”:“52pojie.cn”, “DI”:“你的DI值”, “T”:你的时间戳}链接: https://pan.baidu.com/s/1mEVY4hnKdktg-p7DBIfD7A 提取码: twwg。Navicat会弹出一个对话框,点击“注册”

weixin_53970868的博客 1万+

操作系统实验噩梦:Invalid module format

插入内核模块时报错Invalid module format问题解决方法

Mr_Tang4的博客 2095

基于E310的纯逻辑代码实现AD9361射频收发

基于微相科技的E310平台实现AD9361的射频收发功能。采用纯逻辑控制的方式,不需要PS参与。实现了用VIO控制收发使能,发射功率,收发频率,数据接口时序控制,接收增益,BIST测试等功能。

xiaomingzi55的博客 2331

Invalid module format的产生原因

在做linux驱动开发时,执行insmod安装编译好的可加载的.ko模块时,会遇到“Error inserting './xxx.ko': -1 Invalid module format”。实际上是因为驱动模块链接了vermagic.o的模块,其中记录了相关的依赖信息,包括编译器版本,系统内核的版本,以及一些重要的配置变量。这些信息和目标的内核不匹配则会出现上述错误。解决时,需要先查找/var/

牛咏雪的优快云博客 6241

小米手机Magisk解锁与Root完整指南:从Bootloader到模块管理

Android系统Root权限获取是设备深度定制的核心技术之一,其核心原理在于通过修改系统启动流程获取超级用户权限。Systemless Root技术通过动态挂载修改,在不触碰系统分区的前提下实现功能注入,既保证了系统完整性,又能绕过完整性检测。这一技术为设备带来了极高的可定制性,用户可以通过模块化方式增强系统功能、修改UI界面或启用隐藏特性。在小米手机生态中,由于官方提供了完整的Bootloader解锁通道,结合Magisk的无系统修改Root方案,使得安全可控的深度定制成为可能。本文聚焦于Bootloa

weixin_29164185的博客 333

微软Media Creation Tool 创建工具 1.3 升级:支持全新下载安装Win11 22H2 Build 22621.525

微软 Media Creation Tool 创建工具 1.3 升级:支持全新下载安装 Win11 22H2 Build 22621.525 ISO 镜像,如果今天运行使用 Media Creation Tool,则会下载 Windows 11 2022 版本 Build 22621.525,它不会向操作系统添加任何新内容,但会修复安装问题,下面来看看详细的更新内容。

zym0218的博客 4231

解决交叉编译内核模块后insmod时出现的invalid module format问题:disagrees about version of symbol module_layout

这部分字段主要是由自己下载的与目标机相同版本的Linux内核代码的配置有关,关于这部分的内容我是直接找到目标机的config.gz文件复制到自己的目录下,解压后直接重命名为.config解决的,在复制后,需要重新编译,采用make oldconfig命令,会补充设置一些新的选项,然后再重新编译内核、编译内核模块,查看modinfo进行比较。想要确认版本问题,可以使用modinfo指令查看自己的内核模块的信息,再和目标机自带的内核模块的信息进行对比。接下来就需要解决module_layout不一致问题。

henmj的博客 6992

故障排查:OpenClaw 更新后 feishu 插件路径失效的解决方法

OpenClaw 更新后 feishu 插件路径失效的解决方法发现问题→ Gateway 启动失败,报插件路径错误定位原因→ OpenClaw 目录结构变化,→解决问题→ 更新为正确的路径验证修复→ 使用确认一切正常。

刘一说的IT专栏 1304

linux3.14.38 解决不能正确加载驱动 insmod: can't insert 'xxx.ko':invalid module format

错误原因总结 及 解决方法 1、  原因:这是因为 正在运行的板子的内核版本 与 编译驱动的内核版本 不一致造成的。         解决方法:确保在与开发板运行的相同的内核版本下,编译你的驱动程序,如果正常情况 这个问题是可以解决的。    2、 原因:如果你确定你的问题不是第1种情况,那么你把内核配置中的模块版本检测给去掉 并 强制加载驱动的选项给选上,我是通过这办法解决的。     ...

weixin_39127054的博客 5294

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

使用insmod命令安装驱动模块出现insmod: ERROR: could not insert module module_test.ko: Invalid module format解决办法

当我们编译好一个驱动后,使用insmod安装时,有时会遇到insmod: ERROR: could not insert module module_test.ko: Invalid module format,这时,我们就要查看所对应的Makefile中的KERN_DIR变量,这个变量是指定kernel路径的,如果想把驱动安装在Linux里,需要把地址写为: KERN_VER = $(she...

PT的博客 4万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ubuntu20.04编译的内核驱动模块安装时报“Invalid module format”错误

ubuntu20.04编译的内核驱动模块安装时报“Invalid module format”错误

we7395的博客 1958

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

驱动程序 insmod无效问题解决

奇了怪的,不知道怎么更新ubuntu  内核版本竟然变了,然后今天将驱动程序插入内核是提示错误:insmod: error inserting 'test.ko': -1 Invalid module format   最后还是网上资源丰富,感谢那些无私奉献的前辈们。  原因是这样的,Makefile中编译的内核版本是:KERNELDIR := /usr/src/linux-headers-2

zhangliang_571的专栏 2719

linux 驱动开发 Invalid module format 错误解决方法

我想,很多刚开始学习linux 驱动程序的朋友都和我一样,遇到过类似的问题。1. 编译错误(其实这个问题和 Makefile有很大关系)2. Invalid module format 错误3. insmod: error inserting ./hello.ko: -1 File exists 开发环境 内核版本: 2.6.22   (我下载的最新版本)gcc    

pottichu的专栏 3万+

insmod 时出现 "Invalid module format"

如果你modprobe自己编译的内核模块时出现:Invalid module format,那很有可能是以下原因引起的:  所用内核源码版本号与目前使用的内核不同;编译目标不同,比如编译的是i686,装好的是i386;使用编译器版本不同;目前使用的内核不是自己编译出来的。 前3种比较好办,只要用发行版提供的源码、内核配置(/boot/config*)和编译器就可以了。但如果只是为了

silver0924的专栏 1901

insmod 提示 Invalid module format

安装内核模块时报错

lyndon 3273

insmod ko invalid module format [unknown relocation]

linux版本4.14 aarch32 用如下出错版本的Makefile编译basic.ko,insmod ko到kernel后提示invalid module format, dmesg查看内核打印信息 basic: unknown relocation: 10 出错的版本 obj-m := basic.o ARCH := arm CROSS_COMPILE := arm-linux-g...

shenhuxi_yu的专栏 1668

Linux加载驱动"invalid module format"错误的一种可能解决办法

日前临时维护之前同事写的一个简单linux驱动,遇到了很常见的一个问题,加载驱动时报错:“invalid module format”。    用readelf -h得到的报错的驱动文件信息如下:    而正确的驱动文件是这样的:    可以明显的看到:两个文件差别在于的magic、OS\ABI、flags不一致,我们认为这应该是编译器或内核版本不一致造成的。但是设备

<<沿着技术学习之路低速前行>> 2万+

invalid module format问题

<br />如果因内核源码版本号和当前内核不同或者编译目标不同导致的invalid module format错误.<br />例如: uname -a 输出为:2.6.30.10-105.fc11 i686, 而modinfo **.ko输出为:2.6.30.10-105.fc11.i586<br />则可把内核源码中.include/linux/vermagic.h (utsrelease.h,module.h)中定义的Vermagic宏定义改掉,重新build driver则可与当前内核版本一致.<b

May.Ouyang的专栏 1527

insmod error could not insert module ... invalid module format [已解决]

自己编写和编译的驱动在安装时报错insmod error could not insert module ... invalid module format,内核版本号一致,但是version of symbol module_layout不一致,是编译内核和驱动时配置不一致导致。重新编译内核,重启,解决该问题。...

qq_42000667的博客 1万+

Linux 2.6.x 内核模块加载错误 “Invalid module format” 解决办法

Linux 2.6.x 内核模块加载错误 “Invalid module format” 解决办法环境: vmware + fedora8;             gcc version 4.1.2 20070925 (Red Hat 4.1.2-33);             kernel source 用 kernel-2.6.23.1-42.fc8.src.rpm安装;       

wang029094099的专栏 817

遇到:insmod:error inserting Invalid module format,的原因

1.在使用insmod安装驱动的时候遇见,一个insmod:error inserting Invalid module format报错信息,通过多方考察,出现这个报错的原因是,编译驱动的系统内核版本与你目前需要安装这版驱动的系统内核是不一样导致的。4.目前通过查阅资料,只知道想要解决这个问题,第一种方法你重新在此内核版本版本下重新编译的驱动,第二种方法则是修改你内核的源码的一些东西,然后重新编译内核。3.驱动可以通过modinfo ****.ko命令来查看驱动的编译时的系统内核版本,

yabgguangchao的博客 1851
上一篇: MFC笔记
下一篇: 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
shell812
博客等级 码龄18年 202粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值