---
title: 启动与卸载云手机实例
description: "- 使用kbox_config.cfg配置文件可以灵活配置云手机使用的资源，使性能达到最优。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/armnative/kunpengcpskbox_20_0053.html
sourcePath: /source/zh/kunpengboostkithistory/2300/armnative/kunpengcpskbox_20_0053.html
indexId: e390c647e3fe98097db6996c24eb993d3b0697d24e6de1570a3bcef65a0aa21376
---
# 启动与卸载云手机实例

- 使用kbox_config.cfg配置文件可以灵活配置云手机使用的资源，使性能达到最优。
- kbox_config.cfg中有KBOX_GPU_MAP、KBOX_MOUNT_MAP、KBOX_CPUSET_MAP等配置项，可以修改map中对应路数的值来选择该路容器使用的GPU、CPU以及数据卷存放路径。
- 启动路径下应存在kbox_config.cfg配置文件。容器会使用该文件中的配置，因此使用时应确保kbox_config.cfg配置文件中的配置正确。若启动路径下无该配置文件，则云手机将禁止启动。


1. 解压Kbox-AOSP11.zip，将Kbox-AOSP11文件夹中的deploy_scripts目录上传至服务器的“~/dependency”目录。
2. （可选）使能硬件解码（以下简称“硬解”）时，需要设置“deploy_scripts”目录下的kbox_config.cfg文件，将“ENABLE_HARD_DECODE”设置为“1”，同时需参考以下步骤设置NETINT卡节点。

  a. 执行如下命令查看编解码卡芯片对应节点号。
    1 nvme list

    回显示例如下，请以实际为准。加粗部分为NETINT编码卡芯片NVMe节点，一张编码卡包含4颗芯片，在该示例中第0~3行是第一张编码卡，第5~8行是第二张编码卡。

    1 2 3 4 5 6 7 8 9 10 11 Node SN Model Namespace Usage Format FW Rev ------------- -------------------- ---------------- --------- ---------------------- -------------- -------- /dev/nvme0n1 TA23-09-03-C76-0242A T432-8 Massif8 1 536.87 GB / 536.87 GB 512 B + 0 B 333X2017 /dev/nvme1n1 TA23-09-03-C76-0242B T432-8 Massif8 1 536.87 GB / 536.87 GB 512 B + 0 B 333X2017 /dev/nvme2n1 TA23-09-03-C76-0242C T432-8 Massif8 1 536.87 GB / 536.87 GB 512 B + 0 B 333X2017 /dev/nvme3n1 TA23-09-03-C76-0242D T432-8 Massif8 1 536.87 GB / 536.87 GB 512 B + 0 B 333X2017 /dev/nvme4n1 025KCA10JA000026 HWE56P436T4M002N 1 6.40 TB / 6.40 TB 512 B + 0 B 2131 /dev/nvme5n1 TA23-09-03-C76-0622A T432-8 Massif8 1 536.87 GB / 536.87 GB 512 B + 0 B 333X2017 /dev/nvme6n1 TA23-09-03-C76-0622B T432-8 Massif8 1 536.87 GB / 536.87 GB 512 B + 0 B 333X2017 /dev/nvme7n1 TA23-09-03-C76-0622C T432-8 Massif8 1 536.87 GB / 536.87 GB 512 B + 0 B 333X2017 /dev/nvme8n1 TA23-09-03-C76-0622D T432-8 Massif8 1 536.87 GB / 536.87 GB 512 B + 0 B 333X2017

  b. 查看NVMe节点与pcie bus号对应关系。以下命令中{index}为上述回显所示的NVMe节点编号。此处以/dev/nvme2n1为例，该节点{index}即为2。
    1 find /sys/devices/ -name nvme{index}

    回显如下，加粗部分为pcie bus号。

    1 2 /sys/devices/pci0000:00/0000:00:0e.0/0000:07:00.0/nvme/nvme2 /sys/devices/virtual/nvme-subsystem/nvme-subsys2/nvme2

  c. 通过bus号找到该节点与NUMA从属关系。
    {busID}为上一步骤获取的bus号。以2.b回显为例，{busID}即为0000:07:00.0。 1 lspci -vvvs {busID} | grep NUMA

    回显如下所示。

    1 NUMA node: 0

  d. 根据编码卡NVMe设备节点对应的NUMA修改kbox_config.cfg中NETINT的值。
    鲲鹏920 7265F/7260服务器：从属于0、1号NUMA的NVMe节点写在NETINT0字段中，从属于2、3号NUMA的NVMe节点写在NETINT1字段中。

    字段中每个设备需添加两个节点。例如2号NVMe设备，需添加“/dev/nvme2”、“/dev/nvme2n1”两个节点。

    1 2 NETINT0="/dev/nvme0,/dev/nvme0n1,/dev/nvme1,/dev/nvme1n1,/dev/nvme2,/dev/nvme2n1,/dev/nvme3,/dev/nvme3n1" NETINT1="/dev/nvme5,/dev/nvme5n1,/dev/nvme6,/dev/nvme6n1,/dev/nvme7,/dev/nvme7n1,/dev/nvme8,/dev/nvme8n1"

    若服务器环境上只有一张NETINT卡（例只有2.a中nvme list回显中所示的第一张卡），则kbox_config.cfg的NETINT0和NETINT1字段都填成该卡的节点值。

    1 2 NETINT0="/dev/nvme0,/dev/nvme0n1,/dev/nvme1,/dev/nvme1n1,/dev/nvme2,/dev/nvme2n1,/dev/nvme3,/dev/nvme3n1" NETINT1="/dev/nvme0,/dev/nvme0n1,/dev/nvme1,/dev/nvme1n1,/dev/nvme2,/dev/nvme2n1,/dev/nvme3,/dev/nvme3n1"

    若第一次启动容器时NETINT的值为空，禁止设置ENABLE_HARD_DECODE=1，且禁止重启时设置ENABLE_HARD_DECODE=1，否则播放视频会有短暂黑屏的现象。 若启动时为软件解码（以下简称“软解”）方式（设置ENABLE_HARD_DECODE=0），重启时能切换为硬解方式（设置ENABLE_HARD_DECODE=1），需要在启动时填入NETINT的值。

