Below you will find pages that utilize the taxonomy term “JTag”
Linux 下 ARM 的 bootloader 开发环境
首先我要承认错误……按照《[link2post id=”644″]Linux 下 ARM 的 bootloader 开发环境[/link2post]》中写道的方法,是没有办法使调试正常工作的……
这里再补充说明一些内容。
1. 14-20针JTAG转接板的制作,参考这里,有图的。
2. 关于调试电缆,必须使用J-Link或者OpenJTAG,wiggler无法使用。如果用wiggler的话,只要执行一次reset命令,除非手动复位目标板,否则目标板就再也无法halt下来了…… 使用J-Link或者OpenJTAG不存在这个问题,可以直接在openocd.cfg中写:
init
reset init
3. 为什么要修改parport.cfg中的
parport_port 0×378
到
parport_port 0
答:前者使用的是parport驱动,通过地址定位并口,后者使用的是ppdev驱动,使用端口号定位。前者在我这里没办法工作,即使使用了正确的地址(0xdd00)也不行。
4. U-Boot调试符号的编译不需要这么麻烦,默认就是编译了调试符号的&……我们需要做的就是去掉代码优化而已,在config.mk中找到136,137两行,改为:
DBGFLAGS= -g -DDEBUG
OPTFLAGS= #-Os -fomit-frame-pointer
就行了。136行开启了调试信息,137行去掉了代码优化。
5. 对于这个板子,还需要一个初始化配置文件。否则会导致无法下载写入数据到SDRAM。
完整的配置文件在附件:openocd
另:uptech_2410.cfg已经整合到OpenOCD master分支。在下一个版本(0.5)推出的时候会一起发布。这个配置文件应该也适用于smdk2410,但是我没试过……
Linux 下 ARM 的 bootloader 开发环境
整了将近一周……终于搞定了~
因为比赛需要,我正在试着为博创的uptech 2410开发板改进uboot,使之支持用户通过触摸屏选择,从SD卡读取系统镜像并引导。因为uboot的开发环境是Linux,而ADS之类的东东又没办法在Linux下运行(其实我觉得ADS也不怎么好用……),我只好自己想办法弄出一套开发环境来……
需要的设备有:
1. 基于Moschip 9865芯片组的PCI转1并2串转接卡
2. wiggler线。uptech自带的jtag调试线相当不标准,既不是wiggler又不是sdt,而是自己搞的一套引脚定义。引用网上某人(忘记谁了)的话说,有些公司为了显示自己的技术实力,故意把引脚定义弄得乱七八糟。
3. 20-14针jtag转接板
Moschip 9865在Debian wheezy下的驱动还是比较容易的,只不过容易受到误导而绕弯路。官方的驱动是不需要的,也是没有用的。首先,官方的驱动在Debian Wheezy下根本无法编译通过。mcs9865.c中第1993行
<br></br>static DECLARE_MUTEX(serial9865_sem);<br></br>
是不正确的。最新的内核声明信号量的语法已经改成了
<br></br>static DEFINE_SEMAPHORE(serial9865_sem);<br></br>
修改完后,可以编译,可以安装(Makefile中的一些路径依然有问题)。但是无论如何也不会出现官方手册中说的/dev/ttyD*。经过我的测试,其实根本不需要什么驱动,/dev/ttyS*就是可以正常运行的串口……只是需要花时间找找哪一个才是需要的串口而已(我在win下的COM1在这里不是ttyS0,而是ttyS1)。
并口的驱动更加简单。执行
lspci -v
找到类似这样的一段(一般是最后一段):
05:02.2 Parallel controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 03 [IEEE1284])
Subsystem: Device a000:2000
Flags: bus master, medium devsel, latency 32, IRQ 20
I/O ports at dd00 [size=8]
I/O ports at dc00 [size=8]
Memory at fdcfb000 (32-bit, non-prefetchable) [size=4K]
Memory at fdcfa000 (32-bit, non-prefetchable) [size=4K]
Capabilities:
Kernel driver in use: parport_pc
记下IRQ 和 第一个 I/O ports at xxxx [size=8]。然后执行:
modprobe parport_pc io=0xdd00 irq=20
不需要先rmmod,直接modprobe就可以。
然后再执行
modprobe ppdev
此时,/dev/parport0 就应该出现了。