# chuanpen **Repository Path**: lyx521code/chuanpen ## Basic Information - **Project Name**: chuanpen - **Description**: 构建Qemu+UEFI+Linux的编译和运行环境,用于UEFI和Kernel(ACPI)的学习 - **Primary Language**: C - **License**: BSD-2-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2024-12-21 - **Last Updated**: 2026-04-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # chuanpen ## 1 介绍 构建Qemu+UEFI+Linux的编译和运行环境,用于UEFI和Kernel(ACPI)的学习。 可在Ubuntu 22.04上使用,其他操作系统,需要进行一些脚本的改造。 ## 2 软件架构 软件架构说明 ``` ├── LICENSE ├── README.md ├── build-pen │   ├── busybox │   ├── configs #编译所需文件、软件和依赖库安装的脚本等 │   ├── grub │   ├── linux │   ├── output #存放uefi和kernel的输出文件 │   ├── pen_build.sh #编译指定项目,包括UEFI编译,Kerel编译及打包,qemu编译 │   ├── pen_download.sh #下载指定的代码库 │   ├── qemu │   ├── tools │   └── uefi ├── log #日志存放处 │   └── ap.log ├── uefi_gdb #辅助uefi调试的脚本 │   └── stub └── uefi_sh_app #可用于uefi shell和linux shell下运行的一些工具 ├── secureboot1 └── toolsForLinux ``` ## 3 下载和编译使用教程 ### 3.1 下载项目及安装依赖项 下载项目: ``` robin@YBBJ0042:~$ git clone https://gitee.com/chuanpen/chuanpen.git ``` 安装所需软件和依赖库: ``` robin@YBBJ0042:~$ cd chuanpen/build-pen/configs/script/ robin@YBBJ0042:~/chuanpen/build-pen/configs/script$ sudo ./install_prerequisites.sh ``` ### 3.2 下载和编译qemu 主要步骤如下: ``` robin@YBBJ0042:~/chuanpen/build-pen$ ./pen_download.sh qemu robin@YBBJ0042:~/chuanpen/build-pen$ ./pen_build.sh qemu #编译和安装qemu 8.0 robin@YBBJ0042:~/chuanpen/build-pen$ qemu-system-aarch64 --version QEMU emulator version 8.0.0 (v8.0.0-3-g538fc48f71) Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers ``` ### 3.3 下载和编译UEFI 后续给出的例程中,会根据需求自建项目。当前可以直接使用ArmVirtQemu来体会编译过程。 主要步骤如下: ``` robin@YBBJ0042:~/chuanpen/build-pen$ ./pen_download.sh uefi #包含了edk2,edk2-platforms以及相关的编译工具等的下载 robin@YBBJ0042:~/chuanpen/build-pen$ ./pen_build.sh uefi-qemu #编译ArmVirtQemu ``` ### 3.4 下载和编译linux,以及打包 主要步骤如下: ``` robin@YBBJ0042:~/chuanpen/build-pen$ ./pen_download.sh kernel #下载linux,grub,busybox以及相关的编译工具 robin@YBBJ0042:~/chuanpen/build-pen$ ./pen_build.sh kernel #编译linux,并自动打包镜像 ``` ## 4 基础测试说明 ### 4.1 run-pen/base目录 base.sh: 基础的运行脚本, 需要UEFI的virt qemu版本、kernel镜像等的支持才可运行。
base_9p.sh: 在base脚本的基础上,添加了virtio 9p的支持。
base_9p.sh的使用说明: 1. 运行base_9p.sh脚本,会自动启动qemu,加载UEFI和kernel镜像。
``` robin@robinlenovo2:~/chuanpen/run-pen/base$ ./base_9p.sh normal ``` 2. 再开一个terminal,执行telnet: ``` robin@robinlenovo2:~$ telnet localhost 8888 ``` 3. 在OS下创建文件夹,并mount 9p的目录: ``` / # mkdir 9p / # mount -t 9p -o trans=virtio,version=9p2000.L hostshare /9p ``` ### 4.2 run-pen/x86-pcie目录 这是针对x86的运行和调试框架,具体参考此目录下HowToDebug.md. ### 4.3 run-pen/systemready目录 用于体验Arm SystemReady的运行环境, 参考https://developer.arm.com/Architectures/Architectural%20Compliance%20Suite#Technical-Information. 1. 安装swtpm(如果truncate,unzip,xz等命令不存在,也需要先安装) ``` sudo apt install -y swtpm swtpm-tools ``` 2. 下载预编译的acs live image: 在build-pen目录下,执行pen_download.sh脚本,下载systemready的acs工具预编译镜像。 ``` robin@YBBJ0042:~/chuanpen/build-pen$ ./pen_download.sh acs-image ``` 3. 编译测试用的固件: ``` robin@YBBJ0042:~/chuanpen/build-pen$ ./pen_build.sh uefi-sysr ``` 4. 运行sysr.sh脚本,启动qemu,加载uefi和kernel镜像。 ``` robin@YBBJ0042:~/chuanpen/run-pen/systemready$ ./sysr.sh ``` 5. 再开一个terminal,执行telnet: ``` robin@robinlenovo2:~$ telnet localhost 8888 ``` 注意:在目前使用arm的acs live image中,其os没有添加tpm2的相关驱动,因此不支持tpm2的相关测试。 ### 4.4 run-pen/sata & run-pen/usb & run-pen/nvme目录 分别测试sata, usb, nvme的运行环境,这三个运行环境方法一样,下面以sata为例: 1. 运行sata.sh脚本,会自动启动qemu,加载UEFI和kernel镜像。
``` robin@robinlenovo2:~/chuanpen/run-pen/sata$ ./sata.sh normal ``` 2. 再开一个terminal,执行telnet: ``` robin@robinlenovo2:~$ telnet localhost 8888 ``` ## 参与贡献 1. Robin.Luo uefi_explorer@163.com 2. ## 更新记录 :low_brightness: 20241220 19:33 初步完成了框架,可以自动编译qemu、uefi和kernel,以及kernel的镜像打包
:low_brightness: 20251026 21:34 调整了qemu的编译命令,去除static参数,以防止不同环境对动态库的需求。
:low_brightness: 20251026 22:31 增加对virtio 9p的支持