uboot下载内核和文件系统的步骤

合集下载

3 利用u-boot下载VxWorks操作系统

3 利用u-boot下载VxWorks操作系统

实验3 利用u-boot下载VxWorks操作系统一实验原理实验2创建了一个基于目标板的Bootable工程,并最终生成了VxWorks映象文件的二进制代码。

该代码运行起来以后就是VxWorks操作系统,但是它不能在主机中运行,它必须通过一定的手段下载到相应的目标机中运行。

实验2编译时选择的BSP是jx2410_920t,它对应的目标机是CVT-2410的实验箱,因此,必须将该代码下载到CVT-2410实验箱中运行。

下载的地址是在代码中已经确定下来的,为0x30010000,此处为SDRAM,该地址在“C:\Tornado2.2\target\config\jx2410_920t\config.h”文件中进行了定义,如下所示的RAM_LOW_ADRS即为VxWorks映象的入口点地址。

#define RAM_LOW_ADRS 0x30010000 /* VxWorks image entry point */#define RAM_HIGH_ADRS 0x33800000 /* RAM address for ROM boot */可以修改该地址,但是注意下面几点:1. 该地址只能为0x30010000以后的地址,如0x30020000,不能使用0x30000000,因为从0x30000000开始的64KB需要作为系统保留的区域供操作系统使用;2. 修改该地址后,必须按照实验2的内容重新建立一个Bootable工程,否则修改无效;3. 该地址修改会牵涉到后续部分实验,此处不建议修改该地址。

必须将VxWorks代码下载到0x30010000地址处,否则将产生错误。

下载方式是通过将目标板与主机PC通过以太网连接,并使用tftp协议进行传输,主机PC作为tftp服务器端将VxWorks.bin所在目录作为tftp服务器的根目录。

Windows下使用tftpd32.exe程序作为tftp服务器。

而客户端上运行的u-boot使用tftp命令连接tftp服务器并获取vxworks.bin文件。

烧写ARM开发板系统教程-----uboot、内核以及文件系统

烧写ARM开发板系统教程-----uboot、内核以及文件系统

