首页 > 编程知识 正文

bootargs不起作用(uboot tftpboot)

时间:2023-05-03 17:08:36 阅读:74395 作者:4048

关键字:

【bootargs】、【uboot】、【boot】、【bootloader】、【】、【】、【】、【】、【】、

说明:由于项目需要,经常修改uboot代码。

其中重要的是“bootargs”参数

什么是bootargs? 简单来说,bootargs是传递给内核的启动参数。

当uboot加载内核时,bootargs参数传递给内核并指定内存地址。

内核启动时将检索bootargs参数并分析该信息。 用于在启动时设置相关的驱动程序模块信息。

怎么设定bootargs? 设置bootargs有多种方法。 1 .在代码中设置setenv(bootargs )、boot_args。 通过在uboot下的命令行中设置setenv bootargs 'xxx.' bootargs参数来解析根:现在很多新的开发板都使用FLASH作为存储。 因为很多都是直接使用MTD驱动程序。 MTD驱动程序的主要优点是MTD驱动程序专门为基于闪存的设备设计。 因此,通常改进了支持、管理和基于扇区的擦除和读/写接口。 Linux上的MTD驱动程序接口分为两种模块:用户模块和硬件模块。 两个常见用户模块(MTD_CHAR和MTD_BLOCK )启用闪存访问。 MTD_CHAR提供对闪存的原始字符访问,而MTD_BLOCK将闪存设计为可以为文件系统(如IDE磁盘)创建常规块设备。 与MTD_CHAR相关的设备包括/dev/mtd0、mtd1和mtd2(例如,与MTD_BLOCK相关的设备包括/dev/mtdblock0和mtdblock1)。 因为MTD_BLOCK设备提供像块设备那样的模拟,所以通常希望基于该模拟来生成FTL和JFFS2这样的文件系统。 常用的方法有root=/dev/mtdblockxrw (x=0,1,2 .这是根据自己的mtd分区查看自己将文件系统放入哪个分区)的其他格式。 例如,root=/dev/mtdx rw,root=/dev/raaadio这取决于您的内核和FLASH。 挂载文件系统的另一个特殊方法是文件系统不在开发板上。 它位于NFS共享的服务器上。 当然,在指定root=/dev/nfs之后,还必须指定服务器的IP地址。 eg:root=/dev/nfsrwnfsroot=10.103.4.2163360/NFS root/rootfs IP=10.103.4.211 rootfs type :是哪个文件系统指示115200控制台是否使用串行端口0波特率115200 eg : mem=128 m ramdisk :首先介绍ramdisk。 ramdisk是虚拟化到ram中的磁盘(磁盘)。 请注意,对于用户,ram磁盘可以与普通硬盘分区(例如/dev/hda1)等同。 从2.6版开始,ram磁盘角色开始被虚拟内存文件系统支持(tmpfs )替换。 内核必须支持RAMdisk才能使用RAMdisk。 也就是说,要在编译内核时选择ram磁盘支持选项,请在配置文件中定义CONFIG_BLK_DEV_RAM。 如果在内核加载阶段选择了initialRAMDISK(initrd ) support选项,则内核可以在配置文件中加载ramdisk并执行其内容ramdisk的一个作用是解决在引导期间挂载根文件系统的“先鸡后蛋”问题。

