s3c6410 ARM开发板烧写uboot新手入门笔记

1. 简要说明
JLink的调试功能、烧写Flash的功能都很强大,但是对于S3C2410、S3C2440的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢;烧写Nand Flash只是从理论上能够达到,但是还没有人直接实现这点。
本文使用一个间接的方法来实现对S3C2410、S3C2440开发板的Nor、Nand Flash的烧写。原理为:JLink可以很方便地读写内存、启动程序,那么可以把一个特制的程序下载到开发板上的SDRAM去,并运行它,然后使用这个程序来烧写。
2. 操作步骤
2.1 连接硬件
对于大多数的S3C2410、S3C2440开发板而言,它们所用的JTAG接口一般有3种。
但是市面上的JLink,大多只支持2.54mm间距20pin的JTAG接口,所以需要用到转接板。或者直接使用JLink的变种,如下面网址所示的两种改进版JLink:
http://item.taobao.com/auction/item_detail-db1-757658496f103f39f75c9c1a97a0333d.htm
http://item.taobao.com/auction/item_detail-0db1-23f1c5b6f377845658eeb8e092859552.htm
以mini2440为例,如下图接好JTAG线。
http://bbs.21ic.com/upfiles/img/20093/20093416117925.jpg




2.2 运行J-Link commander
J-Link commander启动后会自动化检测CPU,如果没有发现检测到CPU,就在里面执行usb命令连接JLink,再执行r命令识别处理器。
2.3 下载运行特制的程序
对于S3C2410、S3C2440处理器,它们内部有4K的SRAM,当使用Nor Flash启动时,地址为0x40000000;当使用Nand Flash启动时,地址为0。
对于S3C2410、S3C2440开发板,一般都外接64M的SDRAM。SDRAM能被使用之前,需要经过初始化。
所以,先把一个init.bin下载到内部SRAM去运行,它执行SDRAM的初始化;然后再下载一个比较大的程序,比如u-boot到SDRAM去动行,它将实现对Nor、Nand Flash的操作。
以下是在J-Link commander里的命令,假设init.bin、u-boot.bin在e:盘下。
1. speed 12000               //设置TCK为12M,下载程序时会很快
2. 下载并运行init.bin,这是用来初始化SDRAM的 
2.1 如果是NAND启动: 
loadbin e:\init.bin 0      
setpc 0 

2.2 如果是Nor启动: 
loadbin e:\init.bin 0x40000000      
setpc 0x40000000 
g
3. 下载特制的uboot: 

loadbin e:\u-boot.bin 0x33f80000 
setpc 0x33f80000 
g




现在,u-boot已经启动了,在串口工具上可以看到uboot的启动信息了,以后就可以通过网络、串口下载文件,然后使用u-boot里的命令进行烧写。
当然,如果没有网络,也不想忍受串口的速率,也可以通过jlink commander下载,比如: 

loadbin your_file.bin 0x30000000 
g
这时,你的文件已经被下载到SDRAM 0x30000000去了。 
后面的操作就是u-boot的命令了。




2.4 使用u-boot烧写Flash
以例子为例,假设需要烧写一个名为leds.bin的程序到Nor、Nand Flash,那么请参考:
(1).通过Jlink下载:
在J-Link commander里执行:
h
loadbin e:\leds.bin 0x30000000
g
注意leds.bin的大小
(2).通过u-boot烧写到Nor Flash:
在u-boot里执行:
protect off all        // 解锁
erase 0 2ffff         // 擦除从0地址开始的大小为0x30000的NOR Flash扇区(大小为可擦除块的整数倍,可以运行flash info命令查看)
cp.b 0x30000000 0 30000   // 把前面下载到0x30000000的程序烧写到NOR去
(3).通过u-boot烧写到Nand Flash:
在u-boot里执行:
nand erase 0 30000           // 擦除从0地址开始的大小为0x30000的Nnad Flash扇区
nand write.jffs2 30000000 0 30000   // 把前面下载到0x30000000的程序烧写到Nand去




注意,上面用的2ffff、30000等数字是192K,如果你的程序比较小,请自行设置。
init.bin用汇编写成,位置无关,可以在任何地方执行。 
u-boot.bin也是经过了我的大量修改,可以适用于友善之臂、优龙、扬创等等开发板,具备以下特点: 
1. 支持CFI、JEDEC接口的NOR FLASH 
2. 支持各种NAND FLASH 
3. 支持网络CS8900、DM9000 
4. 支持USB下载 
5. 支持烧写YAFFS文件系统映象
下载地址为(文件太大了,本站上传不了):http://ouravr.com/bbs/bbs_upload34876/files_12/ourdev_422781.rar
这两个程序是我为了基于FT2232D的OpenJTAG编写、修改的,后来想想在JLink上也可以使用。 
实际上,针对基于FT2232D的USB JTAG工具,我已经编写了一个NOR、NAND FLASH烧写器,目前JLINK烧写NAND的工具还在研究中。 
这是一种间接的、麻烦的、通过u-boot烧写NOR、NAND的方法,但是:速度很快,并且对于JLink似乎也没人搞定烧写NAND。




