|
本帖最后由 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
- #!/bin/sh
- cd /sys/class/gpio
- for i in `seq $1 $2`; do
- echo $i > export; echo out >gpio$i/direction
- done
- nums=`seq $1 $2`
- while true; do
- for i in $nums; do
- echo 0 > gpio$i/value
- done
- sleep 2
- for i in $nums; do
- echo 1 > gpio$i/value
- done
- sleep 2
- done
复制代码 使用方法:
./gpio_test x y
将gpio x至y口打开并且激活,这时可以用万用表测量电压,如果你的gpio口找的没有错并且焊接没有问题,
接口电压测量值(与主板地)为0v与3.3v交替闪烁间隔为2秒。
这个很有用大家伙可以在没有改造前在自己路由器上自己测试,没有什么软件的特殊要求(系统为openwrt那是必须的)。
这个脚本有没有副作用?我测试是直接使用./gpio 0 30 然后在/sys/class/gpio/的目录下建立了很多gpioxx目录,主板不能使用的gpio口脚本是不占用的。
- root@OpenWrt:/sys/class/gpio# ls
- export gpio10 gpio13 gpio17 gpio19 gpio20 gpio8 gpiochip0
- gpio0 gpio11 gpio16 gpio18 gpio2 gpio7 gpio9 unexport
复制代码
二、找到路由的gpio后将接口关闭
脚本gpio_off
- #!/bin/sh
- cd /sys/class/gpio
- for i in `seq $1 $2`; do
- echo $i > unexport;
- done
复制代码 使用方法同上 .\gpio_off x y
三、为了定位gpio口的编号继续使用脚本
.\gpio_test x x
一个一个的定位gpio口的编号。我就是发现dir 615 c1的gpio口与网站上的编号不同的。
下面的操作可以参考 另类方法制作 JTAG 调试器,AR9341 JTAG 救砖方法 一文了
例子:
这是我退休的的moto 850 v3(主要是找有现成jtag的路由不好找)
- root@OpenWrt:/mnt/openocd# openocd -f gpio_jtag.cfg -f bcm47xx.cfg
- Open On-Chip Debugger 0.9.0-snapshot (2015-09-09-08:15)
- Licensed under GNU GPL v2
- For bug reports, read
- http://openocd.org/doc/doxygen/bugs.html
- SysfsGPIO nums: tck = 8, tms = 7, tdi = 2, tdo = 0
- SysfsGPIO num: trst = 9
- SysfsGPIO num: srst = 11
- adapter_nsrst_delay: 100
- Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
- jtag_ntrst_delay: 100
- trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain connect_deassert_srst
- Forcing reset_config to none to prevent OpenOCD from pulling SRST after the switch from LV is already performed
- none separate
- switch_lv_to_ejtag
- Info : SysfsGPIO JTAG/SWD bitbang driver
- Info : JTAG only mode enabled (specify swclk and swdio gpio to add SWD mode)
- Info : This adapter doesn't support configurable speed
- Info : JTAG tap: bcm4712-lv.tap tap/device found: 0x1471217f (mfg: 0x0bf, part: 0x4712, ver: 0x1)
- Info : JTAG tap: bcm4712-lv.tap disabled
- Info : JTAG tap: bcm4712.cpu enabled
复制代码 moto 850 不能halt,bcm47xx.cfg 可能有问题,不知道怎么弄了- > reset init
- JTAG tap: bcm4712-lv.tap tap/device found: 0x1471217f (mfg: 0x0bf, part: 0x4712, ver: 0x1)
- JTAG tap: bcm4712-lv.tap disabled
- JTAG tap: bcm4712.cpu enabled
- timed out while waiting for target halted
- TARGET: bcm4712.cpu - Not halted
- in procedure 'reset'
- in procedure 'ocd_bouncer'
- Halt timed out, wake up GDB.
- > reset halt
- JTAG tap: bcm4712-lv.tap tap/device found: 0x1471217f (mfg: 0x0bf, part: 0x4712, ver: 0x1)
- JTAG tap: bcm4712-lv.tap disabled
- JTAG tap: bcm4712.cpu enabled
- timed out while waiting for target halted
- TARGET: bcm4712.cpu - Not halted
- in procedure 'reset'
- in procedure 'ocd_bouncer'
- Halt timed out, wake up GDB.
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|