系统移植-(二)bootloader(u-boot) 简介,U-boot选择及常用命令,u-boot 部署/移植前的准备工作:ping/tftp测试

bootloader/u-boot 简介

(1)bootloader概念
boot:引导
loader:加载

  • bootloader:用来启动引导和加载内核,即引导启动内核,然后给内核传递参数。
    即在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射,从而将系统的软硬件环境带到一个合适的状态,为最终调用操作系统内核搭建好环境。
    在这里插入图片描述
    bootloader属于内核引导程序的统称。包括:u-boot、BIOS(PC)、redboot等等种类。
    在嵌入式开发中使用最广泛的bootloader是u-boot。u-boot是一个通用的引导程序,而且同时支持X86、ARM和PowerPC(军工产品使用的架构)等多种处理器架构。

(2)u-boot简介
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目,是由德国DENX小组开发的用于多种嵌入式CPU的开源的bootloader程序。
u-boot具有以下特点:

  • u-boot是一个开源的软件,源码短小精悍,拥有较高的可靠性和稳定性;
  • u-boot支持多种嵌入式操作系统的内核:Linux、VxWorks、ARTOS, LynxOS等.
  • u-boot支持多种架构的平台 :ARM、PowerPC、x86、MIPS等.
  • u-boot就是一个裸机代码,用于引导加载内核,启动内核,并给内核传递参数,启动完内核后u-boot的生命周期结束。
  • u-boot用于完成部分硬件的初始化 : uart(串口),内存,emmc,网卡等

u-boot 获取和选择

(1)u-boot源码的获取
1、 uboot官网获取
ftp://ftp.denx.de/pub/u-boot/
2、 芯片厂家获取或开发板厂家
3、上级主管 —》推荐
本次移植使用:u-boot-2014.07-netok.tar.bz2

(2)对于uboot版本的选择

  • 不要选择太新的版本:不稳定,资料较少
  • 不要选择太旧的版本:有可能不支持自己的硬件平台
  • 不要选择测试版本u-boot:不稳定;要选择稳定版本的u-boot,后缀有rcx表示测试版本。
  • 选择支持自己硬件平台版本的u-boot

uboot 启动方式

(1) 交互模式(人机交互):倒计时减到0之前,按任意键可以进入到交互模式.
(2) 自启动模式:uboot启动倒计减到0之前不按任意键,uboot默认执行bootcmd环境变量中的命令,一条一条的执行。
bootcmd:自启动时的环境变量;
bootargs:自启动参数;启动linux内核时,uboot会将bootargs里的参数传递给内核。

bootcmd=uboot名令1;uboot命令2;uboot名令3;…

自启动环境变量设置,注意:末尾以'\'结束
	setenv bootcmd uboot名令1\;uboot命令2\;uboot名令3\;.....
	saveenv

	
eg:使用tftp命令下载uboot到内存中,使用update_mmc将其搬移到EMMC(flash)中:
setenv bootcmd tftp 0x41000000 ubootpak.bin\;update_mmc 2 2ndboot 0x41000000 0x200 0x78000

u-boot 常用命令

help命令

  • help :查看当前uboot支持的所有命令
    注:uboot中,命令就是一个字符串,uboot收到字符串之后,会解析字符串,完成对应的功能。
  • help + 命令:查看指定命令的帮助手册