烧写ARM开发板系统教程-----uboot、内核以及⽂件系统⼀、sd启动将u-boot镜像写⼊SD卡,将SD卡通过读卡器接上电脑(或直接插⼊笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是/dev/sdb.(内存卡的节点)。

当有多个交叉编译器是,不⽅便设置环境变量时,可以在编译命令中指定交叉编译器,具体如下:在源码中操作以下步骤:make distcleanmake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- mrpropermake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- tiny210_configmake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- all spl编译出tiny210-uboot.bin,注意交叉编译⼯具路径执⾏下⾯的命令$sudo dd iflag=dsync oflag=dsync if=tiny210-uboot.bin of=/dev/sdb seek=1把内存卡插⼊开发板,使⽤串⼝⼯具设置环境变量:setenv gatewayip 192.168.1.1(电脑⽹关)setenv ipaddr 192.168.1.102(开发板ip,不要与虚拟机和电脑ip冲突)setenv netmask 255.255.255.0setenv serverip 192.168.1.10(虚拟机ip)saveenv⼆、nand启动烧写Uboot:通过SD卡启动的u-boot for tiny210 将u-boot镜像写⼊nandflash在虚拟机下重启tftp sudo service tftpd-hpa restart开发板终端下执⾏下⾯的命令:[FriendlyLEG-TINY210]# tftp 21000000 tiny210-uboot.bin[FriendlyLEG-TINY210]# nand erase.chip[FriendlyLEG-TINY210]# nand write 21000000 0 3c1f4 (写⼊长度)内核的烧写位置是0x600000开始的区域,⽂件系统烧写位置为0xe00000开始的区域。

UBIFS文件系统的移植

UBIFS文件系统的移植

UBI文件系统的移植作者:piaozhiye86@首次做UBIFS的移植,不足之处欢迎批评指正。

2010-7-15自从linux2.6.27以后的内核版本都支持UBI文件系统了,新版本的uboot已经支持UBIFS了。

软件平台VMwareFedora-10使用源码:linux-2.6.30.4.tar.bz2u-boot-2010.06-rc1.tar.bz2硬件环境mini2440—64M NAND关于uboot的移植可以参考《嵌入式Linux之我行》中uboot的移植,那里写得比较详细。

我也是参考了其中的文章。

1、uboot的UBI的移植关于uboot的UBI的移植几乎没有说明介绍,移植首先要保证你的flash驱动能够跑起来,我是在nand flash 上跑的UBI。

刚开始的时候我也没有什么头绪,只能够从uboot的readme开始查找一些蛛丝马迹。

- MTD Support (mtdparts command, UBI support)CONFIG_MTD_DEVICEAdds the MTD device infrastructure from the Linux kernel.Needed for mtdparts command support.CONFIG_MTD_PARTITIONSAdds the MTD partitioning infrastructure from the Linuxkernel. Needed for UBI support.因此呢,要UBI支持首先得要MTD支持,因此在配置文件中要添加以上两项的定义。

要移植UBI还要添加:#define CONFIG_CMD_UBIFS#define CONFIG_CMD_UBI总的关于UBI的部分是以下几个宏/****MTD Support (mtdparts command, UBI support)****/#if 1#define CONFIG_MTD_DEVICE 1#define CONFIG_MTD_PARTITIONS 1#define CONFIG_CMD_MTDPARTS#define CONFIG_CMD_UBIFS#define CONFIG_CMD_UBI#define CONFIG_LZO 1#define CONFIG_RBTREE 1#endif同时呢要给NAND建立个默认的分区。

2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

凌FL2440超详细U-BOOT作业(UBoot介绍+H-jtag使用+Uboot使用)Bootloader是高端嵌入式系统开发不可或缺的部分。

它是在操作系统内核启动之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

现在主流的bootloader有U-BOOT、vivi、Eboot等。

本次作业先做Uboot的烧写吧。

希望通过这个帖子,能让更多的初学者朋友了解一些UBoot的知识,也希望高手朋友对我的不足予以斧正。

首先说一下什么是Uboot:U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。

从FAD SROM、8xxROM、PPCBOOT逐步发展演化而来。

其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

但是U-Boot不仅仅支持嵌入式Linu x系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。

其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。

这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。

这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。

uboot——官网下载直接移植(一)

uboot——官网下载直接移植(一)

uboot——官⽹下载直接移植(⼀)1:uboot下载地址:ftp://ftp.denx.de/pub/u-boot/我们下载的版本是:u-boot-2013.10.tar.bz2;2:下载好以后,删除⾥⾯的相关⽂件因为三星是的s5pv1XX这个cpu做了很多个板⼦,我们在移植的时候虽然与三星的开发板不同但是⽤的cpu是相同的,所以我们再选择cpu相关⽂件的时候,要确定好哪个cpu与我们⽤的cpu是相同的,u-boot-2013.10\arch\arm\cpu\armv7\s5pc1xx 在⽬录下有s5pc1xx相关的配置⽂件;这就是我们要选⽤的cpu⽂件;3:相较与我们直接移植三星移植好的uboot,新版的uboot编译配置时有所不同;把主Makefile与board有关的配置信息⽂件分开了;我们可以根据board.cfg⽂件中的配置信息来确定我们⽤的是哪个开发板;打开board.cfg⽂件搜索s5pc1xx我们可以看到两个相关的开发板,goni、smdk100,我们先⽤goni开发板来进⾏移植;⾸先删除其它的⽆关⽂件:arch⽬录下:只保留arm⽂件夹;arm/cpu⽬录下的出armv7⽂件夹以外其他删除;arm/cpu/armv7⽬录下保留s5pc1xx 以及s5p_common这两个⽂件夹,其他的删除;board⽬录下:board⽬录下只保留samsung⽂件夹samsung⽬录下只保留goni、common⽂件夹之后⽤sourceinsight创建项⽬4:对主Makefile进⾏分析,之前我们make的时候⾸先要进⾏配置:make x210_sd_config,⽽在新uboot中的配置依赖于下⾯这个规则:我们进⾏配置的时候make s5p_goni_config 然后执⾏下⾯这段脚本相当于执⾏ ./mkcofig -A s5p_goniMKCONFIG变量还是mkconfig脚本,下⾯我们看⼀下mkconfig脚本如何⼯作:下⾯这段代码的作⽤:1if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then2 # Automatic mode3 line=`awk '($0 !~ /^#/ && $7 ~ /^'"$2"'$/) { print $1, $2, $3, $4, $5, $6, $7, $8 }' boards.cfg`4if [ -z "$line" ] ; then5 echo "make: *** No rule to make target \`$2_config'. Stop." >&26 exit 17 fi89set ${line}10 # add default board name if needed11 [ $# = 3 ] && set ${line} ${1}12 fi判断传参是否两个且第⼀个参数为 -A,如果是则对line赋值,line的值是通过在boards.cfg⽂件中查找第⼆个参数$2,并把这⼀⾏赋值给line,从前⾯内容我们可以看出line = Active arm armv7 s5pc1xx samsung goni s5p_goni -并且把这些由空格分开的字符赋值给$1-$8所以这段代码执⾏完以后的结果是:$1 = Active$2 = arm$3 = armv7$4 = s5pv1xx$5 = samsung$6 = goni$7 = s5p_goni$8 = -继续分析下⾯代码:这段代码实际中没有起到什么作⽤可忽略1while [ $# -gt 0 ] ; do2case"$1"in3 --) shift ; break ;;4 -a) shift ; APPEND=yes ;;5 -n) shift ; BOARD_NAME="${7%_config}" ; shift ;;6 -t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;7 *) break ;;8 esac9 done1011 [ $# -lt 7 ] && exit 112 [ $# -gt 8 ] && exit 1下⾯代码:CONFIG_NAME="${7%_config}"[ "${BOARD_NAME}" ] || BOARD_NAME="${7%_config}"arch="$2"cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $1}'`spl_cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $2}'`if [ "$6" = "-" ] ; thenboard=${BOARD_NAME}elseboard="$6"fi[ "$5" != "-" ] && vendor="$5"[ "$4" != "-" ] && soc="$4"[ $# -gt 7 ] && [ "$8" != "-" ] && {# check if we have a board config name in the options field# the options field mave have a board config name and a list# of options, both separated by a colon (':'); the options are# separated by commas (',').## Check for board nametmp="${8%:*}"if [ "$tmp" ] ; thenCONFIG_NAME="$tmp"fi# Check if we only have a colon...if [ "${tmp}" != "$8" ] ; thenoptions=${8#*:}TARGETS="`echo ${options} | sed 's:,: :g'` ${TARGETS}"fi}config_name = s5p_goni_configBOARD_NAME = s5p_goni_configarch = armcpu = armv7spl_cpu = " "board = gonivendor = samsungsoc = s5pc1xx看下⾯信息:在这⾥第⼀打印出信息:Configuring for s5p_goni_config board...if [ "${ARCH}" -a "${ARCH}" != "${arch}" ]; thenecho "Failed: \$ARCH=${ARCH}, should be '${arch}' for ${BOARD_NAME}"1>&2exit 1fiif [ "$options" ] ; thenecho "Configuring for ${BOARD_NAME} - Board: ${CONFIG_NAME}, Options: ${options}" elseecho "Configuring for ${BOARD_NAME} board..."fi创建头⽂件的符号连接:if [ "$SRCTREE" != "$OBJTREE" ] ; thenmkdir -p ${OBJTREE}/includemkdir -p ${OBJTREE}/include2cd ${OBJTREE}/include2rm -f asmln -s ${SRCTREE}/arch/${arch}/include/asm asmLNPREFIX=${SRCTREE}/arch/${arch}/include/asm/cd ../includemkdir -p asmelsecd ./includerm -f asmln -s ../arch/${arch}/include/asm asmfirm -f asm/archif [ -z "${soc}" ] ; thenln -s ${LNPREFIX}arch-${cpu} asm/archelseln -s ${LNPREFIX}arch-${soc} asm/archfiif [ "${arch}" = "arm" ] ; thenrm -f asm/procln -s ${LNPREFIX}proc-armv asm/procfi符号连接1:/include/asm 连接到 /arch/arm/include/asm符号连接2: /include/asm/arch链接到 /arch/arm/include/asm/arch-s5pc1xx 符号链接3: /include/asm/proc链接到/arch/arm/include/asm/proc-armv看⼀下下⾯的代码:## Create include file for Make#( echo "ARCH = ${arch}"if [ ! -z "$spl_cpu" ] ; thenecho 'ifeq ($(CONFIG_SPL_BUILD),y)'echo "CPU = ${spl_cpu}"echo "else"echo "CPU = ${cpu}"echo "endif"elseecho "CPU = ${cpu}"fiecho "BOARD = ${board}"[ "${vendor}" ] && echo "VENDOR = ${vendor}"[ "${soc}" ] && echo "SOC = ${soc}"exit 0 ) > config.mk这段代码的作⽤是把ARCH = armCPU = armv7BOARD = gonivendor = samsungsoc = s5pc1xx 输出config.mk⽂件中看下⾯代码:# Assign board directory to BOARDIR variableif [ -z "${vendor}" ] ; thenBOARDDIR=${board}elseBOARDDIR=${vendor}/${board}fiBOARDDIR = samsung/goni再看最后⼀段代码:# Create board specific header file#if [ "$APPEND" = "yes" ] # Append to existing config file thenecho >> config.helse> config.h # Create new config filefiecho "/* Automatically generated - do not edit */" >>config.hfor i in ${TARGETS} ; doi="`echo ${i} | sed '/=/ {s/=/ /;q; } ; { s/$/ 1/; }'`"echo "#define CONFIG_${i}" >>config.h ;doneecho "#define CONFIG_SYS_ARCH \"${arch}\"" >> config.hecho "#define CONFIG_SYS_CPU \"${cpu}\"" >> config.hecho "#define CONFIG_SYS_BOARD \"${board}\"" >> config.h [ "${vendor}" ] && echo "#define CONFIG_SYS_VENDOR \"${vendor}\"" >> config.h [ "${soc}" ] && echo "#define CONFIG_SYS_SOC \"${soc}\"" >> config.hcat << EOF >> config.h#define CONFIG_BOARDDIR board/$BOARDDIR#include <config_cmd_defaults.h>#include <config_defaults.h>#include <configs/${CONFIG_NAME}.h>#include <asm/config.h>#include <config_fallbacks.h>#include <config_uncmd_spl.h>EOFexit 0上⾯这段代码的作⽤就是添加⼀些宏定义到config.h⽂件中:/* Automatically generated - do not edit */TARGETS为空所以不执⾏#define CONFIG_SYS_ARCH arm#define CONFIG_SYS_CPU armv7#define CONFIG_SYS_BOARD goni#define CONFIG_SYS_SOC s5pc1xxcat << EOF >> config.h 这句代码的作⽤是把下⾯内容写⼊config.h中,直到EOF;。

通过tftpd网络挂载内核和文件系统

通过tftpd网络挂载内核和文件系统

通过tftpd网络挂载内核和文件系统通过tftpd网络挂载内核和文件系统说实话,这个比fastboot好用多了,不过这个必须在有uboot,且uboot已经搭建好了网络的情况下才能使用1.连接好板子的串口线和网线,打开软件tftpd32.exe第一个框是存放要烧写的文件目录第二个框是pc机(服务端)的ip地址2.打开putty,给板子上电启动,待进入uboot模式,设置好ip 后,尝试能不能ping通服务器3.如果可以ping通,就可以通过tftp开始挂载了(1)烧写uboot:如果已经有uboot,不需要重新烧写的话,可以跳过第一个步骤,注意uboot文件的名字 sf probe 0mw.b 82000000 ff 100000tftp 0x82000000 u-boot_hi3520d.binsf probe 0sf erase 0 100000sf write 82000000 0 100000reset(2)烧写内核:注意修改uImage的名字mw.b 82000000 ff 400000tftp 82000000 uImage_hi3520d_fullsf probe 0sf erase 100000 400000sf write 82000000 100000 400000(3)烧写文件系统:注意修改rootfs的名字,b00000表示用来存放烧写rootfs的空间大小(包括剩余空间),如11m=b,59m=3bmw.b 82000000 ff b00000tftp 0x82000000 rootfs_hi3520d_64k.jffs2sf probe 0sf erase 500000 b00000sf write 82000000 500000 b00000(4)设置启动参数:注意修改rootfs的空间大小(包括剩余空间),11M=16-1-4,59M=64-1-4,sa是保存配置命令的简写形式setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs)'setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000'sa4.重启板子,完成烧写,可以直接在终端输入 reset来完成重启。

