gpt4 book ai didi

linux - ARM Linux 引导的一些细节

转载 作者:太空狗 更新时间:2023-10-29 11:04:17 25 4
gpt4 key购买 nike

我想了解在 arm 架构上启动 linux 的细节。我在互联网上做了很多搜索,到目前为止了解了一些细节,尽管我觉得每次阅读一篇文章都会带来很多其他新术语,这让事情变得更加复杂。我有两 block 运行 Linux 的板子,一 block olimex 9261 和一 block beaglebone black。我在嵌入式系统方面的专业知识特别是 arm 非常好,但并没有在 linux 上玩太多(除了一些用户空间程序和内核中的字符驱动程序)。

这是我的问题:

一 block 板我有以下uboot输出(linux 2.6.30):

 bootargs=mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2
bootcmd= cp.b 0xC0042000 0x22000000 0x00199954; bootm 0x22000000

板子有 64MB RAM(映射在 0x20000000),512MB nand flash(目前没有找到映射)和 2MB data flash(映射在 0xc0000000)。

这里我不明白的是:

  • 为什么bootargs 中有mem=64?这不是应该作为 ATAG 或 DTB 给出吗?
  • 当我们将控制权传递给内核时,为什么会给出一个控制台作为参数?内核是否使用 uboot 已配置的 tty?
  • initrd 与 rootfs。这对我来说仍然不清楚。我知道 initrd 可以作为 block 设备或单独的镜像包含在内核中,uboot 必须为此将地址详细信息传递给内核(是吗?)。我们可以拥有一个不包含 initrd 的内核 + 另一个文件系统,例如 jffs2,内核将从中运行其余的驱动程序吗?实际上我无法理解内核在启动时使用的文件系统的全部细节。在我的这个设置中,有 4 个文件:uImage、bootstrap、env.bin 和 jffs2 文件系统。所以没有initrd。这是如何工作的?以及上面的bootargs中指向文件系统的过程是如何进行的?在我的理解中,内核应该首先访问 jffs2 文件系统,然后抓取/dev/mtdblock1 中找到的镜像并挂载它。也许我的理解是错误的。实际上内核和文件系统之间的这种交互是我似乎不理解的。在上面的 bootcmd 中,内核从 nand 复制到 sdram,然后 bootm 跳转到它。但是内核如何在启动时找到 jffs 呢?我在引导期间看到了这个输出行:VFS:在设备 31:1 上安装根目录(jffs2 文件系统)。

在看板用户指南中我发现了这个:

警告:由于 AT91SAM9261 芯片勘误表,从 NAND 闪存启动是不支持。

...

512MB NAND 闪存(在 Linux 中被视为硅驱动器)。

  • 编译内核后,我发现 System.map 没有所有符号。我检查了 vmlinux,它是一样的。有谁知道为什么?也许编译器配置不正确?

非常感谢,丹尼尔。

最佳答案

  • mem=64 - 我假设在加载设备树之前可能需要这样做。也许不是。
  • tty - 但内核如何知道引导加载程序配置了哪个 tty?必须有一些配置,要么传递给、编译在其中,要么只是一个默认设置。
  • initrd(或 initramfs)与什么都没有 - initrd 只是一个非常小的用户空间,即。提示输入解密密码,等待插入带有 rootfs 的 USB 设备,或其他。没有它也可以工作,只要确保编译所有必要的模块以从 rootfs 启动。如果我没记错的话,几年前 initramfs 被引入作为 initrd 的替代品。它是一个打包在内核中的 CPIO 归档文件,它可能就是您在“没有 initrd”时看到的内容

关于linux - ARM Linux 引导的一些细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27607496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com