最近几天一直在学习bootloader的开发与移植,计划是根据vivi的代码,实现一个相对简单的bootloader,个人认为单纯的进行移植,不 能够对bootloader和底层的一些驱动原理有很深入的了解。 这里使用的开发板是友善的sbc2410x和友善的mini2440,为了能够跟踪bootloader的启动状态,使用J-Link进行调试。 Jlink版本是V8。这中间遇到了不少问题,在这里简单记录一下,自己备忘,也供有问题的朋友参考。新手上路,希望高手看了,对我写的不好的地方多批评 指出。 先简要记录几个问题: 
1.如何下载程序到开发板的NorFlash 
2.如何下载程序到开发板的NandFlash 
3.如何最小化地编译bootloader的各部分代码。
 4.如何分步测试各部分代码 
5.可不可以不烧写进flash,而在内存中进行调试,如何进行。 
6.Jlink如何进行单步调试。 
7.如何解决Jlink的unable to halt cpu,以及无法通过jlink 进行cpu 的reset操作,和从0x0开始单步调试。 这几个问题,最近几天基本都找到了答案,现在时间有点晚了,留下问题的引子,这几天逐个补充。 ----------------------2010-11-28补充 --------------------------------------------------------------- 
       1-5得单独用文章来说,6,7在这里简述一下,也算对以前说的做个补充。这段时间太忙,直到最近才有了点时间。 
       先来解决7: 要想实现7,先要有一些硬件条件,即,硬件复位电路要设计的没有问题。对JTAG接口各信号线的正常上下拉都要正常,还有就是REST信号的问题。很多板 子出现7的问题,多是REST信号没有设计正常,即,JTAG上加REST信号的时候,没有对CPU的RESET信号线进行复位。这种情况还算比较好的。 可以通过手动的方法来解决: 先在jlink commander中输入入"r"指令,不要按回车。然后另一只手准备按板子上的RESET键。按下回车,然后马上按板子上的RESET键。这样,多数情 况就能正常复位了。 有的时候会出现复位后CPU的PC不是处理0X0位置,这种情况下往往是硬件电路设计不好,信号不稳定,或者JTAG线过长造成的。解决办法,一般可以通 过JLINK的设置,降低工作频率。或者选用质量稍好的长度稍短的信号线。 
        解决6: jlink对于bootloader调试提供了很强大的功能。而且不一定需要使用ADS,RVDS或者KEIL之类的第三方的IDE,就可以。这就是 JLINK COMMANDER。在安装JLINK的驱动后就可以看到这个功能 一般使用方法是这样的: 
       (1)连接JTAG线到板子上,另一端连接JLINK(真是废话!) 
       (2)打开板子的电源 (3)打开JLINK COMMANDER 正常情况下,会出现 SEGGER J-Link Commander V4.20p ('?' for help) Compiled Nov 19 2010 15:55:19 DLL version V4.20p, compiled Nov 19 2010 15:55:07 Firmware: J-Link ARM V8 compiled Nov 19 2010 11:55:23 Hardware: V8.00 S/N: XXXXXXXXXX Feature(s): RDI,FlashDL,FlashBP,JFlash,GDBFull VTarget = 3.319V Info: TotalIRLen = 4, IRPrint = 0x01 Info: CP15.0.0: 0x41129200: ARM, Architecure 4T Info: CP15.0.1: 0x0D172172: ICache: 16kB (64*8*32), DCache: 16kB (64*8*32) Info: Cache type: Separate, Write-back, Format A Found 1 JTAG device, Total IRLen = 4: #0 Id: 0x0032409D, IRLen: 04, Unknown device Found ARM with core Id 0x0032409D (ARM9) JTAG speed: 100 kHz J-Link> 类似上面的信息。 
        我这里连接的是S3C2410X的CPU,所以被识别出来是 ARM处理器,指令体系是ARMv4T。同时,还发现了CP15协处理器(在24x0上是MMU)。发现了16K的 ICACHE,16K的DCACHE。连接速率是100K 正常连接后,可以做很多事。
       (4)可以做的事: 
        a.中断现在程序的运行,观察寄存器和内存甚至FLASH中的内容 在提示符后输入 "h" 指令,可以中断现在的运行。这时候,可以用"Regs"指令来查看通用寄存器的值。 也可以点击通知区域的这个图标: 在标签里选择 "CPU Regs" 同时,在指令行输入 mem 0x4800000,16 可以观察从0x48000000开始往后的0x16个字节的内容。ARM的地址空间整个在这4G上,包括SFR。所以,通过该指令可以观察寄存器,NOR FLASH,SRAM,DRAM中的内容。需要指出的是,某些寄存器的内容是不稳定的,在读取后其值就会发生变化(例如NAND控制器的NFDATA寄存 器,每读一次推出一个字节),所以读寄存器有可能会使程序运行不正常。 
         b.单步执行 在中断后,按s键,即可一行一行的执行指令。每执行一行s,会弹出一个PC=xxxx的地址,这是还未执行的,PC当前指向的地址。 另,如果想从头开始执行,可以先执行r指令,这时,PC会回到0x0,并处于halt状态。然后按s就可以单步执行,按g就可以连续执行。
         c.断点设置 还是在JLINK的WINDOW图形界面窗里,点击BreakPoint标签。 在上面的code里面右击,就可以 Set code breakpoint,选择代码模式Mode,处理ARM模式就选ARM,处理THUMB就选THUMB。 输入地址Address,点OK。 这样就设置了一个断点。在程序正常执行时,执行到指定行,就会中断下来。 这里需要指出的是,以上调试的内容都是汇编语言的模式,而且在JLINK里面只能看到编译好的二进制机器码。如果是ARM LINUX GCC编译的程序,就可以通过反编译得到对照码,调试运行。这些内容对于调试BOOTLOADER和裸机运行的汇编程序非常有意义。
         d.直接通过jlink设置寄存器或者内存的内容。 指令为 w1,w2,w4 分别对应写 1字节,2字节,4字节 指令格式(以w4为例) w4 0x48000000,0x1 将地址0x48000000的内容设置为0x1 这个功能的用途可以做一些测试,比如手工向NAND寄存器设置命令和地址,然后执行。以查看/修改NAND中的内容。 还有很多很实用的功能,这里不一一说明,JLINK有详细的说明书。另外,输入空指令,可以得到指令帮助。 ------------------------2010-12-1 补充 ------------------------------------------------- 
         针对复位问题,今天无意发现了个指令rsettype 。
        J-Link>rsettype Syntax: RSetType Types: 0 = NORMAL (Using RESET pin, halting CPU after Reset) 1 = BP0 (Using RESET pin, halting CPU with breakpoint @ 0) 2 = ADI (Software Reset for Analog Devices MCUs) 3 = NO_RESET (Nothing happens) 4 = HALT_WP (Using RESET pin, halting CPU after Reset using watchpoint) 5 = HALT_DBGRQ (Using RESET pin, halting CPU after Reset using DBGRQ) 6 = SOFT (Software Reset, resetting CPU regs only) 7 = HALT_DURING (Halt during RESET) 8 = SAM7 (Software reset for Atmel AT91SAM7 MCUs) 9 = LPC (Hardware reset for NXP LPC2xxx MCUs) J-Link> 指令的格式是 rsettype n n为0-9。 
       当CPU复位不正常时,可以尝试修改该值。 手头一块SBC2410X的板子,后来发现用6方式复位非常好。 而对于LPC2XXX的CPU,用9方式非常好。我估计对于s3c6410的板子,5方式可能比较好。




