mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 16:26:31 +00:00
chore: Bump dadk to 0.2.0 (#1058)
# 概述 把dadk版本升级到0.2.0 dadk 0.2.0能够提升编译速度,并且支持使用dadk对内核进行profiling。 新版dadk的文档: https://docs.dragonos.org.cn/p/dadk/ # 注意 这是一个breaking change,升级后,将无法使用dadk 0.2.0去编译旧的项目。如有需要,请手动降级到dadk 0.1.11: ```shell cargo install --git https://git.mirrors.dragonos.org.cn/DragonOS-Community/DADK --tag v0.1.11 ``` # 更改列表 * chore: 把管理用户程序编译的dadk配置文件改为新格式的 * feat: 使用新版dadk来创建\挂载\卸载磁盘镜像 * chore: bump dadk min version to 0.2.0 * chore: fix ci * chore: 更新github ci镜像到1.7 * doc: 添加文档 --------- Co-Authored-by: xuzihao <xuzihao@dragonos.org> Signed-off-by: longjin <longjin@DragonOS.org>
This commit is contained in:
@ -1 +1 @@
|
||||
v1.6
|
||||
v1.7
|
40
tools/check_arch.sh
Normal file
40
tools/check_arch.sh
Normal file
@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
|
||||
BASE_PATH=$(pwd)
|
||||
# 定义错误信息
|
||||
ARCH_MISMATCH_ERROR="Error: ARCH in env.mk does not match arch in dadk-manifest.toml"
|
||||
|
||||
if [ -z "$ARCH" ]; then
|
||||
echo "Error: ARCH environment variable is not set." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Check if ROOT_PATH is set
|
||||
if [ -n "$ROOT_PATH" ]; then
|
||||
CHECK_PATH="$ROOT_PATH"
|
||||
else
|
||||
# Check if the current directory name is "tools"
|
||||
if [ "$(basename "$BASE_PATH")" = "tools" ]; then
|
||||
# Try the parent directory's dadk-manifest
|
||||
CHECK_PATH=$(dirname "$BASE_PATH")/
|
||||
else
|
||||
# Otherwise, check the current directory
|
||||
CHECK_PATH="$BASE_PATH"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Checking $CHECK_PATH"
|
||||
|
||||
|
||||
# 读取dadk-manifest.toml文件中的arch字段
|
||||
DADK_ARCH=$(grep -oP '(?<=arch = ")[^"]+' $CHECK_PATH/dadk-manifest.toml)
|
||||
|
||||
# 检查arch字段是否为x86_64
|
||||
if [ "$ARCH" != $DADK_ARCH ]; then
|
||||
echo "$ARCH_MISMATCH_ERROR" >&2
|
||||
exit 1
|
||||
else
|
||||
echo "Arch check passed."
|
||||
exit 0
|
||||
fi
|
@ -1,27 +0,0 @@
|
||||
# ======检查是否以sudo运行=================
|
||||
uid=`id -u`
|
||||
if [ ! $uid == "0" ];then
|
||||
echo "请以sudo权限运行"
|
||||
exit
|
||||
fi
|
||||
|
||||
# 检查是否设置ARCH环境变量
|
||||
|
||||
if [ ! ${ARCH} ];then
|
||||
echo "请设置ARCH环境变量"
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
DISK_NAME=disk-${ARCH}.img
|
||||
|
||||
echo "Mounting virtual disk image '${DISK_NAME}'..."
|
||||
|
||||
LOOP_DEVICE=$(losetup -f --show -P ../bin/${DISK_NAME}) \
|
||||
|| exit 1
|
||||
|
||||
echo ${LOOP_DEVICE}p1
|
||||
|
||||
mkdir -p ../bin/disk_mount/
|
||||
mount ${LOOP_DEVICE}p1 ../bin/disk_mount/
|
||||
lsblk
|
@ -65,7 +65,7 @@ UBOOT_VERSION="v2023.10"
|
||||
RISCV64_UBOOT_PATH="arch/riscv64/u-boot-${UBOOT_VERSION}-riscv64"
|
||||
|
||||
|
||||
DISK_NAME="disk-${ARCH}.img"
|
||||
DISK_NAME="disk-image-${ARCH}.img"
|
||||
|
||||
QEMU=qemu-system-${ARCH}
|
||||
QEMU_DISK_IMAGE="../bin/${DISK_NAME}"
|
||||
|
@ -1,19 +0,0 @@
|
||||
# ======检查是否以sudo运行=================
|
||||
uid=`id -u`
|
||||
if [ ! $uid == "0" ];then
|
||||
echo "请以sudo权限运行"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ ! ${ARCH} ];then
|
||||
echo "请设置ARCH环境变量"
|
||||
exit
|
||||
fi
|
||||
|
||||
DISK_NAME=disk-${ARCH}.img
|
||||
|
||||
LOOP_DEVICE=$(lsblk | grep disk_mount|sed 's/.*\(loop[0-9]*\)p1.*/\1/1g'|awk 'END{print $0}')
|
||||
|
||||
umount -f ../bin/disk_mount/
|
||||
losetup -d /dev/$LOOP_DEVICE
|
||||
echo $LOOP_DEVICE
|
@ -1,5 +1,5 @@
|
||||
###############################################
|
||||
# 该脚本用于将disk_mount目录下的文件写入到disk-${ARCH}.img的第一个分区中,
|
||||
# 该脚本用于将文件拷贝到磁盘镜像中,
|
||||
# 并在磁盘镜像中安装grub引导程序
|
||||
#
|
||||
# 用法:bash write_disk_image.sh --bios legacy/uefi
|
||||
@ -11,15 +11,16 @@
|
||||
echo "ARCH=${ARCH}"
|
||||
# 给ARCH变量赋默认值
|
||||
export ARCH=${ARCH:=x86_64}
|
||||
export DADK=${DADK:=dadk}
|
||||
|
||||
DISK_NAME=disk-${ARCH}.img
|
||||
|
||||
# 内核映像
|
||||
root_folder=$(dirname $(pwd))
|
||||
kernel="${root_folder}/bin/kernel/kernel.elf"
|
||||
boot_folder="${root_folder}/bin/disk_mount/boot"
|
||||
mount_folder=$($DADK -w $root_folder rootfs show-mountpoint || exit 1)
|
||||
boot_folder="${mount_folder}/boot"
|
||||
GRUB_INSTALL_PATH="${boot_folder}/grub"
|
||||
mount_folder="${root_folder}/bin/disk_mount"
|
||||
|
||||
ARGS=`getopt -o p -l bios: -- "$@"`
|
||||
eval set -- "${ARGS}"
|
||||
#echo formatted parameters=[$@]
|
||||
@ -67,34 +68,17 @@ if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# 判断是否存在硬盘镜像文件,如果不存在,就创建一个(docker模式下,由于镜像中缺少qemu-img不会创建)
|
||||
if [ ! -f "${root_folder}/bin/${DISK_NAME}" ]; then
|
||||
echo "创建硬盘镜像文件..."
|
||||
case "$1" in
|
||||
--bios)
|
||||
case "$2" in
|
||||
uefi)
|
||||
sudo ARCH=${ARCH} bash ./create_hdd_image.sh -P MBR #GPT分区 用GPT分区uefi启动不了 内核没有针对gpt分区表来做处理
|
||||
;;
|
||||
legacy)
|
||||
sudo ARCH=${ARCH} bash ./create_hdd_image.sh -P MBR #MBR分区
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
# 默认创建MBR分区
|
||||
sudo ARCH=${ARCH} bash ./create_hdd_image.sh -P MBR #MBR分区
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
# 判断是否存在硬盘镜像文件,如果不存在,就创建一个
|
||||
echo "创建硬盘镜像文件..."
|
||||
$DADK -w $root_folder rootfs create --skip-if-exists || exit 1
|
||||
|
||||
# 拷贝程序到硬盘
|
||||
mkdir -p ${root_folder}/bin/disk_mount
|
||||
bash mount_virt_disk.sh || exit 1
|
||||
$DADK -w $root_folder rootfs mount || exit 1
|
||||
|
||||
LOOP_DEVICE=$(lsblk | grep disk_mount|sed 's/.*\(loop[0-9]*\)p1.*/\1/1g'|awk 'END{print $0}')
|
||||
|
||||
|
||||
LOOP_DEVICE=$($DADK -w $root_folder rootfs show-loop-device || exit 1)
|
||||
echo $LOOP_DEVICE
|
||||
|
||||
echo ${mount_folder}
|
||||
# mkdir -p ${GRUB_INSTALL_PATH}
|
||||
|
||||
# 检测grub文件夹是否存在
|
||||
@ -107,21 +91,20 @@ fi
|
||||
|
||||
|
||||
if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
|
||||
cp ${kernel} ${root_folder}/bin/disk_mount/boot/
|
||||
cp ${kernel} ${mount_folder}/boot/
|
||||
fi
|
||||
|
||||
# 拷贝用户程序到磁盘镜像
|
||||
mkdir -p ${root_folder}/bin/disk_mount/bin
|
||||
mkdir -p ${root_folder}/bin/disk_mount/dev
|
||||
mkdir -p ${root_folder}/bin/disk_mount/proc
|
||||
mkdir -p ${root_folder}/bin/disk_mount/usr
|
||||
touch ${root_folder}/bin/disk_mount/dev/keyboard.dev
|
||||
cp -r ${root_folder}/bin/sysroot/* ${root_folder}/bin/disk_mount/
|
||||
mkdir -p ${mount_folder}/bin
|
||||
mkdir -p ${mount_folder}/dev
|
||||
mkdir -p ${mount_folder}/proc
|
||||
mkdir -p ${mount_folder}/usr
|
||||
cp -r ${root_folder}/bin/sysroot/* ${mount_folder}/
|
||||
|
||||
# 设置 grub 相关数据
|
||||
if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
|
||||
|
||||
touch ${root_folder}/bin/disk_mount/boot/grub/grub.cfg
|
||||
touch ${mount_folder}/boot/grub/grub.cfg
|
||||
cfg_content='set timeout=15
|
||||
set default=0
|
||||
insmod efi_gop
|
||||
@ -154,7 +137,7 @@ if [ "${INSTALL_GRUB_TO_IMAGE}" = "1" ];then
|
||||
;;
|
||||
legacy) #传统bios
|
||||
if [ ${ARCH} == "x86_64" ];then
|
||||
${GRUB_PATH_I386_LEGACY_INSTALL} --target=i386-pc --boot-directory=${boot_folder} /dev/$LOOP_DEVICE
|
||||
${GRUB_PATH_I386_LEGACY_INSTALL} --target=i386-pc --boot-directory=${boot_folder} $LOOP_DEVICE
|
||||
elif [ ${ARCH} == "riscv64" ];then
|
||||
install_riscv64_efi
|
||||
else
|
||||
@ -165,11 +148,12 @@ if [ "${INSTALL_GRUB_TO_IMAGE}" = "1" ];then
|
||||
;;
|
||||
*)
|
||||
#传统bios
|
||||
${GRUB_PATH_I386_LEGACY_INSTALL} --target=i386-pc --boot-directory=${boot_folder} /dev/$LOOP_DEVICE
|
||||
${GRUB_PATH_I386_LEGACY_INSTALL} --target=i386-pc --boot-directory=${boot_folder} $LOOP_DEVICE
|
||||
;;
|
||||
|
||||
|
||||
esac
|
||||
fi
|
||||
|
||||
sync
|
||||
bash umount_virt_disk.sh
|
||||
|
||||
$DADK -w $root_folder rootfs umount || exit 1
|
||||
|
Reference in New Issue
Block a user