reset命令不见了!!调试u-boot遇到的怪问题

在调试高通AR7240 AP的u-boot时,发现reset命令消失,执行报错。通过分析发现,reset命令在board_init_r阶段因两次relocate导致问题。通过对lds文件的修改,解决了命令被错误重定位的问题,恢复正常。
摘要由CSDN通过智能技术生成

命令玩起了捉迷藏

调试一款高通AR7240的AP,仿照高通AP91的代码,一通改,很顺利的u-boot就搞定了,正当自己感慨这种“搬砖式”调试已经日趋娴熟的时候,忽然发现reset命令没有了。。。。
执行reset命令,一直报找不到该命令的错误:
这里写图片描述
敲help命令,reset命令明明就在呀:
这里写图片描述
真是“你见与不见,我都在这里,但是不给你用。”一头雾水。。。。。
reset命令是MIPS CPU通用命令,代码与具体的板子型号完全无关,而新添的代码只有在board目录和configs目录有修改,况且这边的改动也不会影响到其他地方的代码。

于是仿照reset命令,复制他的命令注册代码,自己在其他地方做了一个treset命令:
这里写图片描述
执行treset命令是可以正常重启的,由此可以断定肯定不是reset命令相关的代码不适用于当前这块板子。
观察了下help命令输出,记得在其他板子上,一般都是?(help)这个命令排第一个,而现在是reset命令在第一个,应该也是一种不正常的表现。
于是我干脆把reset命令的注册代码注释掉,这个时候排第一个的命令变成了bootm,运行下bootm命令,同样是跟reset类似,报找不到:
这里写图片描述
真是妖孽呀!!!

连续做了两次relocate

在没法得到更进一步线索的情况下,只好开始代码跟踪调试了:
执行命令,会报“Unknown command xxx - try ‘help’”是因为在run_command中对命令解析时会进行一个find_cmd的判断,而在find_cmd中需要满足输入命令与当前全局变量中的命令名全部或部分相符。
命令相关的信息都存储在u_boot_cmd_start开始到u_boot_cmd_end结束的这部分区间内。
再看help命令的输出过程,同样也是去u_boot_cmd_start-u_boot_cmd_end这段区间获取命令信息,然后对各个命令名称按照组成字母的ASCII码大小进行递增排序,所以正常情况下都是“?”这个命令排第一。而现在比较奇怪的就是排第一的变成了reset或是bootm这种,显然不应该在“?”前面。
综上,导致这些奇怪现象的嫌疑犯按理说就是u_boot_cmd_start-u_boot_cmd_end这段区间了。
仔细跟了下代码,并对cmd命令的一些域做了调试输出,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值