s3c2440核心板做好之后,一直无法使用J-LINK下载Bootloader 到norflash中,出现错误提示:


Unable to halt ARM core


 


这个问题困扰了我们一周多,今天终于找到了原因。


 


其实针对这个问题,晚上有很多说法。


主要是说可能是reset 没成功,或者nWAIT没有上拉等,造成没有成功停止CPU内核,于是JTAG无法正常与CPU通信。因此无法烧写程序到flash。


 


但是我们的板子没有这样的问题,另外,我们仔细检查了CPU与FLASH引脚之间的连线,仔细检查了OM[3:1]这几个引脚的连接方式,以及时电源,都没发现问题。


 


最后,我发现在买回来的核心板上面,多了一个电阻,仔细看原理图,发现这个电阻连接nBTA_FLT引脚,上拉。


而我们的板子上面,这个引脚悬空,查阅了芯片手册,说当这个引脚不使用的时候必须上拉。于是我把好的板子上的这个上拉电阻打掉,用好板做实验,出现了同样的问题,证明就是这个原因。






通过你的描述,问题有可能出在SDRAM和Nand Flash,你可以检查一下CPU和这两者之间的连线,有两个重点需要你注意:
1、CPU的芯片手册上有关于SDRAM的引脚配置,根据你板子上的型号和大小选择正确的地址线;
2、对于nand也是,cpu的OM引脚是负责选择nand启动的,还有一些是配置nand的。
我个人觉得很有可能是因为nand的问题挂死了cpu,楼主再试试。








s3c6410 ARM开发板烧写uboot新手入门笔记
s3c6410 ARM开发板烧写uboot新手入门笔记


ARM开发板是依赖 bootloader启动的,是1段小程序,等同x86系统的BIOS,作用是检测硬件并读取内核到内存
bootloader通常需要开发人员手动烧写到ARM板上,而BIOS通常固化在某个硬件里;
通常bootloader是不用自己写的,别人已写好,最多自己改一下,有时候直接就用了;
嵌入式Linux的bootloader最常用的是U-Boot,版本经常更新;
WinCE的bootloader当然是微软自己写的EBoot
向开发板烧写U-Boot之前,开发板的Nand Flash是空的,没有操作系统,更没有文件系统
向没有文件系统的目标板copy文件的过程也就是"烧写"
为了解决这个问题,三星公司在硬件上提供了一种烧写机制,叫dnw,
就是通过USB线把PC机的U-Boot文件上传到目标板上;dnw是基于libusb标准库做的
同时烧写也需要两端都有软件支持,一端是u-boot(u-boot里有dnw),另一端是一个专门的dnw小软件;


烧写的过程:
①usb线连接pc机和目标板;
②此时目标板是空的,需要设置sd卡启动,事先制做的sd卡有个uboot,这样目标板的uboot就起来了
③在PC端通过超级终端等串口软件操作目标板的uboot,输入命令 # dnw 50008000 
    这句话意思是启动目标板的usb连接并设置目标板接收USB数据的内存起始地址为0x50008000
④在PC端启动那个dnw软件,有windows版也有linux版的,道理相同,都需要libusb库支持
⑤PC端dnw软件:与目标板的USB线路连通后,再发送u-boot.bin文件到目标板
    这里发送文件是指发到目标板的内存中,起始地址是0x50008000,注意,这时并没有写到目标板的rand flash
⑥在PC端通过超级终端等串口软件操作目标板的uboot,把目标板内存中的u-boot.bin文件写到rand flash
⑦把目标板内存数据写到rand flash也是uboot命令提供的,其实这时也只有uboot能用;
⑧这里目标板的rand flash里已经烧写好u-boot.bin了,关掉目标板,再设置rand启动就可以了;


