【问题标题】:Rootfs on SD cardSD卡上的rootfs
【发布时间】:2014-04-23 23:35:46
【问题描述】:

我有一个设备,我有一个 3.10 linux 内核启动到一个 busybox shell (initramfs)

当我提取 SD 卡上的 busybox 文件系统映像并将根目录从 root=/dev/ram 修改为 /dev/mmcblck0p1 时,它仍然启动到 shell 所以busybox工作正常,但如果我尝试使用任何其他FS内核会崩溃......

当我尝试使用 debootstrap (https://help.ubuntu.com/community/DebootstrapChroot) 生成 rootfs 并将新的 rootfs 提取到 SD 卡上时。我收到一条错误消息“无法执行 /sbin/init” 我确实检查了文件是否存在,还检查了权限,对我来说看起来不错。

可能是什么问题?

W.R.T rootfs 我特别新。我假设可以安装 SD 卡上的任何 FS,但看起来并非如此。我猜 /sbin/init 会做什么取决于设备?

我想做什么? ---> 我需要用一些包和库(gcc python 等)制作一个 rootfs。正常的方法是什么?我什至尝试过 buildroot,但我无法让 gcc 成为目标。 buildroot 中的 /bin/ 中不能有 gcc 吗?

-- 更新--

我正在将 SD 卡格式化为 ext4 格式,下面是 fdisk 的输出

Disk /dev/sdb1: 7945 MB, 7945588224 bytes
255 heads, 63 sectors/track, 965 cylinders, total 15518727 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc2aa4908

Device Boot      Start         End      Blocks   Id  System

当我在 SD 卡上有一个文件系统时,以下是内核日志。存储卡驱动程序工作正常,我已经验证过了。如果我在 SD 卡上有一个busybox 文件系统,那么一切正常。当我使用任何其他文件系统时,我得到以下...

6EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)
6VFS: Mounted root (ext4 filesystem) on device 179:1.
6Freeing unused kernel memory: 84K (c0f00000 - c0f15000)
3request_module: runaway loop modprobe binfmt-464c
4kworker/u2:4 (145) used greatest stack depth: 6132 bytes left
3Failed to execute /sbin/init.  Attempting defaults...
3request_module: runaway loop modprobe binfmt-464c
3request_module: runaway loop modprobe binfmt-464c
0Kernel panic - not syncing: No init found.  Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.

选中后,/sbin/init 也具有相应的权限!

【问题讨论】:

  • 你的 sdcard 是用什么文件系统格式化的?
  • 您需要在帖子中包含控制台输出,以便我们可以看到引导失败的位置。您需要确保在您的内核中或在 initramfs 中加载的模块中有 MMC 驱动程序。您的内核引导参数需要指明文件系统类型。如果您为您的 SD 发布 fdisk 打印输出,那就太好了。
  • @oakad ext4 文件系统
  • @JonathanBen-Avraham 是的,在原帖中编辑
  • 在 fdisk 中发布“p”(打印)命令的输出。根文件系统是否在 SD 上的 first 分区中?因为第一个分区是您的内核试图挂载的分区。你确定U-Boot不在第一个分区,文件系统在第二个分区?

标签: linux-kernel filesystems buildroot rootfs initrd


【解决方案1】:

考虑这个错误:“request_module: runaway loop modprobe binfmt-464c”

您很可能正在尝试将 64b 二进制文件(/sbin/init 和其他)与仅 32b 内核一起使用。要么重新编译你的内核以支持 64b,要么在你的 sd 卡上安装一个 32b 的用户空间。

其他需要检查的事项:

  1. 确认您的内核中确实启用了 elf 支持(通常是,但可以禁用它)。
  2. Google 那个错误,看看人们遇到了什么问题。

【讨论】:

  • 我检查了 /sbin/init 并且它是 32 位精灵 + 我的内核也是 3.10 内核 32 位。我使用的用户空间是 Ubuntu Raring 的用户空间,但 3.10 内核完全不同。会不会是个问题?
  • 然后检查内核配置。它显然无法加载 elf 可执行文件。
猜你喜欢
  • 2017-01-04
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多