问题 1
关于U boot启动方式有这么一个定义
#define CONFIG_BOOTCOMMAND \
"if mmc rescan ${mmcdev}; then " \
"echo SD/MMC found on device ${mmcdev};" \
"if run loadbootenv; then " \
"echo Loaded environment from ${bootenv};" \
"run importbootenv;" \
"fi;" \
"if test -n $uenvcmd; then " \
"echo Running uenvcmd …;" \
"run uenvcmd;" \
"fi;" \
"if run loaduimagefat; then " \
"run mmcboot;" \
"elif run loaduimage; then " \
"run mmcboot;" \
"else " \
"echo Cound not find ${bootfile} ;" \
"fi;" \
"else " \
"run nandboot;" \
"fi;" \
含义是先检测 是否有SD卡插入,然后判断启动方式,现在为了支持从USB中读入image文件 改成
"if mmc rescan ${mmcdev}; then " \
"echo SD/MMC found on device ${mmcdev};" \
"if run loadbootenv; then " \
"echo Loaded environment from ${bootenv};" \
"run importbootenv;" \
"fi;" \
"if test -n $uenvcmd; then " \
"echo Running uenvcmd …;" \
"run uenvcmd;" \
"fi;" \
"if run loaduimagefat; then " \
"run mmcboot;" \
"elif run loaduimage; then " \
"run mmcboot;" \
"else " \
"echo Cound not find ${bootfile} ;" \
"fi;" \
"elif usb start ${usbdev}; then " \
"echo USB found;" \
"if run usbloadbootenv; then " \
"run usbshell;" \
"fi;" \
"else " \
"run nandboot;" \
"fi;" \
红色为添加部分, usbdev=0,仿照mmcdev的写法,然后在am335 evm 中执行代码时 无论 usb start 成功与否 都会执行这个分支下面的命令(都会执行红色部分)
想问一下,出错在什么地方,应该怎么改正。
问题2
在U boot中start.s中有这么一段程序
.globl _start
_start: b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
上面的ldr 看起来是一直没有执行,关于这段代码 我查阅到的所有的uboot解析 文章中都只是解释 ldr的用法 含义,还有这段话的具体含义,但就是没有说明为什么要加在这里,想问一下 这段话是为了执行什么,可不可以删掉
yin zhang1:
第一个问题已经解决 2012 10 版本里面的uboot函数有错误
在 u-boot/common/cmd_usb.c文件中
int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 函数 中的 usb start 命令下的 return 0 改成下面红色字体部分
/*return 0; */ if(usb_started) return 0; else return 1;