3. 通过android11_kbox.sh脚本启动容器。
```
cd ~/dependency/deploy_scripts
chmod +x android11_kbox.sh
./android11_kbox.sh start {镜像名称：tag}  ${index1}  ${index2}
```

Kbox基础云手机的默认配置信息如表1所示。

**表1 Kbox安卓11基础云手机的默认配置信息**

| 配置项 | Kbox基础云手机 |
| --- | --- |
| 场景 | 移动办公/ 托管 |
| vCPUs | 2 |
| 绑核策略 | 2容器/2核 |
| 内存 | 6GB |
| 系统存储 | 16GB |
| 分辨率 | 720\*1280 |


启动脚本使用示例：

  - 启动一个编号为1的实例。
    1 ./android11_kbox.sh start kbox:latest 1

  - 启动编号为1~5的五个实例。
    1 ./android11_kbox.sh start kbox:latest 1 5

4. 执行命令，确认Kbox容器是否启动成功，其中“${index}”为启动实例的编号。
  1 2 docker exec -it kbox_${index} sh getprop | grep boot

  若回显信息中的sys.boot_completed显示为“1”，则启动成功。

5. 停止并删除Kbox容器的方法。
由于Kbox方案默认挂载数据卷，默认的docker stop、docker rm命令不能彻底清理容器数据，需要使用脚本彻底清理主机侧文件。
使用android11_kbox.sh脚本，停止并删除正在运行的Kbox容器。

  - 停止并删除编号为${index}的容器。
    1 ./android11_kbox.sh delete ${index}

  - 停止并删除编号为${index1}~${index2}的所有容器。
    1 ./android11_kbox.sh delete ${index1} ${index2}

6. 重启Kbox容器的方法。
由于Kbox方案默认挂载数据卷，在重启容器时，无法使用默认的docker restart命令进行重启，需要使用脚本执行容器的重启操作。
使用android11_kbox.sh脚本重启Kbox容器。

  - 重启编号为${index}的容器。
    1 ./android11_kbox.sh restart ${index}

  - 重启编号为${index1}~${index2}的所有容器。
    1 ./android11_kbox.sh restart ${index1} ${index2}

  - 若容器启动时为硬解方式，重启时切换为软解方式，可设置kbox_config.cfg中的ENABLE_HARD_DECODE字段为0，然后重启。
    1 ./android11_kbox.sh restart ${index1}

  - 若容器启动时为软解方式（且启动时配置了kbox_config.cfg中的NETINT字段），重启时切换为硬解方式，可设置kbox_config.cfg中的ENABLE_HARD_DECODE字段为1，然后重启。
    1 ./android11_kbox.sh restart ${index1}