uboot 命令详解

uboot 命令详解

u-boot 技术文档1.U boot 命令详解1.1查看帮助命令使用help 或者?1.2环境变量打印环境变量:printenv设置环境变量:setenv(不会保存)保存环境变量:saveenv这个时候就有了1.3nandflash命令使用nand查看nandflash 所有指令擦除nand erase1.4norflash命令查看Flash信息命令: flinfo加/解写保护命令: protect擦除命令: erase1.5内存命令nm1.5USB指令使用help usb 查看usb具体指令使用usb 启动使用usb tree查看信息f atls usb 0 罗列u盘信息1.5.1实例演练usb指令烧写1.6实例演练ftp指令烧写环境变量中体现了开发板上的IP地址为192.168.0.2,网关为192.168.0.1,要求电上的tftp 服务器的IP为192.168.0.1;运行电脑上tftp服务器,指定好根目录,将内核和根文件系统放在根目录下。

注:线接上后,电脑上的本地连接可能是显示网络电缆没插好,这很正常!在使用过程中它们会自动去连接!<2>分别下载内核和根文件系统到内存0x30008000开始的空间先检查坏块nand bad再擦除坏块清理某个区域0x560000 0x3b22c00将根文件系统加载到0x30008000然后再将根文件系统写到0x560000 0x3b22c00这个位置然后重启:重复上面的步骤:nand erase 0x60000 0x267000将内核文件保存到0x60000 0x267000这块区域运行1.8系统重启指令2.U boot 内核移植在cpu/arm920t/start.S中添加以下代码在修改并添加为以下代码在include/configs/mini2440.h修改为如下:将以下代码修改为:将以下代码修改为:将以下代码修改为:在drivers/mtd/nand/s3c2410_nand.h 在最后下面代码上添加如下带码:。

