空板的Linux写入完整操作过程:
1. boot的写入
连接硬件,把JTAG插头插入板子上的JL3上,注意1角的标志
在命令行下,输入:
SJF2440.exe /F:u-boot.bin
(1)选0:
(2)输入BLOCK输入:0
(3)开始写入
(4)写入完成
(5)写入完成,选2退出
2. tftp32的设置
打开Tftp32,选择内核二进制文件和文件系统目录所在的文件夹
3.超级终端的设置
(1)把板子的串口0(J9)和计算机的串口相接,
把板子的100M网口连接到HUB或者直接和计算机连接
检查系统的跳线是否正常,保证电源畅通
(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 ce000030008000
如下图:
文件系统的写入
(1)文件系统的传入:在u—boot提示符下输入
SMDK2440 #tftp 30008000myyaffs
(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 ce000030008000
将内核写入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 30008000myyaffs
该文件系统是经yaffs标准文件系统修改编译后的文件系统,定名为myyaffs,当然文件系统也有好多,例如开发板提供的文件系统是root_china.cramfs.
8.SMDK2440 #nandw 80 3ebec0 30008000
这里3ebec0是文件系统映像的长度,具体数值必须由你的tftp传输结果数据决定;
使用的暂存地址是0x30008000;文件系统的起始块号为0x80。
起始块选择0x80是由写入nandflash内的内核大小决定的,因内核最大为1.8M所以
Nandflash-k9f1208总大小为64M,block大小为16K+512字节,文件系统存放的块起始点为0x80,
0x79-c=0x6d=109
109*16K=1744000
所以从c到0x79的1.8M空间存放zimage内核,从0z80开始存放文件系统文件。
到此处nandflash的文件存储格式已经清楚了解:
0x00~~0x07存放bootloader程序,u-boot
0x08~~0x0b存放环境变量
0x0c~~0x79存放内核文件zimage
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.下面介绍一下s3c2440的地址分配,2440可以对9个bank进行寻址,每bank最大空间为128M,为了使处理器各个设备的访问互不干扰,我们将不同类的设备映射到不同的bank内。在2440平台上,除了bank0分配给norflash,bank3分配给了以太网控制器设备,bank6分配给了SDRAM,其他空间任未分配,用户扩展外部设备有很多的余地。
S3c2440提供了能够从nandflash启动的stemmingsstone机制,因此2440系统可以采用一片nandflash同时作为ROM和系统程序保持ROM,所以在nandflash地址0处写入u-boot就可以引导启动,当然此时bank0被分配给了nandflash,系统上电后从0地址开始运行,自然就开始运行映射到0地址的u-boot了。由于RAM被映射到bank6,所以RAM地址位于0x3000_0000开始的128M空间内。在系统运行时0x3000_0000~~0x3000_8000这部分RAM要有来保存系统变量,所以在我们进行文件传输过程中一般从0x3000_8000开始作为我们的临时RAM空间。
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: KingstonModel: DataTraveler 2.0Rev: PMAP
Type:Direct-AccessANSI 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.docelinuxrcplayzImage
adc.ogetnetrav2008zhtzh.rbf
在鄂尔多斯103项目中可从U盘拷贝应用程序到目标板
# cp adc.o /usr/driver/
# cp elinuxrc /linuxrc
# ps//显示当前运行的进程
PIDUidVmSize Stat Command
1 root1400 Sinit
2 rootS[keventd]
3 rootS[ksoftirqd_CPU0]
4 rootS[kswapd]
5 rootS[bdflush]
6 rootS[kupdated]
8 rootS[mtdblockd]
9 rootS[khubd]
43 root896 S/getnet
45 root944 S/keyd
49 root1400 Sinit
50 root1484 S-sh
51 rootS[usb-storage-0]
52 rootS[scsi_eh_0]
60 root1404 Rps
# kill 43//将进程43,45关掉
# kill 45
release ok!
# cp
Doc1.docadc.oelinuxrcgetnet
playrav2008/zImagezhtzh.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//拷贝完成后重新启动