X Project 【任务1】启动过程-Boot from USB

[转]http://www.wowotech.net/forum/viewtopic.php?id=15
1. 任务说明

该任务是“X Project”第一个任务,也是所有嵌入式开发启动时遇到的第一个任务。

在ARM等嵌入式平台中,CPU上电后,会从固定地址运行Rom code(或者其它类型的介质,我们不再特意区分)。如果没有有效的启动介质,或者使用特殊手段,ROM code会执行一个称作DFU(Device Firmware Upgrade)的程序,该程序可以通过USB/UART等协议,和PC沟通,将PC上指定的Bin文件加载到RAM(通常为SRAM)中执行。

该任务将会以USB协议为例,结合U-Boot,实现这一过程,最终通过在Bin文件中点亮一盏LED灯,指示任务的完成。

2. 涉及的知识点

看似简单的一个任务,其实牵涉很多知识点,总结如下:

  • CPU Boot过程

  • Boot ROM的执行逻辑

  • Boot ROM中USB download protocol

  • 简单的USB原理

  • Linux平台下借助libusb编写简单的DFU工具

  • U-boot的基本框架(arch-->cpu-->machine-->board)

  • U-boot的启动流程,包括SPL等概念

  • U-boot的配置和移植

  • GPIO的控制(呵呵,小菜一碟)

  • 简单的编译原理,链接脚本、运行时地址等

  • 交叉编译环境的配置

  • U-Boot的编译

3. 完成任务的思路

看到上面列举的知识点,相信大家会吓一跳,不过大可放心,按部就班的做就可以了。

首先,我们把任务拆分为如下几个相对独立的部分:

  1. 将所使用的硬件平台“Boot from USB”有关的硬件信息、以固定的格式罗列出来
    移植U-Boot的时候,可以直接将这些信息对应到代码中的指定宏定义、变量等元素上,这样可以降低大家移植到新平台上的困难。
    我和Linuxer会以特定的平台为例,写出一份或者两份硬件信息的范本,大家follow即可(就像做填空题,目的也是降低移植的困难)。

  2. 以博文的形式,将U-Boot的启动过程总结出来,供大家参考
    主要目的是厘清代码中和启动过程有关的配置、宏定义等,这些信息会和上面的硬件信息一一对应,移植U-Boot的时候只需要填入即可。

  3. 结合特定的开发板,以项目文档的形式,将U-Boot的配置、编译等移植过程,总结出来
    主要目的是为其它平台的移植提供参考。

  4. 以博文的形式,介绍linux平台下libusb的功能和使用方法
    为后续DFU程序的编写做准备。

  5. 结合CPU ROM code中的USB协议,编写DFU程序
    编写完成后,使用DFU将U-Boot的bin文件下载到板子指定的RAM地址执行。

其次,就是分猪肉了( lol lol lol )。大家根据自身情况,可以考虑选择任务2~任务5中的任意一个,多个人可以选择同一个任务,一个人也可以选择多个( lol ,我们可能优先为积极参与任务的同学送开发板哦!)。任务进行的过程中,大家可以随时在讨论区交流、讨论。

最后,提醒一下,大家完成任务的过程中,要不惜一切代价地借用已有的资源,只要思路对,哪怕代码是从别处抄过来的(自己一定要整理一遍),也可以达到目的。

暂时就这么多了,大家有其它想法的话,请踊跃讨论。

4. 任务总结

到目前为止(2016/06/01),该任务在bubblegum 96boards上基本完成,共有如下的文档和代码产出:

  1. X-002-HW-S900芯片boot from USB有关的硬件描述

  2. u-boot启动流程分析(1)_平台相关部分

  3. X-003-UBOOT-基于Bubblegum-96平台的u-boot移植说明

  4. u-boot代码,https://github.com/wowotechX/u-boot

  5. 交叉编译工具、Firmware下载工具等,https://github.com/wowotechX/tools

  6. 编译脚本,https://github.com/wowotechX/build

 

由于Firmware下载工具(DFU)牵涉到USB,因此暂时没有产出文档(正在考虑分析一下USB子系统)。

可以通过如下步骤在板子上验证:
1)代码下载(具体可参考“X-003-UBOOT-基于Bubblegum-96平台的u-boot移植说明”)

mkidr -p ~/work/xprj
cd ~/work/xprj
git clone https://github.com/wowotechX/build
git clone https://github.com/wowotechX/u-boot
git clone https://github.com/wowotechX/tools

2)代码编译

cd build
make env_prepare    #下载交叉编译工具,只需要执行一次即可
make libusb             #只需要执行一次
make dfu                 #只需要执行一次
make uboot

3)开机是按住ADFU按键,将bubblegum 96board进入DFU模式,并使用USB和PC连接(当前支持linux,dfu工具也可以支持windows,我没有测试),下载u-boot并执行

sudo ../tools/dfu/dfu bubblegum 0xe406b200 out/u-boot/spl/u-boot-spl.bin 1

dfu命令的具体解释,可直接执行dfu命令查看。

最后,希望感兴趣的同学,可以帮忙检查文档、代码,并在空闲时间,在自己的开发板上将该任务完成。
多谢~~

posted @ 2017-05-14 18:40  jasonactions  阅读(506)  评论(0)    收藏  举报