4.4.5. 快速启动使用指南
4.4.5.1. 概述
本章
前置条件
| 项目 | 要求 |
|---|---|
| 存储介质 | 【仅 |
| Rootfs 镜像 | 【Buildroot】 |
4.4.5.2. 镜像准备与烧录
1) 编译
cd system/buildroot/source
./build.sh clean
./build.sh build x5_system_quickstart_defconfig 0.0.1
编译system/buildroot/source/framework/output/images 目录dr-system-quickstart_0.0.1~gcc11.3.1_all.deb
$ ls system/buildroot/source/framework/output/images
deb_make dr-system-quickstart_0.0.1~gcc11.3.1_all.deb rootfs.tar rtl_bt rtlwifi
2) 将
将system/buildroot/prebuilt 目录system/buildroot/prebuilt/series_quickstart 文件dr-system-quickstart_0.0.1~gcc11.3.1_all.deb (即series_quickstart 中
dr-system-quickstart_0.0.1~gcc11.3.1_all.deb
dr-libgtest_1.14.0~gcc11.3.rel1_arm64.deb
dr-libgdcbin_1.0.0~gcc11.3.rel1_arm64.deb
dr-perf_6.1.12~gcc11.3.rel1_arm64.deb
dr-libdnn_1.24.5~gcc11.3.rel1_arm64.deb
dr-libhpatchz_3.1.1~gcc11.3.rel1_arm64.deb
3) 快速
注意 先./bd.sh distclean 命令./bd.sh 重新board_x5_evb_quickstart_debug_config.mk 也
$ ./bd.sh distclean
$ ./bd.sh lunch
You're building on #1 SMP PREEMPT_DYNAMIC Thu Jun 5 18:30:46 UTC 2025
Lunch menu... pick a combo:
0. horizon/x5/board_x5_evb_debug_config.mk
1. horizon/x5/board_x5_evb_jammy_debug_config.mk
2. horizon/x5/board_x5_evb_jammy_release_config.mk
3. horizon/x5/board_x5_evb_nand_debug_config.mk
4. horizon/x5/board_x5_evb_nand_release_config.mk
5. horizon/x5/board_x5_evb_quickstart_debug_config.mk
6. horizon/x5/board_x5_evb_quickstart_release_config.mk
7. horizon/x5/board_x5_evb_release_config.mk
8. horizon/x5/board_x5_soc_debug_config.mk
9. horizon/x5/board_x5_soc_release_config.mk
Which would you like? [0] : 5
You are selected board config: horizon/x5/board_x5_evb_quickstart_debug_config.mk
$ ./bd.sh
说明 快速
4) 镜像
快速
4.4.5.3. 优化前后启动耗时比对
| EVB_V2P0 | BLX阶段 | uboot | kernel | rootfs | kernel 命令行 |
显示 |
|---|---|---|---|---|---|---|
| 优化 |
0.962s | 1.612s | 0.730s | 4.862s | 8.167s | 10.345s |
| 优化 |
0.956s | 0.964s | 0.749s | 0.225s | 2.931s | 4.251s |
说明 内核
| 各 |
摘要 |
|---|---|
| BLX 阶段 |
I/TC: Primary CPU switching to normal world boot |
| u-boot 结束 |
Starting kernel ... |
| kernel 初始化 |
Run /sbin/init as init process |
| rootfs 启动 |
Please press Enter to activate this console. 或 Welcome to Buildroot |
统计工具:
1) grabserial
在
sudo apt install grabserial
sudo grabserial -v -d "/dev/ttyUSB0" -b 921600 -w 8 -p N -s 1 -e 100 -t
参数
-v–verbose 打印运行 时 的 提示信息。 -d "/dev/ttyUSB0"串口设备 节点。 -b 921600波特率 921600,需与 板端 一致。 -w 8数据位 8。-p N校验位 N = No parity(无校验)。 -s 1停止位 1。 -e 100100 秒后 退出。 -t–time 每一行 日志 前面 打印 相对 时间。
2) 统计
使用
4.4.5.4. 集成用户软件到快速启动镜像
内置用户软件:
用户system/buildroot/prebuilt/boot-utils-runtime-quickstart/debug 或 system/buildroot/prebuilt/boot-utils-runtime-quickstart/release 下,再system 镜像system 分区。
添加开机启动脚本:
由于 /etc/init.d/S??* (?? 代表
1) 显示
针对boot-utils-runtime-quickstart/release/etc/init.d/S01display
#!/bin/bash
while [ ! -d /sys/class/vps/mipi_host3 ]; do
sleep 0.01
done
while [ ! -d /dev/dri ]; do
sleep 0.01
done
source /etc/profile.d/environment.sh
/app/platform_samples/sample_pipeline/single_pipe_vin_isp_vse_quickstart_display/single_pipe_vin_isp_vse_quickstart_display -s 3
while [ ! -d /sys/class/vps/mipi_host3 ]; do 等待 mipi csi 链路while [ ! -d /dev/dri ]; do 等待 drm 显示
2) 非
如果hbre 或 userdata 分区
#!/bin/bash
while ! grep -q "/usr/hobot" /proc/mounts; do
sleep 0.01
done
...
#!/bin/bash
while ! grep -q "/userdata" /proc/mounts; do
sleep 0.01
done
...
有些WIFI 功能,在
#!/bin/bash
while [ ! -d /sys/class/net/wlan0 ]; do
sleep 0.01
done
...
4.4.5.5. 快速启动链路优化说明
在
U-Boot 优化
功能概述
U-boot 是
U-Boot 快启流程图

