问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 14 人浏览分享

开启左侧

【米联客龙芯 2K301 开发实战】自动化构建脚本体系全解析

[复制链接]
14 0
经验分享
经验分享: 06-龙芯 » X
前言
在国产嵌入式开发中,龙芯 2K301 作为 LoongArch 架构的工业级主控,广泛应用于工控网关、人机交互、智能采集等场景。但传统开发流程中,交叉工具链配置、内核编译、Bootloader 构建、根文件系统烧写等环节步骤繁琐,手动操作易出错,且新人上手门槛高。
米联客官方提供的uisrc-lab-loongarch脚本套件,将龙芯 2K301 全链路开发流程进行了自动化链路开发流程进行了自动化封装,从环境初始化到最终镜像部署全部脚本化,极大提升了开发效率。本文将完整拆解这套脚本的架构设计、核心功能与使用方法,帮助开发者快速掌握龙芯平台的标准化开发流程。
一、脚本工程整体架构1.1 工程目录结构
整套脚本位于工程根目录的scripts文件夹下,采用分层模块化设计,目录结构如下:
plaintext
uisrc-lab-loongarch/
├── boards/          # 板级镜像输出目录
├── packages/        # 软件包与下载缓存
├── sources/         # 源码目录(内核、PMON等)
└── scripts/         # 核心脚本目录
    ├── common.sh                 # 公共工具函数库
    ├── ls2k301-mlka-env.sh       # 全局环境配置脚本
    ├── kernel/                   # 内核编译脚本集
    │   ├── make_kernel.sh
    │   ├── make_kernel_defconfig.sh
    │   └── save_kernel_defconfig.sh
    ├── pmon/                     # PMON引导编译脚本
    │   └── make_pmon.sh
    └── rootfs/                   # 根文件系统分区与部署脚本
        ├── make_parted.sh
        └── deploy_image.sh
1.2 设计思路
这套脚本遵循「环境统一、流程标准化、错误前置检查」的设计原则:
1. 统一环境变量:所有脚本共享同一份环境配置,避免路径、工具链参数不一致
2. 依赖自动安装:编译所需的系统依赖自动检测并安装,无需手动处理
3. 异常提前拦截:执行核心操作前先检查源码、工具、设备是否存在,报错即终止
4. 彩色日志输出INFO/WARN/ERROR 分级日志,问题定位更直观
二、开发环境一键配置脚本详解2.1 核心脚本:ls2k301-mlka-env.sh
这是整套脚本体系的入口,负责初始化全部开发环境变量、配置交叉编译工具链、创建工作目录,是所有编译脚本执行的前置条件。
核心功能
1. 路径自动识别:自动获取脚本自身路径,推导工程顶层目录,支持任意路径执行
2. sudo 权限适配:自动判断当前用户是否为 root,动态适配 sudo 命令
3. 交叉工具链配置:配置 LoongArch 架构 gcc 工具链路径与前缀
4. 全局环境导出:定义源码、板级文件、工具等所有路径变量
5. PATH 环境扩展:将脚本目录加入系统 PATH,可全局调用子脚本
2.2 关键代码解析1)脚本路径自识别
# 获取脚本名与绝对路径 LG_SCRIPT_NAME="$(basename ${BASH_SOURCE[0]})" LG_SCRIPT_DIR="$(cd "$(dirname ${BASH_SOURCE[0]})" && pwd)"
通过BASH_SOURCE内置变量实现路径自定位,无论脚本放在哪里、从哪里执行,都能正确找到工程根目录,是工程化脚本的标准写法。
(2)执行方式校验
if [ ${BASH_SOURCE[0]} == "$0" ]; then
  error_exit "Please execute the script, such as: source ${LG_SCRIPT_NAME}"
fi
关键说明:该脚本必须通过source命令执行,不能直接bash运行。因为直接运行会启动子 shell,环境变量无法传递到当前终端,后续编译命令会找不到交叉编译器。
3)交叉编译环境配置
# 架构指定
export ARCH=loongarch
# 工具链路径加入PATH
export PATH=/opt/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.5/bin:$PATH
# 交叉编译前缀
export CROSS_COMPILE=loongarch64-linux-gnu-
配置完成后,gcc、ld等工具会自动指向 loongarch64 版本,内核、应用编译时无需额外指定参数。
4)工具链存在性校验
if which loongarch64-linux-gnu-gcc > /dev/null 2>&1 ; then
   export LG_TOOLCHAIN_PREFIX=loongarch64-linux-gnu
