【问题标题】:Buildroot doesn’t run as root and doesn’t want to run as rootBuildroot 不以 root 身份运行,也不想以 root 身份运行
【发布时间】:2017-02-11 11:35:12
【问题描述】:

我有两个问题:

  • 我不确定是否理解(来自 Buildroot 手册中的目录描述):

    target/ 几乎包含目标的完整根文件系统:除了 /dev/ 中的设备文件外,所需的一切都存在(Buildroot 不以 root 身份运行,也不想以 root 身份运行)

为什么 buildroot 需要 root 才能创建 /dev

  • 我知道的是buildroot使用target生成images/rootfs.tar;是taror ...的简单压缩吗?你能帮我找到生成images/rootfs.tar的make目标吗? 在使用 NFS 的情况下,为什么我们不能直接使用 targetfolder 作为 rootfs 是什么使“去皮”images/rootfs.tar 不同于 target

参考:http://free-electrons.com/~thomas/buildroot/manual/html/ch03.html

【问题讨论】:

  • (1) Buildroot,一个用于生成内核和根文件系统的工具,在您的主机系统上以普通用户身份执行,无需超级用户权限。 (2) .tar 是没有压缩的普通存档。您可以使用make menuconfig 过程配置/指定压缩(和/或文件系统映像)。您没有在make shell 命令中指定它。
  • @sawdust,感谢您的反馈,也许我的问题不是直截了当的。我需要知道的是为什么我们不能在buildroot手册中使用target作为rootfs据说这是因为它不包含dev因为Buildroot不以root身份运行,所以为什么它需要root权限来创建它

标签: linux buildroot rootfs


【解决方案1】:

我不确定是否理解(来自 Buildroot 手册中的目录描述):

Buildroot 是一种用于生成内核和根文件系统的工具,它在您的主机系统上以普通用户身份执行,无需超级用户权限。


为什么 buildroot 需要 root 才能创建 /dev

Buildroot 不使用超级用户权限。


我所知道的是 buildroot 使用 target 来生成图像/rootfs.tar;是用 taror 进行简单的压缩吗...?

.tar 是一个没有压缩的普通存档。
您可以使用make menuconfig 过程配置/指定压缩(和/或选择文件系统映像)。


您能帮我找到生成图像/rootfs.tar 的 make 目标吗?

您没有在 ma​​ke shell 命令中指定此项。
您可以使用make menuconfig 过程配置/指定带有可选压缩(和/或选择文件系统映像)的 tar 和/或 cpio 存档。


如果使用 NFS 为什么我们不能直接使用目标文件夹作为 rootfs

因为它不适合作为屋顶。
文件所有者和组不正确(这可能与 NFS 的使用无关)。
文件权限可能不正确(例如 busybox 二进制文件的 setuid)。
/dev 目录没有目标内核所需的最小设备节点。

目标目录在dev中有普通的文件,而不是所需的最小设备节点(例如console):

buildroot-2015.05/output/target$ ls -l dev
total 4
-rw--w--w- 1 me swdev    0 Sep 15 16:34 console
lrwxrwxrwx 1 me swdev   10 Aug 14  2015 log -> ../tmp/log
drwxrwxr-x 2 me swdev 4096 May 31  2015 pts
$

目标内核在需要设备节点时无法使用这些文件。将尝试使用这些文件进行普通文件传输,而不是通过设备节点执行 I/O。

实际的dev目录应该是:

crw--w--w- 1 root root 5, 1 Sep 15 16:34 console
lrwxrwxrwx 1 root root   10 Aug 14  2015 log -> ../tmp/log
drwxr-xr-x 2 root root 4096 May 31  2015 pts

是什么让“untaring” images/rootfs.tar 与目标不同

Buildroot 可以巧妙地为设备节点创建条目,并在创建存档(或文件系统映像)时为每个文件名分配适当的所有者和组。
这只是以适当的格式生成二进制数据,并插入写入文件的实际存档条目(或 fs 映像)。
仅当未归档(或安装文件系统映像)时,“数据”才被正确解释为设备节点。

【讨论】:

  • 再次感谢,我只想详细介绍一下:“Buildroot 可以巧妙地为设备节点创建条目”:在我看来,是内核创建了设备节点link。 “为每个文件名分配适当的所有者和组”:您能否解释一下 Buildroot 在哪个脚本/Makefile 中完成此操作。
  • 如果您想深入了解细节,那么请花更多的精力阅读所写的整个句子。您和该链接指的是实际的设备节点。 Buildroot 只是为设备节点构建 cpiotar 归档条目。您无法归档实际的设备节点;您只能归档关于节点的信息。更改所有者和组是归档程序的标准选项。
  • 顺便说一句,聪明人不会把幼稚的短语写成“我想...”
  • 好吧,我好像遗漏了很多关于设备节点的东西,你的意思是 buildroot 为内核准备了有关设备的信息,然后内核解释这些信息并创建实际的设备节点?当/在哪里内核读取这些信息时,这些信息在哪里(在哪个文件中),对不起,如果我问太多了
  • 你太执着于“内核”tarcpio 是用户空间程序。他们可以归档普通文件和“特殊文件”(例如设备节点),然后在从这些归档中提取时重新创建它们。因此涉及内核,因为有 I/O。但是内核最终负责执行所有的 I/O,那么通过说“内核 ... 创建实际的设备节点” 来传达什么信息?这个请求是从哪里来的?提示:这是一个用户空间程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2013-12-19
  • 2022-09-29
  • 2020-07-14
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多