在windows下有个dnw软件,是超级终端和dnw和合集用起来很方便,


在Linux下分别用到 minicom 和 dnw 这两个软件
安装minicom # rpm -ivh minicom-2.00-12.i386.rpm
进入minicom # minicom
设置minicom ctrl+A O(选择serial port setup)
 A - /dev/ttyUSB0
 E - 115200 8N1
 F - No
 G - No
 Save setup as dfl (/etc/minirc.dfl)  
 ctrl + a x 退出minicom


dnw,包括usb驱动和写入工具


安装secbulk驱动
加载模块到Linux内核: # insmod ./secbulk.ko (注意要在root权限下)
# dmesg (查看是否加载成功)   
secbulk:secbulk loaded   
usbcore: registered new interface driver secbulk (看到这样两行就说明成功了)


感觉不安装这个驱动也没有事,usb通常都是免驱动的啊,可能是在开发板上安的;


SD卡启动


SMDK6410 # dnw 50008000


DNW # ./dnw3 ./u-boot.bin


OTG cable Connected!
Now, wating for DNW to transmit data
Down Done!! Down Address: 0x50008000, Download Filesize:0x30000
Checksum is being calculated.
Checksum O.K.


SMDK6410 # nand erase 0 100000
SMDK6410 # nand write.uboot 50008000 0 100000 //write(.uboot是参数不能改,且只在sd-boot中实现)


nand启动


// 写内核
SMDK6410 # dnw 50008000 
DNW # ./dnw3 ./zImage
SMDK6410 # nand erase 100000 500000
SMDK6410 # nand write.e 50008000 100000 500000 //write(.e是参数不能改)




// 写文件系统cramfse,也就是Qtopia2.2.0
SMDK6410 # dnw 50008000 
DNW # ./dnw3 ./FORLINX_6410_touch.cramfse
SMDK6410 # nand erase 600000 8000000
SMDK6410 # nand write.e 50008000 600000 8000000




// 写yaffs文件系统,也就是Qtopia4.4.3
copy文件MY6410_yaffs2_v3.0.tar.gz至SD卡
完全启动开发板Linux
SMDK6410 # tar zxvf /sdcard/MY6410_yaffs2_v3.0.tar.gz -C /mnt/disk   或
SMDK6410 # tar zxvf /udisk/MY6410_yaffs2_v3.0.tar.gz -C /mnt/disk
重启进入uboot


SMDK6410 # setenv bootargs root=/dev/mtdblock3 rootfstype=yaffs2 console=ttySAC0,115200
SMDK6410 # saveenvsd
SMDK6410 # reset


//原来的env
SMDK6410 # printenv
bootargs=root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200
bootcmd=nand read 0xc0008000 0x100000 0x500000;bootm 0xc0008000
bootdelay=1
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
ipaddr=192.168.1.20
serverip=192.168.1.10
gatewayip=192.168.1.1
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial


 


烧写uboot、内核及文件系统的方法  
2011-04-22 17:10:36|  分类: 嵌入式系统 |  标签:uboot  文件系统  nand  内核  挂载   |字号大中小 订阅


 
 


下面总结的是做这个项目使用过的方法,不一定全面,仅供参考。


1、uboot的烧写


下载Uboot分为两个步骤,第一步将uboot下载到系统的扩展RAM并运行,第二步通过内存中运行的uboot把整个uboot下载到内存再烧写到nandflash


第一步下载uboot到扩展RAM


首先使用短路块选择系统从内部启动,复位或者上电就会在串口软件(115200 8 n 1)看到打印的信息LPC31xx READY FOR PLAIN IMAGE>,此时使用串口软件的发送文件选择发送u-boot-init.bin,再发送u-boot.bin,之后就会在RAM中启动uboot,打印输出启动信息,并进行倒计时,此时发送任意字符给系统,停止计时,关闭串口软件,使用超级终端连接系统。


第二步烧写uboot到nandflash


       在超级终端中输入loady命令,再使用传送/发送文件,选择Ymodem协议,发送u-boot.bin,接收完成后,先擦除nand erase,可以全擦掉(不用给参数),也可以使用使用参数指定区域,一般第一次要全擦,而后使用nand_params将flash的信息写入其中,最后使用nand write 0x30001000 0x4000 0x100000


 其中,0x30001000 是uboot在内存中的地址;


0x4000 uboot在flash中存放的起始地址,需要根据实际的分区情况而定;


0x100000 是uboot的大小,不小于实际大小;


至此,将uboot写入到nandflash中,可以将短路跳线去掉,使其从nandflash启动。


2、内核的烧写


在uboot启动倒计时,击任意键停止,输入loady,与uboot烧写相似,使用的命令主要有:nand erase 0x200000(地址) 0x200000(大小)


        nand write 0x30001000 0x200000 0x200000


3、文件系统的烧写


文件系统的烧写,可以通过与内核相似的方法使用串口烧写,也可以通过挂载nfs使用mtd_debug 工具烧写,由于文件系统较大,使用第一种方式会慢一些。


串口烧写使用到的命令


loady


nand erase 0x600000 0x3a00000(目前的分区情况)


nand write 0x30001000 0x600000 0x800000(实际大小)


