在学嵌入式驱动模块加载与卸载的时候,出现以下的问题:
/lib/modules/4.1.15-g3dc0a4b # modprobe chardevbase.ko
[ 5327.239564] chardevbase: version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' od_unload modversions ARMv7 p2v8 '
[ 5327.256403] chardevbase: version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' od_unload modversions ARMv7 p2v8 '
modprobe: can't load module chardevbase.ko (chardevbase.ko): invalid module format
对此查阅了相关资料,成功解决此问题!
大佬分析的透彻,并给出了解决方案,一次性解决!
insmod提示version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' should be '4.1.15-gbedf008 SMP pr...-OpenEdv-开源电子网主要修改两个地方,我重新编译了linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek(整个过程和记录:正点原子i.MX6ULL嵌入式Linux uboot编译-CSDN博客编译过程类似)
第一步:把version magic '4.1.15 根据提示修改为4.1.15-g3dc0a4b,在解压文件里面的Makefile中进行修改并保存
gedit Makefile
"EXTRAVERSION ="原本为空,填上自己对应的版本号 “EXTRAVERSION = -g3dc0a4b",并保存退出,即可
第二步:利用make menuconfig修改ARMv6为ARMv7。
首先还是新建build文件
//在解压后的linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek里面打开终端,新建一个build.sh
touch build.sh
gedit build.sh
输入以下内容:
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_mfg_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j8
保存后,给予文件权限,并编译
chmod 777 build.sh
./build.sh
弹出设置界面,选择systerm Type
并在里面找到Multiple platform selection ,空格选中/取消,取消ARMv6,保证ARMv7选中,保存并退出
结束后ZImage已经生成(合理怀疑之前这样操作未生成和这个版本有关)
将~/linux/IMX6ULL/Llinux/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek/arch/arm/boot下的ZImage和dts文件夹下的imx6ull-alientek-emmc.dtb两个文件分别放到nfs、tftpboot两个文件夹下(参考博客:嵌入式驱动模块的加载与卸载_version magic '4.1.15 smp preempt mod_unload modve-CSDN博客)
再重新执行代码
cd lib/modules/4.1.15-g3dc0a4b
depmod
modprobe chrdevbase.ko
出现以下情况
在代码里面加入
再重新进入一次,用lsmod命令查看,成功啦