1*2c1a697bSLoGin# Quick Start 2*2c1a697bSLoGin 3*2c1a697bSLoGin本指南旨在教您快速上手DADK。 4*2c1a697bSLoGin 5*2c1a697bSLoGinDADK是一个用于管理DragonOS的应用编译打包的工具。您可以通过声明配置文件的方式, 6*2c1a697bSLoGin把您的应用程序打包到DragonOS中。 7*2c1a697bSLoGin 8*2c1a697bSLoGin## 安装 9*2c1a697bSLoGin 10*2c1a697bSLoGin目前,DADK版本与DragonOS的版本是绑定的,一般来说,DragonOS在编译的时候就会帮您安装正确版本的dadk。 11*2c1a697bSLoGin 12*2c1a697bSLoGin如果您需要手动安装,可以在dragonos的`user/Makefile`中找到匹配的dadk版本。 13*2c1a697bSLoGin 14*2c1a697bSLoGin 15*2c1a697bSLoGin``` 16*2c1a697bSLoGinMIN_DADK_VERSION = 0.2.0 17*2c1a697bSLoGin``` 18*2c1a697bSLoGin 19*2c1a697bSLoGin::: warning 注意兼容性变化 20*2c1a697bSLoGin请注意,由于dadk重构的原因,0.2.0版本之前的dadk版本将不再兼容。这意味着您升级到0.2.0版本后,将无法再使用它去编译旧版本的DragonOS(可以降级)。 21*2c1a697bSLoGin::: 22*2c1a697bSLoGin 23*2c1a697bSLoGin您可以通过以下命令安装dadk: 24*2c1a697bSLoGin```shell 25*2c1a697bSLoGincargo install --git https://git.mirrors.dragonos.org.cn/DragonOS-Community/DADK.git --tag <版本号> 26*2c1a697bSLoGin``` 27*2c1a697bSLoGin 28*2c1a697bSLoGin比如,对于0.2.0版本,您可以使用以下命令安装: `(注意版本号前面有个v)` 29*2c1a697bSLoGin```shell 30*2c1a697bSLoGincargo install --git https://git.mirrors.dragonos.org.cn/DragonOS-Community/DADK.git --tag v0.2.0 31*2c1a697bSLoGin``` 32*2c1a697bSLoGin 33*2c1a697bSLoGin## 打包你的第一个应用 34*2c1a697bSLoGin 35*2c1a697bSLoGin在安装完成后,您可以使用dadk来打包您的第一个应用。 36*2c1a697bSLoGin 37*2c1a697bSLoGin使用以下命令进入到DragonOS仓库的`user/apps/`目录: 38*2c1a697bSLoGin 39*2c1a697bSLoGin```shell 40*2c1a697bSLoGincd DragonOS/user/apps/ 41*2c1a697bSLoGin``` 42*2c1a697bSLoGin 43*2c1a697bSLoGin### 编写代码 44*2c1a697bSLoGin 45*2c1a697bSLoGin然后,为你的应用创建一个目录: 46*2c1a697bSLoGin```shell 47*2c1a697bSLoGinmkdir myapp 48*2c1a697bSLoGincd myapp 49*2c1a697bSLoGin``` 50*2c1a697bSLoGin 51*2c1a697bSLoGin接下来,在该目录下创建一个`main.c`文件: 52*2c1a697bSLoGin 53*2c1a697bSLoGin```shell 54*2c1a697bSLoGintouch main.c 55*2c1a697bSLoGin``` 56*2c1a697bSLoGin 57*2c1a697bSLoGin并向`main.c`写入以下内容: 58*2c1a697bSLoGin 59*2c1a697bSLoGin```c 60*2c1a697bSLoGin 61*2c1a697bSLoGin#include <stdio.h> 62*2c1a697bSLoGin 63*2c1a697bSLoGinint main() 64*2c1a697bSLoGin{ 65*2c1a697bSLoGin printf("Hello World!\n"); 66*2c1a697bSLoGin return 0; 67*2c1a697bSLoGin} 68*2c1a697bSLoGin 69*2c1a697bSLoGin``` 70*2c1a697bSLoGin 71*2c1a697bSLoGin然后,在该目录下创建一个`Makefile`文件: 72*2c1a697bSLoGin 73*2c1a697bSLoGin```shell 74*2c1a697bSLoGintouch Makefile 75*2c1a697bSLoGin``` 76*2c1a697bSLoGin 77*2c1a697bSLoGin并向`Makefile`写入以下内容: 78*2c1a697bSLoGin```Makefile 79*2c1a697bSLoGinifeq ($(ARCH), x86_64) 80*2c1a697bSLoGin CROSS_COMPILE=x86_64-linux-musl- 81*2c1a697bSLoGinelse ifeq ($(ARCH), riscv64) 82*2c1a697bSLoGin CROSS_COMPILE=riscv64-linux-musl- 83*2c1a697bSLoGinendif 84*2c1a697bSLoGin 85*2c1a697bSLoGinCC=$(CROSS_COMPILE)gcc 86*2c1a697bSLoGin 87*2c1a697bSLoGin.PHONY: all 88*2c1a697bSLoGinall: main.c 89*2c1a697bSLoGin $(CC) -static -o helloworld main.c 90*2c1a697bSLoGin 91*2c1a697bSLoGin.PHONY: install clean 92*2c1a697bSLoGininstall: all 93*2c1a697bSLoGin mv helloworld $(DADK_CURRENT_BUILD_DIR)/helloworld 94*2c1a697bSLoGin 95*2c1a697bSLoGinclean: 96*2c1a697bSLoGin rm helloworld *.o 97*2c1a697bSLoGin 98*2c1a697bSLoGin``` 99*2c1a697bSLoGin 100*2c1a697bSLoGin### 编写dadk用户程序配置文件 101*2c1a697bSLoGin 102*2c1a697bSLoGin最后,在DragonOS仓库的`user/dadk/config`目录下创建一个`myapp.toml`文件: 103*2c1a697bSLoGin 104*2c1a697bSLoGin```shell 105*2c1a697bSLoGincd DragonOS/user/dadk/config 106*2c1a697bSLoGintouch myapp.toml 107*2c1a697bSLoGin``` 108*2c1a697bSLoGin 109*2c1a697bSLoGin在`myapp.toml`文件中写入以下内容,用于描述你的应用的构建方式: 110*2c1a697bSLoGin 111*2c1a697bSLoGin```toml 112*2c1a697bSLoGin# 用户程序名称 113*2c1a697bSLoGinname = "helloworld" 114*2c1a697bSLoGin# 版本号 115*2c1a697bSLoGinversion = "0.1.0" 116*2c1a697bSLoGin# 用户程序描述信息 117*2c1a697bSLoGindescription = "一个用来测试helloworld的app" 118*2c1a697bSLoGin 119*2c1a697bSLoGin# (可选)默认: false 是否只构建一次,如果为true,DADK会在构建成功后,将构建结果缓存起来,下次构建时,直接使用缓存的构建结果 120*2c1a697bSLoGinbuild-once = false 121*2c1a697bSLoGin# (可选) 默认: false 是否只安装一次,如果为true,DADK会在安装成功后,不再重复安装 122*2c1a697bSLoGininstall-once = false 123*2c1a697bSLoGin# 目标架构 124*2c1a697bSLoGin# 可选值:"x86_64", "aarch64", "riscv64" 125*2c1a697bSLoGintarget-arch = ["x86_64"] 126*2c1a697bSLoGin 127*2c1a697bSLoGin# 任务源 128*2c1a697bSLoGin[task-source] 129*2c1a697bSLoGin# 构建类型 130*2c1a697bSLoGin# 可选值:"build-from_source", "install-from-prebuilt" 131*2c1a697bSLoGintype = "build-from-source" 132*2c1a697bSLoGin# 构建来源 133*2c1a697bSLoGin# "build_from_source" 可选值:"git", "local", "archive" 134*2c1a697bSLoGin# "install_from_prebuilt" 可选值:"local", "archive" 135*2c1a697bSLoGinsource = "local" 136*2c1a697bSLoGin# 路径或URL 137*2c1a697bSLoGinsource-path = "user/apps/helloworld" 138*2c1a697bSLoGin 139*2c1a697bSLoGin# 构建相关信息 140*2c1a697bSLoGin[build] 141*2c1a697bSLoGin# (可选)构建命令 142*2c1a697bSLoGinbuild-command = "make install" 143*2c1a697bSLoGin 144*2c1a697bSLoGin# 安装相关信息 145*2c1a697bSLoGin[install] 146*2c1a697bSLoGin# (可选)安装到DragonOS的路径 147*2c1a697bSLoGinin-dragonos-path = "/bin" 148*2c1a697bSLoGin 149*2c1a697bSLoGin# clean相关信息 150*2c1a697bSLoGin[clean] 151*2c1a697bSLoGin# (可选)清除命令 152*2c1a697bSLoGinclean-command = "make clean" 153*2c1a697bSLoGin``` 154*2c1a697bSLoGin上面这就是一个简单的dadk应用的配置文件。完整的模版请见:[userapp_config.toml](https://github.com/DragonOS-Community/DADK/blob/main/dadk-config/templates/config/userapp_config.toml) 155*2c1a697bSLoGin 156*2c1a697bSLoGin### 运行DragonOS 157*2c1a697bSLoGin 158*2c1a697bSLoGin在完成上述步骤后,您可以使用以下命令来运行DragonOS: 159*2c1a697bSLoGin 160*2c1a697bSLoGin```shell 161*2c1a697bSLoGinmake run 162*2c1a697bSLoGin``` 163*2c1a697bSLoGin 164*2c1a697bSLoGin更详细的运行命令请参考:[构建DragonOS](https://docs.dragonos.org.cn/introduction/build_system.html#build-system-command) 165*2c1a697bSLoGin 166*2c1a697bSLoGin### 测试你的应用 167*2c1a697bSLoGin 168*2c1a697bSLoGin在DragonOS启动后,您可以在终端中输入以下命令来测试您的应用: 169*2c1a697bSLoGin 170*2c1a697bSLoGin```shell 171*2c1a697bSLoGincd /bin 172*2c1a697bSLoGin./helloworld 173*2c1a697bSLoGin``` 174*2c1a697bSLoGin 175*2c1a697bSLoGin如果一切正常,您应该会看到以下输出: 176*2c1a697bSLoGin 177*2c1a697bSLoGin```text 178*2c1a697bSLoGinHello World! 179*2c1a697bSLoGin```