4.4.4. 系统小型化裁剪
4.4.4.1. 概述
在
4.4.4.2. 系统裁剪简介
系统
减小
存储 占用:通过 裁剪 不必要 的 功能 和 模块,减少 文件系统、内核、启动 程序 等 占用 的 存储空间,适应 资源 受限 的 硬件 环境。 提高
启动 速度:精简 后 的 系统 在 启动 时 能够 加载 更 少 的 模块,启动 过程 更加 高效。 提升
系统 性能:去除 不必要 的 功能 和 驱动,减少 内存 占用,提升 系统 响应速度 和 稳定性。 定制
化 系统:根据 实际 需求 定制 系统 组件,实现 精细化 控制,增强 系统 的 可维护性 和 可扩展性。
当前
| 镜像 | 大小 |
|---|---|
| uboot | 2M |
| kernel | 12M |
| rootfs | 250M |
可以
4.4.4.3. 系统裁剪方式
uboot 裁剪
uboot 是
本uboot/configs/hobot_x5_soc_defconfig,可以
./bd.sh uboot menuconfig
该savedefconfig 和
命令

在
禁用
不 需要 的 命令 例如,如果
不 需要 memtest命令,可以禁用 该 命令,在 menuconfig 界面 取消 选中 即可: 
禁用
文件系统 支持 如果
不 需要 支持 某些 文件系统(如 FAT、 ext4 等),可以 通过 取消 相关 定义 来 禁用。例如,禁用 FAT 文件系统 支持: 
禁用
不 需要 的 硬件 驱动 如果
不 需要 I2C 设备 支持,可以 禁用 I2C 驱动,在 menuconfig 界面 取消 选中 I2C support即可:
在 menuconfig 的Exit 退出,根据Yes 保存.config 文件 (本uboot/configs/hobot_x5_auto_defconfig 文件)中。
修改
# 清理旧的编译文件
./bd.sh uboot clean
# 重新编译
./bd.sh uboot
Linux 内核裁剪
Linux 内核
通常
删除
不 使用 的 功能。如 符号表、打印、调试 等 功能。 删除
不 使用 的 驱动。 修改
内核 源代码。
禁用内核功能、驱动
与 uboot 配置
./bd.sh boot menuconfig
该

在 Linux 内核 menuconfig 界面menuconfig 配置Exit 退出,并Yes 保存.config 文件kernel/arch/arm64/configs/hobot_x5_soc_defconfig)。
修改内核源代码
内核
可以vmlinux 文件vmlinux 文件out/build/kernel 下:
nm --size vmlinux | sort -k 2 -n -r
命令
nm --size vmlinux:列出vmlinux文件中 的 符号 信息,并 显示 每个 符号 的 大小(以 字节 为 单位)。 sort -k 2 -n -r:-k 2:按照第二列(即 符号 的 大小 列)进行 排序。 -n:以数值 大小 排序,而 不是 按 字典 顺序。 -r:按降序 排序,即 从 大到 小。
截取
out/build/kernel$ nm --size vmlinux | sort -k 2 -n -r
0000000000200000 b _buf_log_main
0000000000058000 d _printk_rb_static_infos
0000000000040000 b _buf_log_system
0000000000040000 b _buf_log_radio
0000000000040000 b _buf_log_events
0000000000020000 b __log_buf
0000000000018000 d _printk_rb_static_descs
00000000000082f8 b ipc_shm_data
0000000000006000 b memblock_memory_init_regions
0000000000004020 B hstates
0000000000003e14 T hidinput_connect
0000000000003b88 r edid_cea_modes_1
00000000000039c0 R v4l2_dv_timings_presets
0000000000003740 r alg_test_descs
00000000000035c0 r orientation_data
0000000000003480 r wm8962_dapm_widgets
00000000000033b4 T ZSTD_compressBlock_doubleFast_dictMatchState
0000000000002fa8 t allowlist
日志
每
地址(如
0000000000200000):该符号 在 vmlinux中的 地址。 大小(如
b,d,t,T,r等符号 类型 后面 的 数值):表示 符号 所 占 的 字节数。 符号
类型 (如T,b,d等):表示符号 的 类型。 符号
名 (如_buf_log_main,_printk_rb_static_infos等):符号的 名称。
例如:
0000000000200000 b _buf_log_main
0000000000058000 d _printk_rb_static_infos
在
_buf_log_main的大小 为 0x200000(即 2MB),并且它 是 一个 BSS 段 的 符号( b表示 BSS)。_printk_rb_static_infos的大小 为 0x58000(即 348KB),并且它 是 一个 数据 段 的 符号( d表示数据)。
符号
T:表示符号 是 一个 函数 并且 位于 文本(代码)段 中。 t:表示符号 是 一个 局部 函数,位于 文本 段 中。 D:表示符号 是 一个 数据 段 变量。 d:表示符号 是 一个 局部 数据 变量。 b:表示符号 是 一个 BSS 段 变量(未 初始化 数据)。 r:表示符号 是 只读 数据。 R:表示符号 是 只读 数据,且 其 地址 是 由 链接 器 在 加载 时 填充 的。 W:表示符号 是 一个 弱 符号。
根据
BSS 段 (
b):这部分的 符号 表示 未 初始化 的 静态 变量,这些 符号 可能 占用 空间,但 它们 通常 是 可以 裁剪 的。如果 这些 符号 对应 的 变量 没有 被 使用,就 可以 考虑 删除 或 优化。 数据
段 ( :这部分d)的 符号 表示 已 初始化 的 全局变量,需要 确认 是否 所有 的 全局变量 都 被 需要,没有 使用 的 全局变量 可以 裁剪。 只读
数据 :表示段 ( r或R)只读 的 全局变量,通常 是 库函数 中 的 常量 数据。这些 数据 中 对于 没有 被 使用 的 部分 是 可以 被 优化 的。 文本
段 ( :这部分T或t)的 符号 表示 函数 代码。如果 某些 函数 不 被 使用 或 只有 在 特定条件 下 才 被 调用,可以 是 裁剪 的 候选。特别 是 局部 函数( t)可以分析 后 确认 是否 被 优化 或者 从 内核 配置 中 禁用。 弱
符号 ( :这W)类 符号 是 弱 符号,通常 是 可 选 的 或 不 太 重要 的。可以 考虑 裁剪。
可以
其他裁剪方向
去除
调试信息 如果目标 是 生产 环境,可以 通过 禁用 调试 符号 和 信息 来 减少 内核 镜像 的 大小。 可以 在 menuconfig 中 禁用 以下 选项: CONFIG_DEBUG_INFO=n # 禁用调试信息 CONFIG_DEBUG_KERNEL=n # 禁用内核调试
根文件系统裁剪
本
文件系统
删:删除
不 需要 的 内容。如 帮助 文档、没用到 的 库、调试程序 等。 换:使用
小 尺寸 的 实现 替换 大 尺寸 的 实现。如 使用 musl libc 库 替换 glibc 库 等。 压:使用
合适 的 压缩算法。
应用程序
在
调试
工具:比如 tcpdump、 mpstat、 strace 等等。 性能
测试工具:比如 lmbench、 sysstat、 tiobench 等等。 冗余
文件:帮助 文档、辅助 程序、配置文件 和 数据 模块 等,又 比如 很多 应用 有 相同 的 功能,只留 其一。 采用
具有 通用 功能 的 替代 软件包。 Linux 上 有 许多 具有 相似 功能 的 软件包,可以 选择 其中 占 存储空间 较 小 的 软件包 并 移植 到 嵌入式 设备 上。 资源
文件:一些 音视频 以及 UI 资源 往往 占用 很大 空间,如果 没有 用到,也 需要 删除。
关于
使用
较 小 的 C 库,如 musl libc, uclibc 等 来 替换 glibc。 删除
没有 用到 的 库。
可以system/buildroot/source 目录
./build.sh menuconfig x5_system_defconfig
进入 menuconfig 界面

