历史上的今天
返回首页

历史上的今天

今天是:2024年09月22日(星期日)

正在发生

2021年09月22日 | tiny6410烧录

2021-09-22 来源:eefocus

#烧录 参考: 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卡)

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

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

    • FAT32, (第2048扇区~15259647扇区),共15257600扇区。

    • 无格式区, (第15259648扇区 ~ 15523840扇区),共有264193扇区(约129M)

    • FAT32

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

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

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

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

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


    1. ##### FriendlyARM Superboot for 6410 #####

    2. [f] Format the nand flash

    3. [p] Download superboot

    4. [v] Download uboot.bin

    5. [k] Download Linux/Android kernel

    6. [y] Download root yaffs2 image

    7. [u] Download root ubifs image

    8. [a] Download Absolute User Application

    9. [n] Download Nboot.nb0 for WinCE

    10. [l] Download WinCE bootlogo

    11. [w] Download WinCE NK.bin

    12. [b] Boot the system

    13. [s] Set the boot parameter of Linux

    14. [d] Download and Run an Absolute User Application

    15. [i] Version: 1144, RAM 1024 MiB, NAND(SLC) 1GiB

    16. Please 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设备号


    1. MINI6410 # mmc dev

    2. mmc0 is current device

  1. 查看SD卡的文件


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

    1. MINI6410 # fatls mmc 0

    2. 270336   superboot-20111114.bin

    3. 255576   u-boot.bin

    4. 4096   u-boot-spl-16k.bin

    5. 259672   u-boot-nand.bin


    6. 4 file(s), 0 dir(s)

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


    1. MINI6410 # fatload mmc 0 50008000 u-boot-nand.bin

    2. reading u-boot-nand.bin


    3. 259672 bytes read

  4. 将内存中的u-boot-nand.bin写入到Nand Flash的Bootloader区域.

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


    1. MINI6410 # nand erase 0 0x80000

    2. NAND erase: device 0 offset 0x0, size 0x80000

    3. Erasing at 0x60000 -- 100% complete.

    4. OK


    5. MINI6410 # nand write 50008000 0 80000

    6. NAND write: device 0 offset 0x0, size 0x80000

    7. 524288 bytes written: OK

  1. 切换为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


    1. MINI6410 # nfs 50008000 10.42.1.100:/var/nfsroot/arm/u-boot-nand.bin

    2. dm9000 i/o: 0x18000300, id: 0x90000a46

    3. DM9000: running in 16 bit mode

    4. MAC: 08:08:10:12:10:27

    5. operating at 100M full duplex mode

    6. Using dm9000 device

    7. File transfer via NFS from server 10.42.1.100; our IP address is 10.42.1.70

    8. Filename '/var/nfsroot/arm/u-boot-nand.bin'.

    9. Load address: 0x50008000

    10. Loading: ###################################################

    11. doen

    12. Bytes transferred = 259672 (3f658 hex)

  1. 烧写进Nand Flash


    1. MINI6410 # nand erase 0x0 0x80000

    2. NAND erase: device 0 offset 0x0, size 0x80000

    3. Erasing at 0x60000 -- 100% complete.

    4. OK


    5. MINI6410 # nand write 50008000 0 0x80000

    6. NAND write: device 0 offset 0x0, size 0x80000

    7. 524288 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.


  1. 输出:


  1. 对于ARM linux内核映象用法:

    -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, 导致错误:


    • -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文件名,任意取

    1. Uncompressing Kernel Image ... Error: inflate() returned −3

    2. GUNZIP ERROR − must RESET board to recover

    3. Image Name:   Linux Kernel Image

    4. Created:      Fri Nov  6 11:11:04 2015

    5. Image Type:   ARM Linux Kernel Image (gzip compressed)

    6. Data Size:    3742549 Bytes = 3654.83 kB = 3.57 MB

    7. Load Address: 50008000

    8. Entry Point:  50008000

    9. arm-linux-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin

    10. gzip -9 linux.bin

    11. ./mkimage -A arm -O linux -T kernel -C gzip -a 0x50008000 -e 0x50008000 -n "Linux Kernel Image" -d linux.bin.gz uImage

  2. 通过NFS烧录(U-Boot Command Line):


    1. nfs 0x50008000 10.42.1.100:/var/nfsroot/arm/uImage

    2. nand erase 0x80000 0x500000

    3. nand write 0x50008000 0x80000 0x500000

  1. 配置U-Boot参数bootcmd


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

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

    2. MINI6410 # saveenv



