2K1000是从sip flash启动的,pmon存在flsah前1M里
1.1 pmon相关资源
pmon源码获取
pmon:pmon
解压:
$ sudo tar -xvf pmon-loongson3-pai.tar.bz2
pmon工具链获取
工具链: gcc
解压:
$ sudo tar -zxvf gcc-4.4-gnu.tar.gz -C /
解压完在系统的 /opt 目录下得到gcc-4.4-gnu,可以通过ls命令查看 ls /opt
1.2 pmon编译依赖工具安装
1)安装makedepand
$ sudo apt-get install xutils-dev
2)安装pmoncfg
$ sudo apt-get install bison flex build-essential patch
$ cd pmon-loongson3-20200728/tools/pmoncfg (pmon源码里)
$ make pmoncfg
$ sudo cp pmoncfg /usr/bin
1.3 pmon 编译
Pmon采用交叉编译,在源码目录下创建编译脚本,如果已经有cmd.sh文件,直接进行步骤4执行编译。
操作如下:
1)在pmon源码pmon-loongson3-20200728目录下创建cmd.sh文件
$ sudo vim cmd.sh
2)将下面内容写到cmd.sh文件里
#!/bin/bash
cd zloader.ls2k
export PATH=/opt/gcc-4.4-gnu/bin/:$PATH
make cfg
make all tgt=rom ARCH=mips CROSS_COMPILE=mipsel-linux- DEBUG=-g
make dtb
3)修改cmd.sh执行权限
$ sudo chmod 777 cmd.sh
4)编译pmon
$ sudo ./cmd.sh
问题:/bin/sh: 1: python: not found
解决:
sudo apt-get install python2.7
sudo ln -s /usr/bin/python2.7 /usr/bin/python
5)编译完成后在pmon源码目录下的zloader.ls2k/目录下生成gzrom-dtb.bin
如更改了配置文件Targets/LS2K/conf/ls2k, 则在编译前要执行make cfg, 使得更改生效,如果普通编译没有更改配置,则每次无需都执行make cfg命令。
执行make dtb 可以将dtb和gzrom.bin 结合生成gzrom-dtb.bin,此命令可以在上面编译完成后执行,dtb为设备树。
1.4 pmon 烧写
1)在线更新pmon,启动到pmon命令下
load -r -f 0xbfc00000 tftp://ip/gzrom-dtb.bin //网络更新
load -r -f 0xbfc00000 /dev/fs/fat@usb0/gzrom-dtb.bin //U盘更新
2)ejtag烧写pmon
ejtag安装
$ tar zxvf ejtag-debug-v3.25.9.tar.gz -C /opt/
ejtag烧写pmon(二进制文件为gzrom-dtb.bin)
$ cd /opt/ejtag-debug
$ sudo ./ejtag_debug_usb -t
ejtag里输入:
source configs/config.ls2k
板卡上电 (若设置开机按键,需要按下开机按键)
ejtag里输入set使系统停止运行,如果没有返回结果说明硬件异常:
ejtag里输入:
cpu0 -program_cachelock /路径/gzrom-dtb.bin
执行完program_cachelock命令,默认将/路径/gzrom.bin 烧录到芯片里。program_cachelock命令后可以放gzrom.bin的绝对路径,例如:program_cachelock /home/tftpboot/gzrom.bin
烧写完成后:
1.5 调试
参考链接:https://blog.csdn.net/tongxin1101124/article/details/113240099
ejtag中用到的命令
硬件指令断点
设置软件指令断点到addr: hb addr [ibm]
删除addr上的指令断点: unhb addr [ibm]
查看断点: hbls
单步调试
单步count次: si [count]
取消单步: unsi
暂定
停住CPU命令:set
继续执行
继续执行命令:cont
pmon汇编代码 ejtag单步调试
板卡先断电
链接ejta、串口
打开串口,波特率112500
打开ejtag软件sudo ./ejtag_debug_usb -t
a、执行:source configs/config.ls2k
b、执行:loop -1 stop
c、板卡上电 (2K1000上电后,需要按下开机按钮)
d、执行:ctrl + c (目的打断loop -1 stop)
e、执行:set
pmon汇编代码 ejtag单步调试
板卡先断电
链接ejta、串口
打开串口,波特率112500
打开ejtag软件sudo ./ejtag_debug_usb -t
a、执行:source configs/config.ls2k
b、执行:loop -1 stop
c、板卡上电 (2K1000上电后,需要按下开机按钮)
d、执行:ctrl + c (目的打断loop -1 stop)
e、执行:set
备注:执行set后,可以看到 pc 值是0xffffffffbfc00004。龙芯处理器起始地址是:0xbfc00000
反汇编 gzrom
/opt/gcc-4.4-gnu/bin/mipsel-linux-objdump -d zloader.ls2k/gzrom > test.log