使用nfs烧写用到的命令


       mtd_debug erase /dev/mtd2 0 0x3a00000


       mtd_debug write /dev/mtd2 0 0x800000 ubi.img


       各项的含义可以参考mtd_debug 的帮助,直接mtd_debug 即可获取说明,其中的len可以使用十进制数,但是在uboot中是不可以的,不加0x也会认为是十六进制。


4、启动挂载文件系统的选项


       在uboot中可以通过环境变量设置启动的选项,一般只需要配置挂载的文件系统是nfs还是ubi,及内核启动选项。


挂载nanflash中的ubifs:


setenv bootargs console=ttyS0,115200n8 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs;


挂载129.1.4.199上/rfs/rootfs,并且本机的ip设为129.1.31.33等:


setenv bootargs noinitrd root=/dev/nfs console=ttyS0,115200n8 nfsroot=129.1.4.199:/rfs/rootfs,proto=tcp,nfsvers=3,nolock ip=129.1.31.33:129.1.4.199:129.1.88.1:255.255.0.0::eth0:off


启动内核的选项:


setenv bootcmd nand read 0x30001000 0x200000 0x200000\; bootm 0x30001000\;


修改过uboot的环境变量都需要saveenv命令保存修改




















本人中午的时候发帖子询问网口不通的情况下怎样下载内核和文件系统,到现在也没人回应,还好经过一个下午的摸索,问题终于解决了,煎熬,串口下载一个10M的文件系统,居然2个多小时,周立功给的串口工具下的快,经测试丢包,所以只能用超级终端来实现网口不通的情况下下载内核和文件系统。
1:打开XP下的超级终端
2:启动u-boot如下:
u-boot#_
3:load 0x80008000(loadaddr)此地址根据自己的开发板确定,S3C2410的是0x30008000.
    u-boot#loadb 0x80008000
##Ready for binary (kermit) download to 0x80008000 at 115200bps ...
4:在超级终端的菜单选择,传送->发送文件,选择好协议和文件名后,按发送
协议要选择kermit
   
5:设置好协议和文件后,按发送。
6:把下载到内存中的数据写到nandflash中。(下面的命令要依据自己开发板uboot设置决定)
u_boot#  nand erase clean $(kerneladdr) $(filesize);
nand write.jffs2 $(loadaddr) $(kerneladdr) $(filesize);
setenv kernelsize $(filesize);
saveenv
7:重新启动开发板,内核解压成功,说明内核以写到nandflash中
Startingkernel...
UncompressingLinux.............................................................
.........................................done,bootingthekernel.


8:用同样的方法,串口下载文件系统,还时把文件下载在内存0x80008000处
u_boot#loadb 0x80008000


9:把内存中的数据写到nandflash中(下面的命令一句自己开发板中的具体设置决定。和我这个不一样,我这是LPC3250)
u_boot# uprootfs=mtdparts default;
nand erase rootfs;
ubi part rootfs;
ubi create  rootfs;
ubi write $(loadaddr) rootfs $(filesize)


10:重启开发板,挂载成功,进入linux命令模式




还有就是下载好文件系统和内核以后,可执行程序的下载通过:






用windows和linux之间交互,可以用WinScp软件进行友好的带有windows界面的文件传输,下面介绍一种用命令行实现linux与windows的跨平台的文件传输。


1.安装lrz
(lrz下载地址 http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz)
首先设置安装路径:
cd /usr/local/apps
下载安装文件的压缩包:
wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
解压文件:
tar zxvf lrzsz-0.12.20.tar.gz
(rm -f lrzsz-0.12.20.tar.gz)----可选
进入安装文件目录:
cd lrzsz-0.12.20/
具体安装操作:
./configure
make
make install
链接操作:
ln /usr/local/bin/lrz rz
...
完成安装


2.lrz的使用方法
lrz与ssh有关的两个命令可以提供很方便的操作:
      sz:将选定的文件发送(send)到本地机器
      rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
当然,还可以设置一下目录了:
设置一下上传和下载的默认目录
options–>session options–>X/Y/Zmoderm 下可以设置上传和下载的目录
剩下的你只要在用SecureCRT登陆linux终端的时候:
发送文件到客户端:sz filename
zmodem接收可以自行启动.
从客户端上传文件到linux服务端:
只要服务端执行 : rz
然后在 SecureCRT 里选文件发送,协议 zmodem
简单吧,如果你以前一直使用ssh,而又没有对外开放ftp服务,你就直接使用这种方式来传输你的文件


工作比较忙,图就不传了。
本人中午的时候发帖子询问网口不通的情况下怎样下载内核和文件系统,到现在也没人回应,还好经过一个下午的摸索,问题终于解决了,煎熬,串口下载一个10M的文件系统,居然2个多小时,周立功给的串口工具下的快,经测试丢包,所以只能用超级终端来实现网口不通的情况下下载内核和文件系统。
1:打开XP下的超级终端
2:启动u-boot如下:
u-boot#_
3:load 0x80008000(loadaddr)此地址根据自己的开发板确定,S3C2410的是0x30008000.
    u-boot#loadb 0x80008000
##Ready for binary (kermit) download to 0x80008000 at 115200bps ...
4:在超级终端的菜单选择,传送->发送文件,选择好协议和文件名后,按发送
协议要选择kermit
   
