You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何mount()系统调用无法识别selinuxfs路径?Android移植问题

Android x86移植中selinuxfs挂载失败问题

环境信息

  • 内核分支:android13-5.15(内核版本5.15)
  • 用户空间:基于LineageOS master分支源码构建
  • 目标平台:x86设备

问题现象

第一阶段init程序执行早期挂载操作时,tmpfs、devpts、sysfs三个挂载均正常完成,但挂载selinuxfs时系统调用返回Invalid argument(无效参数)。相关代码片段如下:

CHECKCALL(mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755")); // 挂载tmpfs
[...]
CHECKCALL(mount("devpts", "/dev/pts", "devpts", 0, NULL)); // 挂载devpts
[...]
CHECKCALL(mount("sysfs", "/sys", "sysfs", 0, NULL)); // 挂载sysfs
CHECKCALL(mount("selinuxfs", "/sys/fs/selinux", "selinuxfs", 0, NULL)); // 挂载SELinuxFS - 此处执行失败

调试情况

在内核负责处理挂载的do_mount函数中添加printk调试语句,记录挂载目录信息:

long do_mount(const char *dev_name, const char *dir_name, const char *type_page, unsigned long flags, void *data_page)
{
    struct path path;
    int ret;
    ret = user_path_at(AT_FDCWD, dir_name, LOOKUP_FOLLOW, &path);
    printk("DIR_NAME: %s",path.dentry->d_iname); // 输出挂载目录名
    if (ret)
        return ret;
    ret = path_mount(dev_name, &path, type_page, flags, data_page);
    path_put(&path);
    return ret;
}

调试结果显示:前三个挂载能输出正确的目录名,但selinuxfs挂载时返回(efault)。

已确认的前提条件

  • /sys/fs路径已存在
  • 同一份源码在谷歌goldfish模拟器中可正常构建并运行
  • 内核已配置并启用SELinux及SELinuxFS支持

内容的提问来源于stack exchange,提问作者TheNXGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:23:21