启动链路核心改动点
快速
启动 默认 链路:在 hb_quickstart_board_init_r中完成 板级 第二阶段 初始化。 烧录
与 串口:烧录 工具 依赖 串口 交互, 在 U-Boot 阶段 保留 可 中断 等待时间,可 通过 CONFIG_QUICKSTART_ABORT_DELAY_MS配置。环境变量
策略: env_get / env_set仅在 内存 中 生效,不写 回 eMMC,减少 对 存储 的 写入 与 访问。
快速启动参数配置

| 配置 |
示例 |
作用 |
|---|---|---|
CONFIG_QUICKSTART |
y |
使能 |
CONFIG_QUICKSTART_KERNEL_ADDR |
0x90000000 |
指定 FIT 镜像 |
CONFIG_QUICKSTART_BOARD_ID |
0x0205 |
指定 |
CONFIG_QUICKSTART_ABORT_DELAY_MS |
80 |
U-Boot 阶段 |
冗余功能和启动链路裁剪
1) 冗余
| 裁剪 |
目的 | 涉及 |
|---|---|---|
| 多 |
移除 |
CONFIG_BOOTM_NETBSD、CONFIG_BOOTM_PLAN9、CONFIG_BOOTM_RTEMS、CONFIG_BOOTM_VXWORKS |
| 启动 |
关闭 |
CONFIG_BOOTSTAGE、CONFIG_CONSOLE_RECORD、CONFIG_USE_PREBOOT |
| 命令集 | 移除 |
CONFIG_CMD_BDI、CONFIG_CMD_CONSOLE、CONFIG_CMD_BOOTD、CONFIG_CMD_BOOTFLOW、CONFIG_CMD_BOOTI、CONFIG_CMD_ELF、CONFIG_CMD_XIMG、CONFIG_CMD_RANDOM、CONFIG_CMD_MEMTEST、CONFIG_CMD_ADC、CONFIG_CMD_GPIO、CONFIG_CMD_I2C、CONFIG_CMD_MTD、CONFIG_CMD_SF、CONFIG_CMD_SF_TEST、CONFIG_CMD_USB_MASS_STORAGE、CONFIG_CMD_WDT、CONFIG_CMD_DHCP、CONFIG_CMD_MII、CONFIG_CMD_PING、CONFIG_CMD_BOOTSTAGE、CONFIG_CMD_MTDPARTS、CONFIG_FASTBOOT_FLASH_SPINAND、CONFIG_CMD_LOG、CONFIG_CMD_MEMDUMP、CONFIG_CMD_UBI、CONFIG_CMD_UBI_RENAME |
| 网络 |
关闭 U-Boot 网络协议 |
CONFIG_NET、CONFIG_UDP_FUNCTION_FASTBOOT |
| 存储 |
关闭 |
CONFIG_FASTBOOT_FLASH_SPINAND(依赖 CONFIG_CMD_MTDPARTS)、CONFIG_MTD、CONFIG_AVB_VERIFY_MTD、CONFIG_SPI_FLASH |
| 外设 |
移除 |
CONFIG_GUC_ADC、CONFIG_I2C、CONFIG_PINCTRL、CONFIG_USB_STORAGE、CONFIG_USB_KEYBOARD、CONFIG_USB_HOST_ETHER、CONFIG_HOBOT_BOARD_TYPE |
2) 启动
经 hb_quickstart_board_init_r 完成
板级 初始化:
init_fnc_t hb_quickstart_init_sequence_r[] = {
initr_trace, //初始化调试跟踪机制(Trace)
initr_reloc, //重定位后的收尾调整
event_init, //初始化事件处理框架(uboot驱动匹配相关)
initr_caches, //初始化 CPU 缓存(Cache)
initr_reloc_global_data, //重定位全局数据(gd,Global Data)
initr_malloc, //初始化堆管理器(malloc)
initr_dm, //初始化驱动模型(Driver Model,DM)
initr_mmc, //初始化 MMC 设备(SD 卡/eMMC)
hb_quickstart_boot, //指定硬件平台启动
}
ft_board_setup 裁剪
后 如下:
int ft_board_setup(void *blob, struct bd_info *bd)
{
(void)bd;
#ifdef CONFIG_CMD_SEND_ID
hb_fdt_set_board_info(blob);
#endif
hb_setup_ion_size(blob);
fdt_rm_by_env(blob);
return 0;
}
Kernel 优化
功能概述
内核
压缩算法和编译器优化
使用 LZO 压缩算法
CONFIG_KERNEL_LZO=y
CONFIG_EFI_ZBOOT=y
| 配置 |
作用 | 启动 |
|---|---|---|
CONFIG_KERNEL_LZO=y |
使用 LZO 内核 |
提升 |
CONFIG_EFI_ZBOOT=y |
开启 CONFIG_KERNEL_LZO 依赖 |
依赖 |
System 优化
功能概述
在
主要改动说明
启动轻量级 init 程序
启用 BusyBox init,减小