5:设置好协议和文件后,按发送。
6:把下载到内存中的数据写到nandflash中。(下面的命令要依据自己开发板uboot设置决定)
u_boot#  nand erase clean $(kerneladdr) $(filesize);
nand write.jffs2 $(loadaddr) $(kerneladdr) $(filesize);
setenv kernelsize $(filesize);
saveenv
7:重新启动开发板,内核解压成功,说明内核以写到nandflash中
Startingkernel...
UncompressingLinux.............................................................
.........................................done,bootingthekernel.


8:用同样的方法,串口下载文件系统,还时把文件下载在内存0x80008000处
u_boot#loadb 0x80008000


9:把内存中的数据写到nandflash中(下面的命令一句自己开发板中的具体设置决定。和我这个不一样,我这是LPC3250)
u_boot# uprootfs=mtdparts default;
nand erase rootfs;
ubi part rootfs;
ubi create  rootfs;
ubi write $(loadaddr) rootfs $(filesize)


10:重启开发板,挂载成功,进入linux命令模式




还有就是下载好文件系统和内核以后,可执行程序的下载通过:






用windows和linux之间交互,可以用WinScp软件进行友好的带有windows界面的文件传输,下面介绍一种用命令行实现linux与windows的跨平台的文件传输。


1.安装lrz
(lrz下载地址 http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz)
首先设置安装路径:
cd /usr/local/apps
下载安装文件的压缩包:
wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
解压文件:
tar zxvf lrzsz-0.12.20.tar.gz
(rm -f lrzsz-0.12.20.tar.gz)----可选
进入安装文件目录:
cd lrzsz-0.12.20/
具体安装操作:
./configure
make
make install
链接操作:
ln /usr/local/bin/lrz rz
...
完成安装


2.lrz的使用方法
lrz与ssh有关的两个命令可以提供很方便的操作:
      sz:将选定的文件发送(send)到本地机器
      rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
当然,还可以设置一下目录了:
设置一下上传和下载的默认目录
options–>session options–>X/Y/Zmoderm 下可以设置上传和下载的目录
剩下的你只要在用SecureCRT登陆linux终端的时候:
发送文件到客户端:sz filename
zmodem接收可以自行启动.
从客户端上传文件到linux服务端:
只要服务端执行 : rz
然后在 SecureCRT 里选文件发送,协议 zmodem
简单吧,如果你以前一直使用ssh,而又没有对外开放ftp服务,你就直接使用这种方式来传输你的文件


工作比较忙,图就不传了。
本人中午的时候发帖子询问网口不通的情况下怎样下载内核和文件系统,到现在也没人回应,还好经过一个下午的摸索,问题终于解决了,煎熬,串口下载一个10M的文件系统,居然2个多小时,周立功给的串口工具下的快,经测试丢包,所以只能用超级终端来实现网口不通的情况下下载内核和文件系统。
1:打开XP下的超级终端
2:启动u-boot如下:
u-boot#_
3:load 0x80008000(loadaddr)此地址根据自己的开发板确定,S3C2410的是0x30008000.
    u-boot#loadb 0x80008000
##Ready for binary (kermit) download to 0x80008000 at 115200bps ...
4:在超级终端的菜单选择,传送->发送文件,选择好协议和文件名后,按发送
协议要选择kermit
   
5:设置好协议和文件后,按发送。
6:把下载到内存中的数据写到nandflash中。(下面的命令要依据自己开发板uboot设置决定)
u_boot#  nand erase clean $(kerneladdr) $(filesize);
nand write.jffs2 $(loadaddr) $(kerneladdr) $(filesize);
setenv kernelsize $(filesize);
saveenv
7:重新启动开发板,内核解压成功,说明内核以写到nandflash中
Startingkernel...
UncompressingLinux.............................................................
.........................................done,bootingthekernel.


8:用同样的方法,串口下载文件系统,还时把文件下载在内存0x80008000处
u_boot#loadb 0x80008000


9:把内存中的数据写到nandflash中(下面的命令一句自己开发板中的具体设置决定。和我这个不一样,我这是LPC3250)
u_boot# uprootfs=mtdparts default;
nand erase rootfs;
ubi part rootfs;
ubi create  rootfs;
ubi write $(loadaddr) rootfs $(filesize)


10:重启开发板,挂载成功,进入linux命令模式




还有就是下载好文件系统和内核以后,可执行程序的下载通过:






用windows和linux之间交互,可以用WinScp软件进行友好的带有windows界面的文件传输,下面介绍一种用命令行实现linux与windows的跨平台的文件传输。


1.安装lrz
(lrz下载地址 http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz)
首先设置安装路径:
cd /usr/local/apps
下载安装文件的压缩包:
wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
解压文件:
tar zxvf lrzsz-0.12.20.tar.gz
(rm -f lrzsz-0.12.20.tar.gz)----可选
进入安装文件目录:
cd lrzsz-0.12.20/
具体安装操作:
./configure
make
make install
链接操作:
ln /usr/local/bin/lrz rz
...
完成安装


2.lrz的使用方法
lrz与ssh有关的两个命令可以提供很方便的操作:
      sz:将选定的文件发送(send)到本地机器
      rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
当然,还可以设置一下目录了:
设置一下上传和下载的默认目录
options–>session options–>X/Y/Zmoderm 下可以设置上传和下载的目录
剩下的你只要在用SecureCRT登陆linux终端的时候:
发送文件到客户端:sz filename
zmodem接收可以自行启动.
从客户端上传文件到linux服务端:
只要服务端执行 : rz
然后在 SecureCRT 里选文件发送,协议 zmodem
简单吧,如果你以前一直使用ssh,而又没有对外开放ftp服务,你就直接使用这种方式来传输你的文件


