• EASYARM-IMX283 nfs启动内核和根文件系统


    EASYARM-IMX283(以下简称IMX283)默认采用从nand flash启动,但是在开发过程中因为要频繁的替换内核,我们更倾向于从nfs启动。

    先看看IMX283中uboot中默认采用的启动选项,内容如下:

    bootcmd=run nand_boot
    bootdelay=3
    baudrate=115200
    ipaddr=192.168.12.62
    serverip=192.168.12.61
    netmask=255.255.255.0
    bootfile="uImage"
    loadaddr=0x42000000
    kernel=uImage
    kernelsize=0x300000
    rootfs=rootfs.ubifs
    kerneladdr=0x00200000
    nfsroot=/home/notroot/nfs/rootfs
    bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp fec_mac=${ethaddr}
    bootcmd_net=run bootargs_nfs; dhcp; bootm
    bootcmd_mmc=run bootargs_mmc; mmc read 0 ${loadaddr} 100 3000; bootm
    bootargs_nand=gpmi=g console=ttyAM0,115200n8 console=tty0 ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs ip=192.168.12.180:192.168.12.48:192.68.12.1:255.255.255.0::eht0 
    bootargs_mmc=gpmi=g console=ttyAM0,115200n8 console=tty0 root=/dev/mmcblk0p3 rw ip=192.168.12.180:192.168.12.48:192.68.12.1:255.255.255.0::eh 
    bootargs=gpmi=g console=ttyAM0,115200n8 console=tty0 ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs ip=192.168.12.180:192.168.12.48:192.68.12.1:255.255.255.0::eht0: fec 
    kernel=uImage
    upuboot=tftp $(loadaddr) $(serverip):imx28_ivt_uboot.sb;nand erase 0x0 0x100000; nand write $(loadaddr) 0x0 0x100000
    upkernel=tftp $(loadaddr) $(serverip):$(kernel);nand erase  $(kerneladdr) $(kernelsize);nand write $(loadaddr) $(kerneladdr) $(kernelsize);
    setenv kernelsize $(filesize); saveenv
    uprootfs=mtdparts default;nand erase rootfs;ubi part rootfs;ubi create  rootfs;tftp $(loadaddr) $(rootfs);ubi write $(loadaddr) rootfs $(filesize)
    tftp_boot=tftp $(loadaddr) $(serverip):uImage; bootm;
    nand_boot=nand read.jffs2 $(loadaddr) $(kerneladdr) $(kernelsize);bootm $(loadaddr)
    setnandboot=setenv bootcmd 'run  nand_boot';saveenv 
    settftpboot=setenv bootcmd 'run  tftp_boot';saveenv 
    upsystem=run upkernel;run uprootfs;reset 
    ethaddr=02:00:92:b3:c4:a8 
    stdin=serial
    stdout=serial
    stderr=serial
    ethact=FEC0 

    其中bootcmd中内容为"run nand_boot",而nand_boot内容是“nand read.jffs2 $(loadaddr) $(kerneladdr) $(kernelsize);bootm $(loadaddr)”,

    所以bootcmd实际上是nand read.jffs2 0x42000000 0x00200000 0x300000;bootm 0x42000000表示从0x200000开始3M大小的内容,拷贝到sram中0x42000000,然后从0x42000000启动内核。

    bootargs中内容为“gpmi=g console=ttyAM0,115200n8 console=tty0 ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs ip=192.168.12.180:192.168.12.48:192.68.12.1:255.255.255.0::eht0: fec

    表示从ubi分区中启动rootfs,并将ip地址设置为192.168.12.180,nfs服务器ip地址为192.168.12.48,网关ip为192.168.12.1,广播地址为255.255.255.0

    下面对uboot参数进行配置。

    将uImage以及rootfs都移动到nfs文件夹下(我的nfs主目录是/home/host/nfs/imx283)

    然后在/etc/exports中添加一行(其中nfs文件夹路径和ip地址需要根据自己进行修改):

    /home/host/nfs/imx283 192.168.211.0/255.255.255.0(rw,no_root_squash)

    然后重启nfs服务器。

    /tec/init.d/nfs-kernel-server restart

    首先配置ip地址:

    MX28 U-Boot > setenv ipaddr 192.168.211.212
    MX28 U-Boot > setenv serverip 192.168.211.2

    然后在uboot下执行下面的命令测试nfs是否可用:

     nfs 0x42000000 192.168.211.2:/home/host/nfs/imx283/uImage

    但是u-boot提示了一个错误:

    Using FEC0 device
    File transfer via NFS from server 192.168.211.2; our IP address is 192.168.211.212
    Filename '/home/host/nfs/imx283/uImage'.
    Load address: 0x42000000
    Loading: #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             ########################################*** ERROR: Cannot umount

    从网络上找到的一个解决方案是在/etc/hosts文件中添加一行(开发板ip和nfs文件夹路径):

    192.168.211.212 /home/host/nfs/imx283

    然后再执行上面的命令(nfs 0x42000000 192.168.211.2:/home/host/nfs/imx283/uImage):

    MX28 U-Boot > nfs 0x42000000 192.168.211.2:/home/host/nfs/imx283/uImage
    Using FEC0 device
    File transfer via NFS from server 192.168.211.2; our IP address is 192.168.211.212
    Filename '/home/host/nfs/imx283/uImage'.
    Load address: 0x42000000
    Loading: #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             ########################################*** ERROR: Cannot umount

    可以成功下载uImage.

    配置nfs路径:

    MX28 U-Boot > set nfsroot /home/host/nfs/imx283

    设置bootcmd并保存:

    setenv bootcmd nfs $(loadaddr) $(serverip):$(nfsroot)/uImage;bootm $(loadaddr)
    saveenv

    在配置bootargs 从nfs启动跟文件系统:

    MX28 U-Boot > set bootargs noinitrd root=/dev/nfs rw nfsroot=$(serverip):$(nfsroot)/rootfs ip=$(ipaddr) console=ttyAM0 init=/sbin/init
    MX28 U-Boot > saveenv

    按“RST”键重启开发板即可进入系统。

    需要注意的是,IMX283的字符串不能自动识别双引号,如果使用setenv bootcmd “nfs $(loadaddr) $(serverip):$(nfsroot)/uImage;bootm $(loadaddr)“,

    那么在引导内核时会提示nfs命令不能识别的错误。

  • 相关阅读:
    聊一聊-JAVA 泛型中的通配符 T,E,K,V,?
    leetcode刷到的大牛思路记录
    leetcode树有关题目随笔
    SpringMVC Controller介绍及常见注解
    一个方法团灭 6 道股票问题
    IDEA中Update resources和Update classes and resources、Redeploy、Restart server的区别
    动态规划规律总结
    mapPartitions
    RDD的依赖关系
    foreachPartition来写数据库
  • 原文地址:https://www.cnblogs.com/qiaoqiao2003/p/3745312.html
Copyright © 2020-2023  润新知