U-Boot 只做三件事:

1. 加载内核 :

    tftp   / sd / flash → kernel

2. 传参数(关键 ) ,  告诉 rootfs 在哪,Kernel 并不知道 rootfs 在哪里,是 bootargs 告诉它的:

    bootargs=root=/dev/nfs   nfsroot=192.168.1.10:/home/xxx/linux/nfs/rootfs   ip=192.168.1.20

3. 启动内核:

   bootz / bootm

U-Boot

  ↓

加载 Linux kernel (内核) + dtb (设备树)

  ↓

传 bootargs(告诉 rootfs 在哪)

  ↓

Kernel 启动

  ↓

挂载 rootfs = NFS(/home/xxx/linux/nfs/rootfs)

  ↓

执行 /sbin/init (挂载本地存储 SD/eMMC/NAND)  或  /etc/init.d/rcS (NFS 挂载)

  ↓

用户程序启动

  ↓

exec → 动态链接器加载 .so(来自 NFS 或本地 rootfs)

正常嵌入式启动:

Kernel → mount SD/EMMC rootfs → init

NFS 启动:

Kernel → mount nfs rootfs → init → rcS

NFS 挂载的是“整个根文件系统”,NFS 主要给“用户空间”用,Linux 内核本身不依赖库文件。

U-Boot 负责“把 Linux 启动起来并告诉它 rootfs 在哪里,rootfs  存储的位置  ”,

如果rootfs 在 NFS 上: root=/dev/nfs ,Linux 用户空间程序 通过 NFS 读取库文件。

如果rootfs 在 本地存储 :root=/dev/mmcblk0p2 或者 root=/dev/nand ,

NFS 和本地 rootfs 的区别,只是“文件放在哪里”,

Linux 用户空间加载库文件的方式完全一样,

差别只是读取路径来自网络还是本地存储。

NFS 挂载 方便调试程序。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