Uboot,通过tftp进行内核镜像的加载及flash写入

本文详细介绍了如何在Ubuntu 14.04 PC上搭建TFTP服务器,并配置君正Halley2开发板的网络,通过TFTP下载内核镜像到内存或写入Flash。步骤包括安装tftpd-hpa,配置共享目录,启动服务,测试连接,设置开发板的IP,网关和服务器IP,下载内核镜像以及加载或写入内核到Flash。

概述

系统环境
pc端:linux : ubuntu14.04
嵌入式端: 君正:halley2开发板
总体思路
pc端搭建tftp服务器——->开发板端uboot网络配置及tftp连接下载镜像到内存——>内核镜像加载或写入flash
具体内容及步骤
1,pc端搭建tftp服务器
(1)tftpd安装

//安装tftpd-hpa
$ sudo apt-get install tftpd-hpa
  • 1
  • 2

(2)tftp服务配置

//打开配置文件
$ sudo vim /etc/default/tftpd-hpa
//在tftpd-hpa文件中修改共享目录,如下内容
#TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_DIRECTORY="/home/sky/test/tftp_test"
  • 1
  • 2
  • 3
  • 4
  • 5

如下图所示:
这里写图片描述
(3)启动tftp服务器

$ sudo service tftpd-hpa restart
  • 1

(4)测试tftp服务器

//安装tftp客户端
$ sudo apt-get install tftp-hpa
//在我们设置的/home/sky/test/tftp_test目录中touch一个文件如1.txt
//然后在其他目录执行如下命令连接tftp服务器并获取1.txt文件,若成功表示搭建服务成功
$ tftp 127.0.0.1
  tftp> get 1.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2,uboot网络配置及镜像下载及加载与写入flash
(1)网络配置
进入uboot命令行界面

//设置ip地址
$ set ipaddr 192.168.10.199
//设置网关地址
$ set gatewayip 192.168.10.1
//设置tftp服务端ip地址(pc端地址)
$ set serverip 192.168.10.197
//保存设置
$ saveenv
//查看当前设置,如下图所示
$ pri
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这里写图片描述
(2)tftp,内核镜像下载

//pc端将内核镜像复制到/home/sky/test/tftp_test目录中,镜像下载到内存0x80800000位置,下载如下图所示
$ tftp 0x80800000 uImage
  • 1
  • 2

这里写图片描述
(3)内核镜像加载或写入flash

//内核镜像加载,(镜像在内存中,掉电消失)
$ bootm 0x80800000
  • 1
  • 2
//镜像写入nor flash (镜像存入nor flash 掉电不消失)
//清除flash中0x40000开始的0x300000个大小的数据
$ sfcnor erase 0x40000 0x300000
//从内存0x80800000位置开始写入0x300000个大小的数据到flash中0x40000位置
$ sfcnor write 0x40000 0x300000 0x80800000
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述

<think>好的,我需要帮助用户了解如何通过U-Boot从EMMC引导VxWorks镜像。首先,我得回顾一下U-Boot的基本操作和EMMC的相关命令。根据用户提供的引用内容,U-Boot支持多种存储设备,比如mmc0是SD卡,mmc1是EMMC。引用[1]提到,distro_bootcmd会执行bootcmd_mmc0和bootcmd_mmc1,分别对应SD卡和EMMC的启动命令。用户需要的是从EMMC启动VxWorks,所以应该关注mmc1的设置。 接下来,我需要确定如何将VxWorks镜像写入EMMC。通常使用mmc write命令来写入数据。引用[3]提到了使用tftp协议下载镜像到DRAM,然后写入存储设备。这里可能需要将镜像加载到内存,再写入EMMC的分区。然后,配置U-Boot的环境变量,确保启动时从EMMC加载镜像。引用[1]中的bootcmd_mmc1设置了devtype为mmc,mmcdev为1,并指定了bootpart和rootfpart。可能需要调整这些参数,或者创建自定义的启动命令,指向VxWorks镜像的位置。 还需要考虑VxWorks的引导参数,比如入口地址、设备树等。U-Boot可能需要传递特定的参数给内核,或者使用bootm、bootvx等命令来启动VxWorks。需要确认U-Boot是否支持VxWorks的引导命令,或者是否需要编译特定的支持。 可能存在的一些问题包括镜像的正确加载地址、分区格式是否正确、环境变量设置是否有误等。需要逐步验证每一步,比如确认镜像是否成功写入EMMC,能否正确读取,以及启动命令是否有效。最后,生成相关问题,帮助用户深入理解,比如如何验证镜像完整性、调试启动失败的方法,以及优化启动流程的可能步骤。</think>### U-Boot通过EMMC引导VxWorks镜像的操作步骤 #### 1. **准备VxWorks镜像** - 确保VxWorks镜像(如`vxWorks.bin`)已编译为U-Boot可识别的格式,例如包含引导头(必要时需适配U-Boot的`bootvx`命令)。 #### 2. **将镜像写入EMMC** - **步骤1:加载镜像到DRAM** 通过TFTP或UMS(USB Mass Storage)将镜像加载到内存地址(如`0x80800000`): ```bash tftp 0x80800000 vxWorks.bin ``` 或通过EMMC直接读取(若镜像已存在于其他介质)[^3]。 - **步骤2:写入EMMC指定分区** 使用`mmc write`命令将镜像写入EMMC的分区(例如分区1): ```bash mmc dev 1 # 切换到EMMC设备(mmc1) mmc write 0x80800000 0x2 0x400 # 从内存0x80800000写入EMMC,起始块0x2,块数0x400 ``` 需根据实际镜像大小调整块数和起始位置[^1][^3]。 #### 3. **配置U-Boot环境变量** - **设置EMMC启动参数** 修改`bootcmd_mmc1`或自定义启动命令,指定镜像位置和加载方式: ```bash setenv bootcmd_vxworks 'mmc dev 1; mmc read 0x80800000 0x2 0x400; bootvx 0x80800000' saveenv ``` 解释: - `mmc dev 1`:选择EMMC设备(mmc1)。 - `mmc read`:从EMMC的块0x2读取0x400个块到内存0x80800000。 - `bootvx`:从指定内存地址启动VxWorks[^1][^2]。 #### 4. **验证启动流程** - 执行自定义启动命令: ```bash run bootcmd_vxworks ``` - 若失败,可通过`md`命令检查内存内容,或调整镜像加载地址和分区参数。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值