本帖最后由 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目录展示
对比一下pmon和uboot的目录,可以看出pmon和uboot二者间的差异
2.2 PMON目录框架
我们来详细介绍一下pmon的主要目录架构
- -conf:配置文件。
- -doc:说明文档。
- -examples:例子
- -fb:用来在frambuffer显示的代码,Framebuffer是一种用于在屏幕上显示图形的设备,它是一个内存区域,用来存储图像像素的颜色信息。在嵌入式系统中,framebuffer可以通过底层的驱动程序来访问和控制,从而实现在屏幕上显示图形界面。
- -include:包含头文件的目录或文件。
- -lib:库文件,包含已编译代码和数据结构的文件,用于在应用程序中提供功能和接口。
- -pmon:里面是PMON的主体代码
`arch`文件:通常用于存储与处理器架构相关的配置和信息,包括处理器类型、指令集、内存管理等。
`cmds`文件:包含与Pmon功能相关的命令和脚本,用于控制和处理系统事件和数据。
`cmmon`文件:包含公共的配置和数据,供其他文件使用。
`custom`文件:用于存储自定义的配置和数据,用于扩展Pmon的功能或定制行为。
`dev`文件:包含与开发相关的配置和数据,例如设备驱动程序、调试信息等。
`fs`文件:涉及文件系统的配置和数据,例如文件路径、访问权限等。
`loaders`文件:包含加载器相关的配置和数据,用于加载和初始化硬件设备或文件系统。
`netio`文件:涉及网络输入/输出相关的配置和数据,例如网络接口驱动程序、网络地址和配置信息等Pmon 常用的命令
- -sys:系统相关的文件和资源
- -targets:通常包含针对不同目标平台或处理器架构的配置文件、脚本和资源。
- -tools:包含用于开发、编译、调试和部署PMON的工具和资源。
- -x86emu:包含针对x86处理器的模拟器代码和资源。
- -zloader:用于加载和引导PMON的引导加载程序代码和资源。
第三章 PMON常用指令
龙芯系统进入前按“c”进入pmon的命令行
3.1 h -帮助指令
h查看pmon所有指令,查看完按q返回
h xxx查看指令书写格式,以及指令介绍
比如h ping
3.2 devls -显示设备信息
3.3 fdisk -显示存储器分区信息
3.4 读写寄存器
d4
格式 d4 地址 读取字节
m4 4字节写入
格式 m4 地址 写入内容
不要随便写,这里不展示了
3.5 ifconfig/ifaddr
格式 ifconfig/ifaddr 网口名 ip
ifconfig 网口名 remove -移除功能
3.6 set -查看或增改pmon环境变量
格式 set 环境变量名 环境变量值
3.7 unset -删除pmon环境变量
建议:别乱改,小心点现有的环境变量。
3.8 load -加载一个elf文件到内存
格式:load 所在路径/文件名称
加载了sd卡,查看了boot的内容
这是加载内核,这样显示为加载成功了
3.9 fload -固件烧录
一般用来烧录新的pmon文件,这里省了下载器,但是前提你的pmon文件正确,要不然你的开发板就成了板砖
3.10 bl -读取boot.cfg
输入这个指令就sd重新加载了,你要想硬盘加载就把sdcard0改成wd0
3.11 fdt -设备树
打印所有
print_dtb /
打印dc节点
print_dtb /soc/dc@0x400c0000
3.12 date
设置时间命令
3.13 pciscan -扫描并输出PCI总线上的所有设备
3.14 env -查看环境变量命令
3.15 vers -pmon版本号命令
3.16 reboot -重启
其它指令如下:
3.17 initrd
功能:加载ramdisk作为文件系统。
句式:initrd 所在路径/文件名称
用例:以下分别为U盘加载,硬盘加载,NVME硬盘加载,网络加载
- initrd (usb0,0)/boot/rootfs.cpio.gz
复制代码- initrd (nvme0,0)/boot/rootfs.cpio.gz
复制代码- initrd tftp://192.168.1.11/rootfs.cpio.gz
复制代码 3.18 g
功能:g 命令是 PMON 中一个很重要的命令,直接从指定内存地址处开始执行程
序
句式:g 内核传参
用例:
3.19 devcp
功能:打开 src‐device 和 desc‐device 两个设备,从 src‐device 读取一
定数量的字节数据,写到 desc‐device 设备中去,完成后关闭这两个设备。可以
理解为将目标内容拷贝入目标空间。
句式:
- devcp src‐device desc‐device
复制代码- devcp tftp://server‐ip/vmlinux /dev/mtd0
复制代码 3.20 mtd_erase
功能:擦除 nandflash 的一个分区
句式:mtd_erase desc‐device
用例:
(擦除 nandflash 的第一个分区,跳过已经是坏块的地方,不会尝试擦除已经是坏
块的地方)
(擦除 nandflash 的第一个分区,这时会尝试擦除所有的块,即使是坏块也会尝试
执行擦除操作)
3.21 pcs
功能:选定PCI设备功能
句式:pcs 功能选项
用例:
3.22 spi_base
功能:spi操作片选,默认为0
句式:
用例:
3.23 spi_id
功能:读取当前片选下flashID
句式:
用例:
3.24 erase_all
功能:擦除当前操作的SPI flash
句式:
用例:
3.25 read_pmon
功能:读取flash内容
句式:
用例:
3.26 eepread
功能:一次一字节读取EEPROM芯片数据
句式:
用例:
用例:
3.28 lwdhcp
功能:使用DHCP自动分配IP
句式:
用例:
|
|