xref: /DADK/docs/user-manual/quickstart.md (revision 2c1a697be787a4320d89f007f63fbc0fc2be2b67)
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```