# 配置 Uboot 和 Kernel 选项参数

在嵌入式系统开发中， Uboot 和 Kernel 的功能选项配置（也称为裁剪）是一个常见且关键的步骤。通过配置选项，用户可以根据系统的实际需求，去除不必要的功能，从而提升系统的效率和可靠性。以下是配置 Uboot 和 Kernel 选项的两种常用方法：`xbuild` 命令和手动配置。

## <span id="config_uboot"/>配置 Uboot 选项参数

### 使用 xbuild 命令配置

在 `xbuild` 编译系统中，提供了一个自动化工具来配置 Uboot 选项。使用以下命令可以简化配置流程，自动进行环境设置、生成配置文件并保存：

```
./bd.sh uboot menuconfig
# 或者使用快捷命令，先执行 source build/quickcmd.sh 配置环境后使用
bumc
```

命令执行成功后，系统会启动一个图形化的配置界面。用户可以在此界面中选择需要启用的功能或删除不需要的功能。

- 打开配置界面后，可以看到一系列选项，用户可以通过界面进行交互，选择要启用或禁用的功能。

  ![image-20220518111319607](_static/_images/0-Configure_Kernel_And_Uboot/image-20220518111319607.png)

- 完成配置后，选择 `Exit` 退出，系统会提示是否保存修改，选择 `Yes` 保存配置到 `.config` 文件中。

  ![image-20220518111506018](_static/_images/0-Configure_Kernel_And_Uboot/image-20220518111506018.png)

**自动保存和清理：**

通过 `./bd.sh uboot menuconfig` 启动的配置界面，当用户退出配置界面并保存时，`xbuild` 会自动执行以下步骤：

- **清理配置文件**：使用 `make savedefconfig` 命令对配置文件进行清理，保留必要的配置项，删除被依赖项，生成新的 `defconfig` 文件。
- **更新配置文件**：将生成的 `defconfig` 文件复制到板级配置文件中，从而覆盖原有的 Uboot 配置文件。

示例操作如下：

```
make savedefconfig                                 # 清理配置，删除被依赖项，生成 defconfig 文件
cp -f defconfig < 板级配置文件中的 Uboot 配置文件 >  # 覆盖板级配置文件
```

### 手动配置

**提示：** 手动配置 Uboot 选项的过程是对 `./bd.sh uboot menuconfig` 命令的分步操作。操作过程中，用到的配置文件和参数，需要用户知道含义和作用。

以下是手动配置的步骤，以配置 `uboot/configs/hobot_x5_soc_defconfig` 为例：

- **步骤一：进入 Uboot 目录并使用默认配置**：

  ```
  cd uboot
  make ARCH=arm64 hobot_x5_soc_defconfig
  ```

  这个命令会加载 `hobot_x5_soc_defconfig` 配置文件，设置 Uboot 编译环境，并在根目录下生成 `.config` 文件。执行命令的日志如下：

  ```
  $ make ARCH=arm hobot_x5_soc_defconfig

    HOSTCC  scripts/basic/fixdep
    HOSTCC  scripts/kconfig/conf.o
    YACC    scripts/kconfig/zconf.tab.c
    LEX     scripts/kconfig/zconf.lex.c
    HOSTCC  scripts/kconfig/zconf.tab.o
    HOSTLD  scripts/kconfig/conf
  #
  # configuration written to .config
  #
  ```

  **以上 make 命令功能解释（提示：理解即可，不需要实际执行）：**

  `make` 命令会首先执行位于顶级目录下的 Makefile 文件。在这个 Makefile 中，对于以 `config` 结尾的目标都有一个共同的入口：

  ```
  %config: scripts_basic outputmakefile FORCE
          $(Q)$(MAKE) $(build)=scripts/kconfig $@
  ```

  这段代码的展开效果为：

  ```
  make -f ./scripts/Makefile.build obj=scripts/kconfig hobot_x5_soc_defconfig
  ```

- **步骤二：进入图形化配置界面**：

  ```
  make ARCH=arm menuconfig
  ```

  执行命令后，会进入图形化配置界面，可以选择启用或禁用相关功能。

  ![image-20220518111319607](_static/_images/0-Configure_Kernel_And_Uboot/image-20220518111319607.png)

- **步骤三：保存配置并生成清理后的 `defconfig` 文件**：

  在配置完成后，选择 `Exit` 退出，并根据提示保存配置。然后执行以下命令生成清理后的 `defconfig` 文件：

  ```
  make ARCH=arm savedefconfig
  ```

  ![image-20220518111506018](_static/_images/0-Configure_Kernel_And_Uboot/image-20220518111506018.png)

