有关ARM Linux引导的一些详细信息

我试图了解在arm体系结构上进行Linux引导的详细信息.尽管我每次阅读文章都会带来很多其他新术语,但我在互联网上进行了大量搜索并了解了一些细节,但这使事情变得更加复杂.我确实有2个运行linux的主板,一个olimex 9261和一个beaglebone黑色.我在嵌入式系统(尤其是arm)方面的专业知识非常出色,但是在linux上并没有发挥太多(除了某些用户空间程序和内核中的char驱动程序).

这是我的问题:

一块板我有以下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闪存(到目前为止找不到映射)和2MB数据闪存(映射为0xc0000000).

我在这里不明白的是:

>为什么bootargs中有一个mem = 64?这不应该以ATAG或DTB的形式提供吗?
>当我们将控件传递给内核时,为什么会有一个控制台作为参数?使用tty的内核是否已经由uboot配置?
> initrd与rootfs.我仍然不清楚.我知道initrd可以作为一个块设备包含在内核中,也可以作为uboot必须将地址详细信息传递给内核的单独映像使用(true?).我们可以有一个没有initrd的内核包含另一个文件系统,例如jffs2,该内核将从该文件系统运行其余的驱动程序吗?实际上,我无法理解启动时内核使用的文件系统的全部详细信息.在这个设置中,我有4个文件:uImage,bootstrap,env.bin和jffs2文件系统.因此没有initrd.怎么运作的?以及在上面的bootargs中指出的根文件系统的过程如何?以我的理解,内核应该首先访问jffs2文件系统,然后获取在/ dev / mtdblock1中找到的映像并将其挂载.也许我的理解是错误的.实际上,内核和文件系统之间的这种交互是我似乎不了解的.
在上面的bootcmd中,内核从nand复制到sdram,然后bootm跳转到它.但是内核如何在启动时找到jff?
我在引导过程中看到以下输出行:
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”时看到的内容

上一篇:U盘安装Centos7操作系统的问题记录


下一篇:安装centos8和Window10出现的一些问题和解决方法