【问题标题】:why i cannot get the correct file permission at android application?为什么我无法在 android 应用程序中获得正确的文件权限?
【发布时间】:2012-11-18 08:05:14
【问题描述】:

我正在将新的 Android4.2 移植到我们自己的硬件上。 我们使用vold将mmc的一个分区挂载到/mnt/sdcard并关闭多用户功能。 在终端中,我们可以找到具有 0777 权限的 sdcard。 但是当我们使用“es文件管理器”之类的android应用程序浏览/mnt/sdcard时,它会提示“未安装sdcard”

然后,我尝试测试它,并编写一个小程序。当我尝试访问该文件时,它返回权限 0000 ,这是在我们挂载分区之前由 init.rc 定义的。

在vold.fstab中

dev_mount sdcard /mnt/sdcard 1 /devices/platform/ns115-sdmmc.0/mmc_host/mmc1

在init.xxx.rc中

   export EXTERNAL_STORAGE /mnt/sdcard                                                             
   mkdir /mnt/sdcard 0000 system system
   symlink /mnt/sdcard /sdcard

在 vold 中,我们使用 fstype vfat 将 mmc 磁盘挂载到 /mnt/sdcard 并授予权限 0777 和 uid=system gid=sdcard_rw

看看坐骑:

rootfs / rootfs rw 0 0
/dev/root / ext3 rw,relatime,errors=continue,barrier=0,data=writeback 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
tmpfs /mnt/secure tmpfs rw,relatime,mode=700 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
/dev/block/vold/179:1 /mnt/sdcard vfat   rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0000,dmask=0000,allow_ut0
/dev/block/vold/179:1 /mnt/secure/asec vfat    rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0000,dmask=0000,al0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0

我试试这些测试:

  1. 使用应用程序访问 /mnt/sdcard 失败,权限被拒绝 0000
  2. 使用原生服务和0777做同样的测试成功
  3. 在终端中使用 0777 检查 /mnt/sdcard 是否成功

所以我想知道它是否与应用程序的标志有关?

【问题讨论】:

  • 请发布 logcat 和 dmesg 日志。
  • 你如何在终端测试访问?在被拒绝的情况下,您如何从应用程序错误消息中获取 unix 文件权限代码?您是否研究过在 android 4.x 中可能强制执行 read sdcard 权限?
  • 1.我使用 minicom 将设备与 root 用户连接。 2. 我使用 lstat 来获取 s_mode 标志。当我调用 opendir 时,它返回 errno 13(EACCES) 3. 4.1 和 4.2 之间的唯一区别是“多用户”功能,我尝试使用 fuse 和 sdcard 服务将 sdcard 挂载到 init 进程中,它可以工作。所有应用程序都可以看到 SD 卡。但我仍然不知道为什么zygote fork 的应用程序看不到vold 挂载的sdcard,它也是root 用户进程。
  • 这很可能与 4.2 中的 per-user sdcard 事情有关
  • 也许,你知道实现在哪里吗?

标签: android embedded-linux android-sdcard mount


【解决方案1】:

也许你需要一个正确的init.rc文件,它必须在android4.2,如果你的init.rc在android4.1,你可以添加这个: # 挂载共享,以便更改传播到子命名空间 挂载 rootfs rootfs / 共享记录 mount tmpfs tmpfs /mnt/secure private rec

# 创建私有挂载点,以便我们可以从暂存中进行 MS_MOVE mount tmpfs tmpfs /mnt/secure mode=0700,uid=0,gid=0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 2020-09-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多