永发信息网

求解其他版本的A15MOD能放在A15.1284版本上面吗

答案:1  悬赏:50  手机版
解决时间 2021-04-14 07:36
求解其他版本的A15MOD能放在A15.1284版本上面吗
最佳答案
1、Uboot:每个arm芯片或者海斯芯片都有各自的uboot。

2、但他们的内核版本可以是一样的,主要是跟各自内核的进行的编译选项有关, 31的内核版本里加了版本检查选项“Kernel type->Symmetrical Multi-Processing”,而21的内核版本没有设置该选项。

在开发kernel driver时,总是会遇到讨人厌的vermagic检查,只要目前在run的kernel版本跟driver编译时用的kernel版本不一致,就没办法insmod。

bash-3.2# insmod sdio.ko

sdio: version magic '2.6.28-271-gec75a15 preempt mod_unload modversions ARMv7 '

should be '2.6.28 preempt mod_unload ARMv7 '

insmod: init_module 'sdio.ko' failed (Exec format error)

这大大降低了开发速度,尤其是当你拿不到客户在用的kernel时,又要开发driver给他用,真的是很麻烦……

那麼要怎麼利用恶心的方式绕过去呢???

一、先把 Moudle version 检查关掉。

user@host # ARCH=arm make menuconfig

--- Enable loadable module support │ │

│ │ [ ] Forced module loading │


│ │ [*] Module unloading ...1、Uboot:每个arm芯片或者海斯芯片都有各自的uboot。

2、但他们的内核版本可以是一样的,主要是跟各自内核的进行的编译选项有关, 31的内核版本里加了版本检查选项“Kernel type->Symmetrical Multi-Processing”,而21的内核版本没有设置该选项。

在开发kernel driver时,总是会遇到讨人厌的vermagic检查,只要目前在run的kernel版本跟driver编译时用的kernel版本不一致,就没办法insmod。

bash-3.2# insmod sdio.ko

sdio: version magic '2.6.28-271-gec75a15 preempt mod_unload modversions ARMv7 '

should be '2.6.28 preempt mod_unload ARMv7 '

insmod: init_module 'sdio.ko' failed (Exec format error)

这大大降低了开发速度,尤其是当你拿不到客户在用的kernel时,又要开发driver给他用,真的是很麻烦……

那麼要怎麼利用恶心的方式绕过去呢???

一、先把 Moudle version 检查关掉。

user@host # ARCH=arm make menuconfig

--- Enable loadable module support │ │

│ │ [ ] Forced module loading │


│ │ [*] Module unloading
│ │

│ │ [*] Forced module unloading │


│ │ [ ] Module versioning support │


│ │ [ ] Source checksum for all modules

二、 使用modinfo时,可以看到目前这driver的vermagic

filename: external_drivers/omap3530/Linux/sdio/sdio.ko
author: Texas Instruments Inc
alias: TIWLAN_SDIO
license: GPL
description: TI WLAN SDIO driver
depends:
vermagic: 2.6.28-271-gec75a15 preempt mod_unload ARMv7
parm: g_sdio_debug_level:debug level (int)

三、 修改 kernel 的 vermagic,再重新编译driver

vermagic 的第一个值 2.6.28-noneed 是由这 include/linux/utsrelease.h里的 UTS_RELEASE 所定义。

#define UTS_RELEASE "2.6.28-271-gec75a15"

之后再由 include/linux/vermagic.h 里的 macro
去组合出 VERMAGIC_STRING , 也就是 kernel 的vermagic。

#include
#include

#ifdef CONFIG_SMP
#define MODULE_VERMAGIC_SMP "SMP "
#else
#define MODULE_VERMAGIC_SMP ""
#endif
#ifdef CONFIG_PREEMPT
#define MODULE_VERMAGIC_PREEMPT "preempt "
#else
#define MODULE_VERMAGIC_PREEMPT ""
#endif完成编译后,你就可以得
#ifdef CONFIG_MODULE_UNLOAD
#define MODULE_VERMAGIC_MODULE_UNLOAD "mod_unload "
#else
#define MODULE_VERMAGIC_MODULE_UNLOAD ""
#endif
#ifndef CONFIG_MODVERSIONS
#define MODULE_VERMAGIC_MODVERSIONS "modversions "
#else
#define MODULE_VERMAGIC_MODVERSIONS ""
#endif
#ifndef MODULE_ARCH_VERMAGIC
#define MODULE_ARCH_VERMAGIC ""
#endif

#define VERMAGIC_STRING \
UTS_RELEASE " " \
MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT \
MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS \
MODULE_ARCH_VERMAGIC

所以, 我们只要把 UTS_RELEASE 改成我们的数字即可,当然若是懒得去try组合后的字串,也可以直接将VERMAGIC_STRING改成你要的字串

建议修改完 vermagic.h, utsrelease.h后,还是把kernel重编完再编kernel,比较保险。

以下是修改后,用modinfo看的结果

filename: external_drivers/omap3530/Linux/sdio/sdio.ko
author: Texas Instruments Inc
alias: TIWLAN_SDIO
license: GPL
description: TI WLAN SDIO driver
depends:
vermagic: 2.6.28 preempt mod_unload ARMv7
parm: g_sdio_debug_level:debug level (int)

------------------------------------------------------------------------------------------

另外若你是用git 做版本控制 , 那就会出现git的版本号在kernel 编号上
所以要把他关掉

General setup --->
[ ] Automatically append version information to the version strin

解释;
CONFIG_LOCALVERSION_AUTO:



│ This will try to automatically determine if the current tree is a │
│ release tree by looking for git tags that belong to the current │
│ top of tree revision.



│ A string of the format -gxxxxxxxx will be added to the localversion │
│ if a git-based tree is found. The string generated by this will be │
│ appended after any matching localversion* files, and after the value │
│ set in CONFIG_LOCALVERSION.



│ (The actual string used here is the first eight characters produced │
│ by running the command:


│ which is done within the script "scripts/setlocalversion".) │


│ Symbol: LOCALVERSION_AUTO [=y]

│ Prompt: Automatically append version information to the version string │
│ Defined at init/Kconfig:84

│ Location:

│ ingT
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
4.28×2.5积是 位小数.A.一位B.两位C.三
一个句子有三个重复的字表示什么
读警校都要些什么条件?
分开不一定分手吗?
白细胞减少该吃些什么?
并购汪 史上规模最大私募eb,如何助力两百亿
孔子说:工欲善其事,必先利其器。其哲学含义
执行案件的被执行人可以委托代理人吗?
谁有一些好的空间代码,拿出来分享下啊...
莆田高铁站去仙游县大济镇
真有一辈子不变的誓言吗?
QQ华夏几级开通?
这题怎么用?要详解
动物和天气有关的谚语,描写阴天气的句子
常乐农家乐地址在什么地方,想过去办事
推荐资讯
康佳V68是拍照手机吗?
1993年8月20日是什么星座啊
DNFz中哪些图爆邀请涵
怎样复制好看图片到空间
请问广州那里可以买到10厘米以上的高跟鞋?
丛林侠盗艾希值钱吗,英雄联盟爱希皮肤的丛林
阅读下面短文,按照句子结构的语法性和上下文
请问谁是蓝钻6级或年费。。不玩丝绸之路的。
男朋友抠我B
社区康复医院怎么去啊,有知道地址的么
猫出血性肠炎一直站不起来
德中同行武汉站会举办关于可持续发展的论坛,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?