##File System - 文件系统

  1. 制作文件系统

    • 参考: 韦东山 - 17章节

    • 参考: 一步一步制作yaffs/yaffs2根文件系统

  2. NFS挂载
    制作好根文件系统,先别着急制作成yaffs2格式的映像,别着急下载到Nand Flash,先通过NFS挂载文件系统,测试文件系统是否正常。


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

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


    1. IP-Config: Complete:

    2. device=eth0, addr=10.42.1.70, mask=255.255.255.0, gw=10.42.1.254,

    3. host=tiny6410, domain=, nis-domain=(none),

    4. bootserver=10.42.1.100, rootserver=10.42.1.100, rootpath=


    5. Please press Enter to activate this console.

    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;

    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. 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'

    2. saveenv

    3. boot

  1. 使用mkyaffs2image-128生成yaffs2映像,烧写到板子上进行测试

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


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

    在根文件系统/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引导不存在此问题(其他网友存在此问题)。

    1. /init: line 103: can't open /r/dev/console: no such file

    2. Kernel panic - not syncing: Attempted to kill init!


推荐阅读

史海拾趣

Hi-Optel Technologly Co Ltd公司的发展小趣事

Hi-Optel Technologly Co Ltd在电子行业中的五个发展故事

故事一:创立与初期发展

Hi-Optel Technologly Co Ltd(以下简称Hi-Optel)成立于1999年,由国有大型上市公司和国内著名风险投资机构共同投资,注册资本高达1亿美元。公司自创立之初便专注于光纤通信领域的模块开发、制造和营销。初期,Hi-Optel面临着技术挑战和市场开拓的双重压力,但凭借其强大的研发实力和敏锐的市场洞察力,逐步在光纤收发器、TO-CAN等关键产品的研发上取得突破,为后续的快速发展奠定了坚实基础。

故事二:技术创新与产品线拓展

随着技术的不断进步,Hi-Optel持续加大研发投入,不断推出新产品以满足市场需求。公司不仅拥有从TO-CAN到光纤收发器等完整产品的研发、生产和处理能力,还涵盖了不同速率和不同封装传输和数据通信的主动模块。这些产品广泛应用于SONET、以太网、FTTx、LTE和IDC光纤传输/接入系统,极大地提升了公司在行业内的竞争力。同时,Hi-Optel还积极拓展产品线,将业务范围延伸至更广泛的电子通信领域。

故事三:市场拓展与品牌建设

在市场拓展方面,Hi-Optel采取了多种策略以扩大市场份额。公司积极参加国内外各类电子通信展会,展示其最新技术和产品,吸引了众多客户和合作伙伴的关注。同时,Hi-Optel还注重品牌建设,通过提升产品质量和服务水平,赢得了客户的广泛好评。此外,公司还建立了完善的销售网络和售后服务体系,为客户提供全方位的支持和服务。

故事四:供应链优化与成本控制

为了应对激烈的市场竞争,Hi-Optel不断优化供应链管理,降低生产成本。公司与多家优质供应商建立了长期稳定的合作关系,确保原材料的稳定供应和质量的可靠性。同时,Hi-Optel还通过引入先进的生产设备和工艺,提高生产效率和产品质量,进一步降低了生产成本。这些措施不仅增强了公司的市场竞争力,还为公司的可持续发展提供了有力保障。

故事五:国际化战略与全球化布局

随着全球化进程的加速,Hi-Optel积极实施国际化战略,拓展海外市场。公司成立了多个海外分支机构,并在多个国家和地区建立了销售网络和售后服务体系。通过与国际知名企业的合作与交流,Hi-Optel不断提升自身的技术水平和品牌影响力。同时,公司还积极参与国际标准和规范的制定工作,推动行业技术的进步和发展。这些努力使得Hi-Optel在全球电子通信领域的影响力日益增强。

Daykin Electric Corp公司的发展小趣事

在1924年,大金工业株式会社成功合成了碳氟化合物,并在随后的18年里,这项技术逐渐成熟并开始批量生产。这一突破性的技术不仅为大金在化学领域奠定了坚实的基础,也为公司后续在家用空调市场的进军提供了技术支持。

