uboot 引导程序的运行

uboot 引导程序的运行,第1张

uboot可以再很多种cpu架构上运行,同时也支持很多开发板,但是每种cpu架构之间有差别,或者开发板的资源不同,假如在某款开发板上能正常引导启动 *** 作系统的话,并不意味着在其他款就能引导启动,建立一款统一的bootloader几乎是不可能的,但是经过大师们的努力,能够实现通过简单的配置改动,就可以实现引导启动很多 *** 作系统(也就是bootloader移植)(uboot是bootloader中的一种,因为其源码是公开的,广受欢迎)

-Boot环境变量的解释说明

环 境 变 量

解 释 说 明

bootdelay

定义执行自动启动的等候秒数

baudrate

定义串口控制台的波特率

netmask

定义以太网接口的掩码

ethaddr

定义以太网接口的MAC地址

bootfile

定义缺省的下载文件

bootargs

定义传递给Linux内核的命令行参数

bootcmd

定义自动启动时执行的几条命令

serverip

定义tftp服务器端的IP地址

ipaddr

定义本地的IP地址

stdin

定义标准输入设备,一般是串口

stdout

定义标准输出设备,一般是串口

stderr

定义标准出错信息输出设备,一般是串口

参考U-boot,其环境变量设置如下:

Uboot> printenv

bootdelay=3

baudrate=115200

ethaddr=00:12:34:56:78:9a

ipaddr=19216809 ①

serverip=19216801 ②

netmask=2552552550

rootpath=/home/zht/rfsys ③

stdin=serial

stdout=serial

stderr=serial

bootcmd=tftp 21000000 uImage;bootm 21000000 ④

bootargs=root=/dev/nfs rw nfsroot=19216801:/home/zht/rfsys nfsaddrs=192168048: 19216801:19216801:2552552550 console=ttyS0,115200 mem=32M ⑤

① 设置目标板IP地址

② 设置服务器IP地址

③ 设置根文件系统在服务器上的路径,注意该路径一定要设定为服务器上的nfs目录。

④ bootcmd是u-boot启动后执行的命令,命令之间用分号分隔。

tftp 21000000 uImage 表示通过tftp 将内核映像下载到RAM中地址为0x21000000;

bootm 21000000 启动linux *** 作系统

⑤ 定义u-boot传送给linux内核的命令行参数,该命令行指定以网络文件系统作为根文件系统。

其中root=/dev/nfs,并非真的设备,而是一个告诉内核经由网络取得根文件系统的旗标。

参数nfsroot这个参数告诉内核以那一台机器,那个目录以及那个网络文件系统选项作为根文件系统使用。参数的格式如下:

nfsroot=[:][,]

如果指令列上没有给定 nfsroot 参数,则将使用‘/tftpboot/%s’预设值。其它选项如下:

--指定网络文件系统服务端的互联网地址(IP address)。如果没有给定此栏位,则使用由 nfsaddrs 变量(见下面)所决定的值。此参数的用途之一是允许使用不同机器作为反向地址解析协议(RARP) 及网络文件系统服务端。通常你可以不管它(设为空白)。

-- 服务端上要作为根挂入的目录名称。如果字串中有个‘%s’ 符记(token),此符记将代换为客户端互联网地址之 ASCII 表示法。

-- 标准的网络文件系统选项。所有选项都以逗号分开。如果没有给定此选项栏位则使用下列的预设值:

port = as given by server portmap daemon

rsize = 1024

wsize = 1024

timeo = 7

retrans = 3

acregmin = 3

acregmax = 60

acdirmin = 30

acdirmax = 60

flags = hard, nointr, noposix, cto, ac

参数nfsaddrs设定网络通讯所需的各种网络接口地址。如果没有给定这个参数,则内核核会试著使用反向地址解析协议以及/或是启动协议(BOOTP)以找出这些参数。其格式如下:

nfsaddrs=::::::

-- 客户端的互联网地址。如果没设,此地址将由反向地址解析协议或启动协议来决定。使用何种协议端视配置核心时打开的选项以及 参数而定。如果设定此参数,就不会使用反向地址解析协议或启动协议。

-- 网络文件系统服务端之互联网地址。如果使用反向地址解析协议来决定客户端地址并且设定此参数,则只接受从指定之服务端传来的回应。要使用不同的机器作为反向地址解析与网络文件系统服务端的话,在此指定你的反向地址解析协议服务端(保持空白)并在 nfsroot 参数(见上述)中指定你的网络文件系统服务端。如果此项目空白则使用回答反向地址解析协议或启动协议之服务端的地址。

-- 网关(gateway)之互联网地址,若服务端位於不同的子网络上时。如果此项目空白则不使用任何网关并假设服务端在本地的(local)网络上,除非由启动协议接收到值。

-- 本地网络界面的网络掩码。如果为空白,则网络掩码由客户端的互联网地址导出,除非由启动协议接收到值。

-- 客户端的名称。如果空白,则使用客户端互联网地址之 ASCII-标记法,或由启动协议接收的值。

-- 要使用的网络设备名称。如果为空白,所有设备都会用来发出反向地址解析请求,启动协议请求由最先找到的设备发出。网络文件系统使用接收到反向地址解析协议或启动协议回应的设备。如果你只有一个设备那你可以不管它。

