首页
社区
课程
招聘
[求助]怎么在Android程序里加载linux内核模块?
发表于: 2013-2-27 19:47 10726

[求助]怎么在Android程序里加载linux内核模块?

2013-2-27 19:47
10726
在终端里用insmod命令可以加载,但写到程序里就不行,不知道为什么。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 761
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以使用部分指令吧,用Runtime的exec...
2013-2-28 10:32
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我是在jni层,用linux的popen函数实现的,简单的命令都可以,就只有insmod不行,不知道为什么。。
2013-2-28 11:00
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
试了java层Runtime的exec,也不行,郁闷。。。
2013-2-28 11:28
0
雪    币: 33
活跃值: (145)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
java层。 java.lang.Runtime's exec() methods:

http://developer.android.com/reference/java/lang/Runtime.html
native层就是jni了。可以用popen() 。但指令知否支持就得看bionic了。也可以尝试

system() and pipe。
2013-3-1 16:14
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
普通apk不可能有root权限,除非机器被root了,使用Runtime.exec之类的执行su -c insmod xx.ko
su为root的象征,配合superuser使用
2013-3-1 22:48
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
system() 也试了,还是不行。
2013-3-4 16:37
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我的模拟器root了,试了多种方法都不行,现在只能命令行加载了。。
2013-3-4 16:38
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
init.rc试试
2013-3-5 13:22
0
雪    币: 51
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
厉害啊, 我还不知道怎样为手机编译内核模块呢。求指教阿
2014-8-27 14:46
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
在终端下使用su进入root用户,然后insmod xx.ko这个肯定可以成功的,因为insmod在root用户下执行的。但是Java的Runtime.exec()也好,Native层execl()也好,只能用su -c命令临时在root用户下执行一条指令。
adb shell进入终端,普通用户下执行su -c insmod xx.ko,会发现命令执行失败,失败原因就是需要注意的地方,su的-c参数只把下一个变量作为可执行的指令,因此其执行的命令是insmod而参数并没有传递过去,xx.ko作为了su的参数,因此如果想执行成功我们需要使用su -c "insmod xx.ko",将传递给insmod的参数和命令组合成一个参数。
这样的话在Java层和Native层执行失败的问题也可以解决了,在Runtime.exec()中将命令格式进行格式化,比如Runtime.exec(“su -c ” + "\"insmod xx.ko\"" ),或者在Native中执行execl("/sytem/bin/su","/sytem/bin/su","-c","insmod xx.ko", NULL),这样最终传递给shell的命令就是su -c "insmod xx.ko"了。
2014-9-4 13:31
0
游客
登录 | 注册 方可回帖
返回
//