Android6.0 init.rc中创建符号链接失败问题

Android6.0直接在init.rc创建符号链接问题失败,说明Android6.0对权限控制更加严格了。

看看我们一开始在init.rc中的修改:

on init
    # See storage config details at http://source.android.com/tech/storage/

    symlink /storage/self/primary /mnt/sdcard
    symlink /storage/self/primary /storage/sdcard0

在我们自己的init.rc中的init中增加下面两个软链接,没有成功,不知道什么原因,于是想在init进程中打下log

int do_symlink(int nargs, char **args)
{
	int result;
	const char * str = "/storage/self/primary";
	char *resultstr;
	result = symlink(args[1], args[2]);
	if (strcmp(args[1],str) == 0) {
		ERROR("1111 do_symlink str:'%s' result:%d\n", args[2], result);
	}
	if (result == -1) {
		resultstr = strerror(errno);
		ERROR("1122 do_symlink str:'%s' resultstr:'%s'\n", args[2], resultstr);
	}
	
    return result;
}

在init进程中修改了do_symlink函数,增加了log,最后看dmesglong发现是没有权限。


于是准备在init.te文件中增加权限,发现init.te中对根目录下sdcard做了软链接

仿造其修改,在init.te中修改了如下代码:

allow init rootfs:lnk_file { create unlink };
allow init storage_file:lnk_file { create unlink };
allow init tmpfs:lnk_file { create unlink };

其中storage_file和tmpfs这两个类型,通过ls -Z可以查看。


修改了以后,发现/mnt/sdcard的软链接成功了,但是storage没有成功,后面发现,在post-fs中有如下代码

on post-fs
    start logd

    #add for amt
    chmod 0755 /amt
    # once everything is setup, no need to modify /
    mount rootfs rootfs / ro remount
    # Mount shared so changes propagate into child namespaces
    mount rootfs rootfs / shared rec
    # Mount default storage into root namespace
    mount none /mnt/runtime/default /storage slave bind rec

mount一个设备到storage下面,因此我们的软链接就不充了。


因此我们要在这之后再去建软链接,

on late-init
    trigger early-fs
    trigger fs
    trigger post-fs
    trigger post-fs-data

    # Load properties from /system/ + /factory after fs mount. Place
    # this in another action so that the load will be scheduled after the prior
    # issued fs triggers have completed.
    trigger load_all_props_action

    # Remove a file to wake up anything waiting for firmware.
    trigger firmware_mounts_complete

    trigger early-boot
    trigger boot

post-fs是在late-init中,因此我们可以把创建软链接放在post-fs-data

on post-fs-data
    chown system system /dev/st480
    chmod 0660  /dev/st480
	symlink /storage/self/primary /storage/sdcard0
	symlink /storage/self/primary /mnt/sdcard


这样就可以了,总结下需要在init.te添加创建软链接的权限,然后因为涉及到mount storage所以在storage建立的软链接没有生效。可以把创建软链接移后,放在mount storage后面








评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值