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. 完成任务的思路
看到上面列举的知识点,相信大家会吓一跳,不过大可放心,按部就班的做就可以了。
首先,我们把任务拆分为如下几个相对独立的部分:
- 
将所使用的硬件平台“Boot from USB”有关的硬件信息、以固定的格式罗列出来
移植U-Boot的时候,可以直接将这些信息对应到代码中的指定宏定义、变量等元素上,这样可以降低大家移植到新平台上的困难。
我和Linuxer会以特定的平台为例,写出一份或者两份硬件信息的范本,大家follow即可(就像做填空题,目的也是降低移植的困难)。 - 
以博文的形式,将U-Boot的启动过程总结出来,供大家参考
主要目的是厘清代码中和启动过程有关的配置、宏定义等,这些信息会和上面的硬件信息一一对应,移植U-Boot的时候只需要填入即可。 - 
结合特定的开发板,以项目文档的形式,将U-Boot的配置、编译等移植过程,总结出来
主要目的是为其它平台的移植提供参考。 - 
以博文的形式,介绍linux平台下libusb的功能和使用方法
为后续DFU程序的编写做准备。 - 
结合CPU ROM code中的USB协议,编写DFU程序
编写完成后,使用DFU将U-Boot的bin文件下载到板子指定的RAM地址执行。 
其次,就是分猪肉了( 
 
 
 )。大家根据自身情况,可以考虑选择任务2~任务5中的任意一个,多个人可以选择同一个任务,一个人也可以选择多个( 
 ,我们可能优先为积极参与任务的同学送开发板哦!)。任务进行的过程中,大家可以随时在讨论区交流、讨论。
最后,提醒一下,大家完成任务的过程中,要不惜一切代价地借用已有的资源,只要思路对,哪怕代码是从别处抄过来的(自己一定要整理一遍),也可以达到目的。
暂时就这么多了,大家有其它想法的话,请踊跃讨论。
4. 任务总结
到目前为止(2016/06/01),该任务在bubblegum 96boards上基本完成,共有如下的文档和代码产出:
- 
u-boot代码,https://github.com/wowotechX/u-boot
 - 
交叉编译工具、Firmware下载工具等,https://github.com/wowotechX/tools
 
由于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命令查看。
最后,希望感兴趣的同学,可以帮忙检查文档、代码,并在空闲时间,在自己的开发板上将该任务完成。
多谢~~

                
            
        
浙公网安备 33010602011771号