uboot阶段修改rootfs根文件系统挂载参数

本文介绍如何通过U-Boot命令控制台将Ext4根文件系统的Data模式从ordered更改为journal,包括设置参数、保存及验证更改效果的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例:将ext4的rootfs根文件系统类型的data模式从orderd改为jounal,

进入uboot命令控制台操作,添加如下命令

setenv setargs_mmc 'setenv  bootargs enforcing=${enforcing} earlyprintk=${earlyprintk} initcall_debug=${initcall_debug} console=${console} rootwait root=${mmc_root} rootflags=data=journal init=${init} partitions=${partitions} cma=${cma} vmalloc=${vmalloc}'

增加参数:rootflags=data=journal,用于指定journal.

查看参数

sunxi#printenv 
boot_fastboot=fastboot
boot_normal=sunxi_flash read 40007800 boot;boota 40007800
boot_recovery=sunxi_flash read 40007800 recovery;boota 40007800
bootcmd=run setargs_mmc boot_normal
bootdelay=3
cma=10M
console=ttyS0,115200
earlyprintk=sunxi-uart,0x01c28000
enforcing=0
fastboot_key_value_max=0x8
fastboot_key_value_min=0x2
filesize=1c2036
init=/init
initcall_debug=0
loglevel=4
mmc—ឲoot=/dev/mmcblk0p7
mmc_root=/dev/mmcblk0p7
nand_root=/dev/system
partitions=boot-resource@mmcblk0p2:env@mmcblk0p5:boot@mmcblk0p6:rootfs@mmcblk0p7:data@mmcblk0p8:backup@mmlog@mmcblk0p11:app@mmcblk0p12:UDISK@mmcblk0p1
recovery_key_value_max=0x13
recovery_key_value_min=0x10
setargs_mmc=setenv  bootargs enforcing=${enforcing} earlyprintk=${earlyprintk} initcall_debug=${initcall_rootwait root=${mmc_root} rootflags=data=journal init=${init} partitions=${partitions} cma=${cma} vmalloc
setargs_nand=setenv bootargs enforcing=${enforcing} earlyprintk=${earlyprintk} initcall_debug=${initcall_loglevel=${loglevel} rootwait root=${nand_root} init=${init} partitions=${partitions} cma=${cma} vmalloc=emory swapaccount=1 androidboot.selinux=disable
vmalloc=384MB

Environment size: 1305/131068 bytes

保存参数

sunxi#saveenv 
Saving Environment to SUNXI...
saveenv storage_type = 2

重启设备,进入系统查看是否生效

[sysadm@buildroot ~]$ mount
/dev/mmcblk0p7 on / type ext4 (rw,relatime,nodelalloc,data=journal)

已经显示data=journal模式,完美收工。

### 配置 U-Boot 使用 NFS 挂载文件系统 在嵌入式开发环境中,U-Boot 是常用的引导加载程序之一。为了方便调试和测试目的,通常会配置 U-Boot 通过网络文件系统 (NFS) 来挂载根文件系统。 #### 设置环境变量 设置合适的环境变量对于成功启动 Linux挂载 NFS 文件系统至关重要。这些变量定义了内核参数以及如何连接到 NFS 服务器: ```bash setenv bootargs 'console=ttyS0,115200 root=/dev/nfs rw nfsroot=${serverip}:${path},tcp ip=dhcp' ``` 上述命令设置了 `bootargs` 变量来指定控制台端口、波特率、根文件系统的路径以及其他必要的选项[^5]。 其中 `${serverip}` 和 `${path}` 应替换为实际的 NFS 服务器 IP 地址及其共享目录的位置;如果使用 DHCP 获取 IP,则可以直接采用默认值 `dhcp` 对于 `ip=` 参数部分。 #### 加载内核与设备树 接着需要从远程位置获取 Linux 内核镜像及对应的设备树 Blob (DTB),这可以通过 TFTP 协议完成: ```bash tftp ${loadaddr} zImage tftp ${fdt_addr_r} sun7i-a20-cubieboard2.dtb ``` 这里假设已经预先设定了两个地址寄存器 (`${loadaddr}`,`${fdt_addr_r}`),用于存储下载的数据缓冲区起点[^3]。 #### 执行启动指令 最后一步就是调用 `bootm` 命令执行刚刚传送到 RAM 的内核映像,并传递 DTB 给它作为硬件描述信息的一部分: ```bash bootm ${loadaddr} - ${fdt_addr_r} ``` 此操作将会触发 ARM 架构下的 Linux 系统初始化流程,并尝试按照之前设定好的方式去寻找并挂载 NFS 提供的服务作为其根文件系统。 #### 创建必要节点 另外,在某些情况下可能还需要确保目标板上的 `/dev` 下存在一些基本字符型设备节点,比如串行接口或伪终端等。可以在构建 RootFS 映像前手动创建它们,或者借助 BusyBox 工具自动生成所需资源[^4]: ```bash sudo mknod /mnt/rootfs/dev/tty1 c 4 1 sudo mknod /mnt/rootfs/dev/console c 5 1 ... ``` 以上步骤展示了完整的基于 U-Boot 实现 NFS 根文件系统的过程,涵盖了从准备阶段直到最终运行的关键环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值