当前位置:首页 » 编程软件 » 安卓编译insmod

安卓编译insmod

发布时间: 2022-12-12 17:25:39

⑴ insmod使用详解

linux指令:insmod——载入模块
insmod 就是install mole的缩写
功能说明:载入模块。
语法:insmod [-fkmpsvxX][-o <模块名称>][模块文件][符号名称 = 符号值]
说明:Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。

参数:
-f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。
-k 将模块设置为自动卸除。
-m 输出模块的载入信息。
-o<模块名称> 指定模块的名称,可使用模块文件的文件名。
-p 测试模块是否能正确地载入kernel。
-s 将所有信息记录在系统记录文件中。
-v 执行时显示详细的信息。
-x 不要汇出模块的外部符号。
-X 汇出模块所有的外部符号,此为预设值。

⑵ arm linux中 mknod insmod mount区别与用法cat/proc/devices是什么意思谢谢

mknod 是创建设备节点命令
insmod 是加载内核模块的命令
mount 是挂载命令
编译后的内核模块xxxxx.ko 使用insmod加载,然后再/dev 下创建设备节点或者叫设备文件(使用的命令就是mknod)。
mount挂载用的和上面2个没啥联系、
cat/proc/devices 是查看内核使用的主设备号

⑶ 内核模块编译时怎样绕过insmod时的版本检查

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_mole 'sdio.ko' failed (Exec format error)
这大大降低了开发速度,尤其是当你拿不到客户在用的kernel时,又要开发driver给他用,真的是很麻烦……
那么要怎么利用恶心的方式绕过去呢???
一、先把 Moudle version 检查关掉。
user@host # ARCH=arm make menuconfig
--- Enable loadable mole support │ │
│ │ [ ] Forced mole loading │ │
│ │ [*] Mole unloading │ │
│ │ [*] Forced mole unloading │ │
│ │ [ ] Mole versioning support │ │
│ │ [ ] Source checksum for all moles
二、 使用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 proced │
│ 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

⑷ 如何编译程序在开发板上面运行

用户程序insmod 核心模块加载:具体如下:

核心模块编译完成后,基本上是个未经符号定位的目标文件(object)(当然,如果这个object又是一些子object经过ld -r生成的话,则子object之间的符号定位是已经完成的),object是一种可重定位的代码,它可以加载到不同位置的内存执行。而真正加载进核心,并成为核心的一部分,则是用户程序insmod和核心几个系统调用共同完成的。在此过程中,insmod主要完成或通过系统调用完成以下的工作:
1)由参数找到模块文件,如insmod foo.o,模块文件就是foo.o,根据模块文件计算出模块文件所需的内存大小
2)调用系统调用create_mole,为该模块分配核心空间内存
3)调用系统调用query_mole,得到核心提供的符号表,与系统调用create_mole的返回值(核心模块首地址)加在一起对模块进行重定位。
4)在用户空间为核心模块分配内存,并往该段内存复制一个经过定位的object映象。
5)调用系统调用init_mole,将用户内存中的模块映象到相应的核心空间(首地址为create_mole的返回值)。
6)释放用户内存,中止insmod运行。
如果一切顺利,没有出现未定位的符号,则核心模块object就融入系统,成为系统的一部分了。
核心模块的加载过程对核心来说实际是个“静态链接”的过程,这和用户程序动态链接运行过程再链接需要的代码还是不太一样的,当然,object的可重定位特性保证了链接后的代码正常运行,这点倒是比较相似的。
以上回答你满意么?

⑸ 如何在安卓虚拟机里安装vmware tools

Android也是Linux,必须有root,所以有两种方式:
(如果Android虚拟机是x86那就只能用第二种方法,但不需要gcc for ARM,直接gcc就可以了)
(1)在Android上直接安装:
Step 1. 安装GCC,需要到安卓应用市场比如Google Play下载GCC For Droid plugin的应用,里面解开有gcc
Step 2. 安装Terminal应用
Step 3. 编译Perl

Step 4. 将NDK里对应平台的头文件复制进来
Step 5. 下载一份Android源代码复制进来
Step 6. 将vmware tools的tar.gz解开,开始安装,会提示手动编译Kernel mole
(2)在Ubuntu上或Windows上编译后安装到Android
Step 1. 下载gcc for ARM(NDK里就有)
Step 2. 下载Android源代码
Step 3. 将vmware tools for linux的tar.gz解开,把kernel mole的源代码复制出来编译

之后就是用busybox 的insmod命令加载kernel mole;如果想每次自动启动,需要手动修改android rom的启动文件,或者写个apk service让它自动加载。

⑹ 内核模块编译怎样绕过insmod时的版本检查

一、先把 Moudle version 检查关掉。
user@host # ARCH=arm make menuconfig
--- Enable loadable mole support │ │
│ │ [ ] Forced mole loading │ │
│ │ [*] Mole unloading │ │
│ │ [*] Forced mole unloading │ │
│ │ [ ] Mole versioning support │ │
│ │ [ ] Source checksum for all moles
二、 使用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,比较保险。

⑺ 安卓 用超级终端 INSMOD出现 exec format error 大神进 在线等那

之后手机没出现什么不正常吧?那个不用管他。估计是内存分区的问题。那个exec格式错误。每次我刷机都提示没有发现ext2分区,那个是SD卡的第二个分区。建议少用终端模拟输入命令代码,万一出错有可能完成系统出问题。因为su就授予最高权限了

⑻ 安卓的虚拟机怎么安装vmtool

1、运行VM,启动你的虚拟LINUX系统。(linux怎么安装看我以前的文章)
2、切换到原系统(Ctrl+Alt),选择VM中的VM菜单----Install VMWare Tools。

3、一般情况下虚拟机是自带有VMtool的,如果没有,没关系,去网上下载一个就行了。然后挂镜像,setting里。请把你的VM-Tools的ISO文件映射到你的虚拟系统上,同时,别忘记了把这个虚拟光驱给connect

4、切换到虚拟系统。(如果开机桌面上就有一个cd的图片就省略这一步)右下角有个cd的小图标,右键 “连接(connect)”

5、现在桌面上就有一个cd的图标,双击进去,把VMWareTools-xxx.x….tar.gz复制到桌面,并解压缩到当前目录,也可以到其他路径。

解压出来的文件夹中找到vmware-install.pl。双击运行它。

6、记住无论出现什么(让你Yes or No)都是回车,一直到出现如下画面的时候,表示安装成功!!也就是 “enjoy”。

⑼ linux驱动模块insmod时处理器类型错误

内核模块有版本识别,必须用目标内核版本的源代码编译才可以。

⑽ 嵌入式驱动编译后,用insmod ,提示ELF file filename.o not for this architecture,请问是什么出错了

ELF文件名O,非本体系文件。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:705
制作脚本网站 发布:2025-10-20 08:17:34 浏览:969
python中的init方法 发布:2025-10-20 08:17:33 浏览:677
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:828
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:737
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1076
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:308
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:188
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:875
python股票数据获取 发布:2025-10-20 07:39:44 浏览:829