else
   echo_error "Could not find the cross compiler" && return 1
fi
执行脚本时会自动校验交叉编译器是否可用,找不到直接报错退出,避免后续编译出现莫名其妙的错误。
2.3 正确使用方式
# 进入脚本目录
cd uisrc-lab-loongarch/scripts
# 加载环境配置(必须source执行)
source ls2k301-mlka-env.sh
执行成功后,当前终端就拥有了完整的龙芯 2K301 交叉编译环境。
2.4 公共函数库:common.sh
common.sh是全局工具函数库,被环境脚本自动引入,提供统一的日志输出能力:
· echo_info/echo_warn/echo_error:带前缀的分级日志,分别为绿 / / 红三色
· print_info/print_warn/print_error:纯消息彩色输出,无前缀
· error_exit:打印错误日志并直接退出脚本,用于致命错误处理
统一的日志规范让所有脚本输出风格一致,排查问题时可以快速定位错误等级。
三、内核自动化编译脚本套件
scripts/kernel/目录下包含 3 个脚本,覆盖内核配置、编译、保存全流程。
3.1 内核编译主脚本:make_kernel.sh功能
一键完成内核默认配置加载、内核编译、镜像拷贝输出,是日常开发最常用的脚本。
执行流程
1. 环境校验:检查LG_CONF_DONE变量,确保已加载环境脚本
2. 源码检查:校验内核源码目录是否存在,为空直接报错退出
3. 依赖安装:自动安装libelf-dev等内核编译依赖
4. 加载默认配置:执行make ls2k_mlka_defconfig加载米联客板级配置
5. 内核编译:make vmlinuz -j$(nproc)自动调用全部 CPU 核心并行编译
6. 产物输出:将编译生成的vmlinuz内核镜像拷贝到boards/ls2k301/目录
使用命令
# 确保已加载环境脚本后执行 make_kernel.sh
全程无需人工干预,编译完成直接得到可烧写的内核镜像。
3.2 内核配置脚本:make_kernel_defconfig.sh
当需要裁剪内核、增减驱动时,使用该脚本打开图形化配置菜单:
make_kernel_defconfig.sh
执行后会进入内核menuconfig界面,可按需配置驱动、文件系统、网络协议等功能,保存退出即可。
3.3 配置保存脚本:save_kernel_defconfig.sh
修改完内核配置后,执行该脚本可将当前配置保存为默认 defconfig:
save_kernel_defconfig.sh
执行逻辑
1. 在内核源码目录执行make savedefconfig生成精简配置文件
2. 将生成的defconfig拷贝到内核源码的arch/loongarch/configs/目录
3. 后续编译时直接加载该配置,实现自定义配置的持久化
最佳实践:每次修改内核配置后,务必执行保存脚本,否则清理编译缓存后配置会丢失。
四、PMON 引导程序编译脚本4.1 PMON 简介
PMON 是龙芯平台的官方 Bootloader(引导程序),相当于 ARM 平台的 U-Boot,负责硬件初始化、加载内核、启动系统,同时提供调试、升级等交互功能。
4.2 编译脚本:make_pmon.sh
位于scripts/pmon/目录,一键完成 PMON 从工具编译到最终镜像生成的全流程。
完整执行步骤
1. 依赖检查与安装:检测makedepend工具,缺失则自动安装xutils-dev
2. 编译 pmoncfg 工具:进入 PMON 源码的 tools 目录,编译配置工具 pmoncfg 并安装到系统
3. 编译 zloader:进入 zloader 目录,执行make ls2k300加载板级配置
4. 编译 ROM 镜像:执行make cfg all tgt=rom生成可烧写的 PMON 二进制
5. 生成设备树镜像:执行make dtb集成设备树,生成gzrom-dtb.bin
6. 产物输出:将最终镜像拷贝到boards/ls2k301/目录
输出产物说明
文件名
作用
gzrom.bin
基础 PMON 引导镜像
gzrom-dtb.bin
集成设备树的 PMON 镜像,推荐使用
五、根文件系统分区与部署脚本
scripts/rootfs/目录提供磁盘分区格式化和系统镜像部署能力,用于制作 SD 卡或 eMMC 启动卡。
5.1 磁盘分区脚本:make_parted.sh功能
自动扫描物理磁盘,对目标存储设备进行分区和格式化,生成标准的启动分区方案。
分区方案
· 分区 1ext4 格式根文件系统分区,从 200MiB 起始到磁盘末尾,卷标为root
· 采用 MBRmsdos)分区表,兼容性更强,适配龙芯 PMON 引导
核心安全设计
1. 虚拟设备过滤:自动过滤 loopram 等虚拟设备,只显示真实物理磁盘
2. 用户二次确认:执行格式化前明确提示数据将被清空,需用户确认后才继续
3. 自动卸载分区:操作前自动卸载磁盘上所有已挂载分区,避免格式化失败
4. 设备有效性校验:检查输入的设备是否为块设备,防止无效参数导致错误
使用方法
# 执行分区脚本
make_parted.sh
# 脚本会列出所有可用磁盘,输入目标磁盘名(如sdb),确认后自动完成分区格式化
⚠️ 高危操作提示:务必确认目标磁盘正确,切勿选择系统盘,否则会导致主机数据全部丢失。
5.2 镜像部署脚本:deploy_image.sh功能
将编译好的内核、PMON、根文件系统等文件部署到已分区的存储设备中,制作可启动卡。
部署流程
1. 扫描并列出物理磁盘,用户输入目标设备
2. 自动卸载磁盘所有已挂载分区,避免冲突
3. 挂载 root 分区,拷贝以下核心文件:
1. vmlinuz:内核镜像
2. gzrom-dtb.binPMON 引导镜像
3. boot.cfg:启动配置文件
4. update.shupdate.cpio.gz:系统升级相关文件
4. 执行sync命令强制写入磁盘,确保数据完整
5. 自动卸载分区,完成部署
安全机制
脚本通过trap命令注册了退出钩子,无论脚本正常结束还是异常中断,都会自动卸载挂载点并清理临时目录,避免挂载残留。
六、完整开发流程实操演示
从空环境到生成可启动镜像,完整执行步骤如下:
步骤 1:安装交叉编译工具链
Loongson 官方交叉工具链解压到/opt/目录,确保路径与环境脚本中一致。
步骤 2:加载全局环境
cd uisrc-lab-loongarch/scripts
source ls2k301-mlka-env.sh
步骤 3:编译 PMON 引导程序
make_pmon.sh
编译完成后,在boards/ls2k301/目录下得到 PMON 镜像。
步骤 4:编译 Linux 内核
# 如需修改配置,先执行 make_kernel_defconfig.sh
make_kernel.sh
编译完成得到vmlinuz内核镜像。
步骤 5:制作启动 SD 卡
1. SD 卡插入电脑,确认设备名(如 /dev/sdb
2. 执行分区格式化:
make_parted.sh
3. 部署系统镜像:
deploy_image.sh
4. SD 卡插入龙芯 2K301 开发板,拨码设置为 SD 卡启动,上电即可运行系统。
七、常见问题与避坑指南1. 执行脚本提示找不到交叉编译器
· 检查工具链是否正确安装在/opt/目录下
· 确认环境脚本是通过source执行,而非直接 bash 运行
· 可执行loongarch64-linux-gnu-gcc -v验证工具链是否可用
2. 内核编译报错缺少依赖
脚本已内置libelf-dev自动安装,若仍报错,可手动安装完整编译依赖:
sudo apt install build-essential bison flex libssl-dev libelf-dev bc
3. 分区脚本提示 "not a valid block device"
· 确认输入的磁盘名正确,只需输入sdb,不需要加/dev/前缀
· 检查 SD 卡是否正常识别,可通过lsblk命令手动查看设备列表
4. PMON 编译提示 makedepend 命令不存在
脚本会自动安装xutils-dev包,若安装失败可手动执行:
sudo apt install xutils-dev
总结
米联客这套龙芯 2K301 自动化脚本体系,将原本零散、易出错的嵌入式开发流程标准化、一键化,既降低了新人的上手门槛,也提升了量产开发的效率和一致性。掌握这套脚本的使用和原理后,开发者可以把更多精力放在业务功能开发上,而非重复的环境搭建和编译操作。
后续还可以基于这套脚本框架扩展自定义功能,比如添加应用程序交叉编译脚本、OTA 升级包生成脚本等,打造属于自己的龙芯平台自动化开发工具链。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

10

粉丝

168

主题
精彩推荐
热门资讯
    网友晒图
      图文推荐
        
        • 微信公众平台

        • 扫描访问手机版