找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
本帖最后由 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.
 楼主| | 显示全部楼层
本帖最后由 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.
回复

使用道具 举报

好厉害,jtag我只照着教程救过一次砖,一直觉得jtag接口很厉害但是又很复杂
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

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

GMT+8, 2024-5-5 01:28

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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