03UBOOT编译使用及修改实验.docx

上传人:b****1 文档编号:20103627 上传时间:2023-04-25 格式:DOCX 页数:28 大小:1.32MB
下载 相关 举报
03UBOOT编译使用及修改实验.docx_第1页
第1页 / 共28页
03UBOOT编译使用及修改实验.docx_第2页
第2页 / 共28页
03UBOOT编译使用及修改实验.docx_第3页
第3页 / 共28页
03UBOOT编译使用及修改实验.docx_第4页
第4页 / 共28页
03UBOOT编译使用及修改实验.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

03UBOOT编译使用及修改实验.docx

《03UBOOT编译使用及修改实验.docx》由会员分享,可在线阅读,更多相关《03UBOOT编译使用及修改实验.docx(28页珍藏版)》请在冰豆网上搜索。

03UBOOT编译使用及修改实验.docx

03UBOOT编译使用及修改实验

班级:

软件工程姓名:

学号:

成绩:

实验名称:

UBOOT编译使用及修改

1.实验目的:

了解UBOOT的基本功能、掌握UBOOT在不同开发板上的编译配置方法,掌握UBOOT常用命令的使用方法,使用这些命令配置正确参数启动系统,并通过添加自己的命令了解UBOOT的基本源码结构。

2.实验内容:

编译环境搭建

UBOOT配置编译

UBOOT烧写

UBOOT命令使用

UBOOT烧写内核与根文件系统

UBOOT自定义命令添加

3.实验方法:

编译UBOOT烧写到OK6410开发板上执行,通过串口执行各UBOOT常用命令,通过USB口下载内核和根文件系统,修改UBOOT源码添加自定义命令并执行。

4.实验过程

(一)编译环境搭建

1)使用mkdir命令建立个人实验文件夹保存实验资料

#mkdirxxxxx(xxxxx为你的名字全拼)

实验资料有:

⏹Uboot源码包:

uboot1.1.6-2012-09-25.tar.gz

⏹交叉编译器:

arm-linux-gcc-4.3.2.tgz

2)安装交叉编译器

进入实验文件夹在终端命令行中输入下面的命令安装交叉编译器:

#tarxvzfarm-linux-gcc-4.3.2.tgz-C/编译器解压到/usr/local/arm

3)修改环境变量

把交叉编译器路径添加到系统PATH环境变量中,这样以后就可以直接在终端窗口中输入arm-linx-gcc命令来编译程序。

用文本编辑器打开/etc/profile添加以下四行到该文件中:

exportPATH=/usr/local/arm/4.3.2/bin/:

$PATH

exportTOOLCHAIN=/usr/local/arm/4.3.2

exportTB_CC_PREFIX=arm-linux

exportPKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi

4)测试编译器

重新启动系统,在终端里面执行arm-linux-gcc-v回车,若有输出编译器的版本信息说明交叉编译器已工作正常;若提示找不到命令,说明环境变量修改有误,请仔细检查修正。

若报其他错,请查看错误提示,依据出错信息进行修改。

(二)UBOOT配置编译

1)进入实验文件夹,解压UBOOT源码包

#tarxvzfuboot1.1.6-2012-09-25.tar.gz

查看UBOOT源码目录,熟悉每个目录的文件组织和功能作用。

略读README文件内容,对UBOOT项目熟悉了解

2)为自己的开发板配置编译项

UBOOT支持的开发板很多,每块开发板都有自己不同参数,利用UBOOT已支持的开发板来为自己的板子配置合适的编译项是编译UBOOT的第一步,配置项参数详细含义请阅读UBOOT的README文档以及各编译脚本源码,此处不做深度解析说明。

OK6410开发板是根据三星SMDK6410开发板改造而来的,所以可以以SMDK6410板为基础来编译,具体方法如下:

用文本编辑器在Makefile中开发板对应的编译项1778行:

xxxxx_ok6410_config:

unconfig