成都振芯/国腾(CORPRO)公司的发展小趣事

2010年,CORPRO在深交所创业板成功上市,成为当时国内“卫星导航第一股”。这一里程碑事件不仅提升了CORPRO的品牌知名度和市场影响力,也为公司后续的发展提供了更为广阔的资金来源和市场空间。上市后,CORPRO继续加大研发投入,推动技术创新和产品升级。

CONTRINEX公司的发展小趣事

自1972年在瑞士成立以来,Contrinex便踏上了成为全球传感器行业领军企业的征程。起初,公司专注于开发工业用的位置判定传感器,凭借其卓越的技术和精准的性能,很快便在市场上崭露头角。随着技术的不断进步和市场的不断扩大,Contrinex逐渐将业务拓展至全球60多个国家,旗下拥有500多名优秀员工,成为一家真正的国际化企业。

Aborn Electronics Inc公司的发展小趣事

随着产品线的不断丰富和技术实力的不断提升,Aborn Electronics开始积极寻求市场拓展。公司先后在国内外多个地区设立了销售网点和分支机构,并通过参加各类行业展会和论坛,加强与其他企业的交流与合作。同时,Aborn Electronics注重品牌建设,通过提升产品质量和服务水平,逐渐树立起了良好的企业形象和口碑。

CDI-DIODE公司的发展小趣事

随着市场竞争的加剧,CDI-DIODE公司意识到传统的营销方式已经无法满足市场需求。于是,公司开始尝试新的营销策略,如线上推广、社交媒体营销等。这些创新的营销方式不仅提升了公司的知名度,也增强了与客户的互动和联系,进一步提升了品牌影响力。

问答坊 | AI 解惑

关于运放的基础细节探索

本人新手,如有不对请老师们赐教。 前两天发了个帖子,原以为讨论USB接口,没想到最终是回到如何使用运放的问题上,特别是得到了xiaoxif老师的指点。现将自己的模糊点说出来,请大家批判指正: 问题:运放放大的是什么电压? 以下是我的理解: ...…

查看全部问答>

三星处理器经典杰作:飞凌6410开发板+三星B7300C

第一部分:高清图片(暂时没搞到B7300的拆机图,不能标明内部功能接口>_ B7300外观高清图和TE6410外观高清图: 硬件参数: B7300: 说到Windows mobile手机,不得不说ROM和RAM,ROM像电脑上的硬盘空间,而RAM则是运行内存,在CPU相同的情况 ...…

查看全部问答>

Sysgen系统后,导出SDK总是提示我没有sysgen系统,失败

如题,platform builder 5编译好内核后,都生成了NK.bin和NK.nb0了,结果build sdk的时候还是提示我没有sysgen系统,build失败…

查看全部问答>

噪声

请教: s9013构成射级跟随器,通过电容耦合到lm318的输入端,结果lm318输出端很大的噪声,输入端却基本没有。如何去掉这些噪声? 稍后上图。…

查看全部问答>

贴几张破图,关于STM32ISP~~~~~~~~~~~

应要求贴几张,还在继续努力中~~~~~~~~~~~~~~~~~~ …

查看全部问答>

MSP430系列单片机有什么好的参考书?

MSP430系列单片机有什么好的参考书? MSP430FE427能通过USB下载程序么?通过USB下载程序的JTAG和通过并口下载的JTAG有什么区别?刚开始接触这个单片机,还望各位多多指教!谢谢啦…

查看全部问答>

今天终于解决仿真器的问题 (

问题如下:Error connecting to the target:Error 0x80000200/-1047Fatal Error during: OCS, PTI_ERR_EMU_CLOSE Error Occured at 0x00000000 I/O Port = 240 Board Name: F2809 XDS510 EmulatorCpu Name: CPU_1 Abort: Close Code Composer St ...…

查看全部问答>

小弟今天试着写DS1302的程序,出现很多“bad operand type”错误,求解

如题,不知语法错在哪里了,请大虾们帮帮忙,我在网上查了很久都没有找到答案,程序在附件里面。 我编译出来11个错误,但不知道应该怎么改,很多都是“bad  operand type”错误    哎,没人理我,那我直接贴代码了,问题是 ...…

查看全部问答>