uboot下载内核和文件系统的步骤
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、内核以及⽂件系统⼀、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文件系统的移植
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使用)
凌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——官⽹下载直接移植(⼀)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网络挂载内核和文件系统说实话,这个比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 命令详解
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编译与下载实验一、 实验目的掌握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选择“是,硬件已连接好”,点击下一步按钮。
UBI文件系统简介
UBI文件系统简介作者:刘洪涛,华清远见嵌入式学院金牌讲师。
在linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到cramfs、jffs2、yaffs2等文件系统。
它们也都是基于文件系统+mtd+flash设备的架构。
linux-2.6.27后,内核加入了一种新型的flash文件系统UBI(Unsorted Block Images)。
这里简单介绍下UBI文件系统加入的原因,及使用方法。
我也是刚接触到这个文件系统,可能有理解不对的地方,也请指正。
一、产生的背景FLASH具有的“先擦除再写入”、坏块、“有限的读写次数”等特性,目前管理FLASH的方法主要有:1、采用MTD+FTL/NFTL(flash 转换层/nand flash转换层)+传统文件系统,如:FAT、ext2等。
FTL /NFTL的使用就是针对FLASH的特有属性,通过软件的方式来实现日志管理、坏块管理、损益均衡等技术。
但实践证明,由于知识产权、效率等各方面因素导致本方案有一定的局限性。
2、采用硬件翻译层+传统文件系统的方案。
这种方法被很多存储卡产品采用,如:SD卡、U盘等。
这种方案对于一些产品来说,成本较高。
3、采用MTD+ FLASH专用文件系统,如JFFS1/2,YAFFS1/2等。
它们大大提高了FLASH的管理能力,并被广泛应用。
JFFS2、YAFFS2等专用文件系统也存在着一些技术瓶颈,如:内存消耗大,对FLASH容量、文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差或过渡损益等。
在此背景下内核加入了UBI文件系统的支持。
二、用法环境:omap3530处理器、(128MByte 16 位NAND Flash) 、linnux-2.6.28内核1、配置内核支持UBIFSDevice Drivers --->Memory Technology Device (MTD) support --->UBI - Unsorted blockimages --->Enable UBI配置mtd支持UBI接口File systems --->Miscellaneous filesystems --->UBIFS file system support配置内核支持UBIFS文件系统2、将一个MTD分区4挂载为UBIFS格式● flash_eraseall /dev/mtd4 //擦除mtd4● ubiattach /dev/ubi_ctrl -m 4 //和mtd4关联● ubimkvol /dev/ubi0 -N rootfs -s 100MiB //设定volume 大小(不是固定值,可以用工具改变)及名称● mount -t ubifs ubi0_0 /mnt/ubi或mount -t ubifs ubi0:rootfs /mnt/ubi3、制作UBIFS文件系统在制作UBI镜像时,需要首先确定以下几个参数:MTD partition size; //对应的FLASH分区大小flash physical eraseblock size; // FLASH物理擦除块大小minimum flash input/output unit size; //最小的FLASH输入输出单元大小for NAND flashes - sub-page size; //对于nand flash来说,子页大小logical eraseblock size.//逻辑擦除块大小参数可以由几种方式得到1)如果使用的是2.6.30以后的内核,这些信息可以通过工具从内核获得,如:mtdinfo –u。
uboot的获取
uboot的获取获取U-Boot(Universal Boot Loader)主要有两种方式,一种是直接下载预编译好的二进制文件,另一种是通过源代码进行编译。
以下是这两种方式的简要说明:1. 下载预编译的U-Boot 二进制文件:许多开发板的制造商提供了预编译好的U-Boot 二进制文件,你可以从它们的官方网站或开发者社区下载。
通常,你需要找到适用于你的开发板型号的U-Boot 二进制文件。
下载后,你可以使用设备上的工具将U-Boot 烧录到存储设备(如闪存、SD 卡等)上。
2. 从源代码编译U-Boot:这种方式需要你具有一定的编译环境和编程经验。
以下是获取U-Boot 源代码、编译并烧录到目标设备的一般步骤:步骤:1.获取源代码:使用git 工具从U-Boot 的官方仓库中克隆源代码。
2.进入源代码目录:cd u-boot3.配置编译环境:使用交叉编译工具链配置编译环境,具体工具链取决于目标设备的架构和处理器。
make ARCH=your_archCROSS_COMPILE=your_cross_compile_config defconfig4.编辑配置(可选):如果需要,你可以使用makemenuconfig来进行更详细的配置。
make ARCH=your_archCROSS_COMPILE=your_cross_compile_config menuconfig5.编译U-Boot:make ARCH=your_archCROSS_COMPILE=your_cross_compile_config这将生成u-boot.bin或其他目标文件。
6.烧录U-Boot:将生成的二进制文件烧录到目标设备的启动设备上。
这通常涉及使用专门的烧录工具,例如dd命令、JTAG 接口等。
dd if=u-boot.bin of=/dev/sdX bs=512 seek=2请确保替换/dev/sdX为你的目标设备。
嵌入式linux烧录步骤
嵌入式linux烧录步骤嵌入式Linux的烧录过程可以根据具体的开发板、芯片或厂商而有所不同,但一般步骤如下:准备工作:1.获取固件:下载或编译适用于你的嵌入式设备的Linux内核镜像和根文件系统。
2.连接烧录设备:将开发板或目标设备通过USB、JTAG或其他适配器连接到计算机。
烧录过程:1.烧录工具选择:根据硬件和厂商提供的指南选择适当的烧录工具,比如dd命令、flashcp、U-Boot工具等。
2.擦除存储器(如果需要):如果需要擦除存储器(如闪存),可以使用工具进行擦除。
注意备份数据(如果需要)。
3.烧录内核镜像:使用烧录工具将预编译或自定义的Linux内核镜像烧录到设备的闪存中。
示例命令(使用dd命令烧录)sudo dd if=your_kernel_image of=/dev/sdX bs=4Mif=指定输入文件,of=指定设备路径(请替换为你的设备路径),bs=指定块大小。
4.烧录根文件系统:将根文件系统烧录到设备的闪存或存储介质中。
示例命令(使用dd命令烧录)sudo dd if=your_rootfs_image of=/dev/sdX bs=4M5.配置启动选项:根据需要,配置引导加载程序(如U-Boot)以引导新烧录的内核和文件系统。
6.断开连接并启动设备:完成烧录后,断开连接并重新启动嵌入式设备,使其加载新的内核和根文件系统。
注意事项:●在执行烧录操作之前,请确保你理解并确认要烧录的目标设备和存储介质。
●仔细阅读并遵循硬件厂商提供的烧录指南和文档。
●在烧录过程中小心操作,避免误操作导致数据丢失或损坏设备。
●这些步骤提供了一般性的指南,实际操作可能因设备、开发板和硬件环境而有所不同。
使用uboot去挂载根文件系统
1、根文件系统的制作1)创建根文件系统主目录:mkdir rootfs2)创建根文件系统的子目录cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录mkdir usr/bin usr/lib usr/sbin lib/modules4)创建设备文件内核在引导时设备节点console,null必须存在cd dev/注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1mknod -m 666 null c 1 3c:表明类型为字符设备第一个数字(5,1):主设备号第二个数字(1,3):次设备号这两个设备文件设备号是固定的5)安装etcetc目录主要是一些启动时的脚本文件一般不需要修改tar etc.tar.gz –C /xxx/rootfs这个命令可能不给用改为:tar xvzf etc.tar.gz –C /xxx/rootfs6)编译内核模块内核模块保存在lib下面的module下配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住进入Linux内核目录(linux-2.6.32.2)make modules ARCH=arm CROSS_COMPILE=arm-linux-添加了ARCH=arm表示现在编译的是arm架构的内核CROSS_COMPILE=arm-linux-表示使用交叉编译工具链安装内核模块到根文件系统:make modules_install ARCH=armINSTALL_MOD_PATH=/xxx/rootfs7)配置busybox因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。
Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。
UBOOT引导Linux内核及向内核传递参数的方式
UBOOT引导Linux内核及向内核传递参数的⽅式 ⼀直以来没有想过有什么好的办法通过寄存器向内核传递参数,直到今天读UBOOT的实现⽅式。
在UBOOT中,引导内核最常⽤的⽅法是bootm命令,bootm命令可以引导“UBOOT格式”的内核。
先花点时间了解⼀下什么是“UBOOT格式”的内核吧:⽤UBOOT⾃带的mkimage命令⽣成的内核称为"UBOOT"格式的内核。
以下⾯这条命令为例: mkimage -n "Kernel 2.4.18" -A arm -O linux -T kernel -C none -a30007fc0 -e 30008000 -d 4020.bin vmlinux-2.4.18.img 其中与内核引导最密切的是-e 30008000,也就是内核的⼊⼝地址。
其它参数可以参考帮助信息。
其它UBOOT格式的内核与原来相⽐,只是进⾏(可选)了压缩,并在前⾯加了⼀个0x40⼤⼩的头。
这个头⾥放了内核的位置(0x30007fc0)和⼊⼝地址(0x30008000)和其它信息。
bootm命令执⾏时,先对头部信息等进⾏校验,然后把头信息放到⼀个结构⾥⾯。
最后根据内核类型调⽤相应的启动函数。
对于Linux⽽⾔就是do_bootm_linux,在启动函数⾥⾯,有这么⼀个操作:theKernel = (void (*)(int, int, uint))ntohl(hdr->ih_ep);,这是最关键的⼀个操作,将内核的⼊⼝地址0x30008000赋给了theKernel,在启动函数的最后,使⽤theKernel (0, bd->bi_arch_number, bd->bi_boot_params);启动内核。
根据传参规范,三个变量分别⽤r0,r1,r2传给内核,这样就巧妙地利⽤了函数指针进⾏了参数传递,实在是精妙!上⾯讲完了内核的引导及传参,需要引起注意的就是在使⽤mkimage命令⽣成内核时,-e后⾯的地址要⽐-a后⾯的地址偏移0x40,原因很简单,就不在细说了。
uboot、内核、操作系统、根文件系统之间的关系
uboot是个引导启动程序。
BIOS自检完成后就把电脑控制权交给uboot,由uboot来加载并引导操作系统运行。
内核就是最最最核心的那部份。
操作系统内核就是操作系统的最最最最核心的那些程序。
新安装的操作系统中,一些自带的小工具啊,小游戏啊,甚至连键盘鼠标控制功能,这些都不属于内核。
内核是不包括硬件驱动程序的。
操作系统就是控制计算机硬件的软件系统。
它与内核的区别是它包含硬件驱动和一些基本的实用功能。
根文件系统这个名词很少出现在windows中。
在计算机存储中,目录结构都是以树形结构表示的,根就是指这棵树的根部。
其他所有目录都是在这个“根”上面逐级分配而来。
“根文件系统”因为你加了“系统”二字,所以可以解释为是指“整棵树”,整个“树形结构的文件系统”它们之间的关系是:BIOS自检---uboot引导----加载内核----操作系统启动---启动完成,系统待机。
这几个步骤所需要用到的文件与程序什么的全部存贮在文件系统中。
在这几个名词来说,文件系统可以独立存在,但其他几样则无法脱离文件系统而存在。
uboot编译过程
uboot编译过程
Uboot是一种开源的引导载入程序,用于嵌入式系统中的启动过程。
它通常被用来引导Linux内核。
以下是uboot编译的过程:
1. 下载uboot源码:在uboot官网上下载最新版本的uboot源码。
2. 配置编译环境:安装交叉编译工具链,例如arm-linux-gcc 等。
3. 配置uboot:进入uboot的根目录,运行make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig命令进行配置。
在这里可以设置uboot的启动参数、内存布局等。
4. 编译uboot:运行make ARCH=arm CROSS_COMPILE=arm-linux-命令进行编译。
编译完成后,会在uboot目录下生成u-boot.bin文件。
5. 烧录uboot:将u-boot.bin文件烧录到板子的Flash中,使其可以在启动时被加载。
6. 测试uboot:使用串口调试工具,连接开发板和PC,确认uboot 能够正常启动,可以接受命令行输入。
以上就是uboot编译的过程。
在实际开发中,还需要进行调试和优化,使uboot能够顺利地引导Linux内核。
- 1 -。
海思开发板常规开发步骤解析-郑HC整理
一、通过smb方式在Windows下登录linux虚拟主机目的:在Windows和linux虚拟主机间进行文件传送1、启动linux后,选择最后一项,“usbserious”,默认以用户名:root,密码:yuhong登录。
2、启动SMB服务,方便文件共享:service smb start。
如下图所示:3、在windows的“运行”中,输入:“\\192.168.1.192”登录Linux。
出现如下界面:用户名:user 密码:abc。
登录后,可看到Linux的文件目录,如下图所示:注意:如果没法连接上smb服务,注意要在PC机的网上邻居把ip地址手动设置为以下:Ip address :192.168.1.178子网掩码:255.255.255.0网关:192.168.1.255二、通过终端登录到海思ARM9主板目的:在Windows下操作ARM9主板进行编译文件的运行和驱动模块的加载等。
1、硬件连接。
用3PIN线,连接PC跟目标板的串口(蜂鸣器旁边的3PIN插针。
将网线接上目标板的以太网网口。
2、启动终端。
设置参数为“115200,8位数据位,无奇偶检验,无硬件控制”。
3、启动Uboot控制终端。
给目标板上电。
如已安装内核,会出现如下图所示的界面。
以下为经过下载内核——>下载文件系统后进入系统的操作界面:三、下载linux内核和文件系统到海思ARM9板3.1编译和下载Kernel我们也没有系统内核源代码。
只有海思原厂的内核源代码(\Hi3515_SDK_V1.0.4.0.c2\source\os\linux-2.6.24)。
因此,我们也无法编译系统内核。
但我们有编译好的内核镜像文件(\程序源代码\linux内核\hikernel)。
3.1.1编译Kernel3.1.2下载Kernel有“网口”和“串口”两种方式下载内核。
下面演示如何使用“网口”内核。
步骤1 硬件连接。
用3PIN线,连接PC跟目标板的串口(蜂鸣器旁边的3PIN插针。
uboot内核移植和裁剪详细步骤
uboot内核移植和裁剪详细步骤-U-boot内核移植步骤:Linux 3.3.5系统移植1. 将arch/arm/mach-s3c6410/下的,mach-smdk6410.c cp为mach-my6410.c;2. 打开arch/arm/mach-s3c6410/下的Kconfig,仿照MACH_SMDK6410做一个菜单项:config MACH_MY6410bool "MY6410"select CPU_S3C6410select SAMSUNG_DEV_ADCselect S3C_DEV_HSMMCselect S3C_DEV_HSMMC1select S3C_DEV_I2C1select SAMSUNG_DEV_IDEselect S3C_DEV_FBselect S3C_DEV_RTCselect SAMSUNG_DEV_TSselect S3C_DEV_USB_HOSTselect S3C_DEV_USB_HSOTGselect S3C_DEV_WDTselect SAMSUNG_DEV_BACKLIGHTselect SAMSUNG_DEV_KEYPADselect SAMSUNG_DEV_PWMselect HAVE_S3C2410_WATCHDOG if WATCHDOGselect S3C64XX_SETUP_SDHCIselect S3C64XX_SETUP_I2C1select S3C64XX_SETUP_IDEselect S3C64XX_SETUP_FB_24BPPselect S3C64XX_SETUP_KEYPADhelpMachine support for the Pillar MY64103. 打开arch/arm/tools/mach-types文件,这里面存的是机器ID必须要和uboot里面的ID保持一致,将其283行复制添加在后面并修改为: smdk6410MACH_SMDK6410 SMDK6410 1626 xx6410 MACH_XX6410 XX6410 1626 这个机器ID和UBOOT里的机器ID相同时才能启动内核;1. 修改BSP文件mach-my6410.c,内容如下:将mach-mach-my6410.c文件中的所有smdk6410改成my6410(不要改大写SMDK6410的)MACHINE_START(MY6410, "MY6410")//这个要和Kconfig里的MACH-MY6410匹配 2. 在当前目录的Makefile最后一行加上 obj-$(CONFIG_MACH_MY6410) += mach-my6410.o3. 修改顶层的Makefile:ARCH ?= armCROSS_COMPILE ?= /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux- 4. 复制arch/arm/configs/下的s3c6400-defconfig文件,然后将其保存为.config,配置内核支持EABI,再选中XX6410 board这一项,保存退出;5. 执行make menuconfig对内核进行配置:执行make编译执行make zImage生成zImage将uboot根目录下的mkimage拷贝到/user/bin目录下执行make uImage生成uImage通过以上几步linux内核移植完了,剩下就移植驱动了。
uboot 编译流程
uboot 编译流程Uboot是一款开源的嵌入式系统引导程序,它是Linux系统启动的第一步,负责初始化硬件设备、加载内核镜像和设备树等操作。
本文将介绍Uboot的编译流程,帮助读者了解Uboot的构建过程。
一、准备工作在开始编译Uboot之前,需要先准备好交叉编译工具链和Uboot 源代码。
交叉编译工具链是用于在主机上编译嵌入式系统的工具,它能够生成适用于目标平台的可执行文件。
Uboot源代码可以从官方网站或Github上下载,也可以从开发板厂商提供的SDK中获取。
二、配置编译环境在开始编译Uboot之前,需要先配置编译环境。
首先需要设置交叉编译工具链的路径,可以通过export命令设置环境变量,例如:export CROSS_COMPILE=arm-linux-gnueabihf-接着需要配置Uboot的编译选项,可以通过make menuconfig命令进入配置界面,选择需要编译的功能和驱动程序。
在配置完成后,需要保存配置并退出。
三、编译Uboot在配置完成后,可以通过make命令编译Uboot。
编译过程中会生成一系列的中间文件和最终的可执行文件。
编译完成后,可以通过make install命令将Uboot烧录到目标设备中。
四、调试Uboot在Uboot编译完成后,需要进行调试和测试。
可以通过串口连接目标设备,使用minicom或者putty等终端工具进行调试。
在调试过程中,可以查看Uboot的启动日志和调试信息,以便发现和解决问题。
五、Uboot的更新和升级在使用Uboot的过程中,可能需要对Uboot进行更新和升级。
可以通过tftp或者nfs等方式将新的Uboot镜像下载到目标设备中,然后使用Uboot的命令进行更新和升级。
在更新和升级过程中,需要注意备份原有的Uboot镜像,以防止出现问题。
六、总结Uboot是嵌入式系统启动的重要组成部分,它的编译和调试对于嵌入式系统的开发和调试至关重要。
使用uboot去挂载根文件系统(优推内容)
1、根文件系统的制作1)创建根文件系统主目录:mkdir rootfs2)创建根文件系统的子目录cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录mkdir usr/bin usr/lib usr/sbin lib/modules4)创建设备文件内核在引导时设备节点console,null必须存在cd dev/注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1mknod -m 666 null c 1 3c:表明类型为字符设备第一个数字(5,1):主设备号第二个数字(1,3):次设备号这两个设备文件设备号是固定的5)安装etcetc目录主要是一些启动时的脚本文件一般不需要修改tar etc.tar.gz –C /xxx/rootfs这个命令可能不给用改为:tar xvzf etc.tar.gz –C /xxx/rootfs6)编译内核模块内核模块保存在lib下面的module下配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住进入Linux内核目录(linux-2.6.32.2)make modules ARCH=arm CROSS_COMPILE=arm-linux-添加了ARCH=arm表示现在编译的是arm架构的内核CROSS_COMPILE=arm-linux-表示使用交叉编译工具链安装内核模块到根文件系统:make modules_install ARCH=armINSTALL_MOD_PATH=/xxx/rootfs7)配置busybox因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。
Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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操作系统就开始运行。