一般是在device.mk文件中执行如下的拷贝工作
- PRODUCT_COPY_FILES += \
- device/hisilicon/bigfish/etc/usbfs.sh:system/etc/usbfs.sh
二:添加启动动作,使Android在启动时候执行
init.rc文件末尾处加入以下内容(不再详述,不懂的自己翻书或者爬网查)
- service mount-usbfs /system/etc/usbfs.sh
- class main
- user root
- group root
- oneshot
之后编译系统,烧写,启动,观察启动log,发现确实执行了该sh文件,但是却报了一个“权限不足”的提示,ll了一下usbfs.sh文件,发现权限是644,没有执行权限。
OK,没有执行权限,给他添加上执行权限就是了,同样是在init.rc文件中,添加以下内容:
- chown root shell /system/etc/usbfs.sh
- chmod 0550 /system/etc/usbfs.sh
添加了执行的权限,这次应该没有问题了吧,网上很多介绍也是这么干的。
观察启动的log,居然还是“权限不足”!!!怎么回事,难道没有生效?ll了一下usbfs.sh文件,发现权限居然还是644,说明刚才的赋权限是没有效果的。
为什么?接着查,在查看init.rc的过程中,发现了以下内容:
- mount ext4 ext4@system /system ro
原来system分区是以只读的形式进行挂载的,忽略这点了。以只读形式挂载,再怎么赋权限,也是徒劳啊。
突然又发现,与usbfs.sh在同一个目录的init.bigfish.sh,权限是正常的,并且该文件的源文件与sh文件同样都在一个目录里。那么,这说明Android在编译过程中,除了拷贝以外,应该还有一个赋权限的动作。
基于以上思路,继续进行查找。功夫不负有心人,还真被我找到了,确实存在这么一个动作,它在哪里呢?
在这里:system/core/include/private/android_filesystem_config.h,其中有个结构体做如下定义:
- { 00550, AID_ROOT, AID_SHELL, "system/etc/usbfs.sh" },