根文件系统通常位于不同的存储设备上,并且不同的设备需要不同的硬件供应商驱动程序。 例如,intel南桥当然需要Intel ide/SATA驱动程序,VIA南桥需要via ide/SATA驱动程序,根文件系统也需要不同的文件系统。 例如,ubuntu版本可能通常使用ext3,ubuntu。如果将所有驱动程序/模块编译到内核中,当然没有问题,但这通常会违反“内核”的精神或本质。 /lib/modules/xxx会出现“鸡蛋”问题。 现在变成了mount。于是,我想到了ramdisk。 内核始终可以安装ramdisk。 (注意:这与ramdisk临时文件系统是内核一样,引导装载器提供的低级读/写命令(不是文件系统层提供的高级读/写接口) 内核可以装载内存中的ramdisk,然后将所有必需的驱动程序/模块放在ramdisk中。 首先,在内核中将ramdisk作为根文件系统安装,然后使用此根文件系统上的驱动程序安装真正的根文件系统,即可解决这一冲突。 linux上ramdisk的三种实现方法:https://

blog.csdn.net/alextanghao/article/details/2660656 ramdisk:  首先介绍一下ramdisk,Ramdisk是虚拟于RAM中的盘(Disk)。对于用户来说,能把RAM disk和通常的硬盘分区(如/dev/hda1)同等对待来使用  注意:在2.6版本后,Ramdisk的这一作用开始被tmpfs(Virtual memory file system support)取代。  为了能够使用RAMdisk你的内核必须要支持RAM disk,即:在编译内核时,要选中RAM disk support这一选项,会在配置文件中定义CONFIG_BLK_DEV_RAM。为了让内核有能力在内核加载阶段就能装入RAMDISK,并运行其中的内容,要选中initial RAM disk(initrd) support选项,会在配置文件中定义CONFIG_BLK_DEV_INITRD。  ramdisk一个作用就是用来解决boot过程中mount根文件系统的“先有鸡还是先有蛋”的问题的。一般来说,根文件系统在形形色色的存储设备上,不同的设备又要不同的硬件厂商的驱动,比如intel的南桥自然需要intel的ide/sata驱动,VIA的南桥需要VIA的ide/sata驱动,根文件系统也有不同的文件系统的可能,比如ubuntu发行版可能一般用ext3,suse可能就不是了,不同的文件系统也需要不同的文件系统模块;假如把所有驱动/模块都编译进内核(注:即编一个通用的、万能的内核),那自然没问题,但是这样就违背了“内核”的精神或本质,所以一般来说驱动/模块都驻留在根文件系统本身上/lib/modules/xxx,那么“鸡蛋”问题就来了,现在要mount根文件系统却需要根文件系统上的模块文件,怎么办?于是,就想出ramdisk,内核总是能安装ramdisk的(注:这是因为ramdisk临时文件系统和内核一样,也是由bootloader通过低级读写命令(如uboot用nand read,而不用通过文件系统层提供的高级读写接口)加载进内存,因此内核可以挂载内存里ramdisk文件系统),然后把所有可能需要的驱动/模块都放在ramdisk上,首先,让内核将ramdisk当作根文件系统来安装,然后再用这个根文件系统上的驱动来安装真正的根文件系统,就将这个矛盾问题解决了 .  linux中RamDisk的三种实现方式:https://blog.csdn.net/alextanghao/article/details/2660656initrd, noinitrd:   zzdwx没有使用ramdisk启动系统的时候,你需要使用noinitrd这个参数,但是如果使用了的话,就需要指定initrd=r_addr,size,r_addr表示initrd在内存中的位置,size表示initrd的大小。  initrd是用来初始化ramdisk用的。init:  init 指定的是内核启起来后,进入系统中运行的第一个脚本,一般init=/linuxrc,或者init=/etc/preinit,preinit的内容一般是创建console,null设备节点,运行init程序,挂载一些文件系统等等操作。请注意,很多初学者以为init=/linuxrc是固定写法,其实不然,/linuxrc指的是/目录下面的linuxrc脚本,一般是一个连接罢了mtdparts:  mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot)要 想这个参数起作用,内核中的mtd驱动必须要支持,即内核配置时需要选上Device Drivers ---> Memory Technology Device (MTD) support---> Command line partition table parsing.  其中fc000000.nor_flash是mtd-id ,必须要跟你当前平台的flash的mtd-id一致,不然整个mtdparts会失效。(可以在设备树中找到mtd-id)  mtdparts=sa1100:256k(ARMboot)ro,-(root) → 有两个分区。其中 ‘-’表示剩余的空间。


 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。