feat: la64 boot (#1132)

* la64能够进入到kernel_main
* ci: 添加为ubuntu编译qemu-loongarch64的脚本
* feat: la64能输出hello world
* la64 安装gcc && 配置github ci
* chore: 更新CI工作流和构建脚本中的Docker镜像版本至v1.10

Signed-off-by: longjin <longjin@DragonOS.org>
This commit is contained in:
LoGin
2025-04-20 18:51:45 +08:00
committed by GitHub
parent 167d272792
commit e80796eb82
91 changed files with 2299 additions and 118 deletions

View File

@ -0,0 +1,155 @@
#!/bin/bash
set -e
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# 默认参数
QEMU_VERSION="9.2.1"
TARGET_LIST="loongarch64-softmmu"
USE_MIRROR=0
DEST_DIR="${HOME}/opt/qemu-${QEMU_VERSION}"
SOURCE_PACKAGES_DIR="$SCRIPT_DIR/source_packages"
BUILD_DIR="$SCRIPT_DIR/build_dir"
SUDO=sudo
FORCE=0
# 检查是否为root用户
if [ "$(id -u)" -eq 0 ]; then
SUDO=""
fi
# 参数解析
while [[ $# -gt 0 ]]; do
case "$1" in
--version)
QEMU_VERSION="$2"
shift 2
DEST_DIR="${HOME}/opt/qemu-${QEMU_VERSION}" # 更新默认路径
;;
--target-list)
TARGET_LIST="$2"
shift 2
;;
--use-mirror)
USE_MIRROR=1
shift
;;
--dest-dir)
DEST_DIR="$2"
shift 2
;;
-f|--force)
FORCE=1
shift
;;
*)
echo "未知参数: $1"
exit 1
;;
esac
done
# 检查是否已存在qemu-system-loongarch64
QEMU_BINARY="${DEST_DIR}/bin/qemu-system-loongarch64"
if [ -f "$QEMU_BINARY" ] && [ "$FORCE" -eq 0 ]; then
echo "检测到已存在 qemu-system-loongarch64 在 ${QEMU_BINARY}"
echo "如需强制重新构建,请使用 -f 或 --force 参数"
exit 1
fi
# 依赖检查函数
check_dependency() {
if ! dpkg -l | grep -q "^ii $1 "; then
echo "安装依赖: $1"
${SUDO} apt-get install -y "$1"
fi
}
# 镜像源设置
if [[ $USE_MIRROR -eq 1 ]]; then
echo "使用国内镜像源..."
# APT镜像
${SUDO} sed -i \
's|//.*archive.ubuntu.com|//mirrors.ustc.edu.cn|g' \
/etc/apt/sources.list
# PyPI镜像
PIP_MIRROR="https://pypi.mirrors.ustc.edu.cn/simple"
else
PIP_MIRROR="https://pypi.org/simple"
fi
# 更新源
${SUDO} apt-get update
# 安装基础依赖
check_dependency build-essential
check_dependency ninja-build
check_dependency meson
check_dependency pkg-config
check_dependency libglib2.0-dev
check_dependency libslirp-dev
check_dependency wget
check_dependency git
# Python环境配置
if ! command -v python3 &> /dev/null; then
${SUDO} apt-get install -y python3 python3-pip
elif ! command -v pip3 &> /dev/null; then
${SUDO} apt-get install -y python3-pip
fi
if ! pip3 show tomli &> /dev/null; then
pip3 install --user -i $PIP_MIRROR tomli
fi
# 创建目录结构
mkdir -p "$DEST_DIR"
mkdir -p $SOURCE_PACKAGES_DIR
mkdir -p $BUILD_DIR
# 下载源码包
QEMU_TAR="qemu-${QEMU_VERSION}.tar.xz"
QEMU_SRC_DIR="$SOURCE_PACKAGES_DIR/qemu-${QEMU_VERSION}"
if [ ! -f "$SOURCE_PACKAGES_DIR/${QEMU_TAR}" ]; then
echo "正在下载QEMU源码包..."
wget "https://download.qemu.org/${QEMU_TAR}" -O "$SOURCE_PACKAGES_DIR/${QEMU_TAR}"
fi
# 解压源码
if [ ! -d "${QEMU_SRC_DIR}" ]; then
echo "解压QEMU源码..."
tar xf "$SOURCE_PACKAGES_DIR/${QEMU_TAR}" -C $SOURCE_PACKAGES_DIR
fi
# 配置构建目录
BUILD_DIR="$BUILD_DIR/qemu-${QEMU_VERSION}_${TARGET_LIST//,/}"
mkdir -p "${BUILD_DIR}"
pushd $(pwd)
cd "${BUILD_DIR}"
# 运行配置
echo "配置编译参数..."
"${QEMU_SRC_DIR}/configure" \
--prefix="$DEST_DIR" \
--enable-slirp \
--target-list="$TARGET_LIST" \
--enable-kvm
# 编译和安装
echo "开始编译(使用$(nproc)线程)..."
make -j "$(nproc)"
make install
popd
# 清理
rm -rf "./${BUILD_DIR}"
rm -rf "${QEMU_SRC_DIR}"
echo -e "\n编译完成安装路径: ${DEST_DIR}"
echo -e "运行以下命令使用QEMU"
echo -e " 或者将其添加到你的shell配置文件中例如~/.bashrc或~/.zshrc"
echo "export PATH=\"${DEST_DIR}/bin:\$PATH\""