一。通过sd引导u-boot。通过tftp烧写内核zimage镜像到SRAM。通过nfs网络文件服务 烧写
思路:
2.tftp 把zimage kenel镜像 传到0x50008000 [为什么是0x50008000???,请参考s3c6410 手册 memorymap这一章]
bootm 0x50008000
3.内核启动后 其中bootargs 根文件系统 通过nfs从主机的/nfsroot 传到系统的/dev/nfs下。 此处有个疑问 更文件系统还未烧写 。怎么会有/dev/nfs? 【/dev/nfs 是虚拟的】
注意:
配置tftp的根目录
/etc/default/tftpd-hpa
cp镜像文件到tft根目录
cp ~/up6410/images/* /tftpboot
第三步的前提是
网络文件系统要建立
安装nfs服务器
修改nfs配置 vim /etc/exports
重启服务
4.当然要设置好启动路径
bootargs== root=/dev/nfs rw nfsroot=192.168.1.254:/nfsroot ip=192.168.1.253 console=ttySAC0,115200
二.通过nand flash启动u-boot
0x00000000-0x00040000 : "Bootloader"
0x00040000-0x00400000 : "Kernel"
0x00400000-0x05400000 : "Rootfs"
0x05400000-0x10000000 : "File System"
思路:
1.写u-boot到nandflash 0x00000000-0x00040000
2.写内核到nandflash 0x00040000-0x00400000
3.写根文件系统到nandflash 0x00400000-0x05400000
4.minicom配置u-boot 内核 根文件系统环境变量。
5.arm板子板子上把跳线,跳到nandflash启动。重启启动。
三.
具体分析
在没有nand write之前nandflash里没没有u-boot等信息,minicom是没有信息打出的。。
对u-boot的设置,如果sd卡,则printe信息保存在对应的sd卡里面。
如果nandflash启动u-boot,则printe对应的信息,保存在nandflash里面。
用两张不同的sd卡,分别设置 保存的u-boot信息,在不同的sd卡上。
注意下面两个都是从sd启动u-boot的。【从那启动u-boot,是有板子上的跳线决定的】
比如sd卡1
[uplooking]# printe
bootdelay=3
baudrate=115200
gatewayip=192.168.1.1
netmask=255.255.255.0
ethaddr=64:31:50:a3:41:b5
ipaddr=192.168.1.253
serverip=192.168.1.254
bootargs_nfs=root=/dev/nfs rw nfsroot=192.168.1.254:/nfsroot ip=192.168.1.253 console=ttySAC0,115200
bootargs_nand=root=/dev/mtdblock2 rw console=ttySAC0,115200
bootcmd=nand read 0x50008000 0x40000 0x220000; bootm 0x50008000
bootargs=root=/dev/mtdblock2 rw console=ttySAC0,115200
stdin=serial
stdout=serial
stderr=serial
从printe打印的信息我们可以看出 内核是从nandflash上读到sram上的。
而根文件系统已经烧到nandflash上并且挂载在/dev/mtdblock2路径下。
sd卡2
[uplooking]# printe
bootdelay=3
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
ipaddr=192.168.1.253
serverip=192.168.1.254
gatewayip=192.168.1.1
netmask=255.255.255.0
bootargs_nand=root=/dev/mtdblock2 rw console=ttySAC0,115200
bootcmd=tftp 500000000 buzzer.bin;go 50000000
bootargs_nfs=root=/dev/nfs rw nfsroot=192.168.1.254:/nfsroot ip=192.168.1.253 console=ttySAC0,115200
bootargs== root=/dev/nfs rw nfsroot=192.168.1.254:/nfsroot ip=192.168.1.253 console=ttySAC0,115200
stdin=serial
stdout=serial
stderr=serial
从上面的打印信息可以看出。。。看出问题了。因为没有加载内核zImage。而是把一个buzzer烧到sdam里面。所以无法启动内核。
修改sd卡2的配置位如下
修改为:
set bootcmd tftp 0x50008000 zImage\; bootm 0x50008000
save
然后reset就ok了
[uplooking]# printe
bootdelay=3
baudrate=115200
gatewayip=192.168.1.1
netmask=255.255.255.0
ethaddr=64:31:50:a3:41:b5
ipaddr=192.168.1.253
serverip=192.168.1.254
bootargs_nfs=root=/dev/nfs rw nfsroot=192.168.1.254:/nfsroot ip=192.168.1.253 console=ttySAC0,115200
bootargs_nand=root=/dev/mtdblock2 rw console=ttySAC0,115200
bootcmd=nand read 0x50008000 0x40000 0x220000; bootm 0x50008000
bootargs=root=/dev/mtdblock2 rw console=ttySAC0,115200
stdin=serial
stdout=serial
stderr=serial