#烧录 参考: 03- Tiny6410刷机指南.pdf

假设拿到的Tiny6410开发板没有提前下载任何程序,包括Bootloader.

##Bootloader - Superboot

Superboot是FriendlyARM公司提供的Bootloader(非开源),提供USB下载功能。
只要烧写了Superboot, 就可以通过USB下载内核、文件系统到板子的Flash中。

因为Nand Flash现在还没有内容,现在只有通过SD卡启动。

完全空白的 SD 卡是不能直接启动 6410 开发板的,必须先在 PC 上使用特殊的烧写软 件把 BIOS(也可以称为 bootloader)写入 SD 卡才可以,并且写入的这个 BIOS 是无法在电脑上直接看到的。

一般市场上买到的 SD 卡为全盘 FAT32 格式,如果卡中存放了很多数据,强制烧写就可能会不知不觉中破坏这些数据;
基于此原因考虑, FriendlyARM在 Vista/Winows7 中,先把 SD 卡自动分割为普通的 FAT32 格式区(自动命名卷标为"FriendlyARM")和无格式区(占 130M) 两部分,烧写软件将会依据卷标名称作为标志,把 bootloader 烧写到无格式区,这样就不会 破坏普通 FAT32 格式区中的数据了。

Windows 7,使用FriendlyARM提供的SD卡烧录工具SD-Flasher.exe:

  1. SD卡连接Window 7(提前备份SD卡数据,下面的操作会格式化SD卡)

  2. 以管理员身份运行SD-Flasher.exe

  3. 点击"Scan"按钮,选择找到的SD卡(非管理员权限,无法扫描到SD卡)

  4. 点击"ReLayout!"按钮,对SD卡进行分区(小容量SD卡无法分区,应更换大容量SD卡)

    • FAT32
    • 无格式区, SD卡最后的130M空间;

    例如一个8G的SDHC卡, 7.4 GiB, 7948206080 bytes, 15523840 sectors(2048-15523839,前2048个扇区被保留):

    • FAT32, (第2048扇区~15259647扇区),共15257600扇区。
    • 无格式区, (第15259648扇区 ~ 15523840扇区),共有264193扇区(约129M)

    除了FAT32分区以外,其他扇区总数共266240个扇区。
    而前2048个扇区,为FAT32的保留扇区。作为“第一分区”,存放主启动记录(MBR)和分区表,占512字节,其中最后两个字节为信号字"0x55","0xaa": % sudo dd if=/dev/sdc bs=1 skip=510 count=2 | od -t x1c

  5. 分区完成后,重新"Scan",此时SD卡的"Available"栏目信息变为"Yes"。

  6. 选择Image File,这里选择Bootloader文件(superboot-20111114.bin)

  7. 点击"Fuse"按钮,烧录Bootloader到SD卡

  8. 将SD卡插入Tiny6410开发板卡槽,选择SDBOOT启动模式,连接串口,上电,会看到串口输出消息:

     ##### FriendlyARM Superboot for 6410 #####[f] Format the nand flash[p] Download superboot[v] Download uboot.bin[k] Download Linux/Android kernel[y] Download root yaffs2 image[u] Download root ubifs image[a] Download Absolute User Application[n] Download Nboot.nb0 for WinCE[l] Download WinCE bootlogo[w] Download WinCE NK.bin[b] Boot the system[s] Set the boot parameter of Linux[d] Download and Run an Absolute User Application[i] Version: 1144, RAM 1024 MiB, NAND(SLC) 1GiBPlease enter your Selection:
    

要使用Superboot的USB下载功能,需要:

  1. Windows XP / Window 7
  2. USB驱动-tiny6410 适用于win7 64bit的dnw 的USB下载驱动
    • 解压得到win7-64-FriendlyArm/, 解压secbulk64.zip
    • 运行dseo13b.exe, Enable Test Mode
    • Sign a System File, 选择secbulk64/inf64/secbulk.sys
    • USB线连接FriendlyARM Tiny6410 & PC, 选择驱动位置为secbulk64/inf64, 安装驱动;
  3. DWN下载软件-DWN.exe

