uboot 通过网络启动内核和根文件系统

发布时间 2023-08-24 20:07:49作者: 掌控命运

一、开发背景

  由于开发阶段需要频繁修改内核镜像文件和根文件系统,如果每次修改都通过烧写 emmc 或者烧录 sd卡制卡过于繁琐,所以需要通过网络启动和加载

二、开发需求

  内核镜像文件(zImage)和根文件系统(rootfs)创建好后,存放于 Ubuntu 中,开发板启动过程中自动提取对应的文件。

三、开发环境

  Linux Ubuntu 4.15.0-65-generic + i.mx6d(cortex-A9)

四、实现步骤

  所需材料:zImage、imx6dl-c-sabresd.dtb 和 rootfs(解压包)

  1、Ubuntu 安装 tftp,主要用于传输 zImage,拷贝的形式传输,安装方法自行百度

  2、Ubuntu 安装 nfs,主要用于文件系统共享,鉴于文件系统比较大,不适合拷贝传输,采用共享的形式,安装方法自行百度

  3、linux-arm 进入 uboot 后设置 bootcmd 和 bootargs

       bootcmd 用于加载内核和设备树, bootargs用于将参数传递给内核,进而启动对应的文件系统

    setenv bootcmd 'tftp 12000000 zImage; tftp 18000000 imx6dl-c-sabresd.dtb; bootz 12000000 - 18000000'
    setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=172.16.21.34:/home/yangjinghui/mx6d/nfs/rootfs,proto=tcp rw ip=172.16.21.88:172.16.21.34:172.16.21.254:255.255.255.0::eth0:off'
    saveenv

    其中 0x12000000 是内核的起始地址,0x18000000 是设备树的起始地址,ubuntu 网络地址:172.16.21.34,开发板地址:172.16.21.88,文件系统在 ubuntu 下的路径:/home/yangjinghui/mx6d/nfs/rootfs

    注意:开发板的 mac 地址需要设置,但是不能和 ubuntu 的地址一样。否者会加载失败