[X]关闭

龙芯PMON

文档创建者:LINUX课程
浏览次数:8
最后更新:2024-11-22
本帖最后由 LINUX课程 于 2024-11-22 11:06 编辑

第一章 PMON概述
1.1 PMON介绍
PMON(Processor Monitor)是一个开源的、具备BIOS和bootloader功能的监控程序,主要用于嵌入式系统。它由中国科学院计算技术研究所的中科龙梦团队开发,并在国内得到了广泛的应用和推广。
1.2 PMON特点
  • 多平台支持:PMON支持MIPS、ARM、PowerPC等多种处理器架构,特别地,它还重点支持龙芯自产的loongarch架构,这使得它能够适用于不同类型的嵌入式设备。
  • 文件系统支持:PMON支持ext2、fat32等文件系统,可以引导操作系统,并支持网络引导(tftp)、磁盘引导和flash引导等方式。
  • 内建调试功能:PMON提供了强大的调试功能,方便开发者对内核进行调试。
  • USB 2.0 Mass Storage支持:它可以作为USB存储设备,方便数据的传输和存储。
  • 网络功能:PMON支持网络协议,如TCP/IP,可以进行网络通信和配置。
  • 环境变量和命令行接口:PMON提供了环境变量设置和命令行接口,用户可以通过命令行发送控制指令,查看系统信息和进行系统配置。
  • 图形界面:PMON还提供了一个图形用户界面,方便用户进行系统管理和监控。
  • 开源和BSD许可:PMON的源代码是开放的,遵循BSD许可协议,这有利于社区的参与和贡献。
1.3 PMON与U-Boot的区别
U-Boot是一个广泛使用的、开放源码的嵌入式操作系统引导加载程序,而PMON则是针对龙芯处理器的一个专门开发的引导加载程序。它们的主要区别如下:
  • 用途:U-Boot更广泛地应用于各种嵌入式系统和设备,而PMON则专门针对龙芯处理器。
  • 功能:U-Boot提供了丰富的功能,如网络引导、文件系统支持、命令行接口等,可以满足不同类型的嵌入式系统需求;而PMON则实现了包括内存管理、处理器初始化、设备初始化、以及引导流程控制等在内的全部引导加载程序功能。
  • 社区支持:U-Boot拥有庞大的开发者社区和用户群体,提供了丰富的文档和支持;而PMON的社区支持相对有限,但针对龙芯处理器进行了优化,具有较高的稳定性和可靠性。
第二章 PMON目录
2.1 PMON目录展示
image.jpg
image.jpg
对比一下pmon和uboot的目录,可以看出pmon和uboot二者间的差异
2.2 PMON目录框架
我们来详细介绍一下pmon的主要目录架构
image.jpg
  • -conf:配置文件。
  • -doc:说明文档。
  • -examples:例子
  • -fb:用来在frambuffer显示的代码,Framebuffer是一种用于在屏幕上显示图形的设备,它是一个内存区域,用来存储图像像素的颜色信息。在嵌入式系统中,framebuffer可以通过底层的驱动程序来访问和控制,从而实现在屏幕上显示图形界面。
  • -include:包含头文件的目录或文件。
  • -lib:库文件,包含已编译代码和数据结构的文件,用于在应用程序中提供功能和接口。
  • -pmon:里面是PMON的主体代码
image.jpg
`arch`文件:通常用于存储与处理器架构相关的配置和信息,包括处理器类型、指令集、内存管理等。
`cmds`文件:包含与Pmon功能相关的命令和脚本,用于控制和处理系统事件和数据。
`cmmon`文件:包含公共的配置和数据,供其他文件使用。
`custom`文件:用于存储自定义的配置和数据,用于扩展Pmon的功能或定制行为。
`dev`文件:包含与开发相关的配置和数据,例如设备驱动程序、调试信息等。
`fs`文件:涉及文件系统的配置和数据,例如文件路径、访问权限等。
`loaders`文件:包含加载器相关的配置和数据,用于加载和初始化硬件设备或文件系统。
`netio`文件:涉及网络输入/输出相关的配置和数据,例如网络接口驱动程序、网络地址和配置信息等Pmon 常用的命令
  • -sys:系统相关的文件和资源
  • -targets:通常包含针对不同目标平台或处理器架构的配置文件、脚本和资源。
  • -tools:包含用于开发、编译、调试和部署PMON的工具和资源。
  • -x86emu:包含针对x86处理器的模拟器代码和资源。
  • -zloader:用于加载和引导PMON的引导加载程序代码和资源。
