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

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

bootcmd=run nand_boot
bootdelay=
baudrate=
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 ${loadaddr} ; bootm
bootargs_nand=gpmi=g console=ttyAM0,115200n8 console=tty0 ubi.mtd= 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= 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=:::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= 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命令不能识别的错误。

EASYARM-IMX283 nfs启动内核和根文件系统的更多相关文章

  1. uboot下 Nand flash 启动 内核与根文件系统

    u-boot版本: u-boot-2010.03_tekkamanninja修改的u-boot 1.将uboot通过j-link烧写到norflash,启动后 saveenv 将参数保存到 nandf ...

  2. 嵌入式linux加载引导内核和根文件系统的方法

    总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...

  3. Linux内核与根文件系统的关系1

    Linux内核与根文件系统的关系开篇题外话:对于Linux初学者来说,这是一个很纠结的问题,但这也是一个很关键的问题!一语破天机: “尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用 ...

  4. Linux内核与根文件系统的关系

    开篇题外话:对于Linux初学者来说,这是一个很纠结的问题,但这也是一个很关键的问题!         一语破天机: “尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具.这 ...

  5. Linux内核和根文件系统引导加载程序

    续博文<u-boot之u-boot-2009.11启动过程分析> Linux内核启动及文件系统载入过程 当u-boot開始运行bootcmd命令.就进入Linux内核启动阶段,与u-boo ...

  6. 使用NFS启动Tiny4412开发板根文件系统

      1.Ubuntu14.04上搭建NFS服务 1.1.安装NFS服务 $ sudo apt-get install nfs-kernel-server    //安装NFS服务 1.2 创建Tiny ...

  7. debian下为stm32f429i-discovery编译uboot、linux内核和根文件系统

    交叉编译器:arm-uclinuxeabi-2010q1 交叉编译器下载下来后解压,然后将其中bin文件夹路径加入到PATH变量中. 根据<debian下烧写stm32f429I discove ...

  8. linux内核挂载根文件系统时报错”VFS: Cannot open root device "ram0" or unknown-block(0,0): error -6“如何处理?

    1. 通过error -6得到: #define ENXIO            6      /* No such device or address */ 2. 解决办法 使能CONFIG_BL ...

  9. 使用qemu模拟调试内核和debian根文件系统

      开发环境:Ubuntu 14.04.3 LTS  64bit sudo debootstrap jessie /mnt/jessie http://mirrors.163.com/debian 在 ...

随机推荐

  1. (转)python装饰器二

    Python装饰器进阶之二 保存被装饰方法的元数据 什么是方法的元数据 举个栗子 def hello(): print('Hello, World.') print(dir(hello)) 结果如下: ...

  2. 228. 汇总区间(leetcode)

    #整体思路:使用堆栈,在Python中可以使用列表代替:如果a[i]-a[i-1]==1,就要将a[i]合并到之前的区间里,#所以我们队首位元素开辟一个区间为[a[0],a[0]]#做最后汇总时候,如 ...

  3. Hadoop部署启动异常问题排查

    hadoop的日志目录(/home/hadoop/app/hadoop-2.6.4/logs) 1.hadoop启动不正常用浏览器访问namenode的50070端口,不正常,需要诊断问题出在哪里: ...

  4. Java中对象、对象引用、堆、栈、值传递以及引用传递的详解

    Java中对象.对象引用.堆.栈.值传递以及引用传递的详解 1.对象和对象引用的差别: (1).对象: 万物皆对象.对象是类的实例. 在Java中new是用来在堆上创建对象用的. 一个对象能够被多个引 ...

  5. GraphMatrix::BFS广度优先搜索

    查找某一结点的邻居: virtual int firstNbr(int i) { return nextNbr(i, n); } //首个邻接顶点 virtual int nextNbr(int i, ...

  6. 处理中文空格.replace((char)12288,' ')

    trim()只能替换英文空格.replace((char)12288,' ')是替换中文

  7. 点击出现黑色背景的解决:-webkit-tap-highlight-color:rgba(0,0,0,0)

    在手机上(iphone)点击按钮的时候,屏幕总会闪动一下,这让页面看起来很不友好也不流畅.解决方案加了一句css就解决了: -webkit-tap-highlight-color:rgba(0,0,0 ...

  8. EMMC电路设计

    优秀文档: eMMC基础技术1:MMC简介 eMMC基础技术2:eMMC概述 一:供电电源时序 EMMC的供电有两种模式,且分两路工作,有VCC和VccQ.在规范上,上电时序是有要求的,如下图所示. ...

  9. Codeforces 223C Partial Sums 数论+组合数学

    题意非常easy,求不是那么好求的,k非常大 要操作非常多次,所以不可能直接来的.印象中解决操作比較多无非线段树 循环节 矩阵 组合数等等吧,这道题目 也就仅仅能多画画什么 的了 就以第一个案例为主吧 ...

  10. 平滑处理 - cvSmooth() 函数实现

    前言 平滑是图像处理中很重要的操作,其主要用途是降噪.Open CV 提供了 5 种不同的平滑方法:简单模糊,简单无缩放变换的模糊,中值模糊,高斯模糊和双边滤波,它们都通过函数 cvSmooth 实现 ...