<1> u-boot ,系统引导,没有它系统起不来
<2> kernel , 内核
<3> rootfs ,根文件系统
所谓移植就是把这三部分根据实际需求移植到板子上,让板子跑起来
2. 要明白并不是每次把u-boot 和kernel 等修改编译完了都要写到nandflash里面,完全可以现在内存里跑一下,在最后没问题的时候写到nan dflash里,就是平时说 的产品定型了写到板子上,直接在板子上启动(突然想起去年的时候问我的同学怎么把程序写到板子里去,当时他还搞的很神秘,知道毕业都没告诉我,呵呵,其实就是写到nandflash里啦).
3. 先说在内存跑的:
a. 烧写u-boot,先让引导系统跑起来
运行串口通信程序(putty)
Session ->Serial(选择usb通信)->Flow control->None
关闭开发板电源,将拨码开关SW1调至0001(usb启动模式)后打开电源
(因为此刻板子里没系统引导程序u-boot ,所以要选择usb启动)
启动dnw程序
Configuration -> Options -> Download Address(0x2ff80000); 并设置串口与波特率
加 载运行 USB Installer_DDR2.bin
USBPort à Transmit à Transmit,选中image目录下的USB Installer_DDR2.bin
加载运行 u-boot.bin
USBPort à Transmit à Transmit ,选中 image 目录下的 u-boot.bin
设置并保存环境变量
# printenv // 查看环境变量的值并按如下设置
# setenv baudrate 115200
# setenv ethaddr 11:22:33:44:55:66
# setenv gatewayip 192.168.1.1
# setenv serverip 192.168.1.100 // serverip要和虚拟机的ip相同
# setenv ipaddr 192.168.1.200 // ipaddr也可以是192.168.1.x其他值
# setenv netmask 255.255.255.0
保存环境变量
# saveenv
拷贝image/u-boot.bin到虚拟机/tftpboot目录下
测试网络是否连通 // 只能通过u-boot去ping虚拟机
#ping <serverip>
之后通过网络从服务器下载u-boot.bin到内存:
#tftp 20008000 u-boot.bin
# nand erase 0 40000
# nand write 20008000 0 40000
关闭开发板电源,将拨码开关SW1调至0000(nand启动模式)后打开电源
b. 通过网络加载内核和文件系统
# setenv bootcmd tftp 20008000 zImage\; go 20008000
# setenv bootargs root=nfs nfsroot=192.168.1.33:/source/rootfs console=ttySAC0,115200init=/linuxrc ip=192.168.1.200
# saveenv
设置虚拟机
拷贝/image/zImage到虚拟机/tftpboot目录下
解压rootfs.tgz到虚拟机/source目录下
修改虚拟机nfs配置文件/etc/exports,添加如下内容并重启nfs服务
/source/rootfs *(rw,sync,no_subtree_check,no_root_squash)
$sudo /etc/init.d/nfs-kernel-server restart
(注意 # setenv bootcmd tftp 20008000 zImage\; go 20008000
就是这句决定了内核在内存里跑的而不用写到nand里面 )
c. 重新启动开发板,u-boot自动加载、执行内核
4. 再说说 从nand flash加载内核和文件系统(也就是被我同学搞得很神秘的那部分了,呵呵)
拷贝rootfs.cramfs到虚拟机/tftpboot目录下
烧写内核镜像到nand flash
# tftp 20008000 zImage
# nand erase 100000 300000
# nand write 20008000 100000 300000
烧写文件系统镜像到nand flash
# tftp 20008000 rootfs.cramfs
# nand erase 400000 400000
# nand write 20008000 400000 400000
设置启动参数
# setenv bootdelay 3
#setenv bootcmd nand read 20008000 100000 300000\;go 20008000
#setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
# saveenv
重新启动开发板,u-boot自动加载、执行内核
(其实前面的都是先从服务器下载,再擦写nand的一段地址再写入到nand中,关键是
#setenv bootcmd nand read 20008000 100000 300000\;go 20008000
这句决定了启动方式是从nand开始的 )