UBoot实验1、UBoot编译与下载实验

UBoot实验1、UBoot编译与下载实验

Uboot编译与下载实验一、 实验目的掌握UBoot的编译方法,以及如何将生成的UBoot BIN文件下载到目标板二、 实验资源硬件资源CPU PIII以上内存512M硬盘80G软件资源Uboot源代码 uboot_1.2.0cross toolchain 3.4.1RedHat Linux 9.0操作系统三、 实验前的准备1、一台PC机(装有PC版Linux)。

2、实验平台。

3、串口线、网络线。

4、SJF2440烧写软件与驱动。

5、ICE16仿真器。

四、 实验步骤1、建立实验目录#mkdir /root/Myjob#cd /root/Myjob2、挂载实验光盘通过下面的命令把实验光盘挂接到/mnt/cdrom目录上。

#mount /dev/cdrom /mnt/cdrom#cd /mnt/cdrom/SourceCode/3、拷贝并解压缩交叉编译工具包#cp u-boot1.2.0.tar.gz /root/Myjob#cd /root/Myjob4、编译UBoota)进入U-Boot代码目录#cd u-boot1.2.0b)进行配置#make smdk2440_configc)进行编译#make然后就会在/u-boot1.2.0目录下生成u-boot.bin5、仿真器与驱动的定装接下来对SJF2440软件进行安装,并对并口JTAG驱动程序进行安装。

