# firstInit 首次启动引导

`CODE/firstInit` 是 Deshab 首次使用时的用户设置向导，只负责引导用户设置计算机名、用户名、密码等用户级配置。硬件/系统组件初始化（例如鼠标初始化）由 DSK 直接调度对应初始化程序，不由 FirstInit 接管。编译目标：

```text
CODE/firstInit -> SYSTEM/system/user/use/FirstInit.elf
```

## 触发条件

DSK 主内核启动后，从 FAT32 块设备加载 `SYSTEM/system/user/use/firstInit.txt`：

- 若 `firstInit == 0`：系统判定为**首次启动**，将值改为 `1`，加载 `FirstInit.elf` 执行用户引导
- 若 `firstInit != 0`（或文件不存在）：跳过引导，进入正常启动

## 执行流程

```text
1. 接收 DSK 传入的 dsk_boot_context
2. 淡出加载环动画（~1秒渐变）
3. 屏幕中央显示："欢迎使用 Deshab"
4. 等待 5 秒
5. 渐隐切换为："接下来让我们来引导你设置你的系统"
6. 引导用户设置：网络、用户名、密码等（待实现）
```

## 产物路径

```text
SYSTEM/system/user/use/FirstInit.elf  — 引导程序 ELF
SYSTEM/system/user/use/firstInit.txt  — 首次标志文件（内容为 '0' 或 '1'）
```

## 构建

```bash
cd CODE/firstInit
make -f MAKEFILE CC=clang LD=ld.lld
```

## 文件结构

```text
CODE/firstInit/
  main.c      — 引导程序源码
  linker.ld   — 链接脚本
  MAKEFILE    — 构建规则
  README      — 本文件
```

## 后续规划

1. 键盘输入响应
2. 网络配置界面（IP/DHCP/网关）
3. 用户名密码设置
4. 时区/语言选择
5. 完成后写入配置并跳转 DSK 正常启动