工作比较忙,图就不传了。
本人中午的时候发帖子询问网口不通的情况下怎样下载内核和文件系统,到现在也没人回应,还好经过一个下午的摸索,问题终于解决了,煎熬,串口下载一个10M的文件系统,居然2个多小时,周立功给的串口工具下的快,经测试丢包,所以只能用超级终端来实现网口不通的情况下下载内核和文件系统。
1:打开XP下的超级终端
2:启动u-boot如下:
u-boot#_
3:load 0x80008000(loadaddr)此地址根据自己的开发板确定,S3C2410的是0x30008000.
    u-boot#loadb 0x80008000
##Ready for binary (kermit) download to 0x80008000 at 115200bps ...
4:在超级终端的菜单选择,传送->发送文件,选择好协议和文件名后,按发送
协议要选择kermit
   
5:设置好协议和文件后,按发送。
6:把下载到内存中的数据写到nandflash中。(下面的命令要依据自己开发板uboot设置决定)
u_boot#  nand erase clean $(kerneladdr) $(filesize);
nand write.jffs2 $(loadaddr) $(kerneladdr) $(filesize);
setenv kernelsize $(filesize);
saveenv
7:重新启动开发板,内核解压成功,说明内核以写到nandflash中
Startingkernel...
UncompressingLinux.............................................................
.........................................done,bootingthekernel.


8:用同样的方法,串口下载文件系统,还时把文件下载在内存0x80008000处
u_boot#loadb 0x80008000


9:把内存中的数据写到nandflash中(下面的命令一句自己开发板中的具体设置决定。和我这个不一样,我这是LPC3250)
u_boot# uprootfs=mtdparts default;
nand erase rootfs;
ubi part rootfs;
ubi create  rootfs;
ubi write $(loadaddr) rootfs $(filesize)


10:重启开发板,挂载成功,进入linux命令模式




还有就是下载好文件系统和内核以后,可执行程序的下载通过:






用windows和linux之间交互,可以用WinScp软件进行友好的带有windows界面的文件传输,下面介绍一种用命令行实现linux与windows的跨平台的文件传输。


1.安装lrz
(lrz下载地址 http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz)
首先设置安装路径:
cd /usr/local/apps
下载安装文件的压缩包:
wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
解压文件:
tar zxvf lrzsz-0.12.20.tar.gz
(rm -f lrzsz-0.12.20.tar.gz)----可选
进入安装文件目录:
cd lrzsz-0.12.20/
具体安装操作:
./configure
make
make install
链接操作:
ln /usr/local/bin/lrz rz
...
完成安装


2.lrz的使用方法
lrz与ssh有关的两个命令可以提供很方便的操作:
      sz:将选定的文件发送(send)到本地机器
      rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
当然,还可以设置一下目录了:
设置一下上传和下载的默认目录
options–>session options–>X/Y/Zmoderm 下可以设置上传和下载的目录
剩下的你只要在用SecureCRT登陆linux终端的时候:
发送文件到客户端:sz filename
zmodem接收可以自行启动.
从客户端上传文件到linux服务端:
只要服务端执行 : rz
然后在 SecureCRT 里选文件发送,协议 zmodem
简单吧,如果你以前一直使用ssh,而又没有对外开放ftp服务,你就直接使用这种方式来传输你的文件


工作比较忙,图就不传了。
本人中午的时候发帖子询问网口不通的情况下怎样下载内核和文件系统,到现在也没人回应,还好经过一个下午的摸索,问题终于解决了,煎熬,串口下载一个10M的文件系统,居然2个多小时,周立功给的串口工具下的快,经测试丢包,所以只能用超级终端来实现网口不通的情况下下载内核和文件系统。
1:打开XP下的超级终端
2:启动u-boot如下:
u-boot#_
3:load 0x80008000(loadaddr)此地址根据自己的开发板确定,S3C2410的是0x30008000.
    u-boot#loadb 0x80008000
##Ready for binary (kermit) download to 0x80008000 at 115200bps ...
4:在超级终端的菜单选择,传送->发送文件,选择好协议和文件名后,按发送
协议要选择kermit
   
5:设置好协议和文件后,按发送。
6:把下载到内存中的数据写到nandflash中。(下面的命令要依据自己开发板uboot设置决定)
u_boot#  nand erase clean $(kerneladdr) $(filesize);
nand write.jffs2 $(loadaddr) $(kerneladdr) $(filesize);
setenv kernelsize $(filesize);
saveenv
7:重新启动开发板,内核解压成功,说明内核以写到nandflash中
Startingkernel...
UncompressingLinux.............................................................
.........................................done,bootingthekernel.
8:用同样的方法,串口下载文件系统,还时把文件下载在内存0x80008000处
u_boot#loadb 0x80008000
9:把内存中的数据写到nandflash中(下面的命令一句自己开发板中的具体设置决定。和我这个不一样,我这是LPC3250)
u_boot# uprootfs=mtdparts default;
nand erase rootfs;
ubi part rootfs;
ubi create  rootfs;
ubi write $(loadaddr) rootfs $(filesize)
10:重启开发板,挂载成功,进入linux命令模式


还有就是下载好文件系统和内核以后,可执行程序的下载通过:
 