下载步骤(通过SD卡的Superboot下载Superboot/Kernel/File System到Nand Flash):

  1. 连接串口至电脑用于查看串口输出,连接USB线至电脑用于传输数据。

  2. 启动ARM开发板,进入Superboot。

    • Nand Flash下的Superboot, 会自动引导Linux内核。因此需要按住按钮再上电。
    • SD卡的Superboot, 可以直接上电。
  3. 选择[p]选项,烧录Superboot.bin到Nand Flash; 以后就可以脱离SD卡。

  4. 选择[k]选项,烧录zImage(Linux内核文件)到Nand Flash;

  5. 选择[y]/[u]选项,烧录不同格式的文件系统到Nand Flash;

  6. 选择[b]选项,启动Nand Flash内的Linux内核。

另外,还可以通过[d]选项,直接下载程序(例如之前交叉编译好的leds.bin, key.bin等)到内存起始地址,并开始运行程序。

例子: 交叉编译ARM-Tiny6410/no-os/led/1.leds_s/,得到led.bin,通过dwn.exe下载到板子并运行;

##Bootloader - U-boot

使用Tekkaman Ninja移植的U-boot-2011.06.

SD卡烧录U-Boot.bin:

no-os/sd-no-os/u-boot

SDBOOT启动U-Boot,通过fatload烧录U-Boot到NAND Flash:

  1. 判断mmc设备号

     MINI6410 # mmc devmmc0 is current device
    
  2. 查看SD卡的文件

     MINI6410 # fatls mmc 0270336   superboot-20111114.bin255576   u-boot.bin4096   u-boot-spl-16k.bin259672   u-boot-nand.bin4 file(s), 0 dir(s)
    

    需要事先拷贝u-boot-nand.bin到SD卡。

  3. 读取u-boot-nand.bin到SDRAM

     MINI6410 # fatload mmc 0 50008000 u-boot-nand.binreading u-boot-nand.bin259672 bytes read
    
  4. 将内存中的u-boot-nand.bin写入到Nand Flash的Bootloader区域.

    这里的Bootloader为0 ~ 0x80000(512K)

     MINI6410 # nand erase 0 0x80000NAND erase: device 0 offset 0x0, size 0x80000Erasing at 0x60000 -- 100% complete.OKMINI6410 # nand write 50008000 0 80000NAND write: device 0 offset 0x0, size 0x80000524288 bytes written: OK
    
  5. 切换为NAND启动,上电,会看到Nand Flash上的U-Boot启动。

SDBOOT启动U-Boot,通过NFS烧录U-Boot到NAND Flash:

  1. 搭建NFS服务器,目录: 10.42.1.100:/var/nfsroot/arm/

  2. SDBOOT启动U-Boot

     MINI6410 # nfs 50008000 10.42.1.100:/var/nfsroot/arm/u-boot-nand.bindm9000 i/o: 0x18000300, id: 0x90000a46DM9000: running in 16 bit modeMAC: 08:08:10:12:10:27operating at 100M full duplex modeUsing dm9000 deviceFile transfer via NFS from server 10.42.1.100; our IP address is 10.42.1.70Filename '/var/nfsroot/arm/u-boot-nand.bin'.Load address: 0x50008000Loading:  ###################################################doenBytes transferred = 259672 (3f658 hex)
    
  3. 烧写进Nand Flash

     MINI6410 # nand erase 0x0 0x80000NAND erase: device 0 offset 0x0, size 0x80000Erasing at 0x60000 -- 100% complete.OKMINI6410 # nand write 50008000 0 0x80000NAND write: device 0 offset 0x0, size 0x80000524288 bytes written: OK
    

SDBOOT启动U-Boot,通过NFS烧录linux kernel到NAND Flash:

注意:不要用U-boot引导FriendlyARM官方给的zImage,不同bootloader对内核的引导略有不同,最好利用U-Boot的mkimage重新生成uImage. 使用U-boot引导zImage,会导致"Error: unrecognized/unsupported machine ID"的问题。

