分类:
2008-09-22 13:09:35
空板的Linux写入完整操作过程:
1. boot的写入
连接硬件,把JTAG插头插入板子上的JL3上,注意1角的标志
在命令行下,输入:
SJF2440.exe /F:u-boot.bin
(1)选0:
(2)输入BLOCK输入:0
(3)开始写入
(5)写入完成,选2退出
2. tftp32的设置
打开Tftp32,选择内核二进制文件和文件系统目录所在的文件夹
3. 超级终端的设置
(1)把板子的串口0(J9)和计算机的串口相接,
把板子的
检查系统的跳线是否正常,保证电源畅通
(2)设置计算机的超级终端的串口的属性
设置终端为115200、8、N,1、N
(3)系统进行加电启动
接上5V单电源,系统启动
(4)出现U-boot,如下图所示
4. 设置参数
SMDK2440 # set bootdelay 3
SMDK2440 # set ipaddr 192.168.0.18
SMDK2440 # set serverip 192.168.0.120
SMDK2440 # set linux_arg noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttyS0
SMDK2440 # set bootcmd nandr c e0000 30008000\; bootm
SMDK2440 # save
内核的写入
(1)内核的传入:在u—boot提示符下输入:
SMDK2440 # tftp 30008000 zImage
如下图:
(2)内核的写入:通过以下命令将zImage 写入Nandflash:
SMDK2440 # nandw c e0000 30008000
如下图:
文件系统的写入
(1)文件系统的传入:在u—boot提示符下输入
SMDK2440 # tftp 30008000 myyaffs
(2)文件系统的写入: 在u—boot提示符下输入以下命令将文件系统写入:
SMDK2440 # nandw 80 3ebec0 30008000
这里3ebec0是文件系统映像的长度,具体数值必须由你的tftp 传输结果数据决定;
使用的暂存地址是0x30008000;文件系统的起始块号为0x80。
7. 系统的启动
按下复位键,系统可以启动了。系统可以正常启动,说明硬件工作正常。
注 释
1. 空板在nand flash和nor flash中没有bootloader时是不能启动的,(鄂尔多斯项目所用旧版103板nor flash没焊)这样需要先用JTAG下载器将2440的bootloader—U-boot.bin写进nand flash.一旦u-boot.bin被写入nandflash的BLOCK 0 ,目标板重新上电启动后,ram就会将u-boot调入运行。完成最初的bootloader启动。
2. 2440用来引导的bootloader不只一个版本他们均可引导cpu 启动,本项目用流行的u-boot来做bootloader。U-boot支持很多功能,例如tftp,硬件配置,串口命令交互,网络通信等等。所以当u-boot下载到nand flash后就可以通过tftp服务来完成大文件的下载传输了,比如linux内核和文件系统等。
3. u-boot运行后需做必要的配置
+++++++++++++++++++++++++++++++
SMDK2440 # set bootdelay 3
SMDK2440 # set ipaddr 192.168.0.18
SMDK2440 # set serverip 192.168.0.120
SMDK2440 # set linux_arg noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttyS0
SMDK2440 # set bootcmd nandr c e0000 30008000\; bootm
SMDK2440 # save
++++++++++++++++++++++++++++++++++++++++++++
//这里ipaddr设置目标板ip,serverip设置服务器ip即主机地址,此时用主机来做tftp服务器,主机ip为192.168.0.120所以在此设置服务地址为0.120,这两个地址可以任意,但必须在同一网段内。
Linux_arg 是linux的启动参数,按如上设置就可以。
Bootcmd是引导命令。
Save保存之后就可以启动tftp了。
4. 执行tftp时,主机需运行tftpd32.exe软件以启动tftp服务,且主机ip地址虚设为目标板指定的serverip,该例程第三步设为192.168.0.120.
5. SMDK2440 # tftp 30008000 zImage
Tftp服务将内核文件zimage通过网络传入Ram,起始地址为Ram的30008000处。
6.SMDK2440 # nandw c e0000 30008000
将内核写入nandflash的 c块处,所传文件大小为e0000,文件来源为Ram30008000处。内核的起始块号为c,8~b块是存放环境变量的空间。Zimage最大为1.8M(存放在c到0x79块)
此时目标板的bootloader和内核都下载到nandflash内了。重新上电内核将首先检测nandflash的0地址,开有无启动程序,此时检测到0地址的u-boot,则程序调用u-boot运行引导程序,在倒数3秒后程序将nandflash的内核程序调入ram,程序开始启动内核。
至此linux内核被成功加载运行。
7.对于大容量存储起来说文件系统还是必须的,它可以方便的管理存储器和它上的文件.所以在内核传输完成后一般要接着传输文件系统到nandflash.
文件系统的传入:在u—boot提示符下输入
SMDK2440 # tftp 30008000 myyaffs
该文件系统是经yaffs标准文件系统修改编译后的文件系统,定名为myyaffs,当然文件系统也有好多,例如开发板提供的文件系统是root_china.cramfs.
8. SMDK2440 # nandw 80 3ebec0 30008000
这里3ebec0是文件系统映像的长度,具体数值必须由你的tftp 传输结果数据决定;
使用的暂存地址是0x30008000;文件系统的起始块号为0x80。
起始块选择0x80是由写入nandflash内的内核大小决定的,因内核最大为1.8M所以
Nandflash-k
0x79-c=0x6d=109
109*16K=1744000
所以从c到0x79的1.8M空间存放zimage内核,从0z80开始存放文件系统文件。
到此处nandflash的文件存储格式已经清楚了解:
0x00 ~~ 0x07 存放bootloader程序,u-boot
0x08 ~~ 0x0b 存放环境变量
0x
0x80 ~~ 存放文件系统myyaffs
9.至此,bootloader程序u-boot.bin,内核文件zimage和文件系统myyaffs均已写入nandflash,重新上电系统就会在u-boot的引导下启动linux内核,加载文件系统,linux成功启动,尽情体验吧:)
10.linux的一个优势是可以在线更新,包括它的bootloader和内核以及应用文件,在系统上电运行已有的u-boot后在倒数3秒前按回车,
此时启动tftp服务
SMDK2440 # tftp 30008000 u-boot.bin
SMDK2440 # nandw 0 20000 30008000
u-boot更新完成,之后boot重新引导,系统就有新的bootloader引导系统了。
Linux内核和文件系统也可按上面步骤进行。
11.下面介绍一下s
S
12.下面介绍系统启动后103项目用到的一些常用操作;cf卡,usb设备的挂载。
# mount -t vfat /dev/ide/host0/bus0/target0/lun0/part1 /usr/
/dev/ide/host0/bus0/target0/lun0: p1
/dev/ide/host0/bus0/target0/lun0: p1
CF卡的挂载成功
在U盘插入后,系统找到U盘
# hub.c: new USB device usb-ohci-1, assigned address 2
scsi0 : SCSI emulation for USB Mass Storage devices
Vendor:
Type: Direct-Access ANSI SCSI revision: 02
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sda: 3905536 512-byte hdwr sectors (2000 MB)
sda: Write Protect is off
/dev/scsi/host0/bus0/target0/lun0:<7>usb-storage: queuecommand() called
p1
U盘加载成功,运行一下命令,进入U盘查看文件信息
# mount -t vfat /dev/scsi/host0/bus0/target0/lun0/part1 /tmp
# cd /tmp
# ls
Doc1.doc elinuxrc play zImage
adc.o getnet rav2008 zhtzh.rbf
在鄂尔多斯103项目中可从U盘拷贝应用程序到目标板
# cp adc.o /usr/driver/
# cp elinuxrc /linuxrc
# ps //显示当前运行的进程
PID Uid VmSize Stat Command
1 root 1400 S init
2 root S [keventd]
3 root S [ksoftirqd_CPU0]
4 root S [kswapd]
5 root S [bdflush]
6 root S [kupdated]
8 root S [mtdblockd]
9 root S [khubd]
43 root 896 S /getnet
45 root 944 S /keyd
49 root 1400 S init
50 root 1484 S -sh
51 root S [usb-storage-0]
52 root S [scsi_eh_0]
60 root 1404 R ps
# kill 43 //将进程43,45关掉
# kill 45
release ok!
# cp
Doc1.doc adc.o elinuxrc getnet
play rav2008/ zImage zhtzh.rbf
# cp getnet play /
**>> Block 184 retired
# cp zhtzh.rbf /fpga.rbf
**>> Block 183 retired
**>> Block 182 retired
**>> Block 181 retired
**>> Block 180 retired
**>> Block 179 retired
**>> Block 178 retired
**>> Block 177 retired
**>> Block 176 retired
**>> Block 175 retired
**>> Block 174 retired
**>> Block 173 retired
**>> Block 172 retired
**>> Block 171 retired
**>> Block 170 retired
**>> Block 169 retired
# cd /usr/
# cp fpga /
# reboot //拷贝完成后重新启动