龙芯PMON简介和qemu下测试

本文介绍了如何在Ubuntu18.04 LTS环境下编译龙芯PMON,包括获取源码、交叉工具链,以及解决编译中遇到的问题。此外,还详细讲解了龙芯qemu工具的依赖安装和使用,展示了成功加载pmon后的启动界面。

测试环境

  1. 虚拟机:Ubuntu18.04 LTS

  2. pmon源码:http://ftp.loongnix.cn/embedd/ls2k/pmon-loongson3.tar.gz

  3. pmon交叉工具链:http://ftp.loongnix.cn/embedd/ls3a/toolchain/gcc-4.4-gnu.tar.gz

  4. qemu工具:https://gitee.com/loongsonlab/qemu

pmon介绍

PMON是一个兼有BIOS和boot loader部分功能的开放源码软件,多用于嵌入式系统。

与BIOS相比功能不足,与常见的bootloader 相比,功能要丰富的多。基于龙芯的系统采用 pmon 作为类 BIOS 兼 bootloader,并做了很多完善工作。

其有如下主要特点:

  • 支持ext2 fat32 ram 文件系统

  • 支持网络引导(tftp),磁盘引导,flash 引导

  • 内建调试功能(强大,调试内核举重若轻)

  • USB 2.0 Mass Storage 支持

  • 支持MIPS、ARM、PowerPC 平台

  • BSD Licensed

PMON编译

编译过程
  1. 将交叉编译工具解压到根目录

ubuntu@ubuntu:~/Desktop/pmon$ sudo tar zxvf gcc-4.4-gnu.tar.gz -C /
[sudo] password for ubuntu:

解压后文件如下图所示

e6792071f958e2156478ffe6055ae6bb.png


2. 配置cfg文件

cd zloader.ls2k
make cfg tgt=rom CROSS_COMPILE=/opt/gcc-4.4-gnu/bin/mips64el-linux- DEBUG=-g
  1. 编译源码

make all tgt=rom CROSS_COMPILE=/opt/gcc-4.4-gnu/bin/mips64el-linux- DEBUG=-g
  1. 生成dtb文件

make dtb tgt=rom CROSS_COMPILE=/opt/gcc-4.4-gnu/bin/mips64el-linux- DEBUG=-g
编译过程中遇到的问题

ae2ed05ff9f94de14c55bae57601593f.png

解决方法:

root@ubuntu:/home/ubuntu/Desktop/pmon/pmon-loongson3/zloader.ls2k# cd ../tools/pmoncfg/

root@ubuntu:/home/ubuntu/Desktop/pmon/pmon-loongson3/tools/pmoncfg# make pmoncfg

root@ubuntu:/home/ubuntu/Desktop/pmon/pmon-loongson3/tools/pmoncfg# cp pmoncfg /usr/bin/

ef6aa380b2e8a12222918c9fea276f51.png

解决方法:

root@ubuntu:/home/ubuntu/Desktop/pmon/pmon-loongson3/zloader.ls2k# apt-get install xutils-dev

40d4aeaccf21a37dc1dfffe23735d11b.png

解决方法:

root@ubuntu:/home/ubuntu/Desktop/pmon/pmon-loongson3/zloader.ls2k# apt-get install python

龙芯qemu工具编译

安装依赖
root@ubuntu:/home/ubuntu/Desktop/pmon/qemu/buid# apt-get install zlib*
root@ubuntu:/home/ubuntu/Desktop/pmon/qemu/buid# apt-get install libglib2.0-dev
root@ubuntu:/home/ubuntu/Desktop/pmon/qemu/buid# apt-get install libpixman-1-dev
root@ubuntu:/home/ubuntu/Desktop/pmon/# cd qemu
root@ubuntu:/home/ubuntu/Desktop/pmon/qemu/# mkdir build
root@ubuntu:/home/ubuntu/Desktop/pmon/qemu/buid# ../configure --target-list=mipsel-softmmu,mips64el-softmmu --disable-werror
root@ubuntu:/home/ubuntu/Desktop/pmon/qemu/buid# make

使用qemu加载pmon

root@ubuntu:/home/ubuntu/Desktop/pmon/qemu/buid# ./mips64el-softmmu/qemu-system-mips64el -M ls2k -m 256  -smp 1  -serial stdio -bios ../../pmon-loongson3/zloader.ls2k/gzrom.bin

启动界面如下图所示:

e7bd1410f9e23f13ec497b50b84e5711.png

ce0af705d1d9c0be181cd8bb2b84a2f3.jpeg