Linux Kernel: 使用FriendlyARM提供的linux-2.6.38-20140106.tgz。

  1. 交叉编译linux内核,得到vmlinux

  2. 使用mkimage(u-boot-2011.06-for-MINI6410/tools/mkimage), 生成U-Boot格式的映像文件uImage.

     arm-linux-objcopy -O binary -R .note -R .comment -S vmlinux linux.bingzip -9 linux.bin./mkimage -A arm -O linux -T kernel -C gzip -a 0x50008000 -e 0x50008000 -n "Linux Kernel Image" -d linux.bin.gz uImage
    

    输出:

     Image Name:   Linux Kernel ImageCreated:      Fri Nov  6 11:11:04 2015Image Type:   ARM Linux Kernel Image (gzip compressed)Data Size:    3742549 Bytes = 3654.83 kB = 3.57 MBLoad Address: 50008000Entry Point:  50008000
    

    对于ARM linux内核映象用法:

    • -A arm , 架构是arm
    • -O linux , 操作系统是linux
    • -T kernel , 类型是kernel
    • -C none/bzip/gzip , 压缩类型
    • -a 50008000 , image的载入地址(hex),通常为0xX00008000
    • -e 500080XX , 内核的入口地址(hex),XX为0x40或者0x00
    • -n linux-XXX , image的名字,任意
    • -d nameXXX , 无头信息的image文件名,你的源内核文件
    • uImageXXX , 加了头信息之后的image文件名,任意取

    -a和-e后面跟的分别是image的载入地址(Load Address)和内核的入口地址(Enter Point),两者可以一样,也可以不一样,依情况而定:

    • 当-a后面指定的地址和bootm xxxx后面的地址一样时(此时u-boot不需要搬运映像文件uImage),则-e后面的地址必须要比-a后面的地址多0x40,也就是映像头的大小64个字节。

    • 当-a后面指定的地址和bootm xxxx后面的地址不一样时(u-boot会将bootm xxxx地址处的映像搬运到-a指定的地址处),此时,-e和-a必须要一样,因为映像头并没有搬运过去,载入地址就应该是内核的入口地址。需要注意的是,因为uboot要重新搬运内核映像,所以要注意bootm xxxx的地址和-a之间的地址不要导致复制时的覆盖。
      例如:
      Load Address: 0x0000000 u-boot: bootm 0x00010000 地址不同,需要搬运uImage, 不搬运头部64字节。但是uImage在搬运过程中,会覆盖到旧的uImage, 导致错误:

        Uncompressing Kernel Image ... Error: inflate() returned −3GUNZIP ERROR − must RESET board to recover
      
  3. 通过NFS烧录(U-Boot Command Line):

     nfs 0x50008000 10.42.1.100:/var/nfsroot/arm/uImagenand erase 0x80000 0x500000nand write 0x50008000 0x80000 0x500000
    
  4. 配置U-Boot参数bootcmd

     MINI6410 # setenv bootcmd "nand read 0x51008000 0x80000 0x500000; bootm 0x51008000"MINI6410 # saveenv
    

    从Nand Flash的0x80000处,读取5M数据,存放到SDRAM的0x51008000处,然后调用bootm函数。0x51008000处存放着uImage, 其头部描述Load Address为0x50008000,与bootm的参数(0x51008000)不同,则拷贝0x51008000处的uImage到0x50008000, 不拷贝头部。然后进入Entry Point(0x50008000), 内核启动成功。