@$(MKCONFIG)smdk6410arms3c64xxsmdk6410samsungs3c6410NANDram256

(其中xxxxx替换为你自己的名字全拼)

cdu-boot

geditMakefile

用文本编辑器在Makefile中开发板对应的编译项1950行:

mini6410_nand_config-ram256:

unconfig

@$(MKCONFIG)mini6410arms3c64xxmini6410samsungs3c6410NANDram256

改为如下:

xxxxx_nand_config-ram256:

unconfig

@$(MKCONFIG)mini6410arms3c64xxmini6410samsungs3c6410NANDram256

(其中xxxxx替换为你自己的名字全拼)

3)添加个人标识

这一步并不是编译UBOOT需要的,只是为了跟官方编译出的uboot有所区别,我们修改一点点UBOOT的源代码,让它的输出有我们个人的标记。

用文本编辑器打开common/main.c文件,将445行的打印输出改成包含自己名字的标记:

tony_nand_config-ram256:

unconfig///////

打开main.c命令如下:

geditcommon/main.c

例如改成:

printf("######################QSTUBOOTMENU#####################\n");

geditcommon/main.c

第1414行

#defineRELEASE_MARK"2011-10"

修改为

#defineRELEASE_MARK"2018-03"

用文本编辑器打开common/main.c文件,将1444行的打印输出改成包含自己名字的标记:

打开main.c命令如下:

geditcommon/main.c

原文如下:

printf("#####FriendlyARMU-Boot("RELEASE_MARK","BOOT_MEDIA")for6410#####\n");

修改为如下内容

printf("#####xxxxxxU-Boot("RELEASE_MARK","BOOT_MEDIA")for6410#####\n");

 

此处请在字串中包含自己的名字(全拼),后面截图保存结果。

4)用上一步添加的编译项来编译UBOOT

进入UBOOT源码目录,执行下以编译命令

#makexxxxx_ok6410_config(xxxxx为你的名字全拼)

#make

配置命令

makexxxxx_nand_config-ram256

编译

make

 

编译完成后会得到u-boot.bin

注:

UBOOT编译的配置方法随着版本的升级形式有所不同,但原理相同,都是为自己的开发板配置恰当的体系结构、CPU芯片型号、内存大小、FLASH类型等各硬件参数等,重点是要理解UBOOT对众多不同开发板的支持配置方式,请浏览分析UBOOT的Makefile文件。

(三)UBOOT烧写

UBOOT烧写的方式有很多种,无论使用哪种方式,都是利用工具把编译好的uboot.bin文件烧写到NANDFLASH最开头的位置上。

OK6410官方使用的是SD卡烧写的方式,这里我们也采用这种方式。

1)制作烧写UBOOT用的SD卡

步骤1:

将SD卡格式化为FAT32格式

将SD卡接入SD读卡器中,把SD读卡器插在PC机的USB口中。

等到PC机能够正常识别出SD卡,把SD卡格式化为FAT32格式。

步骤2.通过SD_Writer.exe将mmc.bin烧写到SD卡中。

打开SD_Writer.exe,下图是xp系统中SD_Writer.exe界面截图

注意:

BoardModel选择6410。

OSType选择Linux||Android选项。

下图是WIN7系统中SD_Writer.exe界面截图。

注意Window7系统上运行烧写软件时需要以管理员身份运行,如图:

 

步骤3.点击”Scan”,这个步骤是自动搜寻SD卡所在盘符。

如果"Scan"没有正确设置SD卡所在盘符,就需要手动调整SDVolume,把盘

符号调整为SD卡所在盘符(比如说,PC的USB口接了两个或者两个以上的U盘或者SD卡,就有可能错误到扫描SD卡盘符)。

步骤4.将”SDType”更改为auto。

这个步骤是为了让SD_Writer自动识别SD卡类型。

如果你的PC系统是WIN7,您还需要点击”Format”来格式化SD卡。

XP用户看不到”Formart”,也不需要”Format”。

