找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 2408|回复: 2

找路由器的彩蛋,gpio口用于jtag编程器使用(有一定通用性)

[复制链接]
发表于 2019-12-2 19:11 | 显示全部楼层 |阅读模式
本帖最后由 jiuweiljp 于 2019-12-2 19:31 编辑

前言:
现在jtag 玩的人少了很多,一个是有并口的电脑已经很少了(台式机有并口的都很少了,笔记本就不谈了)。

很久以前我发过帖子用并口的DLC5(直焊100欧电阻的那种) 线救过恩山的裸板。

后来路由器ar系列的居多,并且flash都是spi接口的,很多网友直接购买了编程器救砖(便宜啊)jtag口就没有人玩了。

现在flash很多是nand的,编程器很贵芯片脚也很多(有点像老式的28、29系列的flash),焊接不容易。

看见论坛 hackpascal 发了一个帖子 另类方法制作 JTAG 调试器,AR9341 JTAG 救砖方法

他使用的是AR9331 开发板这种板上有现成的gpio口,可操作性较强。

-------------------------------------------------------------------------------
我手上有一块dir 615 c1的主板(自己改的Uboot,自己编译的openwrt)能支持16MB的falsh,自从有了联想的y1s后,也废弃了很长时间了。
注:参考了 帮朋友修改 D-LINK DIR-615 C2 该版本的没有miniweb,我自己加了miniweb。

以下的操作参考的网网址
https://www.linux-mips.org/wiki/JTAG#EJTAG_software
https://openwrt.org/docs/techref/hardware/port.jtag
D-Link DIR-615 wikihttps://oldwiki.archive.openwrt.org/toh/d-link/dir-615#jtag

网站上提到615有6个多的gpio口,按照该方法焊接,需要点动手能力,线材能最好使用照片上的那总线(软心的多股线,老式40针的硬盘线就是了)。



完成后不要忘了用热溶胶固定,有条件的可以加上透明的硅胶(需要时间固化)见图



下一步是焊接一个接口方便接线,一定要做好标签啊



最后就是测试了,这个我走了点弯路,为什么呢openwrt网站的615 gpio口编号有误(最后才知道)。
死活不能用opwenocd,我想是不是我自己编译的uboot没有初始化gpio,还是openwrt没有初始化gpio,接口电压也有怪有3.3v有1.2v的还有0.6v的,
线没有焊好吗?重新我改写、编译uboot及openwrt哪太麻烦了。
找了两个网址提到了openwrt 操作gpio
openwrt的GPIO控制
https://openwrt.org/zh/docs/techref/hardware/port.gpio

一、彩蛋来了,找路由的gpio
小脚本 gpio_test
  1. #!/bin/sh
  2. cd /sys/class/gpio
  3. for i in `seq $1 $2`; do
  4. echo $i > export; echo out >gpio$i/direction
  5. done
  6. nums=`seq $1 $2`
  7. while true; do
  8.   for i in $nums; do
  9.      echo 0 > gpio$i/value
  10. done
  11.   sleep 2
  12.   for i in $nums; do
  13.      echo 1 > gpio$i/value
  14.   done
  15.   sleep 2
  16. done
复制代码
使用方法:
./gpio_test x y
将gpio x至y口打开并且激活,这时可以用万用表测量电压,如果你的gpio口找的没有错并且焊接没有问题,
接口电压测量值(与主板地)为0v与3.3v交替闪烁间隔为2秒。
这个很有用大家伙可以在没有改造前在自己路由器上自己测试,没有什么软件的特殊要求(系统为openwrt那是必须的)。
这个脚本有没有副作用?我测试是直接使用./gpio 0 30 然后在/sys/class/gpio/的目录下建立了很多gpioxx目录,主板不能使用的gpio口脚本是不占用的。
  1. root@OpenWrt:/sys/class/gpio# ls
  2. export     gpio10     gpio13     gpio17     gpio19     gpio20     gpio8      gpiochip0
  3. gpio0      gpio11     gpio16     gpio18     gpio2      gpio7      gpio9      unexport