##File System - 文件系统

  1. 制作文件系统

    • 参考: 韦东山 - 17章节
    • 参考: 一步一步制作yaffs/yaffs2根文件系统
  2. NFS挂载
    制作好根文件系统,先别着急制作成yaffs2格式的映像,别着急下载到Nand Flash,先通过NFS挂载文件系统,测试文件系统是否正常。

     setenv bootargs 'root=/dev/nfs rw noinitrd console=ttySAC0,115200n8 mem=256M init=/linuxrc nfsroot=10.42.1.100:/var/nfsroot/rootfs ip=10.42.1.70:10.42.1.100:10.42.1.254:255.255.255.0:tiny6410:eth0:off'saveenvboot
    

    Linux内核在启动的时候,能接收某些命令行选项或启动时参数。
    内核启动参数详解:

    1. root=/dev/nfs rw,采用NFS设备启动文件系统,rw可读可写。
    2. noinitrd,非ramdisk启动方式。
    3. console=ttySAC0,115200n8,串口ttySAC0作为控制台,波特率为115200,8bit数据位。
    4. mem=256M,内存为256M.
    5. init=/linuxrc,设置内核启动后执行的第一个脚本为/linuxrc。如果该项没有设置,内核会按顺序尝试/etc/init,/bin/init,/sbin/init,/bin/sh,如果所有的都没找到,内核会抛出 kernel panic的错误。
    6. nfsroot=10.42.1.100:/var/nfsroot/rootfs,设置文件系统所在的NFS目录。
    7. ip=10.42.1.70:10.42.1.100:10.42.1.254:255.255.255.0:tiny6410:eth0:off
      1. 命令格式为ip=ip_addr:server_ip_addr:gateway:netmask:name:which_netcard:off
      2. 第一项(ip_addr)为目标板的IP地址,这里为10.42.1.70;
      3. 第二项(server_ip_addr)为rootserver,这里为10.42.1.100;
      4. 第三项(gateway)为网关,这里为10.42.1.254;
      5. 第四项(netmask)为子网掩码, 这里为255.255.255.0;
      6. 第五项(name)为开发板名称,任意;
      7. 第六项(which_netcard)为网卡设备名称;
      8. off;

    挂载文件以后以后,可以在内核输出消息处看到:

     IP-Config: Complete:device=eth0, addr=10.42.1.70, mask=255.255.255.0, gw=10.42.1.254,host=tiny6410, domain=, nis-domain=(none),bootserver=10.42.1.100, rootserver=10.42.1.100, rootpath=Please press Enter to activate this console.
    
  3. 使用mkyaffs2image-128生成yaffs2映像,烧写到板子上进行测试

    mkyaffs2image(适合64M)
    mkyaffs2image-128(适合128M以上)
    注:由于FriendlyARM提供的mkyaffs2image-128代码有改动,使用该工具制作的yaffs2映像,在引导时可能存在以下问题:

     /init: line 103: can't open /r/dev/console: no such fileKernel panic - not syncing: Attempted to kill init!
    

    虽然网上遇到这种问题的解决办法是:

    在根文件系统/dev/目录下,创建console节点:

     sudo mknod console c 5 1
    

    但这里的问题并不是这个。 Google Search :

     site:arm9home.net /r/dev/console
    

    用自己编译的内核加上友善的yaffs2文件系统,友善的内核加自己的文件系统,自己的内核加自己的文件系统全都会出现上述提示。只有用友善的内核和文件系统才不会报错。

    /r, 这是系统启动时先会mount 命令行参数指定的rootfs到 /r 目录, 准备好后再切换/r 为根目录 如果mount失败, 或烧写的文件系统有问题等等, 那么都会出现这个错误。

    使用SuperBoot-6410与zImage不存在此问题,NFS引导不存在此问题(其他网友存在此问题)。