常用命令有以下这些:

  1. loadb
    loadb 0x43c00000
    使用kermit协议,下载二进制文件到内存的指定地址处
		flash           		     memery
		掉电不丢失       		  	 掉电丢失
		速度慢			 			 速度快
		价格便宜		 				 价格贵
		flash访问通过块访问     		 内存以字节为单位进行访问
		每块大小为512字节
  1. go
    go 0x43c00000(内存地址)
    跳转到内存指定的地址处运行程序

  2. printenv
    打印uboot的环境变量到终端;
    uboot对命令进行匹配是部分匹配:pri/print/printenv都可以使用。

  3. setenv
    设置环境变量
    注意:设置完环境变量之后,环境变量存在于内存中,重新上电数据会丢失

		(1)给uboot添加环境变量
			setenv     环境变量名  环境变量对应的值
			setenv ipaddr 192.168.0.250
			注:等号会自动添加
			
		(2)删除环境变量
			setenv  要删除的环境变量名
			eg:setenv ipaddr
			
		(3)修改环境变量
			setenv 旧的环境变量名  新的环境变量值
			eg:setenv ipaddr iPaddress
  1. saveenv
    保存环境变量到flash中
    一般操作步骤:
    printenv -> setenv -> saveenv
    打印环境变量信息 设置环境变量到内存 保存环境变量到flash

  2. bootm (启动内核时,引导linux内核启动)
    bootm 内核的运行地址/ 根文件系统的运行地址/ 设备树的运行地址 /

  3. ping命令
    ping ip地址
    ping作用:用于检查开发板和电脑是否正常通信。

  4. tftpboot
    使用tftp服务,将可执行程序通过网线下载到内存中
    tftpboot/tftp 内存地址 要下载的可执行文件
    注意:可执行文件必须存放在tftp服务配置是指定的目录下:/home/linux/tftpboot

  5. u-boot 环境变量

baudrate=115200   		:波特率
bootdelay=3		 		:uboot启动后倒计时时间
gatewayip=192.168.1.1   :网关
ipaddr=192.168.1.250    :开发板的ip地址(ARM开发板)
netmask=255.255.255.0   :子网掩码
serverip=192.168.1.222  :服务器的ip地址(自己PC的IP地址:一般指虚拟机Ubuntu/ifconfig)

u-boot 部署/移植前的准备工作

测试ping命令

(1)设置虚拟机的 IP地址

  • 修改电脑的网卡由自动切换到百兆全双工
  • 修改ubuntu的ip地址:sudo ifconfig eth0 192.168.1.160
    在这里插入图片描述
    在这里插入图片描述
    (2)设置开发板的IP地址
setenv serverip  192.168.1.160
setenv ipaddr    192.168.1.200
setenv gatewayip 192.168.1.1
setenv netmask   255.255.255.0
	
saveenv 

(3)测试开发板是否能ping通Ubuntu的连接

在超级终端上执行以下命令:		
	
		FS6818# ping 192.168.1.160
		(1)ping失败,打印以下信息:
		dwmac.c0060000 Waiting for PHY auto negotiation to complete......... TIMEOUT !
		Waiting for PHY realtime link...... TIMEOUT !
		done
		dwmac.c0060000: No link.
		ping failed; host 192.168.1.222 is not alive
		
		(2)ping成功,打印以下信息:
		Speed: 100, full duplex
		Using dwmac.c0060000 device
		host 192.168.1.222 is alive

ping失败原因总结:
1)windows的防火墙可能没关
2)检查开发板和电脑之间的网线
3)重启tftp服务
4)检查tftp服务的环境配置是否正确

测试tftp命令

拷贝可执行文件到tftpboot目录下

在超级终端上执行以下命令:
		
		FS6818# tftp 0x43c00000 interface.bin 
		
		如果成功,打印以下内容表:
		Speed: 100, full duplex
		Using dwmac.c0060000 device
		TFTP from server 192.168.1.222; our IP address is 192.168.1.250
		Filename 'interface.bin'.
		Load address: 0x43c00000
		Loading: #
				 708 KiB/s
		done
		Bytes transferred = 8700 (21fc hex)
		
		FS6818# go 0x43c00000   # 运行代码

tftp失败原因总结:
1)包含上边ping失败的原因
2)检查uboot的环境变量设置是否正确
serverip ipaddr gatewayip netmask
3)检查ubuntu的网络设置
4)切记,开发板和ubuntu的ip地址在同一个网段。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值