这一点,是XP和WIN7用户操作中唯一的区别。

步骤5.将”OSType”更改为Linux。

这个步骤是选择要烧写的系统类型。

步骤6.点击”SelectBoot”,选择实验资料中的mmc.bin

步骤7.点击”Program”,出现”It’sOK”表示操作成功。

成功后如下图。

步骤8.点击”确定”,然后点击”Quite”。

退出SD_Writer.exe。

步骤9.将自己在“UBOOT配置编译”环节编译出来的u-boot.bin拷贝到SD卡中。

至此用来烧写UBOOT的SD卡已制作好,接下来进行具体烧写。

2)烧写UBOOT到开发板的NandFlash中

步骤1.将制作好的SD卡插入开发板SD的插槽。

如图:

步骤2.接好5V直流电源(飞凌提供此电源,请使用飞凌提供的电源)。

开发板电源连接如图:

步骤3.拨码开关设置为SD卡启动。

拨码开关设置SD卡启动如图所示:

步骤4.将飞凌提供的串口延长线连接开发板的COM0和PC机的串口

步骤5.打开飞凌提供的DNW软件,设置好DNW的串口(附录:

dnw软件的使用简便教程)

步骤6.拨动电源开关,给开发板上电。

会出现如下的串口信息,因为信息较多,贴出结束时图片

注意:

烧写完成后会有找不到zImage的信息,这是因为飞凌开发板的烧写会自动把uBoot和zImage还有rootfs三个一起烧写,我们这里只烧写uboot,找不到zImage是正常的,zImage和rootfs我们后面用其他的方法烧写。

步骤7.拨动电源开关,开发板断电,将拨码开关设置为nandflash启动。

设置

拨码开关设置NandFlash启动如图所示:

步骤8.重新开启电源,启动同时在DNW串口界面上按空格键,使UBOOT命令行界面,此时显示是包含有你名字的菜单,这说明这时系统里运行的是我们自己编译的UBOOT,如图:

更详细的烧写内容请参考《OK6410-A开发板LINUX3.0.1-2013-01用户手册》

(四)UBOOT命令使用

UBOOT运行有两种模式,一种是加载系统模式,一种是命令行模式,开发板上电时马上按空格键则UBOOT进入命令行模式,如果没有按空格UBOOT则执行加载操作系统的模式。

当前我们要进入命令行模式,所以请执行以下步骤:

步骤1:

先用串口线连接好开发板COM0与PC机的串口,打开并设置DNW软件(附录:

dnw软件的使用简便教程)。

步骤2.然后给开发板上电,等到出现延时1秒启动系统时,在DNW软件中按PC键盘的空格键使开发板停留在uboot状态。

因为停留时间只有1秒,所以需要很快的按下空格键。

步骤3.进入uboot命令行界面

按空格键进入的菜单界面是飞凌开发板为了方便用户添加的菜单,原始的UBOOT并没有这个菜单,要进入UBOOT原始的菜单命令行,请按菜单选择[6]即可。

在命令行模式中可以执行UBOOT的命令,利用这些命令可以完成许多功能,比如内核下载、FLASH烧写擦除、系统加载等。

请在UBOOT命令行中依次学习使用以下命令:

1)help

help:

打印帮助信息

如果不带任何参数将打印当前支持的所有命令,如果将某一命令名字作为其参数,将得到该命令的更加详细的信息。

如:

SMDK2410#help

SMDK2410#helpflinfo

2)nandinfo

显示flash的信息:

#nandinfo

显示NAND32MiB3,3V8-bit,sectorsize16KiB

3)nandread

nandread命令用来从NandFlash芯片上读取数据到内存

格式为:

nandreadaddroffsize

addr都是ram的地址,off指的是nandflash的地址,size:

指要读取nandflash的数据大小,

例如:

#nandread0xc00080000x2000000x500000

#NANDread:

device0offset0x200000,size0x500000

5242880bytesread:

OK

