* 此篇文章只介绍了往板子上烧写引导程序及系统,具体的詳細参数设置,或者是通过nfs方式引导系统并没有介绍,如有兴趣可参考Platform Group: 在我们的板子上通过NFS方式启动系统
* 此篇文章介绍了NewBox目前采用SPI Flash + SLC Nand方案
* 我们以前曾经采用过Nor Flash + Nand Flash方案, 现在已经不用了, 如有兴趣,可参考Platform Group: About Flash中的相关章节
[编辑] 工具及环境说明
* 本篇所需要烧写的bin文件, image文件, 请自行到ftp上下载, 可参考Lftp
* 在板子上通过Ftp下载所需要的文件, 所以需要在PC上搭建FTP服务器, 并把上一步下载的文件放到上边. 搭建步骤可参考About_nfs_tftp_service_安装
[编辑] Flash的分类
可以参考我的博客 http://blog.youkuaiyun.com/zzqhost/article/details/7019705
[编辑] NewBox使用的存储介质及分区方案
* SPI FLASH 分区:
1. uldr(64k)
2. uboot(256k)
3. ubootargs(64k)
4. 升级Flags&软件版本号(64k)
5. 频道号(64k)
6. 未使用(1.5M)
* SLC Nand 分区:
1. Kernel(16M), 其中 kernel1 (0M->8M),zImage(8M->12M,12M->16M, 烧了两遍, 双备份)
2. Recovery(16M)
3. Rootfs(64M)
4. System(128M)
5. Data(256M)
[编辑] 方案一: 手动烧写SPI Flash和Nand Flash
[编辑] 烧写SPI Flash
[编辑] SPI 上无uldr, uboot时,通过跳线烧写
1. 安装lrzsz和cutecom
* $ sudo apt-get install lrzsz
* $ sudo apt-get install cutecom
2. 插上跳线进入烧写模式
3. 使用cutecom烧入uldr, ubbot
* 设置串口:baud rate:115200,data bit:8 ,stop bit:1
* 击open device,将send file后按钮选为ymodem,再点send file按钮,分别发送uldr.bin(64k)和uart_boot.bin,发送完成uart_boot.bin时,注意点好input输入框,按键盘任意键中断
* 此时可以关闭cutecom,打开putty进行正常的uldr uboot kernel的烧写工作,烧写各个部分的过程参考后续步骤
[编辑] SPI 上原先已经存在uldr uboot, 并想更新现有的uldr, uboot
1. 设置板子的server ip和ip addr
* $ set serverip x.x.x.x
* $ set ipaddr x.x.x.x
2. 烧写uldr
* $ tftp uldr.bin
* $ sfc erase 0 10000
* $ sfc write 0 10000
3. 烧写uboot
* $ tftp u-boot.bin
* $ sfc erase 10000 60000
* $ sfc write 10000 60000
4. 注:u-boot的参数区存放在,160000到180000之间,大小为20000。刷新版本成功后,如有异常,请试着擦除参数区 sfc erase 160000 20000
[编辑] 烧写Nand Flash
* 烧写vmlinux.bin
o $ tftp vmlinux.bin
o $ nand erase 0 800000
o $ nand write 0 800000
* 烧写zImage
o $ tftp zImage
o $ nand erase 800000 800000
o $ nand write 800000 400000
o $ nand write c00000 400000
* 烧写recovery.img
o $ tftp recovery.img
o $ nand erase 1000000 1000000
o $ nand write 1000000 800000
o $ nand write 1800000 800000
* 烧写rootfs.img
o $ tftp rootfs.img
o $ nand erase 2000000 4000000
o $ nand write 2000000 4000000
* 烧写system.img
o $ tftp system.img
o $ nand erase 6000000 8000000
o $ nand write 6000000 8000000
[编辑] 方案二: 自动烧写SPI Flash和Nand Flash
[编辑] 步骤
* 将uldr.bin,uboot.bin,vmlinux.bin,zImage,recovery.img,rootfs.img,system.img放置到pc上安装的tftp路径下
* 设置板子的serverip和ipaddr(如前步已经设置则不用再设)
o $ set serverip x.x.x.x
o $ set ipaddr x.x.x.x
* 执行update命令
o $ update
o $ reset
[编辑] 注意事項
* u-boot的参数区存放在,50000到60000之间,大小为10000。刷新版本成功后,如有异常,请试着擦除参数区 sfc erase 50000 10000
* 这是新的烧写方式,需要uboot支持,如果update命令不支持,则需要更新uboot (tftp u-boot.bin; sfc erase 10000 60000; sfc write 10000 60000) 如板子上无uldr,uboot时,需要通过跳线来烧写uldr,uboot,如上面所述。
[编辑] 方案三: 通过网络nfs方式烧写系统至flash
* 可参考文章在我们的板子上通过NFS方式启动系统,与此步骤进行对比进行
[编辑] 搭建nfs服务器
1. 安装nfs服务器
* $ $sudo apt-get install nfs-kernel-server
2. 修改nsf配置文件
* $ vi /etc/exports
* 在文件中添加nfs的目录格式例如下
o /home/zjy *(rw,sync,no_subtree_check,no_root_squash)
3. 建立nfs的目录
* $ mkdir /home/user/nfs
4. 修改该目录的权限
* $ chmod 777 -R /home/user/nfs
5. 从新启动nfs
* $ sudo /etc/init.d/nfs-kernel-server restart
[编辑] 将要烧写的系统放到nfs服务器上
1. 将nfs.tar.gz拷贝到/home/xxx/nfs
2. 解压之
* $ sudo tar -zxvf nfs.tar.gz
3. 将从ftp上下载的rootfs.tar.gz,system.tar.gz和recoveryfs.tar.gz拷贝到/home/xxx/nfs
4. 解压缩三个包
* $ sudo tar -zxvf rootfs.tar.gz
* $ sudo tar -zxvf system.tar.gz
* $ sudo tar -zxvf recoveryfs.tar.gz
[编辑] 板子从nfs服务器启动
1. 在板子上设置nfs启动参数
* $ set nfsboot "noinitrd console=ttyS1,115200n8 mtdparts=nx_2017:16m@0k(kernel),8m@16m(recovery),8m@24m(recovery),64m@32m(rootfs),128m@96m(system),272m@224m(data) root=/dev/nfs nfsroot=x.x.x.x:/home/xxx/nfs ip=x.x.x.x rw"
2. 在板子上设置从nfs启动
* $ set bootargs $nfsboot
* $ set uboot_cmdline 1
3. 启动
* $ boot
[编辑] 烧写系统到板子的flash中
1. 启动停止后在putty终端执行脚本
* $ /format_ubi.sh
2. format_ubi.sh完成的是做ubifs文件系统和将rootfs,system,recovery拷贝到nand的ubifs中
3. 重启
* $ reboot
[编辑] 自带参数说明
* 自带参数的意思是指,烧完相应的模块,系统中已经存在此参数了.
* 内核kernel1中自带参数
o $ cmdline "noinitrd console=ttyS1,115200n8 mtdparts=nx_2017:16m@0k(kernel),8m@16m(recovery),8m@24m(recovery),64m@32m(rootfs),128m@96m(system),272m@224m(data) ubi.mtd=3 root=ubi0:rootfs rw rootfstype=ubifs androidboot.hardware=newbox"
* 内核zImage中自带参数
o $ cmdline "noinitrd console=ttyS1,115200n8 mtdparts=nx_2017:16m@0k(kernel),8m@16m(recovery),8m@24m(recovery),64m@32m(rootfs),128m@96m(system),272m@224m(data) ubi.mtd=2 root=ubi0:recovery rw rootfstype=ubifs androidboot.hardware=newbox"
* uboot中自带默认参数
o $ cmdline "noinitrd console=ttyS1,115200n8 mtdparts=nx_2017:16m@0k(kernel),8m@16m(recovery),8m@24m(recovery),64m@32m(rootfs),128m@96m(system),272m@224m(data) ubi.mtd=1 root=ubi0:recovery rw rootfstype=ubifs androidboot.hardware=newbox"
[编辑] 分类