- **步骤四：对比修改前后的配置（可选）**

  为了确保修改符合预期，可以使用 `diff` 命令对比配置文件的差异：

  ```
  diff defconfig configs/hobot_x5_soc_defconfig
  ```

- **步骤五：更新配置文件并清理编译环境**：

  将生成的 `defconfig` 文件复制到源配置文件中，并清理编译环境：

  ```
  cp defconfig configs/hobot_x5_soc_defconfig  # 覆盖源配置文件

  # 清理源码目录下的 .config 等文件，否则在重新编译系统时会提示需要 xxx is not clean, please run 'make mrproper'
  make distclean
  # 或者使用错误提示的命令清理
  make mrproper
  ```

- **步骤六：重新编译 Uboot**

  完成配置后，使用以下命令重新编译 Uboot：

  ```
  ./bd.sh uboot
  ```

## <span id="config_kernel"/>配置 Kernel 选项参数

### 使用 xbuild 命令配置

配置 Kernel 的方式与配置 Uboot 类似，`xbuild` 系统同样提供了图形化配置界面来帮助用户配置 Kernel 选项。执行以下命令可以打开 Kernel 配置界面：

```
./bd.sh boot menuconfig
# 或者使用快捷命令，先执行 source build/quickcmd.sh 配置环境后使用
bbmc
```

执行成功后，图形化配置界面将自动启动，用户可以在此界面中选择需要启用的功能或删除不需要的功能。

- 打开配置界面后，可以看到一系列选项，用户可以通过界面进行交互，选择要启用或禁用的功能。

![image-20220518111319607](_static/_images/0-Configure_Kernel_And_Uboot/image-20240314165720207.png)

- 配置完成后，选择 `Exit` 退出，系统会提示是否保存修改，选择 `Yes` 保存配置到 `.config` 文件中。

![image-20220518111506018](_static/_images/0-Configure_Kernel_And_Uboot/image-20220518111506018.png)

**自动保存和清理：**

通过 `./bd.sh boot menuconfig` 启动的配置，在配置退出后，`xbuild` 会自动执行以下步骤：

- **清理配置文件**：使用 `make savedefconfig` 命令清理配置文件，生成 `defconfig` 文件。
- **更新配置文件**：将 `defconfig` 文件复制到板级配置文件中。

示例操作如下：

```
make savedefconfig                               # 清理并生成 defconfig 文件
cp defconfig < 板级配置文件中的 Kernel 配置文件 >  # 覆盖板级配置文件
```
### 手动配置

**提示：** 手动配置 Kernel 选项的过程是对 `./bd.sh boot menuconfig` 命令的分步操作。操作过程中，用到的配置文件和参数，需要用户知道含义和作用。

以下是手动配置的详细步骤， 以配置 `kernel/arch/arm64/configs/hobot_x5_soc_defconfig` 为例：

- **步骤一：进入 Kernel 目录并使用默认配置**：

  ```
  cd kernel
  make ARCH=arm64 hobot_x5_soc_defconfig
  ```

  该命令会生成 `.config` 文件，并为 Kernel 配置环境。

- **步骤二：进入图形化配置界面**

  ```
  make ARCH=arm64 menuconfig
  ```

  执行命令后，进入 Kernel 的图形化配置界面，用户可以选择启用或禁用各个功能。

- **步骤三：保存配置并生成清理后的 `defconfig` 文件**

  配置完成后，退出配置界面并保存，然后执行以下命令生成清理后的 `defconfig` 文件：

  ```
  make ARCH=arm64 savedefconfig
  ```

- **步骤四：对比修改前后的配置（可选）**

  为了确保配置修改的准确性，可以对比修改前后的差异：

  ```
  diff defconfig arch/arm64/configs/hobot_x5_soc_defconfig
  ```

- **步骤五：更新配置文件并清理编译环境**

  将新的 `defconfig` 文件复制到源配置文件中，并清理编译环境：

  ```
  cp -f defconfig arch/arm64/configs/hobot_x5_soc_defconfig  # 覆盖源配置文件

  # 清理源码目录下的 .config 等文件，否则在重新编译系统时会提示需要 xxx is not clean, please run 'make mrproper'
  make distclean
  # 或者使用错误提示的命令清理
  make mrproper
  ```

- **步骤六：重新编译 Kernel**

  完成配置后，使用以下命令重新编译 Kernel：

  ```
   ./bd.sh boot
  ```