tiny6410烧录相关推荐

  1. tiny6410 适用于win7 64bit的dnw 的USB下载驱动

     tiny6410 适用于win7 64bit的dnw 的USB下载驱动 http://blog.csdn.net/commshare/article/details/8275683 友善之臂 tin ...

  2. tiny6410 烧写uboot 转载

    #烧录 参考: 03- Tiny6410刷机指南.pdf 假设拿到的Tiny6410开发板没有提前下载任何程序,包括Bootloader. ##Bootloader - Superboot Super ...

  3. tiny6410刷机教程

    首先制作sd卡 bois 使用sd-flasher格式化sd卡,Scan能找到sd卡,Available项为no时 点击Relayout ,再次Scan后为yes,找到superboot-201111 ...

  4. jflash烧录教程_Jlink烧录nand flash操作(步骤一)

    一.将内存初始化程序下载至SRAM并运行 1.打开J-Link Commander,将micro开发板拨至nand flash启动. 2.以下是常用命令: speed 12000:设置下载速率为12M ...

  5. tiny6410 适用于win7 64bit的dnw 的USB下载驱动

    友善之臂 tiny6410的刷机是用 SDFLASHER 烧写superboot.bin到FAT32的SD卡中. 然后拨动按键,从SD卡启动,这样superboot就运行了. 然后使用superboo ...

  6. # NVIDIA Jetson系列系统镜像备份烧录指南

    NVIDIA Jetson系列系统镜像备份烧录指南 我使用的是Jetson AGX Xavier 注意事项: 1.烧录工具版本在4.2之前 是叫做 JetPack,, 4.2以及4.2以后的版本叫做S ...

  7. ISE安装和FLASH烧录

    ise下载安装后某些操作会出现闪退问题,参考下篇文章. https://www.cnblogs.com/yongzhewudi/p/5414052.html 添加链接描述 ise烧录Flash过程(S ...

  8. vivado烧录flash过程

    生成flash烧录的 .mcs文件: 1.首先产生.bin文件 2.通过Tcl输入命令,找到bin文件所在位置,输入命令 cd e: cd /myjob/AAA/FPGA/k7_xc7k325t/bt ...

  9. uboot、kernel和rootfs烧录

    以Hi3536为例 SDRAM的地址范围: 40000000 - 43FFFFFF (实际DDR是4Gbit,MPP和OS共用) 相应海思的型号DDR范围到此目录寻找:01.software/boar ...

  10. kernel和rootfs烧录与启动系统

    环境部署:在uboot中的serverip要设定为电脑tftp服务器ip: 设置: set serverip 192.168.1.20 sa 1.1.烧录kernel (1)SDRAM地址范围:800 ...

最新文章

  1. 各大IT公司笔试真题汇总开发人员一定要加入收藏夹的网站(收藏)
  2. js+html5双人五子棋(源码下载)
  3. Android --- 知识点记录
  4. 关于业务用例抽象问题对网友的回复
  5. “TypeError: 'dict_keys' object is not subscriptable”
  6. python创_Python创建Windows 服务
  7. Github Actions
  8. 详解机器学习之感知机理论与实践
  9. 使用主成分分析进行人脸识别
  10. linux怎样重启命令,Linux重启命令介绍
  11. TCP / UDP测试工具——tcpudptest使用总结
  12. 如何在windows下运用dd来下修复坏块?
  13. 编码:隐匿在计算机软硬件背后的语言pdf-Code:The Hidden Language of Computer Hardware and Software-Charles Petzold-pdf
  14. 深度解析UG二次开发装配的部件事件、部件原型和部件实例
  15. ChatGPT|微信快速接入ChatGPT
  16. js + css 做出网易云音乐的轮播图
  17. 施乐3030工程机驱动安装
  18. Pycharm使用小技巧 - 如何设置背景图片
  19. 网页万能命令[wn.run/]
  20. 周口计算机教师招聘,周口商水县2018年招聘高中信息技术教师面试人员名单

热门文章

  1. Tasker实现简易的Telegram新消息朗读
  2. 明尼苏达大学博导“约法十章”火了:没事不乱开会、合写论文不要催导师,复旦教授直呼值得学习...
  3. JAVA实现PDF合并、拆分代码工具类
  4. 计算机图形人机交互实验报告,用户界面设计-人机交互实验报告
  5. python创建按钮command怎么用,python按钮调用函数
  6. MATLAB图形用户界面设计(GUI)
  7. 教学演示软件 模型十四 三维图象渲染模型
  8. 程序 卡塔_建筑钉卡塔
  9. 《漫步华尔街》书中的精髓:在美国市场中,怎样用“随机漫步”的投资方法让自己的投资收益稳步增长
  10. mysql时间相减得到天数保留两位_mysql两个日期计算天数