完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
因为cifs和nfs挂载到本地,需要使用到mount挂载命令,而执行mount命令又需要root权限。所以很多厂商都是在固件里增加一些带有root权限的接口给应用层使用。全志的文件管理器也是这样做的。一般都是在framework/base目录下添加接口和服务。
好吧,我们看看全志在framework/base下究竟加了什么东西。打开framework/base目录 在该目录下,肉眼扫荡发现就是多了swextend,当然ethernet也算一个。打开swextend目录看看它神秘的一面吧。 可以看到多了好多东西,不过测试发现有些没用上,编译也有点问题。在打开systemmix看看 对framework比较熟悉的,应该很清楚这些是什么。就是为系统添加java接口提供应用层使用,这又使用到了jni还有service。代码都挺简单的,有源码的自己看看吧。 下面开始动刀子了,把swextend文件拷贝到RK3288源码目录下framework/base。 ok,代码拿过来了,那就编译吧。忘了一件事,在framework添加接口,需要把framework 中的目录添加到编译环境中,不然编译系统时是不会把自己添加的模块编译进去的。好,我们要修改的是build/core/pathmap.mk,vim pathmap.mk打开文件后,我们在终端输入:/FRAMEWORKS_BASE_SUBDIRS := ,找到该字段,添加我们的目录如下: FRAMEWORKS_BASE_SUBDIRS := $(addsuffix /java, core graphics ... ethernet swextend/securefile swextend/gpio swextend/isomountmanager swextend/os swextend/systemmix swextend/nfsmanager ) 保存修改后,我们就开始编译吧 在命令行下执行: makeclean makeupdate-api make -j4 经过很长的等待,终于编译好了。如何测试呢?我是把全志文件管理器代码导入eclipse,然后把编译好的android.jar引入工程里。假如工程引入的import com.softwinner.SystemMix;报错,说明增加的systemmix接口没有编译进系统。如何引入android.jar?可以按这个来 经过测试,很悲剧,报错一堆,说明添加的接口都没编译成功。这个纠结了我好久,也痛恨自己懂的太少。 最后我自己编写一个测试接口,按网上的例子,测试是成功了。好吧,说明方法是对的,是不是全志的代码不是按标准来? 对比一下吧,网上的例子framework/base目录下添加/MStarDTV/java/android/dtv,而全志的是java/systemmix.java。是不是问题出现在这呢?我们来测测。我把swextend/systemmix/java/systemmix.java改成swextend/systemmix/java/android/systemmix.java,就是按照标准的格式java目录下的目录是android然后才是java文件。当然systemmix.java代码里的包名也要跟着改。然后编译,测试,引入import com.softwinner.SystemMix;没有报错了,说明成功了。同样的方法接着改其它接口。 对于上面出现的问题,估计就是编译的脚本修改了,但是我也寻找了很久也没找到方法。如有知道的,请务必打醒我。 那么到了这里,java接口就顺利添加了。接着我们编译jni、lib、service,因为前面我们修改了java的包名,后面的代码也要跟着改就ok了。然后编译吧,因为我不懂在哪里修改脚本让添加的所有接口一次性编译,所有我只好一个个去编译。步骤:一 android源代码顶层目录执行../build/envsetup.sh目的是为了使用脚本envsetup.sh;二在终端cd进去具体的目录执行mm 通过以上步骤都编译好,我们接着下一步。因为添加了service,而且需要开机自启动。所以我们需要修改init.rc文件,RK3288所在目录为/RK3288/device/rockchip/rksdk 在init.rc文件里添加: # start gpio service service gpio /system/bin/gpioservice class main user root group root audio camera graphics inet net_bt net_bt_admin net_raw ioprio rt 4 oneshot # start secure file server service securefile /system/bin/securefileserver class main user root group root audio camera graphics inet net_bt net_bt_admin net_raw ioprio rt 4 oneshot # start system mix service service property /system/bin/systemmixservice class main user root group root audio camera graphics inet net_bt net_bt_admin net_raw ioprio rt 4 oneshot # start isomountmanager service isomountmanager /system/bin/isomountmanagerservice class main user root group root audio camera graphics inet net_bt net_bt_admin net_raw ioprio rt 4 oneshot 注意user root这个一定要加上,这个才是关键。ok,保存,重新编译。基本上framework就修改好了,不过在使用过程还是有些问题,比如nfs。从代码看是执行了system/bin/nfsprobe,我打开system/bin目录确实没有发现nfsprobe,所以就从全志固件那拷贝nfsprobe到RK3288源码目录RK3288/out/target/product/rk3288/system/bin下,再次编译就会把nfsprobe打包进去了。 这章写的好乱,内容也比较多。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
533 浏览 0 评论
803 浏览 1 评论
700 浏览 1 评论
1926 浏览 1 评论
3171 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 13:47 , Processed in 0.985552 second(s), Total 73, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号