Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 2 additions & 10 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM ubuntu:jammy
FROM dragonos/dragonos-dev:v1.21

# 设置环境变量
ENV TZ=Asia/Shanghai
Expand All @@ -12,20 +12,12 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && \
apt install --no-install-recommends -y \
ca-certificates curl gnupg wget sudo apt-utils && \
groupadd -g 1000 dragonos && \
(getent group 1000 >/dev/null || groupadd -g 1000 dragonos) && \
useradd -m -u 1000 -g 1000 -s /bin/bash dragonos && \
echo "dragonos ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

# 设置工作目录
USER dragonos
WORKDIR /tmp

COPY ../tools/*.sh ./

RUN bash bootstrap.sh --default --ci && \
sudo apt autoremove -q -y && \
sudo apt clean -q -y && \
sudo rm -rf /tmp/*

WORKDIR /home/dragonos

Expand Down
14 changes: 6 additions & 8 deletions .github/workflows/makefile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ jobs:
name: Format check ${{ matrix.arch }}
runs-on: ubuntu-latest
continue-on-error: true
container: dragonos/dragonos-dev:v1.19
container: dragonos/dragonos-dev:v1.21

strategy:
matrix:
arch: [x86_64, riscv64, loongarch64]

steps:
- run: echo "Running in dragonos/dragonos-dev:v1.19"
- run: echo "Running in dragonos/dragonos-dev:v1.21"
- uses: actions/checkout@v3

- name: Change source
Expand All @@ -33,21 +33,20 @@ jobs:
run: |
printf "\n" >> kernel/src/include/bindings/bindings.rs
printf "\n" >> kernel/src/init/version_info.rs
sed -i 's/arch = ".*"/arch = "${{ matrix.arch }}"/' dadk-manifest.toml
FMT_CHECK=1 make fmt

kernel-static-test:
name: Kernel static test ${{ matrix.arch }}
runs-on: ubuntu-latest
continue-on-error: true
container: dragonos/dragonos-dev:v1.19
container: dragonos/dragonos-dev:v1.21

strategy:
matrix:
arch: [x86_64, riscv64, loongarch64]

steps:
- run: echo "Running in dragonos/dragonos-dev:v1.19"
- run: echo "Running in dragonos/dragonos-dev:v1.21"

- uses: actions/checkout@v3

Expand All @@ -65,7 +64,7 @@ jobs:
build:
name: Build ${{ matrix.arch }}
runs-on: ubuntu-latest
container: dragonos/dragonos-dev:v1.19
container: dragonos/dragonos-dev:v1.21
continue-on-error: true
strategy:
matrix:
Expand All @@ -82,7 +81,7 @@ jobs:
checkout_params: {}

steps:
- run: echo "Running in dragonos/dragonos-dev:v1.19"
- run: echo "Running in dragonos/dragonos-dev:v1.21"

- uses: actions/checkout@v3
with: ${{ matrix.checkout_params }}
Expand All @@ -104,5 +103,4 @@ jobs:
if [[ "$ARCH" == "x86_64" ]]; then
export DragonOS_GCC=$HOME/opt/dragonos-gcc/gcc-x86_64-unknown-none/bin
fi
sed -i 's/arch = ".*"/arch = "${{ env.ARCH }}"/' dadk-manifest.toml
make ${{ matrix.make_target }} -j $(nproc)
2 changes: 1 addition & 1 deletion .github/workflows/nightly-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
env:
HOME: /root
container:
image: dragonos/dragonos-dev:v1.19
image: dragonos/dragonos-dev:v1.21
options: --privileged -v /dev:/dev
steps:
- name: Checkout DragonOS code
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test-mm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
name: Build slab_stress (host)
runs-on: ubuntu-latest
container:
image: dragonos/dragonos-dev:v1.19
image: dragonos/dragonos-dev:v1.21
options: --privileged -v /dev:/dev
steps:
- name: Checkout DragonOS code
Expand Down Expand Up @@ -46,7 +46,7 @@ jobs:
size: [64, 128, 255, 256]
seed: [1, 2, 3]
container:
image: dragonos/dragonos-dev:v1.19
image: dragonos/dragonos-dev:v1.21
options: --privileged -v /dev:/dev
steps:
- name: Checkout DragonOS code
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test-x86.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
container:
image: dragonos/dragonos-dev:v1.19
image: dragonos/dragonos-dev:v1.21
options: --privileged -v /dev:/dev
steps:
- name: Checkout DragonOS code
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ cppcheck.xml
compile_commands.json
/logs/
*.log
dadk-manifest.generated.toml
config/rootfs.generated.toml

# initram
*.cpio
Expand Down
43 changes: 26 additions & 17 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ FMT_CHECK?=0

# 是否跳过grub自动安装。CI环境或纯nographic运行可以设置为1以节省时间。
SKIP_GRUB ?= 0
# RootFS manifest name under config/rootfs-manifests/
ROOTFS_MANIFEST ?= default
export ROOTFS_MANIFEST
# CI环境默认跳过
ifneq ($(CI),)
SKIP_GRUB := 1
Expand All @@ -53,7 +56,7 @@ else
FMT_CHECK=
endif

# Check if ARCH matches the arch field in dadk-manifest.toml
# Check if ARCH matches the arch field in rootfs manifest
check_arch:
@bash tools/check_arch.sh

Expand All @@ -74,15 +77,20 @@ check_nix:
.PHONY: all
all: kernel user

.PHONY: prepare_rootfs_manifest
prepare_rootfs_manifest:
@echo "Resolving rootfs manifest: $(ROOTFS_MANIFEST)"
@ROOT_PATH=$(ROOT_PATH) ARCH=$(ARCH) ROOTFS_MANIFEST=$(ROOTFS_MANIFEST) bash tools/rootfs_manifest_resolve.sh


.PHONY: kernel
kernel: check_arch
kernel: prepare_rootfs_manifest
mkdir -p bin/kernel/

$(MAKE) -C ./kernel all ARCH=$(ARCH) || (sh -c "echo 内核编译失败" && exit 1)

.PHONY: user
user: check_arch
user: prepare_rootfs_manifest
ifeq ($(IN_NIX_ENV),1)
@echo "⚠️ 警告: 在 Nix 环境中使用 'make user' 已被弃用"
@echo " 请使用: nix run .#rootfs-$(ARCH)"
Expand Down Expand Up @@ -157,7 +165,7 @@ rootfs: check_nix
nix run .#rootfs-x86_64

# 写入磁盘镜像
write_diskimage: check_arch
write_diskimage: prepare_rootfs_manifest
ifeq ($(IN_NIX_ENV),1)
@echo "⚠️ 警告: 在 Nix 环境中使用 'make write_diskimage' 已被弃用"
@echo " 请使用: nix run .#rootfs-$(ARCH)"
Expand All @@ -166,12 +174,12 @@ ifeq ($(IN_NIX_ENV),1)
nix run .#rootfs-$(ARCH)
else
@echo "write_diskimage arch=$(ARCH)"
bash -c "export ARCH=$(ARCH); cd tools && $(GRUB_PREPARE_CMD) && sudo DADK=$(DADK) $(GRUB_SKIP_ENV) ARCH=$(ARCH) bash $(ROOT_PATH)/tools/write_disk_image.sh --bios=legacy && cd .."
bash -c "export ARCH=$(ARCH); export ROOTFS_MANIFEST=$(ROOTFS_MANIFEST); cd tools && $(GRUB_PREPARE_CMD) && sudo DADK=$(DADK) $(GRUB_SKIP_ENV) ARCH=$(ARCH) ROOTFS_MANIFEST=$(ROOTFS_MANIFEST) bash $(ROOT_PATH)/tools/write_disk_image.sh --bios=legacy && cd .."
endif

# 写入磁盘镜像(uefi)
write_diskimage-uefi: check_arch
bash -c "export ARCH=$(ARCH); cd tools && $(GRUB_PREPARE_CMD) && sudo DADK=$(DADK) $(GRUB_SKIP_ENV) ARCH=$(ARCH) bash $(ROOT_PATH)/tools/write_disk_image.sh --bios=uefi && cd .."
write_diskimage-uefi: prepare_rootfs_manifest
bash -c "export ARCH=$(ARCH); export ROOTFS_MANIFEST=$(ROOTFS_MANIFEST); cd tools && $(GRUB_PREPARE_CMD) && sudo DADK=$(DADK) $(GRUB_SKIP_ENV) ARCH=$(ARCH) ROOTFS_MANIFEST=$(ROOTFS_MANIFEST) bash $(ROOT_PATH)/tools/write_disk_image.sh --bios=uefi && cd .."
# 不编译,直接启动QEMU
qemu: check_arch
ifeq ($(IN_NIX_ENV),1)
Expand Down Expand Up @@ -208,41 +216,41 @@ qemu-uefi-vnc: check_arch
sh -c "cd tools && bash run-qemu.sh --bios=uefi --display=vnc && cd .."

# 编译并写入磁盘镜像
build: check_arch
build: prepare_rootfs_manifest
$(MAKE) all -j $(NPROCS)
$(MAKE) write_diskimage || exit 1

# 在docker中编译,并写入磁盘镜像
docker: check_arch
docker: prepare_rootfs_manifest
@echo "使用docker构建"
sudo bash tools/build_in_docker.sh || exit 1
$(MAKE) write_diskimage || exit 1

# uefi方式启动
run-uefi: check_arch
run-uefi: prepare_rootfs_manifest
$(MAKE) all -j $(NPROCS)
$(MAKE) write_diskimage-uefi || exit 1
$(MAKE) qemu-uefi

# 编译并启动QEMU
run: check_arch
run: prepare_rootfs_manifest
$(MAKE) all -j $(NPROCS)
$(MAKE) write_diskimage || exit 1
$(MAKE) qemu

# uefi方式启动,使用VNC Display作为图像输出
run-uefi-vnc: check_arch
run-uefi-vnc: prepare_rootfs_manifest
$(MAKE) all -j $(NPROCS)
$(MAKE) write_diskimage-uefi || exit 1
$(MAKE) qemu-uefi-vnc

# 编译并启动QEMU,使用VNC Display作为图像输出
run-vnc: check_arch
run-vnc: prepare_rootfs_manifest
$(MAKE) all -j $(NPROCS)
$(MAKE) write_diskimage || exit 1
$(MAKE) qemu-vnc

run-nographic: check_arch
run-nographic: prepare_rootfs_manifest
ifeq ($(IN_NIX_ENV),1)
@echo "⚠️ 警告: 在 Nix 环境中使用 'make run-nographic' 已被弃用"
@echo " 请使用: nix run .#yolo-$(ARCH)"
Expand All @@ -256,19 +264,19 @@ else
$(MAKE) qemu-nographic
endif
# 在docker中编译,并启动QEMU
run-docker: check_arch
run-docker: prepare_rootfs_manifest
@echo "使用docker构建并运行"
sudo bash tools/build_in_docker.sh || exit 1
$(MAKE) write_diskimage || exit 1
$(MAKE) qemu

test-syscall: check_arch
test-syscall: prepare_rootfs_manifest
@echo "构建运行并执行syscall测试"
bash user/apps/tests/syscall/gvisor/toggle_compile_gvisor.sh enable
$(MAKE) all -j $(NPROCS)
@if [ "$(DISK_SAVE_MODE)" = "1" ]; then \
echo "磁盘节省模式启用,正在清理用户程序构建缓存..."; \
$(DADK) user clean --level in-src; \
$(DADK) -f $(ROOT_PATH)/dadk-manifest.generated.toml user clean --level in-src -w $(ROOT_PATH); \
fi
SKIP_GRUB=1 $(MAKE) write_diskimage || exit 1
$(MAKE) qemu-nographic AUTO_TEST=syscall SYSCALL_TEST_DIR=/opt/tests/gvisor &
Expand Down Expand Up @@ -337,6 +345,7 @@ help:
@echo ""
@echo "环境变量:"
@echo " DISK_SAVE_MODE=1 - 启用磁盘节省模式,在写入磁盘镜像前清理构建缓存"
@echo " ROOTFS_MANIFEST=name - 选择 config/rootfs-manifests 下的清单(默认 default)"
@echo ""
@echo " make update-submodules - 更新子模块"
@echo " make update-submodules-by-mirror - 从镜像更新子模块"
3 changes: 1 addition & 2 deletions config/app-blocklist.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ log_skipped = true
#
# 5. **配置文件路径**:
# - 默认路径:config/app-blocklist.toml
# - 可在 dadk-manifest.toml 中通过 app-blocklist-config 字段自定义路径
# - 可在生成后的 dadk-manifest.generated.toml 中通过 app-blocklist-config 字段指定路径
#
# 6. **字段说明**:
# - name:应用程序名称或匹配模式(必需)
Expand All @@ -68,4 +68,3 @@ blocked_apps = [
{ name = "test_ebpf_new", reason = "2025.11.17,aya上游发版有问题,导致ci过不了,暂时禁用" },
{ name = "test_ebpf_tp", reason = "2025.11.17,aya上游发版有问题,导致ci过不了,暂时禁用" },
]

15 changes: 15 additions & 0 deletions config/rootfs-manifests/default.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[metadata]
name = "default"
arch = "*"

[rootfs]
fs_type = "fat32"
size = "2G"
partition = "mbr"

[base]
image = ""
pull_policy = "if-not-present"

[user]
config_dir = "user/dadk/config/sets/default"
15 changes: 15 additions & 0 deletions config/rootfs-manifests/ubuntu2404.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[metadata]
name = "ubuntu2404"
arch = "x86_64"

[rootfs]
fs_type = "ext4"
size = "2G"
partition = "mbr"

[base]
image = "ubuntu:24.04"
pull_policy = "if-not-present"

[user]
config_dir = "user/dadk/config/sets/ubuntu2404"
14 changes: 0 additions & 14 deletions config/rootfs.toml

This file was deleted.

28 changes: 0 additions & 28 deletions dadk-manifest.toml

This file was deleted.

2 changes: 2 additions & 0 deletions docs/introduction/build_system.md
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,8 @@ make run-docker
(_build_system_command)=
## 6.编译命令讲解

**关于如何配置 RootFS(`ROOTFS_MANIFEST`、base 镜像、包集合切换),请先阅读:{ref}`DADK RootFS Manifest 配置(非 Nix) <_dadk_rootfs_manifest>`**

- 本地编译,不运行: `make all -j 您的CPU核心数`
- 本地编译,并写入磁盘镜像,不运行: `make build`
- 本地编译,写入磁盘镜像,并在QEMU中运行: `make run`
Expand Down
Loading
Loading