一、软硬件平台

1、开发板:创龙AM3359核心板,网口采用RMII形式。

2、UBOOT版本:U-Boot-2016.05,采用FDT和DM。

3、交换芯片MARVELL的88E6321.

二、问题背景

开发板启动过程分三个阶段,即先启动U-Boot,再加载内核和设备树,然后挂载文件系统,这三个过程可以分别以不同方式启动。除了从SD系统启动卡启动开发板,我们可以将U-Boot镜像文件、内核镜像文件、设备树镜像文件以及文件系统固化到开发板的eMMC或者NAND FLASH中,然后从eMMC或者NAND FLASH启动开发板。

这里可以选择从SD卡启动U-Boot,然后通过TFTP加载内核和设备树,再通过NFS挂载文件系统。

将开发板设备树文件和内核镜像文件拷贝到Ubuntu的TFTP服务器工作目录中。

在Ubuntu的NFS共享目录下,新建开发板文件系统存放文件夹rootfs,并将光盘 “Shell\Linux-3.14.43-mksdboot\filesystem”目录下的开发板文件系统压缩包解压到此文件夹,解压命令如下:

Host# sudo tar xvf tisdk-rootfs-image-am437x-evm.tar.gz -C /home/one/nfs_share/rootfs

恢复为默认的环境变量,在命令行下输入:

U-Boot> env default -a

U-Boot> saveenv

n 手动设置开发板IP方式

开发板和 PC 先通过路由器或者交换机互联,也可以通过网线直联。先确保U-Boot环境变量为系统默认,然后在U-Boot命令行中执行如下命令,设置TFTP和NFS服务器IP、NFS服务器上的文件系统路径、开发板IP:

U-Boot> setenv serverip 192.168.1.50

U-Boot> setenv rootpath /home/one/nfs_share/rootfs/

U-Boot> setenv ipaddr 192.168.1.30

执行如下命令设置网络启动环境变量:

U-Boot> setenv netargs 'setenv bootargs console=${console} root=/dev/nfs nfsroot=${serverip}:${rootpath} nfsaddrs=192.168.1.30:192.168.1.50:192.168.1.1:255.255.255.0::eth0:off'

U-Boot> setenv netboot 'echo Booting from network ...; setenv autoload no; tftp ${loadaddr} ${bootfile}; tftp ${fdtaddr} ${fdtfile}; run netargs; bootz ${loadaddr} - ${fdtaddr}'

U-Boot> setenv bootcmd 'run findfdt; run init_console; run netboot;'

U-Boot> saveenv

环境变量console、nfsroot、nfsaddr会传递到内核,nfsaddrs=开发板IP:NFS服务器IP:网关:子网掩码,环境变量serverip、ipaddr仅用于U-Boot阶段,因此需要在nfsaddrs中再次设置开发板IP和NFS服务器IP。“eth0:off”代表开发板不自动获取IP。