4)nanderase[clean][offsize]

nanderase用来擦处nandflash芯片的相应区域

nanderase[offsize]off指从什么位置开发擦除,size指要擦处的空间大小

例如:

#nanderase0x2000000x500000

NANDerase:

device0offset0x200000,size0x500000

Erasingat0x200000--10

Erasingat0x300000--30

Erasingat0x400000--50

Erasingat0x480000--60

Erasingat0x500000--70at0x580000--80plete.

Erasingat0x600000--90plete.

Erasingat0x680000--100

5)nandwrite-addroffsize

nandwrite用来将内存的数据写进nandflash芯片,这个命令在烧写内核和根文件系统时很有用。

这个命令和nandread一样,只是方向是反的,是把ram的值写到nandflash中,但是在使用nandwirte之前必须将要写的flash区域先用nanderase擦除。

格式:

nandwriteaddroffsize

例如:

#nandwrite0xc00080000x2000000x500000

NANDwrite:

device0offset0x200000,size0x500000

5242880byteswritten:

OK

6)printenv打印环境变量

在UBOOT中有很多参数需要设置,如内核启动参数、UBOOT中的IP地址、内核位置及大小、根文件系统所在位置及大小等,这些参数都是以环境变量的形式保存在FLASH芯片中特殊位置,需要相应的命令来读出显示,

Printenv就是显当前UBOOT中设置的环境变量的命令

格式:

printenv

−printvaluesofallenvironmentvariables

printenvname...

−printvalueofenvironmentvariable'name'

该命令打印一个、几个或者所有的u-boot环境变量。

如下命令将打印所有的环境变量和它们的值,再加上一些统计数据,如:

存储环境变量的大小。

例如:

#printenv

bootargs=root=/dev/mtdblock2rootfstype=yaffs2init=/linuxrcconsole=ttySAC0,115200

bootcmd=nandread0xc00080000x2000000x500000;bootm0xc0008000

bootdelay=1

baudrate=115200

ethaddr=00:

40:

5c:

26:

0a:

5b

ipaddr=192.168.2.111

serverip=192.168.2.100

gatewayip=192.168.2.1

netmask=255.255.255.0

stdin=serial

stdout=serial

stderr=serial

Environmentsize:

331/524284bytes

7)setenv设置环境变量

上面printenv命令打印出的环境变量的值有时候是需要修改的,修改这些值的命令是setenv

格式:

setenvnamevalue

name是修改的环境变量的名字,value是要给变量设置的新值,如果name是当前环境变量没有的,则此新添加这个环境变量。

如果不加value的值,则是删除此环境变量setenvname

示例:

#setenvgatewayip192.168.1.2

#printenvgatewayip

gatewayip=192.168.1.2

 

8)saveenv保存环境变量到非易失性存储介质

使用setenv修改的变量值仅仅在RAM中有效,一旦系统重新启动,这些改变将丢失。

如果想这些改变永久保存,用户必须使用saveenv命令将环境变量的设置保存到非易失性介质中。

格式:

saveenv

示例:

先使用setenv修改gatewayip的值,修改完后重启开发板进入UBOOT命令,查看gatewayip的值有没有修改成功

再使用setenv修改gatewayip的值,改完后执行saveenv命令,执行完再重启开发板入UBOOT命令行,但看gatewayip的值没有修改成功。

UBOOT还有很多功能强大的命令,在此不能一一实验,其他UBOOT常用命令详细列表及使用方法请参考uboot源码中README文件课后深入研究。

(五)UBOOT烧写内核与根文件系统

利用UBOOT的命令可以实现很多有用的功能,下面我们利用UBOOT命令从USB口下载KERNEL和根文件系统,

1)准备好要烧写的内核zImage和根文件系统rootfs.yaffs2

2)先用串口线连接好开发板COM0与PC机的串口,打开并设置DNW软件(附录:

dnw软件的使用简便教程)。

3)使用USB线连接开发板与,mini头一端连接开发板,另一端连接PC主机。