-- 用以作为自动配置的方法。如果是 `rarp' 或是 `bootp' 则使用所指示的协议。如果此值为 `both' 或空白,若配置核心时有打开这两种协议则都使用。 `none' 表示不使用自动配置。这种情况下你必须指定前述栏位中所有必要的值。

此 参数可以作为 nfsaddrs 的参数单独使用(前面没有任何 `:` 字符),这种情况下会使用自动配置。然而,此种情况不能使用 `none'作为值。

说明:这只是网上的一种说法,但是没有启动起来。因为我的kernel没有cs8900网卡驱动,烧录后可正常启动,但无法挂载NFS,我在想是否可以通过命令行参数设置,来设置uboot给kernel传递的地址参数,这样间接驱动nfs服务。我先前通过vivi这样搞过,也是可行的。

现在可以这样理解就是说,之前的kernel内核已经配置好了各个基本模块的驱动,这样就可以用了

uboot有个protect 命令,用于设置flash存储器的特定区域为只读模式,或取消只读属性。flash设置为只读模式后,不能被拷贝(cp命令)或者擦除(erase命令)。你的环境变量显然是在保存时就被设置为只读模式,而无法用erase命令擦除。所以你必须顺着如何擦除nand 的protect区域的思路,去查找相应的解决方法。

"具体 *** 作步骤如下:

1用到的东西

网线 一条

USB转TTL线 一条

SecureCRT终端仿真程序

2接驳TTL线

路由器PCB板上的TX、RX、GND分别连接到USBTTL(USB转串口)的TX、RX、GND插针上

拔掉路由器WAN和LAN口所有网线

3电脑预设(笔者用的是XP系统)

将USB转TTL接到电脑上,装好USBTTL驱动,选择正确的COM口

4把电脑的网卡地址改成静态IP地址(笔者设置为1921681100)

5设置SecureCRT COM口的速率为每秒位数57600(笔者这里用的是SecureCRT,)。

设置SecureCRT里(Protocol:Serrial Port:COM9 Baud rate:57600 Data bits:8 Parity:None Stop bits:1)

Flow control选项 DTR/DSR,RTS/CTS,XON/XOFF都不打勾(COM口根据设备管理器中选择相应的数字)。

6点“Connect”完成SecureCRT COM口连接设置,如果连接正确,窗口前会有一个绿色的勾

7可以打开路由的电源,如SecureCRT有显示就表示接驳正确,关上电源。如没有,把RX和TX两根线对调。

把相关的文件(u-boot、eeprom及Openwrt固件),与TFTPD32放在同一文件夹内,运行TFTPD32(什么都不要设置)。

8 开始刷机——刷入u-boot(确保TTL线已经正确接好)

(一)在SecureCRT,打开HG255D电源, 当出现

Please choose the operation:

1: Load system code to SDRAM via TFTP

2: Load system code then write to Flash via TFTP

3: Boot system code via Flash (default)

4: Enter boot command line interface

9: Load Boot Loader code then write to Flash via TFTP

(二)马上按4后出现如下(不能按9,按9更新U-boot 100%变砖头——键盘上的数字键4)

4: System Enter Boot Command Line Interface

U-Boot 113 (Nov 28 2012 - 12:00:15

Main_loop !!

9(三)设置tftp服务的网络地址与上传文件到内存

输入命令

setenv serverip 1921681100

回车

接着输入

tftpboot 0x80100000 tftpd-ubootbin

回车

SecureCRT窗口返回信息如下:

RT3052 #

10等SecureCRT里显示2个Arp Timeout Check插上网线时,把网线插入路由器的LAN口(**的接口),随便哪个口都可以。

注意:如果没有提示成功下载到问题,千万不要继续下面的 *** 作。等完全tftp上传好,出现NetBootFileXferSize= 00023874)后 (00023874为tftpd-ubootbin文件大小的16进制数值,别的U-boot文件的值可能不同)

11(五)解锁flash 保护

输入

protect off all

回车

12(六)擦除U-BOOT

输入

erase 0xBF000000 0xBF03FFFF

回车

13写入U-BOOT

输入

cpb 0x80100000 0xBF000000 0x40000

回车

14备份EEPROM

cpb 0xBFFA0000 0x80100000 0x20000

md 0x80100000

erase 0xBF060000 0xBF07ffff

cpb 0x80100000 0xBF060000 0x20000

md 0xBF060000

15刷完系统会自行重启,如果没有重启请按Ctrl+C来重启机器,如果再不行就直接关路由器电源。

16到这里u-boot刷完成,关闭tftpd32exe

这里笔者刷的是tftpd版的uboot,这种方法还可以刷电信原版的uboot和>

首先你要明白代码要执行必须先放到内存中,而bin文件中的各个函数和变量的存放位置关系是与链接脚本文件和编译器决定的,程序运行时必须位于它的链接地址处,汇编文件中的各个标号或者c文件中的各个函数名(函数的入口地址)对应的链接地址就是由链接脚本中的起始链接地址和各个目标文件(s或c文件编译但还为链接的文件)的排放顺序有关。这些链接地址可以通过查看可执行文件的反汇编文件即xxxdis文件来获得

重地位就是将uboot的bin文件复制到内存中它对应的链接地址处,而这个链接地址就是链接脚本xxlds中的起始链接地址,这样在使用全局跳转指令(ARM中的ldr xxx指令)或中C语言中的函数调用时,pc寄存器才能被赋予正确的值,即才能到内存中

正确的位置处取出代码并执行。

以上就是关于uboot 引导程序的运行全部的内容,包括:uboot 引导程序的运行、uboot中ethaddr怎么确定、uboot里怎么对spi flash特定地址进的数据行读取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9651500.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存