TFTP启动内核、设备树,NFS启动FS的更多相关文章

  1. 使用Uboot启动内核并挂载NFS根文件系统

    配置编译好内核之后,将生成的内核文件uImage拷贝到/tftpboot/下,通过tftp服务器将内核下载到开发板,使用命令:tftp 31000000 uImage.下载完成之后配置bootargs ...

  2. 关于启动ubuntu中的nfs启动问题

    嵌入式开发,如果使用nfs挂载来启动内核和文件系统,这样便于调试文件系统和驱动,则首先要保证ubuntu开启nfs服务, 执行以下命令安装nfs服务,安装后自动运行 sudo apt-get inst ...

  3. Linux内核 设备树操作常用API【转】

    转自:https://www.linuxidc.com/Linux/2017-02/140818.htm 一文中介绍了设备树的语法,这里主要介绍内核中提供的操作设备树的API,这些API通常都在&qu ...

  4. Linux内核 设备树操作常用API

    Linux设备树语法详解一文中介绍了设备树的语法,这里主要介绍内核中提供的操作设备树的API,这些API通常都在"include/of.h"中声明. device_node 内核中 ...

  5. uboot如何启动内核

    2.7.1.uboot和内核到底是什么 2.7.1.1.uboot是一个裸机程序 (1)uboot的本质就是一个复杂点的裸机程序.和我们在ARM裸机全集中学习的每一个裸机程序并没有本质区别. 2.7. ...

  6. OK6410之tftp下载内核,nfs…

    原文地址:OK6410之tftp下载内核,nfs挂载文件系统全过程详解[转]作者:千山我独行 由于工作的平台也是嵌入式,差不多的平台,所以一直就没有把自己买过来的ok6410板子好好玩玩.以前一直都是 ...

  7. U-boot 启动内核

    1:什么是UBOOT,为什么要有UBOOT? UBOOT的主要作用是用来启动linux内核,因为CPU不能直接从块设备中执行代码,需要把块设备中的程序复制到内存中,而复制之前还需要进行很多初始化工作, ...

  8. 转载]OK6410之tftp下载内核,nfs挂载文件系统全过程详解[转]

    原文地址:OK6410之tftp下载内核,nfs挂载文件系统全过程详解[转]作者:千山我独行 由于工作的平台也是嵌入式,差不多的平台,所以一直就没有把自己买过来的ok6410板子好好玩玩.以前一直都是 ...

  9. 【转】UBOOT——启动内核

    转自:https://www.cnblogs.com/biaohc/p/6403863.html 1:什么是UBOOT,为什么要有UBOOT? UBOOT的主要作用是用来启动linux内核,因为CPU ...

  10. 把Linux目录挂载到开发板、设置开发板从NFS启动、取消开发板从NFS启动

    声明:文中"PC虚拟机Linux"是指在PC上安装了虚拟机,然后在虚拟机中装的Linux. 关于NFS的详细介绍可参考:http://www.cnblogs.com/nufangr ...

随机推荐

  1. RFC2119 规范内容

    RFC2119 https://www.ietf.org/rfc/rfc2119.txt Network Working Group S. Bradner Request for Comments: ...

  2. Java程序执行cmd命令

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...

  3. pytorch visdom可视化工具学习—3-命令行操作使用经验

    在使用过程中一直以为要在哪个指定的environment下(即参数env)绘制内容,就必须在使用时声明 比如如果不声明,默认的就是在'main'环境下,端口为8097: viz = visdom.Vi ...

  4. [LeetCode] 200. Number of Islands 岛屿的数量

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  5. 【Tools】HP/惠普v285w 量产工具

    前段时间朋友说自己u盘坏了,让帮忙看看.看下图是这个u盘. 坏的问题:往里面复制东西,提示:请去掉写保护或使用另一张磁盘.但是能正常从里面读取出来数据. 无论更换电脑,还是使用网上的修改注册表等方式皆 ...

  6. 2017ACM/ICPC广西邀请赛 1007 Duizi and Shunzi

    Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. appium通过index查找目标控件

    2.1 通过判断控件属性获取控件 控件的所有属性都可以用作判断,比如它的text,index,resource-id是否clickable等,例如: 2.1.1 通过文本查找目标控件 1 2 el = ...

  8. LeetCode 503. 下一个更大元素 II(Next Greater Element II)

    503. 下一个更大元素 II 503. Next Greater Element II 题目描述 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 ...

  9. 21 javaweb开发--bug调试技巧

    1.当修改代码后,测试时没有任何效果 解决方案:换个浏览器试试,可能是浏览器缓存的原因.

  10. MySQL必知必会2

    使用数据处理函数 函数 与其他大多数计算机语言一样,SQL支持利用函数来处理数据.函数一般是在数据上执行的,他给数据的转换和处理提供了方便,在前一章中用来去掉尾空格的RTrim()就是一个函数的例子 ...