a、并口JTAG驱动程序的安装下面以WinXP为例,介绍驱动的安装方法。

在XP下以管理员身份登陆。

拷贝giveio.sys文件(光盘\Tools\sjf2440_Rev02\GIVEIO)到 “C:\windows\system32\drivers.”目录下,记住去掉只读属性(如图1)。

图1 拷贝giveio.sys文件选择控制面板,“添加硬件”。

出现对话框后点击下一步按钮,出现如图2对话框。

图2 添加硬件向导1选择“是,硬件已连接好”,点击下一步按钮。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

uboot 下载内核和文件系统的步骤1)下载linux到系统的SDRAM运行(仅做测试之用,断电或退出后就会消失)1>运行Uboot,设置环境变量Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360console=ttyS0,115200,mem=32M 启动系统环境变量Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址Uboot>setenv ipaddr [目标板 ip 地址] 目标板 ip 地址Uboot>setenv serverip [主机 ip 地址] 主机 ip 地址2>下载linux内核,文件系统打开tftpserver应用程序,设置根目录路径,将内核、文件系统等拷贝到所设置的根目录下。

Uboot>tftp 21100000 ramdisk.gz 下载文件系统Uboot>tftp 21000000 uImage 下载 linux 内核Uboot>bootm 21000000 启动 linux然后linux操作系统就开始运行。

