关于J-LINK升级最新固件后无法连上的一点分析

关于J-LINK升级最新固件后无法连上的一点分析

昨天升级了最新的 Keil MDK 4.53,怕它老是提示 J-Link 要升级,

就去 SEGGER 的网站下了个最新版的 J-Link 软件包(4.46F 版的),

装好后运行 J-Link Commander 提示要升级固件。以前一直是刷的,没有问题,

这次竟然升级后连不上仿真器了。提示

"Communication timed out: Requested 1 bytes, received 0 bytes !"。

SEGGER 终于开始玩花招了。

到 Keil 里打开了以前的一个工程,发现竟然还能调试,

一看那 DLL 的版本是 4.40C 的,看来是在 DLL 里做了些手脚。


  今天用 IDA 跟了一下 J-Link Commander,并对比了一下两个动态库的差别,

发现新版的在打开 J-Link 函数的过程里多了两个调用。

前一个判断了一下仿真器的功能字符串里是否有 GDBFull,

有就会多一步 USB 通讯,超时的就是这一步操作;

 

后一个通过序列号枪毙了一些老的(被偷的?)J-Link。看了一下 GDBFull 这个字符串,

只在这里用了一次,将其全部改为大写,发现可以连上了。

另外,序列号为 11111117 和 805306163 的会强制校验 GDBFull 功能。

  大致上猜了一下,可能是 SEGGER 更新了一下 GDBFull 功能与序列号的绑定算法,

下面的固件里也应该改过了,那一步 USB 通讯就是下面返回上来的认证结果,

所以接收的只有一个字节。GDBFull 这个功能貌似从来没有用过,反正我没有用到过。


  节约空间资源,删掉了下载。具体改法就是找到那个字符串,改成别的就行了。

 

你可能感兴趣的:(link)