1. Petalinux安装与FMQL Linux SDK使用指南
作为一名嵌入式Linux开发工程师,我最近在基于FMQL100T平台进行项目开发时,完整走通了从Petalinux环境搭建到最终系统烧录的全流程。这个过程中踩了不少坑,也积累了一些实用经验,今天就来详细分享一下Petalinux 2018.3在Ubuntu下的安装过程,以及FMQL官方SDK的使用方法。
1.1 环境准备要点
在开始安装Petalinux之前,有几个关键的系统配置需要特别注意:
Shell环境调整
Petalinux工具链依赖bash作为默认shell,而Ubuntu系统默认使用dash。我们需要执行以下命令进行修改:
bash复制sudo su
rm /bin/sh
ln -s /bin/bash /bin/sh
ls -al /bin/sh # 验证链接是否建立成功
注意:这个修改会影响系统级脚本的执行环境,建议在完成Petalinux相关工作后恢复原设置,避免影响其他系统功能。
依赖库安装
Petalinux编译需要大量基础库支持,建议一次性安装完整:
bash复制sudo apt-get update
sudo apt install -y build-essential vim tofrodos iproute2 gawk gcc git make net-tools zlib1g-dev libssl-dev flex bison libselinux1 libncurses5-dev tftpd lib32z1 lib32ncurses5 libbz2-1.0:i386 lib32stdc++6 xvfb chrpath socat autoconf libtool texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev zlib1g:i386
这里特别说明几个关键依赖的作用:
lib32stdc++6:32位标准库支持xvfb:虚拟帧缓冲,用于图形界面相关测试chrpath:修改二进制文件中的rpath路径socat:串口调试工具
1.2 Petalinux安装详解
1.2.1 安装目录准备
建议将Petalinux安装在/opt目录下,首先设置权限:
bash复制sudo chmod 777 /opt/
1.2.2 安装执行
为安装包添加执行权限并开始安装:
bash复制chmod +x petalinux-v2018.3-final-installer.run
./petalinux-v2018.3-final-installer.run /opt/petalinux
常见问题处理:
- 权限不足错误:
bash复制sudo chown -R $USER:$USER petalinux/
- 安装过程中遇到license确认时,按Q退出阅读,然后输入Y确认
1.2.3 额外工具安装
完成Petalinux安装后,还需要补充两个关键工具:
bash复制sudo apt install device-tree-compiler u-boot-tools
1.3 FMQL Linux SDK使用全流程
1.3.1 设备树编译
- 从Procise工程导出DeviceTree文件
- 在SDK目录下执行环境配置:
bash复制source env_fmqlmp.sh
- 编译设备树:
bash复制./build.sh --hw /home/{user_name}/Downloads/fmql100tai/DeviceTree/ --nofpga dtb
重要提示:如果设计中没有使用PL部分,必须添加
--nofpga参数,否则会导致编译错误。
1.3.2 BL-31(ATF)编译
ARM Trusted Firmware是Armv8架构的安全基础固件,编译步骤如下:
bash复制source env_fmqlmp.sh # 每个新终端只需执行一次
./build.sh atf
编译完成后在images目录下生成bl31.elf文件。
1.3.3 U-Boot编译
FMQL提供的定制版U-Boot位于u-boot-2020.07-fmsh目录,提供两种编译方式:
手动编译:
bash复制make fmqlmp_common_defconfig
make EXT_DTB=../images/system-top.dtb -j4
脚本编译:
bash复制./build.sh u-boot
编译产物包括:
- u-boot:ELF格式可执行文件
- u-boot.bin:二进制镜像
- u-boot.srec:Motorola S-record格式文件
1.3.4 FSBL生成
在Procise工程中通过IAR编译生成:
- 在Procise中选择Project->Launch IAR
- 检查ps_init.c中的配置
- 编译后在
SDK/system_platform/FSBL/Debug/Exe目录生成FSBL.out
1.3.5 BOOT.bin制作
BOOT.bin是启动镜像,包含四个关键组件:
- FSBL.out - 第一级启动加载器
- user.bit - PL端比特流(可选)
- bl31.elf - ATF固件
- u-boot.elf - 主引导程序
制作步骤:
- 在Procise中选择PSOC->Create Boot Image
- 指定BIF文件路径
- 按顺序添加组件:
- FSBL.out (类型选bootloader)
- bl31.elf (类型选datafile, Device选PS, CPU选APU 0)
- u-boot.elf
- 点击Create Image生成BOOT.bin
1.3.6 内核镜像制作
内核编译:
bash复制./build.sh kernel
编译产物位于linux-5.4.52-fmsh/arch/arm64/boot/Image
根文件系统编译:
bash复制./build.sh --media rootfs
image.ub制作:
- 修改env.sh中
IMAGE_TYPE="ramdisk" - 确保images目录下有:
- system-top.dtb
- Image
- rootfs.cpio.gz
- 执行编译:
bash复制./build.sh image
1.4 系统烧录实战
FMQL100T支持多种启动介质,这里以QSPI Flash烧录为例:
- 确保已安装IAR EWARM 9.20.4
- 在Procise中配置烧录参数:
- 选择正确的JTAG模式(参考板卡原理图)
- 使用EmuDiag.exe工具验证JTAG连接
- 烧录文件包括:
- BOOT.bin
- image.ub
烧录技巧:首次烧录建议先擦除整个Flash,避免旧数据残留导致启动异常。
2. 关键问题排查指南
2.1 安装阶段常见问题
问题1:Petalinux安装失败,提示权限不足
解决方案:
bash复制sudo chown -R $USER:$USER 安装目录
问题2:编译时缺少库文件
典型表现:
code复制error: xxx.h: No such file or directory
解决方法:
bash复制sudo apt install libxxx-dev
2.2 编译阶段常见问题
问题1:设备树编译失败
可能原因:
- 未正确设置--nofpga参数
- 设备树源文件路径错误
问题2:U-Boot无法引导内核
排查步骤:
- 检查BOOT.bin组件顺序是否正确
- 确认image.ub包含正确的dtb文件
- 检查串口输出,定位卡住的位置
2.3 烧录阶段常见问题
问题1:JTAG连接失败
解决方法:
- 确认板卡供电正常
- 检查JTAG模式设置(通常为JTAG或SWD)
- 尝试降低JTAG时钟频率
问题2:烧录后无法启动
排查步骤:
- 确认烧录文件完整性
- 检查启动介质选择是否正确
- 验证DDR初始化参数
3. 性能优化建议
3.1 编译加速技巧
- 使用并行编译:
bash复制make -j$(nproc)
- 启用ccache缓存:
bash复制export CCACHE_DIR=/path/to/ccache
export USE_CCACHE=1
3.2 系统裁剪建议
- 在内核配置中移除不需要的驱动
- 使用Buildroot定制最小根文件系统
- 静态链接关键应用减少依赖
3.3 启动优化方案
- 启用U-Boot的falcon模式快速启动
- 将内核和根文件系统打包为 FIT 镜像
- 优化init进程启动顺序
在实际项目中,我通过上述优化将系统启动时间从8秒缩短到2秒以内,效果非常显著。特别是在工业控制等对启动速度要求高的场景下,这些优化手段非常实用。
