# 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的支持