4)然后给开发板上电,等到出现延时1秒启动系统时,在DNW软件中按PC键盘的空格键使开发板停留在uboot状态。

因为停留时间只有1秒,所以需要很快的按下空格键。

5)在菜单选择栏中选择6进入UBOOT命令行界面:

6)敲入dnw0xC0008000命令

此命令的含义是从USB口下载一个文件到内存0xC0008000的位置

7)安装USB下载驱动

如果第一次使用,此时PC机会提示安装USB下载驱动,按以下步骤安装驱动,

特殊说明:

USB下载驱动专用于DNWUSB下载功能。

开发板运行U-boot命令行状态下,下载安装Uboot命令时,方可安装USB下载驱动,其他情况都不可以安装或使用下载功能。

步骤1.第一次使用USB下载文件时,电脑会提示找到新硬件,并弹出“找到硬件向导”窗口。

步骤2.这里我们选择从“列表或指定位置安装”点击下一步

步骤3.选中“在搜索中包括这个位置”,点击浏览按钮指定驱动所在位置;驱动位于用户基础资料光盘的“实用工具\USB驱动\DNW下载驱动”文件夹中。

点击‘下一步’,在弹出的窗口中选择‘oemX.inf’(X的值不定),然后继续点击‘下一步’开始安装驱动程序:

 

步骤4.安装完成后在DNW标题栏上会显示[USB:

0K],DNW窗口中会打印如下图所示信息

注:

如果系统是WIN7操作界面可能不同,但思路相同,都是到指定目录搜索驱动文件。

8)从USB口下载kernel到内存

从DNW的usbport->Transmit->Transmit发送你要生成的内核bin文件,设置好后DNW会自动下载。

9)烧写kernel到NANDFLASH

USB口下载完毕后,此时内核已经存在于内存的0x50008000位置,但重启后无法保存,我们要将内核烧写到NANDFLASH的0x200000的位置,使用以下命令:

在DNW窗口中输入:

nanderase0x2000000x500000擦除nandflash

Erasingat0x200000--10x300000--3080000--40lete.

Erasingat0x480000--6080mplete.

Erasingat0x600000--90te.

OK

在DNW窗口中输入:

nandwrite0x500080000x2000000x500000

将内存地址50008000中的数据写到nandflash的0x200000空间中。

NANDwrite:

device0offset0x200000,size0x500000

5242880byteswritten:

OK

10)从USB口下载rootfs并烧定

下载rootfs与下载kernel用法完全相同,只是rootfs写入NANDFLASH的地址是0x700000,大小是0x7F900000,请参照上面步骤完成下载rootfs并写入NANDFLASH

dnw0x50008000

nanderase0x7000000x7F90000

nandwrite.yaffs20x500080000x7000000x7bc0000(这里的0x7bc0000是rootfs下载到内存时看到的实际大小,请根据实际大小添写,此处仅为示例)

11)重启开发板,看Linux系统能否正常启动。

(六)UBOOT自定义命令添加

上一环节中我们使用了UBOOT自带的命令,如果我们想要对UBOOT进行改造实现自已的特殊操作,也可以添加新的U-Boot命令

U-Boot的每一个命令都是通过U_BOOT_CMD宏定义的。

这个宏在头文件中定义

#ifdef CFG_LONGHELP

#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t__u_boot_cmd_##nameStruct_Section = {#name, maxargs, rep, cmd, usage, help}

#else

#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t__u_boot_cmd_##nameStruct_Section = {#name, maxargs, rep, cmd, usage}

#endif

    每一个命令定义一个cmd_tbl_t结构体,而cmd_tbl_t真实结构如下所示:

typedef struct cmd_tbl_scmd_tbl_t;

    

struct cmd_tbl_s {

    char       *name;        

    int        maxargs;      

    int        repeatable;    

                    

    int        (*cmd)(struct cmd_tbl_s *, int, int, char *[])

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1