问题标签 [rootfs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux-kernel - Linux启动过程
我玩了一下内核 linux,在引导过程中遇到了一些错误: Kernel panic - not syncing: Attempted to kill init!
我想了解 linux 内核的引导过程一般是如何工作的,尤其是在 start_kernel() 函数和负载期间和之后的rootfs。
感谢你们。
linux - Busybox SUID on NFS rootfs
I am building a Linux system from the bottom for a Beagle Bone board. I have compiled the vanilla kernel and built a basic root file system with busybox
. The system is booted with U-boot, while the rootfs
is located on a Linux PC and exported through NFS:
The U-boot bootargs
are:
I've encountered a problem when trying to get su
working for non-root users. In order to work around the problem people over internet are suggesting to set the suid
bit for the busybox
binary.
After doing so:
and verifying:
Something went wrong. The kernel is booting and all of the usual messages are displayed, but it is getting stuck at the end, and no login
line is displayed. Here are last few lines of the booting sequence:
If removing the flag, the things are returning to normal:
If setting the flag from within the running shell on the Beagle Bone board itself, the shell is stopping responding right after the chmod
is performed.
I suspect it is something to do with the way the NFS is exporting the rootfs, but it's only a guess, so qualified explanation and possible solution would be helpful.
linux - switch_rootbusybox 初始化问题?
我在带有busybox的嵌入式Linux环境中。我已经阅读了几篇 试图学习如何使用switch_root的帖子。我试过这个:
帮助打印出来,switch_root
我看到一个新的登录名:
当我登录时,新根还没有加载,旧的还在。这是因为我直接从命令行而不是从某种初始化脚本运行此命令吗?
我阅读了这篇文章,发现他们在运行之前执行了其他步骤switch_root
:
首先,这让我很困惑。为什么我要在运行之前运行这些命令switch_root
?不switch_root
为我做这个吗?
无论如何,我继续尝试先运行它们,然后运行我的switch_root
命令。但是,这完全解决了问题:
所以看起来因为我已经为 dev 移动了安装,当我的 init 运行并尝试将 getty 放在我的串行端口上时它找不到它?混乱........
我在这里错过了一些基本的东西switch_root
吗?或者需要一些简单的命令行修改?
docker - docker 1.6.0 之后宿主机容器的rootfs在哪里
在 Docker v1.4.1中,我们可以在主机上找到容器的rootfs 。例如:
但是在 Docker v1.6.0中,我发现它/var/lib/docker/devicemapper/mnt/911d7ac8fca78b2beca8752ec89d80c06a1ea1dd8a65099d074ed40eec0c6cce
是空的。
v1.6.0在哪里?
它已经使用了devicemapper
linux - 同步根文件系统
我有几台测试计算机,我想自动同步它们的根文件系统的内容。有哪些可能的方法来做到这一点?我不仅要更改用户空间应用程序和数据,还要更改内核。
deb - 使用 dpkg 安装交叉编译的 debian 包以伪造“footfs”
我的设置是这样的:我有两组为amd64 (pc) 和armelx (ARM) 编译的库。它们都用于在构建机器上交叉编译某些软件。
第一个(amd64)可以通过更新 apt-repository 并apt-get install
在构建机器上使用来轻松更新。但是 ARM 的软件包,我不想用 apt 安装,因为它不支持安装到不同的目录。如果我安装到默认目录,版本不能共存。正确的?
到目前为止,每次有新版本的软件包时,构建机器都会手动更新,只需将 with 解压缩dpkg -x
到专用的“假” footfs目录即可。这是编译器在交叉编译其他软件时也会查看的地方。问题是,系统上的任何地方都没有关于这些提取包或其版本的信息,对吧?它应该在状态文件中。
我的想法是在这个 footfs 目录上安装这些包,并使用dpkg -i <package.deb> --root=<rootfs>
. 这行得通吗?我感觉它不会,因为 deb 包没有 post/pre-remove/install 脚本,所以它可能以某种方式适用于处女安装,但不适用于升级?此外,rootfs目录结构必须是什么样的,它必须包含什么才能使其第一次工作?有没有工具可以帮助解决这个问题?
谢谢。
linux - 设备映射更改时如何为 rootfs 制作正确的引导参数
我使用可以使用 sd 卡或 emmc 启动的 imx.6 sabresd 板。我可以使用 u-boot 正确启动 linux,并为 rootfs 提供具有正确位置的适当 bootargs。但是当使用 eMMC 启动 Linux 时,设备名称从插入 sd 卡时的 /dev/mmcblk1 更改为未插入 sd 卡时的 /dev/mmcblk0。
现在,当我不知道要使用哪个设备时,如何使用 bootargs 参数在 u-boot 中给出正确的 root=?
当然,我可以在 u-boot 中进行一些测试以检查是否插入了 sd 卡并更改 bootargs 参数(只是一个想法,但尚未测试)但实际上我希望有一个更优雅的解决方案?有什么建议么?
docker - docker容器的rootfs大小是如何决定的?
在一个系统上,Docker 容器的磁盘大小是这样的:
我们可以看到rootfs的大小是99G。而在另一个系统中,Docker 容器的磁盘大小是这样的:
rootfs 大小只有 9.8G。
docker容器的rootfs大小是如何决定的?如何修改 rootfs 大小的值?
linux-kernel - ARM上initramfs的大小限制?
我正在 PicoZed 板(ARM CortexA9 内核)上创建一个可启动的 Linux 系统,但我遇到了一个“限制”,我认为这并不是真正的限制(我觉得这是另一个伪装成局限性)。
我通过在 JTAG 引导模式下启动系统来引导;在板子上电后,我使用 xmd 调试器将 u-boot 放入系统的 RAM 中,然后运行它。
接下来,我将内核 (uImage)、gzip'd initramfs 映像和设备树放入内存中。最后,我告诉 u-boot 使用 bootm 引导系统,并使用三个参数指出所有映像的内存位置。
所有这些都有效,我设法启动了 Linux + 用户空间。但是,我需要增加 initramfs,这就是我遇到问题的地方。
工作图像正好是 16MiB。我尝试将其设置为 24MiB(每次尝试启动时从头开始完全重新生成),但是在内核加载并尝试查找 init 之后,内核报告文件系统故障并失败。不应该有任何重叠,但以防万一我试着移动一些东西,但同样的问题发生了。
在搜索了一些提示后,我在论坛上看到有人说图像需要放置在 16MiB 对齐(我认为这不是真的,但我还是尝试了它,但它没有得到一个工作系统)。另一篇文章声称图像必须与其尺寸对齐(我再次认为这不是真的,但我也尝试过,但没有改变)。还有一篇文章声称如果 initramfs 映像越过 __init 结束边界就会发生这种情况,并且将 initramfs 映像牢固地放置在内部将允许在内核解压缩映像后回收内存,并将其放置在 __init 部分之外工作,但启动后该内存将永远丢失。我对 Linux 知之甚少,无法知道其中任何一个是否真实/准确,而且我不知道“__init”在哪里
我还尝试了原始位置(适用于 16MiB 图像)并创建了 16MiB + 1K 大小的图像,但这也不起作用。(显然,检查它是否没有覆盖任何过度图像)。
这最初让我认为某处潜伏着 16MiB 的 initramfs 大小限制。但是在搜索它时,它让我觉得这没有意义——据我所知,u-boot 中的 bootm 命令应该为系统设置标签列表(包括 initramfs 的位置和大小),到目前为止,我还没有遇到任何关于与 initramfs 的标记列表相关的 16MiB 限制的说明。
我发现一个页面声称 initramfs 大小实际上限制为系统中物理内存大小的大约一半,而 PicoZed 板有 1G RAM,所以我们距离“应该”的大小相差几个数量级成为一个限制。
澄清一下:16MiB 图像是原始图像的大小;压缩后不到 6MiB。但是,如果我填充它以便它没有被压缩得那么紧,它不会有任何区别 - 问题似乎与压缩图像的大小无关,仅与未压缩图像有关。
主要问题:
- 这个明显的 16MiB initramfs 大小限制来自哪里?
附带问题:
- 是否存在诸如“内核 __init 部分”之类的东西,它在内核具有未压缩/加载的图像后被内核回收?如果是这样,我如何查看/配置它的位置/大小?
linux - 将busybox编译为BFLT可执行文件
我正在为 no-mmu 架构编译一个busybox rootfs。此编译的输出是 ELF 32 位 LSB 可执行文件。
file _install/bin/busybox:
ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.32,
我想要一个 BFLT 可执行文件(与 uclinux 相同)。如何将 ELF 转换为 BFLT 或从 busybox 生成 BFLT 文件?
没有Buildroot可以做到这一点吗?
添加信息:
- 我正在使用工具链 arm-none-linux-gnueabi
- 构建为静态可执行文件
- 选项强制 NOMMU 构建启用