自启服务并行改造
将 /etc/init.d/rcS 改造/etc/init.d/S??* (?? 代表
#!/bin/sh
# Start all init scripts in /etc/init.d
# executing them in numerical order.
#
for i in /etc/init.d/S??* ;do
# Ignore dangling symlinks (if any).
[ ! -f "$i" ] && continue
case "$i" in
*.sh)
# Source shell script for speed.
(
trap - INT QUIT TSTP
set start
. $i
) &
;;
*)
# No sh extension, so fork subprocess.
$i start &
;;
esac
done
/etc/init.d/rcS 遍历" ) &" 和 "$i start &" 做
驱动模块加载脚本优化
S70loadko 分批
#!/bin/sh
...
start() {
BOARD_ID=$(cat /sys/class/socinfo/board_id)
echo "<6>Starting load kernel driver..." > /dev/kmsg
WAIT_TRIES=200
# camsys driver
for m in vs_isc vs_cam_ctrl vs_cam_pulse vs_csi_wrapper; do
start_bg "$m"
done
for m in hobot_osd hobot_vin_vnode hobot_vin_vcon vs_sif_nat; do
start_bg "$m"
done
wait_pids || exit 1
for m in \
hobot_sensor hobot_mipiphy hobot_mipicsi hobot_mipidbg \
vs_isp_nat vs_vse_nat \
hobot_deserial hobot_gdc hobot_isi_sensor \
panel-jc-050hd134 vio_n2d lontium_lt8618 \
vs-x5-syscon-bridge \
hobot_lpwm panel-drobot-csi vs_drm; do
start_bg "$m"
done
...
如
根文件系统裁剪
移除
| 裁剪 |
目的 | 涉及 |
|---|---|---|
| 调试 |
移除 gdbserver、minicom、lrzsz、sudo 等 |
BR2_PACKAGE_GDB_SERVER、BR2_PACKAGE_MINICOM、BR2_PACKAGE_LRZSZ、BR2_PACKAGE_SUDO |
| 性能 |
移除 iozone、memstat、cpuload、htop 等 |
BR2_PACKAGE_IOZONE、BR2_PACKAGE_MEMSTAT、BR2_PACKAGE_CPULOAD、BR2_PACKAGE_HTOP |
| 存储 |
移除 mtd-utils、mkfs.ubifs、mtdpart 等 MTD 分区 |
BR2_PACKAGE_MTD、BR2_PACKAGE_MTD_MKFSUBIFS、BR2_PACKAGE_MTD_MTDPART |
| 音频、日志 |
移除 tinyalsa、zlog、dnsmasq、gesftpserver 等 |
BR2_PACKAGE_TINYALSA、BR2_PACKAGE_ZLOG、BR2_PACKAGE_DNSMASQ、BR2_PACKAGE_GESFTPSERVER |
| 工具集 | 关闭 GNU coreutils(ls、cp、mv 等 |
BR2_PACKAGE_COREUTILS |
显示应用优化
功能概述
single_pipe_vin_isp_vse_quickstart_display 是
注意事项 本
代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_pipeline/single_pipe_vin_isp_vse_quickstart_display.c目录
结构
├── Makefile
├── single_pipe_vin_isp_vse_quickstart_display
├── single_pipe_vin_isp_vse_quickstart_display.c
├── vp_display.c
└── vp_display.h
显示应用启动流程图

整体hbmem_open_worker/display_init_worker)和create_and_run_vflow 前
程序运行
source /etc/profile.d/environment.sh
/app/platform_samples/sample_pipeline/single_pipe_vin_isp_vse_quickstart_display/single_pipe_vin_isp_vse_quickstart_display -s 3
参数
4.4.5.6. FAQ
如何加载自定义内核模块
处理:在modprobe bpu_hw_io_x5 位置,在
如何开启 OTA(AB 分区)配置
处理: 在
device/horizon/x5/board_x5_evb_quickstart_debug_config.mkdevice/horizon/x5/board_x5_evb_quickstart_release_config.mk
将 HR_PART_CONF_FILENAME 设置
export HR_PART_CONF_FILENAME=${HR_BOARD_CONF_DIR}/x5-soc-debug-ab-gpt.json