用windows和linux之间交互,可以用WinScp软件进行友好的带有windows界面的文件传输,下面介绍一种用命令行实现linux与windows的跨平台的文件传输。
1.安装lrz
(lrz下载地址 http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz)
首先设置安装路径:
cd /usr/local/apps
下载安装文件的压缩包:
wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
解压文件:
tar zxvf lrzsz-0.12.20.tar.gz
(rm -f lrzsz-0.12.20.tar.gz)----可选
进入安装文件目录:
cd lrzsz-0.12.20/
具体安装操作:
./configure
make
make install
链接操作:
ln /usr/local/bin/lrz rz
...
完成安装
2.lrz的使用方法
lrz与ssh有关的两个命令可以提供很方便的操作:
      sz:将选定的文件发送(send)到本地机器
      rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
当然,还可以设置一下目录了:
设置一下上传和下载的默认目录
options–>session options–>X/Y/Zmoderm 下可以设置上传和下载的目录
剩下的你只要在用SecureCRT登陆linux终端的时候:
发送文件到客户端:sz filename
zmodem接收可以自行启动.
从客户端上传文件到linux服务端:
只要服务端执行 : rz
然后在 SecureCRT 里选文件发送,协议 zmodem
简单吧,如果你以前一直使用ssh,而又没有对外开放ftp服务,你就直接使用这种方式来传输你的文件
工作比较忙,图就不传了


(最近在论坛上,很多朋友提到关于bootlaoder的问题,所以把自己的一些理解整理一下,做一个说明,希望对大家有帮助,如果你觉得有问题的,可以用任何方式,任何语气提出,本人绝对不会象0bug大师那样,呵呵。)


     一.bootloader的作用


       其实bootloader主要的必须的作用只有一个:就是把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行。而操作系统文件的来源,可以是flash,sd card,PC(可以通过网络,USB,甚至串口传输)等等,所谓的EBOOT,UBOOT,其实就是表明了系统文件是通过Ethernet或者USB从PC传输过去的。当然,为了实现这个功能(以及其它附加功能),我们必须对硬件做一些必要的初始化,这个也是必须的(废话!)。除了这个必须的,现在的bootloader还常常会加入以下功能:


      1.将操作系统映像文件写入FLASH/硬盘等:读取过来的操作系统文件,除了可以拷贝到RAM中直接运行,还可以烧录到FLASH,或者写入硬盘永久保存,这样下次就可以直接从本机来读取操作系统映像。


     2.硬件诊断:如同PC的BIOS一样,检测硬件是否正常功能。


     3.显示一个LOGO,因为拷贝操作系统文件和启动操作系统需要时间,所以产品化的设备,一般需要在这段时间显示一个LOGO。


 


    二.bootloader是不是必须的


      bootloader并不是必须的,如果我们的硬件有足够大的norflash,并且实现了XIP技术,那么WinCE 操作系统可以直接在norflash里面运行起来,不需要将它复制到RAM中去,所以bootloader就失去了作用。


       但是考虑到成本因素,现在的硬件一般都不会配置这么大的norflash,image文件都存储在nand flash里面,所以都会用到bootloader。


 


    三.关于nboot和eboot


    国内很多人做WinCE都是使用Samsung的2410或者2440入门的,所以对nboot和eboot是最熟悉的。eboot是微软在WinCE里面提供的开放源代码的一个bootloader的框架,因为它默认的是使用ethernet从PC下载image而得名,使用该框架,根据自己的硬件做一些修改就可以直接拿来用了,那么nboot又是怎么回事呢?


    之所以需要nboot(注:三星的后续产品中,nboot已经改名为stepldr,ldr是looder的缩写,step是stepstone的意思,这是三星系列CPU为解决nand启动而内置的一小块RAM),是和硬件紧密相关的。我们在设计硬件的时候,ROM部分可以只使用norflash,也可以使用1片小容量的norflash+大容量的nandflash,还可以只使用nandflash。第一种方案,可以不用bootloader,也可以只使用eboot;第二种方案,把eboot放到norflash中,image放在nandflash中,并将硬件设置为norflash启动模式,也不用nboot。只有第3种方案,才需要使用nboot,这是为什么呢?


     我们知道nandflash本身不能运行程序,它里面的内容必须拷贝到RAM中才能运行,但是CPU上电后,RAM中是空的,谁来执行这个拷贝的工作呢?三星的解决方案,就是内置了一小块RAM(stepstone),然后从硬件上实现CPU上电后先读取nand flash最开始的一段代码到stepstone中去(当然,要设置硬件为nandflash启动方式),然后从stepstone起始处(被设置为RAM的0地址)去执行。这个stepstone一般很小(2410,2440是4K),所以它没办法放下一个功能复杂的bootloader(比如eboot),只能放一个功能很简单的,这就是需要nboot的原因了。nboot的功能十分单一,就是从nandflash复制image到RAM中去,然后跳转执行。这里的image可以是eboot的(一般开发阶段这样做),也可以是OS的。


     优龙的开发板提供了一种叫做BIOS的bootloader,它远远超出了4K的限制,但是还可以在nandflash启动方式下正常运行,这是为什么呢?原来,它实现了2次加载,也就是说CPU上电后自动加载了4K代码,这4K代码又将整个bootloader重新拷贝到RAM中再执行,要实现这样的功能要对链接器做一些设置,使“拷贝”功能的代码必须放到前4K里面去。


 


   总之,bootloader是需要直接和硬件打交道,不同的硬件设计,就会影响到它的实现,所以了解硬件的设计是理解bootloaer的第一步。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值