第四季-专题2-U-Boot新手入门

南楼画角 提交于 2019-11-29 04:19:48

专题2-U-Boot新手入门

对于u-boot的使用主要分为两个方面,一个方面是u-boot的使用,另一个是它的开发。

2.1 编译u-boot

嵌入式的层次:bootloader(u-boot),linux内核,根文件系统。

1. 配置U-Boot

TQ210:    make TQ210_config

Smart210:   make smart210_config

OK210:     make forlinx_linux_config

OK6410:    make forlinx_nand_ram256_config

Tiny6410:   make tiny6410_config

TQ2440:   make TQ2440_config

Mini2440:   make mini2440_config

 

2. 下载与运行

TQ210:    tftp 0xc0008000 uImage

Smart210:  tftp 0x20000000 uImage

OK210:    tftp 0xc0008000 uImage

OK6410:   tftp 0xc0008000 uImage

Tiny6410:  tftp 0xc0008000 uImage

TQ2440:   tftp 0x31000000 uImage

Mini2440:  tftp 0x31000000 uImage

 

2.2  u-boot命令详解

1. 帮助命令

尽管UBOOT提供了丰富的命令集,但不同的开发板所支持的命令却不一样(可配置),help 命令可用于察看当前单板所支持的命令。

# help

autoscr -run script from memory

base -print or set address offset

bdinfo -print Board Info structure

bootm -boot application image from memory

2. 环境变量相关命令

(1)printenv:查看环境变量

#printenv

ipaddr=192.168.0.1

ethaddr=12:34:56:78:9A:BC

serverip=192.168.1.5

(2)setenv 添加、修改、删除环境变量

l  setenv name value ...

- add/modify environment variable 'name' to 'value’ 添加和更改条件变量

l  setenv name

- delete environment variable 'name'             删除条件变量

(3)saveenv 保存环境变量

将当前定义的所有变量及其值存入flash中。(即使在关机重启依然存在)

我们正常更改的条件变量都是在内存中的,只有经过这个语句的更改,更改才会体现在flash中。

3. 文件下载

正常的文件下载有很多种的方式,其中最常用也是最简单的就是tftp下载。tftp 通过网络下载文件。

注意:使用tftp,需要先配置好网络

#setenv ethaddr 12:34:56:78:9A:BC                  开发板的网卡地址,有一个就行

#setenv ipaddr 192.168.0.3                           开发板ip地址

#setenv server ip 192.168.0.2 (tftp服务器的地址)     linux的ip地址

#ping 192.168.0.2(tftp服务器的地址)

范例:

#tftp 0xc0008000 uImage

把tftp服务器上的uImage下载到0xc0008000处。

注:netstat -a |grep tftp  可以查询tftp程序是否已经启动。

不同的开发板下载地址如下:

2440:30008000

6410:50008000

210:20008000

 

4. 执行程序

bootm {addr} {arg}

执行固定格式的2进制程序

范例:

#bootm 0xc0008000

5. 查看内存内容

(1)md 显示内存区的内容。

md采用十六进制和ASCII码两种形式来显示存储单元的内容。

这条命令还可以采用长度标识符 .l, .w和.b 。

mm表示修改

md [.b, .w, .l] address

范例:

md.w 100000

00100000: 2705 1956 5050 4342 6f6f 7420 312e 312e

00100010: 3520 284d 6172 2032 3120 3230 3032 202d

(2)修改内存内容

mm 修改内存,地址自动递增。

mm [.b, .w, .l] address

mm 提供了一种互动修改存储器内容的方法。它会显示地址和当前值,然后提示用户输入。如果你输入了一个合法的十六进制数,这个新的值将会被写入该地址。然后提示下一个地址。如果你没有输入任何值,只是按了一下回车,那么该地址的内容保持不变。

如果想结束输入,则输入空格,然后回车。

=> mm 100000

00100000: 27051956 ? 0

00100004: 50504342 ? AABBCCDD

6. nand flash命令

(1)擦除nand flash

nand erase 起始地址start 长度len

擦除start处开始的,长度为len的区域

范例:

#nand erase 0x400000 0x500000

(2)写/读nand flash

nand write 内存起始地址 flash起始地址 长度len

将内存起始地址处,长度为len的数据,写入flash起始地址处。

范例:

#nand write c0008000 400000 500000

nand read 内存起始地址 flash起始地址 长度len

将flash起始地址处,长度为len的数据,读到内存起始地址处。

范例:

#nand read c0008000 400000 500000

7. 设置自启动

(1)设置从nand flash自动启动

#setenv bootcmd nand read c0008000 400000 500000 \; bootm c0008000

(2)设置自动下载内核到内存后启动

#setenv bootcmd tftp c0008000 uImage \; bootm c0008000

 

l  制作启动SD卡:

在制作SD卡之前我们先准备4G或者8G的一个大的SD卡,再就是一个读卡器。在使用前确保电脑上或者虚拟机上已经安装了对应的驱动,若是没有安装,请自行安装。

将SD卡连接到电脑,先将它格式化,之后通过虚拟机断开它与windows的连接,连接到虚拟机上。我们在终端中输入,fdisk -l命令,会显示下面的内容:

 

根据SD卡的实际大小(我们用的是4G的),我们可以知道它对应的文件夹是/dev/sdb。

我们输入命令dd iflag=dsync oflag=dsync if=./uboot/u-boot.bin of=/dev/sdb seek=1回车运行,将文件烧写到SD卡中,显示如下:

 

iflag=dsync,读取文件时,采用同步方式

oflag=dsync,写入文件时,采用同步方式

if =xx.bin,要复制的文件名

of=/dev/sdb,文件被复制到的设备,/dev/sdb表示sd卡,当我们把内存卡插到电脑上的时候,会出现对应的一个文件,这个文件一般就是dev/sdb

seek=1,sd卡的第一个扇区

 

l  安装bootloader:

嵌入式的层次:bootloader(u-boot),linux内核,根文件系统。

对于BootLoader,我们常用的就是u-boot。我们现在按步骤安装u-boot,先将u-boot的压缩包通过samba服务器传到linux系统中,我们把它放在目录/root/home/part1中,通过命令:tar xvzf uboot.tar.gz对文件进行解压。通过cd uboot进入uboot目录。

下面我们进行的工作就是uboot的编译,它的编译有两个环节,第一个环节就是进行配置。为什么要进行配置呢?因为我们用的这个文件它是可能使用于很多的开发板的,可能成百上千,但是我们编译出来的映像只能运行在一个开发板,所以我们需要配置这一步。

配置实际上就是通过Makefile中的一个称为目标的信息来配置的,我们输入命令:vim Makefile,进入Makefile文件,输入/TQ210查到我们需要的配置信息,如下:

 

这句话的意思就是我们如果配置的是对应TQ210的开发板的话,就输入命令:make TQ210_config命令。

在配置完成之后,我们进行编译,输入命令:make ARCH=arm CROSS_COMPILE=arm-linux-

进行编译,其中ARCH=arm表示对应的系统,CROSS_COMPILE=arm-linux-表示对应的交叉工具链,可以是arm-linux-gcc货值arm-linux-ld等。

编译完成后,我们会在文件夹下面找到u-boot.bin文件,整个文件夹的样式如下图:

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!