复制代码



二、找到路由的gpio后将接口关闭
脚本gpio_off
  1. #!/bin/sh
  2. cd /sys/class/gpio
  3. for i in `seq $1 $2`; do
  4. echo $i > unexport;
  5. done
复制代码
使用方法同上 .\gpio_off x y
三、为了定位gpio口的编号继续使用脚本
.\gpio_test x x
一个一个的定位gpio口的编号。我就是发现dir 615 c1的gpio口与网站上的编号不同的。

下面的操作可以参考 另类方法制作 JTAG 调试器,AR9341 JTAG 救砖方法 一文了

例子:
这是我退休的的moto 850 v3(主要是找有现成jtag的路由不好找)
  1. root@OpenWrt:/mnt/openocd# openocd -f gpio_jtag.cfg -f bcm47xx.cfg
  2. Open On-Chip Debugger 0.9.0-snapshot (2015-09-09-08:15)
  3. Licensed under GNU GPL v2
  4. For bug reports, read
  5.         http://openocd.org/doc/doxygen/bugs.html
  6. SysfsGPIO nums: tck = 8, tms = 7, tdi = 2, tdo = 0
  7. SysfsGPIO num: trst = 9
  8. SysfsGPIO num: srst = 11
  9. adapter_nsrst_delay: 100
  10. Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
  11. jtag_ntrst_delay: 100
  12. trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain connect_deassert_srst
  13. Forcing reset_config to none to prevent OpenOCD from pulling SRST after the switch from LV is already performed
  14. none separate
  15. switch_lv_to_ejtag
  16. Info : SysfsGPIO JTAG/SWD bitbang driver
  17. Info : JTAG only mode enabled (specify swclk and swdio gpio to add SWD mode)
  18. Info : This adapter doesn't support configurable speed
  19. Info : JTAG tap: bcm4712-lv.tap tap/device found: 0x1471217f (mfg: 0x0bf, part: 0x4712, ver: 0x1)
  20. Info : JTAG tap: bcm4712-lv.tap disabled
  21. Info : JTAG tap: bcm4712.cpu enabled
复制代码
moto 850 不能halt,bcm47xx.cfg 可能有问题,不知道怎么弄了
  1. > reset init
  2. JTAG tap: bcm4712-lv.tap tap/device found: 0x1471217f (mfg: 0x0bf, part: 0x4712, ver: 0x1)
  3. JTAG tap: bcm4712-lv.tap disabled
  4. JTAG tap: bcm4712.cpu enabled
  5. timed out while waiting for target halted
  6. TARGET: bcm4712.cpu - Not halted
  7. in procedure 'reset'
  8. in procedure 'ocd_bouncer'


  9. Halt timed out, wake up GDB.
  10. > reset halt
  11. JTAG tap: bcm4712-lv.tap tap/device found: 0x1471217f (mfg: 0x0bf, part: 0x4712, ver: 0x1)
  12. JTAG tap: bcm4712-lv.tap disabled
  13. JTAG tap: bcm4712.cpu enabled
  14. timed out while waiting for target halted
  15. TARGET: bcm4712.cpu - Not halted
  16. in procedure 'reset'
  17. in procedure 'ocd_bouncer'


  18. Halt timed out, wake up GDB.
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2019-12-2 19:12 | 显示全部楼层
本帖最后由 jiuweiljp 于 2019-12-19 16:18 编辑

后期补充下发现这个dir 615 c1的gpio口还有很多是空的
我已经找到了gpio 16 、17、18、19、20
好像gpio 13 也找到了

我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2019-12-2 19:26 | 显示全部楼层
好厉害,jtag我只照着教程救过一次砖,一直觉得jtag接口很厉害但是又很复杂
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-3-29 05:17

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表