2)烧写 Linux 到系统的 Flash 运行1>设置运行Linux的环境变量Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200,mem=32M 启动系统环境变量Uboot>setenv image cp.b 10020000 21000000 b0000 拷贝内核到sdram Uboot>setenv ramdisk cp.b 100d0000 21100000 226000 拷贝文件系统到sdram Uboot>setenv boot bootm 设置变量bootUboot>setenv bootcmd run ramdisk\;run image\;run boot 设置默认变量bootcmdUboot>setenv ethaddr 12:34:56:78:99:aa mac 地址Uboot>setenv ipaddr 目标板 ip 地址目标板 ip 地址,由你自己决定Uboot>setenv serverip 主机ip地址主机ip地址,就是你的PC的ip Uboot>saveenv 保存环境变量2>烧写Linux内核到FlashUboot>tftp 21100000 ramdisk.gzUboot>cp.b 21100000 100d0000 226000Uboot>tftp 21000000 uImageUboot>cp.b 21000000 10020000 b0000reset之linux操作系统就开始运行。

一、片内启动1、用Xmodem协议,发送loader.bin和uboot.bin文件,此时uboot.bin被发送到系统的SDRAM中,发送完后uboot开始运行,如果这时断电或退出,则一切将从头开始,因为SDRAM内存储的数据会在断电或退出后消失。