第三章 PMON常用指令
龙芯系统进入前按“c”进入pmon的命令行
image.jpg
3.1 h -帮助指令
h查看pmon所有指令,查看完按q返回
image.jpg
h xxx查看指令书写格式,以及指令介绍
比如h ping
image.jpg
3.2 devls -显示设备信息
image.jpg
3.3 fdisk -显示存储器分区信息
image.jpg
3.4 读写寄存器
d4
格式 d4 地址 读取字节
image.jpg
m4 4字节写入
格式 m4 地址 写入内容
不要随便写,这里不展示了
3.5 ifconfig/ifaddr
格式 ifconfig/ifaddr 网口名 ip
ifconfig 网口名 remove   -移除功能
3.6 set -查看或增改pmon环境变量
格式 set 环境变量名 环境变量值
image.jpg
3.7 unset -删除pmon环境变量
image.jpg
建议:别乱改,小心点现有的环境变量。
3.8 load -加载一个elf文件到内存
格式:load 所在路径/文件名称
image.jpg
加载了sd卡,查看了boot的内容
image.jpg
这是加载内核,这样显示为加载成功了
3.9 fload -固件烧录
一般用来烧录新的pmon文件,这里省了下载器,但是前提你的pmon文件正确,要不然你的开发板就成了板砖
image.jpg
3.10 bl -读取boot.cfg
image.jpg
输入这个指令就sd重新加载了,你要想硬盘加载就把sdcard0改成wd0
3.11 fdt -设备树
打印所有
print_dtb /
image.jpg
打印dc节点
print_dtb /soc/dc@0x400c0000
image.jpg
3.12 date
image.jpg
设置时间命令
image.jpg
3.13 pciscan -扫描并输出PCI总线上的所有设备
image.jpg
3.14 env -查看环境变量命令
image.jpg
3.15 vers -pmon版本号命令
image.jpg
3.16 reboot -重启

其它指令如下:
3.17 initrd
功能:加载ramdisk作为文件系统。
句式:initrd 所在路径/文件名称
用例:以下分别为U盘加载,硬盘加载,NVME硬盘加载,网络加载
  1. initrd (usb0,0)/boot/rootfs.cpio.gz
复制代码
  1. initrd (nvme0,0)/boot/rootfs.cpio.gz
复制代码
  1. initrd tftp://192.168.1.11/rootfs.cpio.gz
复制代码
3.18 g
功能:g 命令是 PMON 中一个很重要的命令,直接从指定内存地址处开始执行程

句式:g 内核传参
用例:
  1. g console=ttyS0,115200
复制代码
3.19 devcp
功能:打开 src‐device 和 desc‐device 两个设备,从 src‐device 读取一
定数量的字节数据,写到 desc‐device 设备中去,完成后关闭这两个设备。可以
理解为将目标内容拷贝入目标空间。
句式:
  1. devcp src‐device desc‐device
复制代码
  1. devcp tftp://server‐ip/vmlinux /dev/mtd0
复制代码
3.20 mtd_erase

功能:擦除 nandflash 的一个分区
句式:mtd_erase desc‐device
用例:
  1. mtd_erase /dev/mtd0
复制代码
(擦除 nandflash 的第一个分区,跳过已经是坏块的地方,不会尝试擦除已经是坏
块的地方)
  1. mtd_erase /dev/mtd0r
复制代码
(擦除 nandflash 的第一个分区,这时会尝试擦除所有的块,即使是坏块也会尝试
执行擦除操作)
3.21 pcs
功能:选定PCI设备功能
句式:pcs 功能选项
用例:
  1. pcs -1
复制代码
3.22 spi_base


功能:spi操作片选,默认为0
句式:

  1. spi_base 片选
复制代码
用例:
  1. spi_base 0
复制代码
3.23 spi_id

功能:读取当前片选下flashID
句式:

  1. spi_id
复制代码
用例:
  1. spi_id
复制代码
3.24 erase_all
功能:擦除当前操作的SPI flash
句式:
  1. erase_all
复制代码
用例:
  1. erase_all
复制代码
3.25 read_pmon

功能:读取flash内容
句式:
  1. read_pmon 开始地址 读取大小
复制代码

用例:
  1. read_pmon 0 0x100
复制代码

3.26 eepread
功能:一次一字节读取EEPROM芯片数据
句式:
  1. eepread 开始地址 读取数量
复制代码

用例:
  1. eepread 0 10
复制代码

用例:
  1. eepread 0x5 “12 34 56”
复制代码

3.28 lwdhcp
功能:使用DHCP自动分配IP
句式:
  1. lwdhcp 网口名
复制代码

用例:
  1. lwdhcp 默认自动分配syn0地址
复制代码
  1. lwdhcp syn1 自动分配syn1地址
复制代码



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

本版积分规则