<think>我们正在讨论在QEMU的LoongArch64环境中运行PMON的方法。PMON是一个嵌入式系统的引导加载程序(bootloader),它支持多种处理器架构,包括龙芯(LoongArch)系列。在QEMU中模拟LoongArch64环境并运行PMON,需要以下步骤: ### 1. 准备QEMU环境 首先,确保你的系统安装了支持LoongArch64架构的QEMU。目前,官方的QEMU可能还没有完全支持LoongArch64,你可能需要从龙芯的仓库中获取支持LoongArch的QEMU分支。 ```bash # 克隆QEMU仓库(使用龙芯提供的分支) git clone https://github.com/loongson/qemu cd qemu git checkout loongarch-upstream ``` 然后编译并安装: ```bash ./configure --target-list=loongarch64-softmmu make -j$(nproc) sudo make install ``` ### 2. 获取PMON源代码 PMON的源代码可以从龙芯的GitHub仓库获取: ```bash git clone https://github.com/loongson/pmon ``` ### 3. 编译PMON 进入PMON目录,选择正确的目标(例如loongson3a5000)进行编译: ```bash cd pmon make cfg tgt=rom ARCH=loongarch make all ``` 编译完成后,在`zloader.loongson3`目录下会生成`gzrom.bin`文件,这就是PMON的固件。 ### 4. 准备QEMU运行 使用QEMU运行PMON,需要创建一个虚拟磁盘(用于测试)并指定PMON固件作为BIOS。 ```bash qemu-system-loongarch64 -M loongson3a5000 -bios gzrom.bin -serial stdio ``` 这里: - `-M loongson3a5000` 指定机器类型为loongson3a5000。 - `-bios gzrom.bin` 指定PMON固件作为BIOS。 - `-serial stdio` 将串口输出重定向到当前终端。 ### 可能出现的问题及解决方案 1. **QEMU不支持loongson3a5000机器类型**:确保你使用的是支持LoongArch64的QEMU分支,并且编译时启用了loongarch64-softmmu。 2. **PMON编译错误**:检查编译环境,确保你安装了交叉编译工具链。龙芯提供了交叉编译器,可以从[龙芯开源社区](https://www.loongnix.cn/index.php/Cross-compile)获取。 3. **运行后无输出**:检查串口设置,PMON默认使用串口0作为控制台。 ### 参考资料 - [龙芯PMON开源项目](https://github.com/loongson/pmon) - [QEMU LoongArch支持](https://wiki.qemu.org/Documentation/Platforms/LoongArch) §§相关问题§§ 1. 如何为LoongArch64架构编译Linux内核? 2. 在QEMU中如何为LoongArch64虚拟机添加磁盘设备? 3. PMON引导加载程序有哪些常用命令? </think>### 在QEMU LoongArch64环境中运行PMON的方法 PMON龙芯处理器常用的开源引导加载程序(Bootloader),在QEMU的LoongArch64虚拟机中运行需以下步骤: #### 1. **准备编译环境** ```bash # 安装LoongArch64交叉编译工具链 sudo apt-get install gcc-12-loongarch64-linux-gnu g++-12-loongarch64-linux-gnu # 获取PMON源码 git clone https://github.com/loongson/pmon cd pmon ``` #### 2. **编译PMON** ```bash # 配置编译目标 make cfg tgt=rom ARCH=loongarch CROSS_COMPILE=loongarch64-linux-gnu- # 编译(使用8线程加速) make -j8 TARGET=zloader.loongson3 ``` 编译成功后会在`zloader.loongson3`目录生成`gzrom.bin`文件(约1MB) #### 3. **配置QEMU环境** ```bash # 安装支持LoongArch的QEMU(需7.0以上版本) sudo apt-get install qemu-system-loongarch64 # 创建虚拟磁盘(可选) qemu-img create -f qcow2 hdd.img 10G ``` #### 4. **启动QEMU运行PMON** ```bash qemu-system-loongarch64 \ -M loongson3a5000 \ -cpu la464 \ -smp 4 \ -m 4G \ -bios ./gzrom.bin \ -serial stdio \ -drive file=hdd.img,format=qcow2 \ -device usb-kbd \ -device usb-mouse ``` #### 关键参数说明: - `-M loongson3a5000`:指定LoongArch64机器类型 - `-bios ./gzrom.bin`:加载编译的PMON固件 - `-serial stdio`:将串口输出重定向到终端 - `-drive file=hdd.img`:附加虚拟磁盘(用于后续系统安装) 启动后将在终端看到PMON命令行界面: ``` PMON> ``` #### 常见问题解决: 1. **启动黑屏**: - 确认QEMU版本支持`loongson3a5000`:`qemu-system-loongarch64 -M help` - 检查固件路径:使用绝对路径`-bios $(pwd)/gzrom.bin` 2. **编译错误**: ```bash # 安装依赖库 sudo apt-get install flex bison libgmp-dev ``` 3. **键盘无响应**: ```bash # 添加USB输入设备 -device usb-kbd -device usb-mouse ``` 参考文档: - [PMON官方仓库](https://github.com/loongson/pmon)[^1] - [QEMU龙芯支持文档](https://www.qemu.org/docs/master/system/loongarch/virt.html)[^2]
要构建龙芯 2K300 的编译环境,核心工作是部署适用于其 **LoongArch** 架构的交叉编译工具链,并在宿主机上配置相应的开发支持工具 [ref_4][ref_5]。具体步骤如下: ### 1. 开发环境准备 首先需要准备宿主机的操作系统。通常推荐使用 **Ubuntu 20.04 LTS** 或 **Ubuntu 22.04 LTS** 版本,因其软件包管理库依赖较为稳定 [ref_5]。 安装必要的依赖库开发工具: ```bash sudo apt update sudo apt upgrade sudo apt install build-essential git wget cpio vim flex bison libncurses-dev libssl-dev libelf-dev bc python3 python3-distutils python-is-python3 ``` 这些基础工具是后续编译内核、u-boot 或 PMON 等固件所必需的 [ref_4]。 ### 2. 获取与配置交叉编译工具链 龙芯 2K300 采用 **LoongArch** 架构,因此需要使用专门为其定制的交叉编译器。工具链的获取与安装流程如下: * **获取工具链**:从龙芯官方社区或指定的资源仓库下载 `loongarch64-linux-gnu-gcc` 交叉编译工具链。工具链版本需与开发板或内核版本匹配,以避免兼容性问题 [ref_4][ref_5]。 * **解压与安装**:将下载的工具链包解压到系统目录(例如 `/opt/loongarch64-linux-gnu/`)。 ```bash sudo tar -xf loongarch64-linux-gnu-gcc-x.x.x-linux.tar.gz -C /opt/ ``` * **配置环境变量**:为了能在任何终端路径下调用交叉编译器,需要将其 `bin` 目录添加到系统的 `PATH` 环境变量中。 ```bash # 编辑当前用户的 ~/.bashrc 文件 echo 'export PATH=/opt/loongarch64-linux-gnu/bin:$PATH' >> ~/.bashrc # 使环境变量生效 source ~/.bashrc ``` 配置完成后,可以在终端执行 `echo $PATH` 检查路径是否已添加,并运行 `loongarch64-linux-gnu-gcc -v` 验证编译器是否可用及查看其版本信息 [ref_5]。 ### 3. 验证交叉编译环境 安装配置完成后,必须对工具链进行验证,以确保其能正常工作。 编写一个简单的测试程序 `hello.c`: ```c #include <stdio.h> int main() { printf("Hello, LoongArch 2K300!\n"); return 0; } ``` 使用配置好的交叉编译器进行编译: ```bash loongarch64-linux-gnu-gcc -o hello_la hello.c ``` 生成的 `hello_la` 是 LoongArch 架构的可执行文件。可以使用 `file` 命令查看其文件类型,以确认目标架构: ```bash file hello_la ``` 期望的输出应包含 `ELF 64-bit LSB executable, LoongArch` 字样。此外,还可以使用 `qemu-user` 模拟器在宿主机上运行此程序进行进一步验证: ```bash sudo apt install qemu-user-static qemu-loongarch64-static ./hello_la ``` 如果以上步骤均能正确执行,表明基本的交叉编译环境已经成功部署 [ref_4][ref_5]。 ### 4. 部署辅助开发工具 一个完整的嵌入式开发环境还需要调试、下载网络工具的支持。下表列出了关键辅助工具及其用途 [ref_4]: | 工具类别 | 推荐工具/软件 | 主要用途 | | :--- | :--- | :--- | | **串口调试** | `minicom`, `picocom`, 或 Windows 下的 MobaXterm / Xshell | 连接开发板串口,进行命令行交互、查看启动日志。 | | **网络下载/调试** | **TFTP 服务器** (`tftpd-hpa`), **NFS 服务器** | 通过网络将编译好的内核镜像、设备树或文件系统快速下载到开发板。 | | **远程访问** | SSH 服务, MobaXterm (Windows) | 通过网络远程登录开发板的 Linux 系统。 | | **调试器** | **GDB** (GNU Debugger), 配合 `gdbserver` | 进行应用程序或内核的远程调试。需使用交叉编译版本的 `gdb` (`loongarch64-linux-gnu-gdb`)。 | | **源码管理** | `git` | 获取版本管理内核、u-boot、PMON 等源码。 | | **模拟运行** | `qemu-system-loongarch64` (需自行编译) | 在没有物理开发板的情况下,模拟运行测试 LoongArch 系统。 | ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值