2、擦除 Flash在对Flash进行烧写之前,需要将其擦除:Uboot>protect off all 去掉Flash的扇区写保护Uboot>erase all 擦除Flash的所有扇区(注:如果只是要擦除某块区域的Flash,比如0x10000000到0x10060000之间的区域,则可用命令:1)protect off 10000000 1006ffff2)erase 10000000 1006ffff如果是要对某块区域加上写保护,比如0x10000000到0x10060000之间的区域,则可用命令:1)protect on 10000000 1006ffff可用flinfo命令来查看那些区域是受保护的,那些区域不是受保护的。

)3、烧写boot.bin到Flash在Uboot提示符下键入命令:Uboot>loadb 21000000 (下完之后会显示boot.bin的大小,然后在后面用命令cp.b烧写时将其后4位变成f,假如文件大小为5e33a,则在烧写时将其变为5ffff) 将文件发送到系统的SDRAM中然后在超级终端使用Kermit协议,发送文件boot.bin,发送完毕后,键入以下命令:Uboot>cp.b 21000000 10000000 5ffff 将发送到SDRAM中的数据写入Flash Uboot>protect on 10000000 10005ffff 对写入Flash的内容进行写保护(注:此处还可以用tftp或bootp协议来完成,不过要先设置网络变量,即设置本机和目标机的IP地址,还有目标机的Mac地址。

网络环境变量:Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360console=ttyS0,115200,mem=32M 启动系统环境变量Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址Uboot>setenv ipaddr [目标板 ip 地址] 目标板 ip 地址Uboot>setenv serverip [主机 ip 地址] 主机 ip 地址tftp协议:1)tftp 21000000 lb/boot.bin2)cp.b 21000000 10000000 5ffff3)protect on 10000000 10005fffbootp协议:1)bootp 21000000 lb/boot.bin2)cp.b 21000000 10000000 5ffff3)protect on 10000000 10005fff)4、烧写 Uboot.gz 到 Flash在Uboot提示符下键入命令:装入Uboot.gzUboot>loadb 20000000 将文件发送到系统的SDRAM中然后在超级终端使用Kermit协议,发送文件Uboot.gz,发送完毕后,键入以下命令:Uboot>cp.b 20000000 10010000 ffff 将发送到SDRAM中的数据写入Flash Uboot>protect on 10000000 1001ffff 对写入Flash的内容进行写保护(注:此处也可以用tftp或bootp协议)二、片外启动一)如何在uboot内运行自己的程序1、手动运行(只是将程序下载到SDRAM中运行,仅做测试之用,断电或退出后就会消失)1)loadb 20000000 下载用户程序(*.bin) <注:必须是.bin文件,可用arm-linux-objcopy命令生成>2)go 20000000 程序就会运行2、自动运行(将程序写入Flash,uboot启动之后程序自动运行)1)设置环境变量Uboot>setenv usr_prg cp.b 10300000 20000000 ffff(程序的大小)Uboot>setenv run_prg go 20000000Uboot>setenv bootcmd run usr_prg\;run run_prgUboot>saveenv2)写入程序,即将其烧入Flashprotect off allerase 10300000 103fffffloadb 20000000 下载*.bincp.b 20000000 10300000 ffff(用户程序的大小)3)reset之后程序就会自动运行二、烧写linux1、下载linux到系统的SDRAM运行(仅做测试之用,断电或退出后就会消失) 1)运行Uboot,设置环境变量Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360console=ttyS0,115200,mem=32M 启动系统环境变量Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址Uboot>setenv ipaddr [目标板 ip 地址] 目标板 ip 地址Uboot>setenv serverip [主机 ip 地址] 主机 ip 地址2)下载linux内核,文件系统打开tftpserver应用程序,设置根目录路径,将内核、文件系统等拷贝到所设置的根目录下。

Uboot>tftp 21100000 ramdisk.gz 下载文件系统Uboot>tftp 21000000 uImage 下载 linux 内核Uboot>bootm 21000000 启动 linux然后linux操作系统就开始运行。

2、烧写 Linux 到系统的 Flash 运行1)设置运行Linux的环境变量Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200,mem=32M 启动系统环境变量Uboot>setenv image cp.b 10020000 21000000 b0000 拷贝内核到sdram Uboot>setenv ramdisk cp.b 100d0000 21100000 226000 拷贝文件系统到sdram Uboot>setenv boot bootm 设置变量bootUboot>setenv bootcmd run ramdisk\;run image\;run boot 设置默认变量bootcmdUboot>setenv ethaddr 12:34:56:78:99:aa mac 地址Uboot>setenv ipaddr 目标板 ip 地址目标板 ip 地址,由你自己决定Uboot>setenv serverip 主机ip地址主机ip地址,就是你的PC的ip Uboot>saveenv 保存环境变量2)烧写Linux内核到FlashUboot>tftp 21100000 ramdisk.gzUboot>cp.b 21100000 100d0000 226000Uboot>tftp 21000000 uImageUboot>cp.b 21000000 10020000 b0000reset之linux操作系统就开始运行。

相关文档
最新文档