根target packages 目录

在 menuconfig 配置Exit 退出,并Yes 保存.config 文件(本system/buildroot/source/configs/x5_system_defconfig)中。
接着,先
cd system/buildroot/source
./build.sh clean x5_system_defconfig
./build.sh build x5_system_defconfig 0.0.1
另外,strip 会

该strip 命令
4.4.4.4. 系统裁剪的基本原则
在
按
需求 裁剪 明确
目标 :裁剪应 根据 实际 应用 需求 来 进行。不要 盲目 裁剪,首先 需要 清楚 系 需要 支持 哪些 功能、模块 和 硬件。裁剪 的 目的 是 为了 适应 特定 的 硬件平台 和 应用 场景, 不是 单纯 地 减小 系统 体积。 最小化
功能集 :根据使用 场景 只 保留 必要 的 功能 和 服务,避免 裁剪 过多,导致系统 无法 提供 预期 功能。
逐步
裁剪 分阶段
进行 :裁剪过程 应 分阶段 进行,从 最 不 重要 的 模块 开始,逐步 移除 不必要 的 功能。在 每 一 阶段,进行 测试 和 验证,确保 系统 的 稳定性 和 功能 完整性。 保留
核心 :始终功能 确保 系统 的 基本功能 不 受 影响。例如,内核 裁剪 时,要 特别 注意 保留 对 硬件 的 基本 支持,特别 是 设备 驱动 和 文件系统 支持。
安全性
和 稳定性 优先 避免
破坏性 :裁剪裁剪 时 不要 移除 或 禁用 系统 的 核心 功能,如 内核 调度、内存 管理、硬件 抽象 层 (HAL) 等。过度 裁剪 可能 会 导致系统 不 稳定,甚至 无法 启动。 充分
测试 :每次裁剪 后,都 应对 系统 进行 全面 的 功能 验证,尤其 是 对 硬件 和 网络 等 关键 模块 的 测试。确保 不会 引入 安全漏洞 或 导致系统 崩溃。
最小化
依赖 去除
冗余 :裁剪依赖 时应 尽量减少 对 不必要 的 库 和 工具 的 依赖,特别 是 在 Buildroot 和 根 文件系统 的 裁剪 中。移除 不 需要 的 依赖 项,避免 增加 不必要 的 库 文件 和 二进制 文件。 使用
轻量级 :例如,用 BusyBox 替代替代品 多个 常规 工具集,选择 更 小 的、资源 占用 更 低 的 库 和 工具,以 减小 根 文件系统 的 体积。
合理
管理 内核 配置 精简
内核 :在配置 内核 裁剪 过程 中,应 根据 目标 硬件 精简 内核 配置。删除 不必要 的 驱动程序、文件系统 支持 和 调试 功能,避免 加载 不 需要 的 模块。 模块化
管理 :内核模块应该 只 在 需要 时 加载,减少 不必要 的 内核模块 或 驱动,这 不仅 有助于 减少 内核 的 体积,还 可以 优化 系统 性能。
高效
管理 存储 和 内存 优化
存储 :裁剪占用 时应 重点 关注 存储 的 优化,特别 是 嵌入式 设备 存储 有限 的 情况 下,尽量减少 文件系统 内核 镜像 和 Uboot 文件 的 大小。 内存
占用 :减少优化 不必要 的 内存 占用,尤其 是 在 RAM 限制 较大 的 设备 上。通过 移除 不必要 的 服务、程序 和 驱动,可以 有效 提高 内存 利用率。
模块化
与 可扩展性 保持
模块化 :尽量设计 保留 系统 的 模块化 特性,即使 进行 裁剪,也 应 确保 系统 可以 在 需要 时 灵活 地 加载 模块,而 不是 直接 将 所有 功能 集成 到 系统 中。 可扩展性:在
裁剪 过程 中,不要 限制 未来 的 扩展 能力。确保 裁剪 的 部分 能够 轻松 地被 重新加入 到 系统 中,以便 后续 的 功能 扩展。
遵循
工具链 和 标准 使用
标准 :裁剪工具链 过程 中应 使用 一致 的 工具链 和 配置 工具(如 Uboot 的 make menuconfig、 Kernel 的make menuconfig或 Buildroot 的配置 工具)进行 操作。这些 工具链 已经 经过 优化 和 广泛 使用,能够 帮助 确保 裁剪 的 系统 在 目标 平台 上 正常 工作。 文档
化 :对于裁剪 过程 每 一次 裁剪 的 决策 和 步骤,应 进行 详细 记录。这样 可以 帮助 后续 人员 理解 裁剪 的 目的、方法 和 实现,便于管理 和 后期 修改。
性能
与 功耗 平衡 优化
性能 :裁剪不仅 是 为了 减小 体积,还应 兼顾 性能 优化。可以 通过 移除 不必要 的 功能 和 配置 来 提高 系统 性能。 考虑
功耗 :在嵌入式 系统 中,功耗 往往 是 设计 中 的 重要 考虑 因素。裁剪 时,可以 优先选择 低功耗 的 硬件 支持 和 软件 功能,优化 系统 的 功耗 表现。
保持
向 后 兼容性 避免
破坏 :特别兼容性 是 在 内核 裁剪 和 Uboot 裁剪 时,要 确保 与 原先 系统 兼容。移除 某些 模块 时,注意 不要 影响 现有 的 硬件 支持 和 系统 接口,以便 后续 的 更新 和 维护 不至于 引入 不必要 的 问题。
4.4.4.5. 系统裁剪实例
由于 NAND 容量
system 最小配置
如下
BR2_aarch64=y
BR2_cortex_a55=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="aarch64-none-linux-gnu"
BR2_TOOLCHAIN_EXTERNAL_GCC_11=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_20=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
# BR2_TOOLCHAIN_EXTERNAL_INET_RPC is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_CCACHE=y
# BR2_PIC_PIE is not set
BR2_SSP_NONE=y
BR2_RELRO_NONE=y
BR2_FORTIFY_SOURCE_NONE=y
BR2_INIT_SYSV=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_ROOTFS_MERGED_USR=y
BR2_TARGET_GENERIC_ROOT_PASSWD="root"
BR2_SYSTEM_BIN_SH_BASH=y
BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin"
BR2_PACKAGE_FFMPEG=y
BR2_PACKAGE_FFMPEG_ENCODERS=""
BR2_PACKAGE_FFMPEG_DECODERS=""
BR2_PACKAGE_FFMPEG_MUXERS=""
BR2_PACKAGE_FFMPEG_DEMUXERS=""
BR2_PACKAGE_FFMPEG_PARSERS=""
BR2_PACKAGE_FFMPEG_BSFS=""
BR2_PACKAGE_FFMPEG_PROTOCOLS=""
BR2_PACKAGE_FFMPEG_FILTERS=""
# BR2_PACKAGE_FFMPEG_INDEVS is not set
# BR2_PACKAGE_FFMPEG_OUTDEVS is not set
BR2_PACKAGE_FFMPEG_EXTRACONF=" --disable-everything --enable-gray --enable-safe-bitstream-reader --enable-encoder=adpcm_g726le --enable-encoder=flac --enable-encoder=pcm_alaw --enable-encoder=pcm_mulaw --enable-encoder=adpcm_ima_wav --enable-encoder=srt --enable-encoder=subrip --enable-encoder=text --enable-encoder=movtext --enable-encoder=ass --enable-decoder=adpcm_g726le --enable-decoder=flac --enable-decoder=pcm_alaw --enable-decoder=pcm_mulaw --enable-decoder=adpcm_ima_wav --enable-decoder=h264 --enable-decoder=hevc --enable-decoder=mjpeg --enable-muxer=adts --enable-muxer=mpegts --enable-muxer=rtsp --enable-muxer=rtp --enable-muxer=avi --enable-muxer=flv --enable-muxer=hls --enable-muxer=mp4 --enable-muxer=flac --enable-demuxer=flac --enable-demuxer=aac --enable-demuxer=mpegts --enable-demuxer=h264 --enable-demuxer=hevc --enable-demuxer=mjpeg --enable-demuxer=image2 --enable-demuxer=mov --enable-demuxer=rtsp --enable-demuxer=hls --enable-demuxer=rtp --enable-demuxer=flv --enable-demuxer=mpegps --enable-demuxer=mpegtsraw --enable-demuxer=mpegvideo --enable-parser=h264 --enable-parser=hevc --enable-parser=aac --enable-parser=flac --enable-parser=mjpeg --enable-parser=mpeg4video --enable-parser=mpegvideo --enable-parser=mpegaudio --enable-bsf=h264_mp4toannexb --enable-bsf=aac_adtstoasc --enable-bsf=null --enable-bsf=extract_extradata --enable-protocol=file --enable-protocol=http --enable-protocol=rtp --enable-protocol=rtmpts --enable-protocol=https --enable-protocol=hls --enable-protocol=data --disable-armv5te --disable-armv6 --disable-mmx --disable-optimizations --disable-asm "
BR2_PACKAGE_BZIP2=y
BR2_PACKAGE_MEMSTAT=y
BR2_PACKAGE_MTD=y
BR2_PACKAGE_EUDEV_RULES_GEN=y
# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set
BR2_PACKAGE_I2C_TOOLS=y
BR2_PACKAGE_TINYALSA=y
BR2_PACKAGE_MINIZIP_ZLIB=y
BR2_PACKAGE_LIBKCAPI=y
BR2_PACKAGE_LIBKCAPI_ENCAPP=y
BR2_PACKAGE_LIBKCAPI_HASHER=y
BR2_PACKAGE_LIBKCAPI_RNGAPP=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LIBOPENSSL_ENGINES=y
BR2_PACKAGE_LIBGPIOD=y
BR2_PACKAGE_LIBGPIOD_TOOLS=y
BR2_PACKAGE_CJSON=y
BR2_PACKAGE_JSONCPP=y
BR2_PACKAGE_LIBEVENT=y
BR2_PACKAGE_LRZSZ=y
BR2_PACKAGE_NET_TOOLS=y
BR2_PACKAGE_OPENSSH=y
BR2_PACKAGE_OPTEE_CLIENT=y
# BR2_PACKAGE_OPTEE_CLIENT_RPMB_EMU is not set
BR2_PACKAGE_SYSKLOGD=y
BR2_PACKAGE_TAR=y
BR2_PACKAGE_UTIL_LINUX_LIBUUID=y
将system/buildroot/source/configs/x5_system_defconfig 文件
Kernel 最小配置
如下
CONFIG_WERROR=y
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_AUDIT=y
CONFIG_NO_HZ_IDLE=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_PREEMPT=y
CONFIG_IRQ_TIME_ACCOUNTING=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_TASKSTATS=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_MEMCG=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CPUSETS=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
CONFIG_NAMESPACES=y
CONFIG_USER_NS=y
CONFIG_SCHED_AUTOGROUP=y
CONFIG_BLK_DEV_INITRD=y
# CONFIG_RD_BZIP2 is not set
# CONFIG_RD_LZMA is not set
# CONFIG_RD_XZ is not set
# CONFIG_RD_LZO is not set
# CONFIG_RD_ZSTD is not set
CONFIG_KALLSYMS_ALL=y
CONFIG_EMBEDDED=y
CONFIG_PROFILING=y
CONFIG_ARCH_HOBOT=y
CONFIG_ARCH_HOBOT_X5=y
CONFIG_ARM64_VA_BITS_48=y
CONFIG_SCHED_MC=y
CONFIG_SCHED_SMT=y
CONFIG_NR_CPUS=8
CONFIG_HZ_100=y
CONFIG_PARAVIRT=y
CONFIG_KEXEC_FILE=y
CONFIG_CRASH_DUMP=y
CONFIG_COMPAT=y
CONFIG_RANDOMIZE_BASE=y
CONFIG_HOBOT_BOOT_LZ4=y
CONFIG_PM_DEBUG=y
CONFIG_PM_ADVANCED_DEBUG=y
CONFIG_PM_TEST_SUSPEND=y
CONFIG_CPU_IDLE=y
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPUFREQ_DT=y
CONFIG_JUMP_LABEL=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_PARTITION_ADVANCED=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
# CONFIG_COMPAT_BRK is not set
CONFIG_PAGE_REPORTING=y
CONFIG_KSM=y
CONFIG_MEMORY_FAILURE=y
CONFIG_CMA=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_PACKET_DIAG=y
CONFIG_UNIX=y
CONFIG_UNIX_DIAG=y
CONFIG_NET_KEY=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_MROUTE=y
CONFIG_NET_FOU=y
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_INET_IPCOMP=y
CONFIG_INET_UDP_DIAG=y
CONFIG_INET_RAW_DIAG=y
# CONFIG_IPV6 is not set
CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
CONFIG_VLAN_8021Q=y
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_HTB=y
CONFIG_NET_SCH_HFSC=y
CONFIG_NET_SCH_PRIO=y
CONFIG_NET_SCH_MULTIQ=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_CBS=y
CONFIG_NET_SCH_ETF=y
CONFIG_NET_SCH_TAPRIO=y
CONFIG_NET_SCH_MQPRIO=y
CONFIG_NET_SCH_SKBPRIO=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_CLS_U32=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=y
CONFIG_NET_ACT_GACT=y
CONFIG_NET_ACT_SKBEDIT=y
CONFIG_DCB=y
CONFIG_NETLINK_DIAG=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_FW_LOADER_USER_HELPER=y
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
# CONFIG_DMIID is not set
CONFIG_EFI_CAPSULE_LOADER=y
CONFIG_EFI_DISABLE_RUNTIME=y
# CONFIG_ARM_SMCCC_SOC_ID is not set
CONFIG_MTD=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_CFI=y
CONFIG_MTD_CFI_ADV_OPTIONS=y
CONFIG_MTD_CFI_INTELEXT=y
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_CFI_STAA=y
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_PHYSMAP_OF=y
CONFIG_MTD_RAW_NAND=y
CONFIG_MTD_NAND_DENALI_DT=y
CONFIG_MTD_SPI_NAND=y
CONFIG_MTD_UBI=y
CONFIG_MTD_UBI_BLOCK=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=409600
CONFIG_EEPROM_AT24=y
CONFIG_HOBOT_VIO_N2D=m
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_SG=y
CONFIG_SCSI_SCAN_ASYNC=y
CONFIG_NETDEVICES=y
# CONFIG_NET_VENDOR_ALACRITECH is not set
# CONFIG_NET_VENDOR_AMAZON is not set
# CONFIG_NET_VENDOR_AMD is not set
# CONFIG_NET_VENDOR_AQUANTIA is not set
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_VENDOR_ASIX is not set
# CONFIG_NET_VENDOR_BROADCOM is not set
# CONFIG_NET_VENDOR_CADENCE is not set
# CONFIG_NET_VENDOR_CAVIUM is not set
# CONFIG_NET_VENDOR_CORTINA is not set
# CONFIG_NET_VENDOR_DAVICOM is not set
# CONFIG_NET_VENDOR_ENGLEDER is not set
# CONFIG_NET_VENDOR_EZCHIP is not set
# CONFIG_NET_VENDOR_FUNGIBLE is not set
# CONFIG_NET_VENDOR_GOOGLE is not set
# CONFIG_NET_VENDOR_HISILICON is not set
# CONFIG_NET_VENDOR_HUAWEI is not set
# CONFIG_NET_VENDOR_INTEL is not set
# CONFIG_NET_VENDOR_ADI is not set
# CONFIG_NET_VENDOR_LITEX is not set
# CONFIG_NET_VENDOR_MARVELL is not set
# CONFIG_NET_VENDOR_MELLANOX is not set
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
# CONFIG_NET_VENDOR_MICROSOFT is not set
# CONFIG_NET_VENDOR_NI is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
# CONFIG_NET_VENDOR_NETRONOME is not set
# CONFIG_NET_VENDOR_PENSANDO is not set
# CONFIG_NET_VENDOR_QUALCOMM is not set
# CONFIG_NET_VENDOR_RENESAS is not set
# CONFIG_NET_VENDOR_ROCKER is not set
# CONFIG_NET_VENDOR_SAMSUNG is not set
# CONFIG_NET_VENDOR_SEEQ is not set
# CONFIG_NET_VENDOR_SOLARFLARE is not set
# CONFIG_NET_VENDOR_SMSC is not set
# CONFIG_NET_VENDOR_SOCIONEXT is not set
CONFIG_STMMAC_ETH=y
CONFIG_STMMAC_SELFTESTS=y
CONFIG_DWMAC_DWC_QOS_ETH=y
# CONFIG_NET_VENDOR_SYNOPSYS is not set
# CONFIG_NET_VENDOR_VERTEXCOM is not set
# CONFIG_NET_VENDOR_VIA is not set
# CONFIG_NET_VENDOR_WANGXUN is not set
# CONFIG_NET_VENDOR_WIZNET is not set
# CONFIG_NET_VENDOR_XILINX is not set
CONFIG_X5_ETH=y
CONFIG_JPLUS_ETH=y
CONFIG_REALTEK_PHY=y
CONFIG_USB_NET_DRIVERS=m
CONFIG_KEYBOARD_GPIO=y
# CONFIG_INPUT_MOUSE is not set
# CONFIG_SERIO_SERPORT is not set
CONFIG_SERIO_AMBAKMI=y
CONFIG_VT_HW_CONSOLE_BINDING=y
CONFIG_LEGACY_PTY_COUNT=16
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=8
CONFIG_SERIAL_8250_RUNTIME_UARTS=8
CONFIG_SERIAL_8250_DW=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SERIAL_DEV_BUS=y
CONFIG_HW_RANDOM=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y
CONFIG_SPI=y
CONFIG_SPI_DESIGNWARE=y
CONFIG_SPI_DW_DMA=y
CONFIG_SPI_DW_MMIO=y
CONFIG_SPI_SPIDEV=m
CONFIG_SPI_SLAVE=y
CONFIG_PPS_CLIENT_HOBOT_PPS=y
CONFIG_PINCTRL=y
CONFIG_PINCTRL_HORIZON=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_DWAPB=y
CONFIG_POWER_RESET_SYSCON=y
CONFIG_SYSCON_REBOOT_MODE=y
CONFIG_SENSORS_MR75203=y
CONFIG_THERMAL=y
CONFIG_THERMAL_WRITABLE_TRIPS=y
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_CPU_THERMAL=y
CONFIG_DEVFREQ_THERMAL=y
CONFIG_WATCHDOG=y
CONFIG_DW_WATCHDOG=y
CONFIG_MFD_HI6421_PMIC=y
CONFIG_MFD_HPU3501=y
CONFIG_REGULATOR=y
CONFIG_REGULATOR_DEBUG=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_GPIO=y
CONFIG_REGULATOR_HPU3501=y
CONFIG_MEDIA_SUPPORT=y
# CONFIG_DVB_NET is not set
# CONFIG_DVB_DYNAMIC_MINORS is not set
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=m
# CONFIG_RADIO_ADAPTERS is not set
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_HOBOT_VIO=m
CONFIG_HOBOT_VIO_JPLUS=y
CONFIG_HOBOT_VIO_COMMON=m
CONFIG_HOBOT_VIN_NODE=m
CONFIG_HOBOT_VCON=m
CONFIG_HOBOT_CAMSYS=m
CONFIG_HOBOT_GDC_JPLUS=m
CONFIG_HOBOT_SENSOR=m
CONFIG_HOBOT_DESERIAL=m
CONFIG_HOBOT_LPWM=m
CONFIG_HOBOT_OSD=m
CONFIG_HOBOT_VSI_CAM=m
CONFIG_HOBOT_MIPI_CSI=y
CONFIG_HOBOT_CODEC_NODE=m
CONFIG_HOBOT_MIPI_CSI_DRV=m
CONFIG_HOBOT_MIPI_HOST_MAX_NUM=6
CONFIG_HOBOT_MIPI_HOST_SNRCLK=y
CONFIG_HOBOT_MIPI_DEV_MAX_NUM=2
CONFIG_HOBOT_MIPI_PHY=m
CONFIG_HOBOT_MIPI_DEBUG=m
CONFIG_VIDEO_VS_ISP_NAT=m
CONFIG_VIDEO_VS_VSE_NAT=m
CONFIG_VIDEO_VS_SIF_NAT=m
CONFIG_VIDEO_VS_CAM_PULSE=m
CONFIG_VIDEO_VS_ISP_V4L=m
CONFIG_VIDEO_VS_VSE_V4L=m
CONFIG_VIDEO_VS_SIF_V4L=m
CONFIG_VIDEO_VS_GDC_ARM_V4L=m
CONFIG_VIDEO_HOBOTC_JPU=m
CONFIG_VIDEO_HOBOTC_VPU=m
# CONFIG_CXD2880_SPI_DRV is not set
# CONFIG_MEDIA_TUNER_E4000 is not set
# CONFIG_MEDIA_TUNER_FC0011 is not set
# CONFIG_MEDIA_TUNER_FC0012 is not set
# CONFIG_MEDIA_TUNER_FC0013 is not set
# CONFIG_MEDIA_TUNER_FC2580 is not set
# CONFIG_MEDIA_TUNER_IT913X is not set
# CONFIG_MEDIA_TUNER_M88RS6000T is not set
# CONFIG_MEDIA_TUNER_MAX2165 is not set
# CONFIG_MEDIA_TUNER_MC44S803 is not set
# CONFIG_MEDIA_TUNER_MSI001 is not set
# CONFIG_MEDIA_TUNER_MT2060 is not set
# CONFIG_MEDIA_TUNER_MT2063 is not set
# CONFIG_MEDIA_TUNER_MT20XX is not set
# CONFIG_MEDIA_TUNER_MT2131 is not set
# CONFIG_MEDIA_TUNER_MT2266 is not set
# CONFIG_MEDIA_TUNER_MXL301RF is not set
# CONFIG_MEDIA_TUNER_MXL5005S is not set
# CONFIG_MEDIA_TUNER_MXL5007T is not set
# CONFIG_MEDIA_TUNER_QM1D1B0004 is not set
# CONFIG_MEDIA_TUNER_QM1D1C0042 is not set
# CONFIG_MEDIA_TUNER_QT1010 is not set
# CONFIG_MEDIA_TUNER_R820T is not set
# CONFIG_MEDIA_TUNER_SI2157 is not set
# CONFIG_MEDIA_TUNER_SIMPLE is not set
# CONFIG_MEDIA_TUNER_TDA18212 is not set
# CONFIG_MEDIA_TUNER_TDA18218 is not set
# CONFIG_MEDIA_TUNER_TDA18250 is not set
# CONFIG_MEDIA_TUNER_TDA18271 is not set
# CONFIG_MEDIA_TUNER_TDA827X is not set
# CONFIG_MEDIA_TUNER_TDA8290 is not set
# CONFIG_MEDIA_TUNER_TDA9887 is not set
# CONFIG_MEDIA_TUNER_TEA5761 is not set
# CONFIG_MEDIA_TUNER_TEA5767 is not set
# CONFIG_MEDIA_TUNER_TUA9001 is not set
# CONFIG_MEDIA_TUNER_XC2028 is not set
# CONFIG_MEDIA_TUNER_XC4000 is not set
# CONFIG_MEDIA_TUNER_XC5000 is not set
# CONFIG_DVB_M88DS3103 is not set
# CONFIG_DVB_MXL5XX is not set
# CONFIG_DVB_STB0899 is not set
# CONFIG_DVB_STB6100 is not set
# CONFIG_DVB_STV090x is not set
# CONFIG_DVB_STV0910 is not set
# CONFIG_DVB_STV6110x is not set
# CONFIG_DVB_STV6111 is not set
# CONFIG_DVB_DRXK is not set
# CONFIG_DVB_MN88472 is not set
# CONFIG_DVB_MN88473 is not set
# CONFIG_DVB_SI2165 is not set
# CONFIG_DVB_TDA18271C2DD is not set
# CONFIG_DVB_CX24110 is not set
# CONFIG_DVB_CX24116 is not set
# CONFIG_DVB_CX24117 is not set
# CONFIG_DVB_CX24120 is not set
# CONFIG_DVB_CX24123 is not set
# CONFIG_DVB_DS3000 is not set
# CONFIG_DVB_MB86A16 is not set
# CONFIG_DVB_MT312 is not set
# CONFIG_DVB_S5H1420 is not set
# CONFIG_DVB_SI21XX is not set
# CONFIG_DVB_STB6000 is not set
# CONFIG_DVB_STV0288 is not set
# CONFIG_DVB_STV0299 is not set
# CONFIG_DVB_STV0900 is not set
# CONFIG_DVB_STV6110 is not set
# CONFIG_DVB_TDA10071 is not set
# CONFIG_DVB_TDA10086 is not set
# CONFIG_DVB_TDA8083 is not set
# CONFIG_DVB_TDA8261 is not set
# CONFIG_DVB_TDA826X is not set
# CONFIG_DVB_TS2020 is not set
# CONFIG_DVB_TUA6100 is not set
# CONFIG_DVB_TUNER_CX24113 is not set
# CONFIG_DVB_TUNER_ITD1000 is not set
# CONFIG_DVB_VES1X93 is not set
# CONFIG_DVB_ZL10036 is not set
# CONFIG_DVB_ZL10039 is not set
# CONFIG_DVB_AF9013 is not set
# CONFIG_DVB_CX22700 is not set
# CONFIG_DVB_CX22702 is not set
# CONFIG_DVB_CXD2820R is not set
# CONFIG_DVB_CXD2841ER is not set
# CONFIG_DVB_DIB3000MB is not set
# CONFIG_DVB_DIB3000MC is not set
# CONFIG_DVB_DIB7000M is not set
# CONFIG_DVB_DIB7000P is not set
# CONFIG_DVB_DIB9000 is not set
# CONFIG_DVB_DRXD is not set
# CONFIG_DVB_EC100 is not set
# CONFIG_DVB_L64781 is not set
# CONFIG_DVB_MT352 is not set
# CONFIG_DVB_NXT6000 is not set
# CONFIG_DVB_RTL2830 is not set
# CONFIG_DVB_RTL2832 is not set
# CONFIG_DVB_RTL2832_SDR is not set
# CONFIG_DVB_S5H1432 is not set
# CONFIG_DVB_SI2168 is not set
# CONFIG_DVB_SP887X is not set
# CONFIG_DVB_STV0367 is not set
# CONFIG_DVB_TDA10048 is not set
# CONFIG_DVB_TDA1004X is not set
# CONFIG_DVB_ZD1301_DEMOD is not set
# CONFIG_DVB_ZL10353 is not set
# CONFIG_DVB_CXD2880 is not set
# CONFIG_DVB_STV0297 is not set
# CONFIG_DVB_TDA10021 is not set
# CONFIG_DVB_TDA10023 is not set
# CONFIG_DVB_VES1820 is not set
# CONFIG_DVB_AU8522_DTV is not set
# CONFIG_DVB_AU8522_V4L is not set
# CONFIG_DVB_BCM3510 is not set
# CONFIG_DVB_LG2160 is not set
# CONFIG_DVB_LGDT3305 is not set
# CONFIG_DVB_LGDT3306A is not set
# CONFIG_DVB_LGDT330X is not set
# CONFIG_DVB_MXL692 is not set
# CONFIG_DVB_NXT200X is not set
# CONFIG_DVB_OR51132 is not set
# CONFIG_DVB_OR51211 is not set
# CONFIG_DVB_S5H1409 is not set
# CONFIG_DVB_S5H1411 is not set
# CONFIG_DVB_DIB8000 is not set
# CONFIG_DVB_MB86A20S is not set
# CONFIG_DVB_S921 is not set
# CONFIG_DVB_MN88443X is not set
# CONFIG_DVB_TC90522 is not set
# CONFIG_DVB_PLL is not set
# CONFIG_DVB_TUNER_DIB0070 is not set
# CONFIG_DVB_TUNER_DIB0090 is not set
# CONFIG_DVB_A8293 is not set
# CONFIG_DVB_AF9033 is not set
# CONFIG_DVB_ASCOT2E is not set
# CONFIG_DVB_ATBM8830 is not set
# CONFIG_DVB_HELENE is not set
# CONFIG_DVB_HORUS3A is not set
# CONFIG_DVB_ISL6405 is not set
# CONFIG_DVB_ISL6421 is not set
# CONFIG_DVB_ISL6423 is not set
# CONFIG_DVB_IX2505V is not set
# CONFIG_DVB_LGS8GL5 is not set
# CONFIG_DVB_LGS8GXX is not set
# CONFIG_DVB_LNBH25 is not set
# CONFIG_DVB_LNBH29 is not set
# CONFIG_DVB_LNBP21 is not set
# CONFIG_DVB_LNBP22 is not set
# CONFIG_DVB_M88RS2000 is not set
# CONFIG_DVB_TDA665x is not set
# CONFIG_DVB_DRX39XYJ is not set
# CONFIG_DVB_CXD2099 is not set
# CONFIG_DVB_SP2 is not set
CONFIG_DRM=y
CONFIG_DRM_PANEL_ATK_MD0550=y
CONFIG_DRM_SII902X=y
CONFIG_VERISILICON_X5_SYSCON_BRIDGE=m
CONFIG_DRM_VERISILICON=m
CONFIG_VERISILICON_DC8000_NANO=y
CONFIG_VERISILICON_BT1120=y
CONFIG_VERISILICON_DW_MIPI_DSI=y
CONFIG_VERISILICON_WRITEBACK_SIF=y
CONFIG_VERISILICON_GEM_ION=y
CONFIG_VERISILICON_GC_PROC_SUPPORT=y
CONFIG_FB=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_PWM=y
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_SOC=y
CONFIG_SND_DESIGNWARE_I2S=m
CONFIG_SND_DESIGNWARE_PCM=y
CONFIG_SND_ARCHBAND_PDM=y
CONFIG_SND_VIRT_CODEC=y
CONFIG_SND_SOC_WM8962=y
CONFIG_SND_DUPLEX_CARD=m
CONFIG_SND_HOBOT_SOUND_MACHINE=m
CONFIG_SND_SIMPLE_CARD=m
CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_STORAGE=y
CONFIG_USB_UAS=y
CONFIG_USB_DWC3=y
CONFIG_USB_GADGET=y
CONFIG_USB_CONFIGFS=m
CONFIG_USB_CONFIGFS_SERIAL=y
CONFIG_USB_CONFIGFS_ACM=y
CONFIG_USB_CONFIGFS_OBEX=y
CONFIG_USB_CONFIGFS_NCM=y
CONFIG_USB_CONFIGFS_ECM=y
CONFIG_USB_CONFIGFS_ECM_SUBSET=y
CONFIG_USB_CONFIGFS_RNDIS=y
CONFIG_USB_CONFIGFS_EEM=y
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
CONFIG_USB_CONFIGFS_F_LB_SS=y
CONFIG_USB_CONFIGFS_F_FS=y
CONFIG_USB_CONFIGFS_F_HID=y
CONFIG_USB_CONFIGFS_F_UVC=y
CONFIG_USB_ZERO=m
CONFIG_USB_ETH=m
CONFIG_USB_FUNCTIONFS=m
CONFIG_USB_FUNCTIONFS_ETH=y
CONFIG_USB_FUNCTIONFS_RNDIS=y
CONFIG_USB_MASS_STORAGE=m
CONFIG_USB_G_SERIAL=m
CONFIG_USB_G_MULTI=m
CONFIG_USB_G_MULTI_CDC=y
CONFIG_USB_G_WEBCAM=m
CONFIG_USB_RAW_GADGET=m
CONFIG_MMC=y
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_OF_DWCMSHC=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_DEBUG=y
CONFIG_RTC_DRV_DWAPB=y
CONFIG_DMADEVICES=y
CONFIG_DW_AXI_DMAC=y
CONFIG_UIO=y
# CONFIG_VIRTIO_MENU is not set
# CONFIG_VHOST_MENU is not set
CONFIG_STAGING=y
CONFIG_ANDROID_LOGGER=y
CONFIG_BOOTLOADER_LOG=y
CONFIG_ION=y
CONFIG_ION_SYSTEM_HEAP=y
CONFIG_ION_CARVEOUT_HEAP=y
CONFIG_ION_CHUNK_HEAP=y
CONFIG_ION_CMA_HEAP=y
CONFIG_ION_HOBOT=y
# CONFIG_FSL_ERRATUM_A008585 is not set
# CONFIG_HISILICON_ERRATUM_161010101 is not set
# CONFIG_ARM64_ERRATUM_858921 is not set
CONFIG_MAILBOX=y
CONFIG_DROBOT_LITE_MMU=y
CONFIG_REMOTEPROC=y
CONFIG_HOBOT_BPU=y
CONFIG_BPU=m
CONFIG_BPU_CORE=m
CONFIG_PM_DEVFREQ=y
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
CONFIG_DEVFREQ_GOV_POWERSAVE=y
CONFIG_ARM_X5_DDRC_DEVFREQ=y
CONFIG_PM_DEVFREQ_EVENT=y
CONFIG_DEVFREQ_EVENT_X5_DFI=y
CONFIG_EXTCON=y
CONFIG_EXTCON_USB_GPIO=y
CONFIG_IIO=y
CONFIG_IIO_SW_TRIGGER=y
CONFIG_GUC_ADC=y
CONFIG_PWM=y
CONFIG_PWM_DROBOT=y
CONFIG_PHY_SNPS_MIPI_DPHY=y
CONFIG_ARM_DSU_PMU=y
CONFIG_NVMEM_HORIZON_EFUSE=y
CONFIG_TEE=y
CONFIG_OPTEE=y
CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_FANOTIFY=y
CONFIG_VFAT_FS=y
CONFIG_EXFAT_FS=y
CONFIG_TMPFS=y
CONFIG_HUGETLBFS=y
CONFIG_EFIVAR_FS=y
CONFIG_UBIFS_FS=y
CONFIG_PSTORE=y
CONFIG_PSTORE_CONSOLE=y
CONFIG_PSTORE_PMSG=y
CONFIG_PSTORE_RAM=y
CONFIG_SCHED_LOGGER=y
CONFIG_NFS_FS=y
CONFIG_SUNRPC_DEBUG=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y
CONFIG_CRYPTO_USER=y
CONFIG_CRYPTO_DH=y
CONFIG_CRYPTO_ECDH=y
CONFIG_CRYPTO_DES=y
CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_DRBG_HASH=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_USER_API_RNG=y
CONFIG_CRYPTO_USER_API_AEAD=y
CONFIG_CRYPTO_DEV_TE=y
CONFIG_CRC_ITU_T=y
CONFIG_CRC7=y
CONFIG_LIBCRC32C=m
CONFIG_XZ_DEC=y
CONFIG_DMA_CMA=y
CONFIG_CMA_SIZE_MBYTES=32
CONFIG_PRINTK_TIME=y
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DEBUG_INFO_DWARF4=y
CONFIG_GDB_SCRIPTS=y
CONFIG_VMLINUX_MAP=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_PANIC_ON_OOPS=y
CONFIG_PANIC_TIMEOUT=5
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
# CONFIG_SCHED_DEBUG is not set
# CONFIG_FTRACE is not set
# CONFIG_STRICT_DEVMEM is not set
CONFIG_CORESIGHT=y
CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
CONFIG_CORESIGHT_CATU=y
CONFIG_CORESIGHT_SINK_TPIU=y
CONFIG_CORESIGHT_SINK_ETBV10=y
CONFIG_CORESIGHT_SOURCE_ETM4X=y
CONFIG_CORESIGHT_CTI=y
CONFIG_CORESIGHT_CTI_INTEGRATION_REGS=y
CONFIG_MEMTEST=y
将kernel/arch/arm64/configs/hobot_x5_soc_defconfig 文件
编译与测试
编译新镜像
1)编译
按照
cd system/ubuntu/source
./build.sh clean
./build.sh menuconfig x5_system_defconfig
./build.sh build x5_system_defconfig 0.0.1
有关 buildroot 编译
生成system/buildroot/source/framework/output/images 目录
$ cd system/buildroot/source/framework/output/images
$ ls
deb_make dr-system_0.0.1~gcc11.3.1_all.deb rootfs.tar rtl_bt rtlwifi
2)复制
需要system/buildroot/prebuilt 目录system/buildroot/prebuilt/series 文件
# system/buildroot/prebuilt/series
dr-system_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 重新
$ ./bd.sh distclean
$ ./bd.sh
You're building on #236-Ubuntu SMP Fri Apr 11 19:53:21 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_release_config.mk
6. horizon/x5/board_x5_soc_debug_config.mk
7. horizon/x5/board_x5_soc_release_config.mk
Which would you like? [0] : 3
测试新镜像
查看
$ cd system/buildroot/source/framework/output/images
$ ls -lh dr-system_0.0.1~gcc11.3.1_all.deb
-rw-r--r-- 1 sxq sxq 7.0M Jan 8 20:14 dr-system_0.0.1~gcc11.3.1_all.deb
可以
查看
$ cd out/build/kernel
$ ls -lh vmlinux
-rwxr-xr-x 1 sxq sxq 252M Jan 9 11:23 vmlinux
可以
查看
$ cd out/deploy/boot/modules/lib/modules
$ du -h --max-depth=1
5.3M ./6.1.83-DR-PL5.1_V1.0.16
5.3M .
可以
待
注意 烧录
关于
待
SNOTICE: Welcome to Horizon X5 ASIC BOOTROM - V4.1
NOTICE: OTP config:
NOTICE: otp exist: true
NOTICE: test region size: 304
NOTICE: secure region size: 120
NOTICE: none secure region size: 56
NOTICE: Enable MMU
NOTICE: Booting Trusted Firmware
NOTICE: BL1: v2.8(release):
NOTICE: BL1: Built : 17:42:12, Oct 19 2023
NOTICE: Enter SPI NAND-FLASH Mode......
NOTICE: Nand PAGE_SIZE_4K
NOTICE: Nand is_dummy = true
NOTICE: Nand CLK_12M
NOTICE: SPI baudrate is set to 12000000Hz
NOTICE: Nand reset
NOTICE: reg_status should = 0x18
NOTICE: SPI Nand flash buffer mode set PASS
NOTICE: Manufacturer ID 0x2c Device ID 0x352c
NOTICE: Enter media_source_select process(5).
NOTICE: SPI Nand flash set quad PASS
上述 Uboot 日志
内核
root@buildroot:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00040000 "mbr"
mtd1: 00240000 00040000 "miniboot"
mtd2: 00240000 00040000 "miniboot_bak1"
mtd3: 00040000 00040000 "misc"
mtd4: 00200000 00040000 "uboot"
mtd5: 00180000 00040000 "ubootenv"
mtd6: 02000000 00040000 "boot"
mtd7: 09600000 00040000 "system"
mtd8: 06400000 00040000 "hbre"
mtd9: 0dd80000 00040000 "userdata"
日志
dev: 设备
的 名称 标识符。 size: 该
分区 的 大小,以 字节 为 单位。 erasesize: 每次
擦除 操作 的 大小,以 字节 为 单位。这个 大小 通常 决定 了 闪存 擦除 的 最小 单位。 name: 分区
的 名称,通常 是 为 特定 用途 或 功能 分配 的。
各个
| dev | size | erasesize | name | 说明 |
|---|---|---|---|---|
| mtd0 | 0x00040000 (256 KB) | 0x00040000 (256 KB) | "mbr" | 主 |
| mtd1 | 0x00240000 (2.25 MB) | 0x00040000 (256 KB) | "miniboot" | 小型 |
| mtd2 | 0x00240000 (2.25 MB) | 0x00040000 (256 KB) | "miniboot_bak1" | miniboot 的 |
| mtd3 | 0x00040000 (256 KB) | 0x00040000 (256 KB) | "misc" | 设备 |
| mtd4 | 0x00200000 (2 MB) | 0x00040000 (256 KB) | "uboot" | uBoot,常见 |
| mtd5 | 0x00180000 (1.5 MB) | 0x00040000 (256 KB) | "ubootenv" | 存储 uBoot 环境变量,如 |
| mtd6 | 0x02000000 (32 MB) | 0x00040000 (256 KB) | "boot" | 存储 |
| mtd7 | 0x09600000 (150 MB) | 0x00040000 (256 KB) | "system" | 存储系统 |
| mtd8 | 0x06400000 (100 MB) | 0x00040000 (256 KB) | "hbre" | 自定义 |
| mtd9 | 0x0dd80000 (223 MB) | 0x00040000 (256 KB) | "userdata" | 存储用户 |
日志device/horizon/x5/board_cfg/soc/x5-soc-debug-nand-gpt.json 中
{
"mbr": {
"size": "256k",
"medium": "nand"
},
"miniboot": "sub_config/miniboot_nand.json",
"misc": {
"size": "256k",
"medium": "nand"
},
"uboot": {
"part_type": "GOLDEN",
"size": "2m",
"medium": "nand"
},
"ubootenv": {
"size": "1536k",
"medium": "nand"
},
"boot": {
"part_type": "GOLDEN",
"size": "32m",
"medium": "nand"
},
"system": {
"fs_type": "ubifs",
"part_type": "GOLDEN",
"size": "150m",
"medium": "nand"
},
"hbre": {
"fs_type": "ubifs",
"part_type": "GOLDEN",
"size": "100m",
"medium": "nand"
},
"userdata": {
"fs_type": "ubifs",
"part_type": "GOLDEN",
"size": "32m",
"medium": "nand"
}
}
可以size 设定值,以
4.4.4.6. 常见问题
在
功能丧失或不可用
问题
解决方案:
需求
驱动 :在裁剪 裁剪 之前,首先 明确 系统 必须 支持 的 功能,并 确保 这些 功能 在 裁剪 过程 中 不 被 移除。 分阶段
裁剪 :逐步裁剪,避免 一次性 删除 过 多功能,每个 阶段 后 进行 系统验证,确保 所 需 功能 仍 可 正常 使用。
举例:
如果
系统不稳定或崩溃
问题
解决方案:
核心
功能 :裁剪保护 时要 确保 核心 功能 如 内存 管理、硬件 抽象 层( HAL)和 中断 管理 模块 不 被 移除。 充分
测试 :每次裁剪 后 进行 全面 测试,尤其 是 在 硬件 和 网络 模块 方面,确保 系统 在 各种 条件 下 稳定 运行。
举例:
在
依赖问题
问题
解决方案:
最小化
依赖 :裁剪时,首先 识别 哪些 库 和 工具 是 必须 的,尽量 去除 不必要 的 依赖 项。使用 静态 链接 而 非 动态 链接 有时 可以 减少 依赖 问题。 使用
轻量级 :例如,使用 BusyBox 替代替代品 多个 常规 工具集,减少 不必要 的 库 和 工具 的 依赖。
举例:
裁剪
性能下降
问题
解决方案:
功能
裁剪 :裁剪与 性能 优化 平衡 时 不仅 要 考虑 功能 的 移除,还要 关注 性能 优化。例如,保留 对 硬件加速 支持 的 驱动,使用 高效 算法 和 数据结构。 精简
内核 :精简配置 内核 时,应 根据 目标 硬件 去除 不必要 的 驱动 和 模块,确保 内核 占用 更 少 的 资源。
举例:
裁剪
兼容性问题
问题
解决方案:
保持
向 :裁剪后 兼容性 时要 确保 不 影响 系统 的 基本 硬件 支持 和 接口,特别 是 在 内核 和 引导 程序 方面。 文档
化 :记录裁剪 过程 每 一步 的 裁剪 决策 和 变更,以便 日后 回滚 或 调整,保证系统 与 硬件 的 兼容性。
举例:
如果
4.4.4.7. 参考文献
The U-Boot Documentation
Kernel Size Tuning Guide
Buildroot User Manua