保姆级教程:在Ubuntu 16.04上从零搭建复旦微FMQL芯片的Linux开发环境(含IAR/Procise/Petalinux)

张开发
2026/4/21 23:39:14 15 分钟阅读

分享文章

保姆级教程:在Ubuntu 16.04上从零搭建复旦微FMQL芯片的Linux开发环境(含IAR/Procise/Petalinux)
复旦微FMQL芯片Linux开发环境搭建全指南从零构建到实战部署引言为什么选择FMQL芯片进行嵌入式开发在当今嵌入式系统开发领域国产芯片正逐渐崭露头角复旦微电子推出的FMQL系列芯片凭借其高性能、低功耗和丰富的外设接口成为众多工业控制和信号处理应用的理想选择。然而对于初次接触这一平台的开发者而言从零开始搭建完整的Linux开发环境往往充满挑战——交叉编译工具链配置、Bootloader定制、内核裁剪与设备树生成每一步都可能成为新手难以跨越的技术鸿沟。本文将采用手把手、零基础的教学方式详细讲解如何在Ubuntu 16.04系统上搭建完整的FMQL开发环境。不同于简单的流程概述我们将深入每个技术细节特别关注实际开发中容易遇到的坑及其解决方案。无论您是刚接触嵌入式Linux的学生还是首次使用FMQL平台的工程师都能通过本指南快速构建起可用的开发环境为后续应用开发奠定坚实基础。1. 开发环境准备与基础配置1.1 硬件与软件需求清单在开始之前请确保您已准备好以下硬件和软件资源硬件设备优数科技VPX-404信号处理板基于FMQL芯片调试用串口转USB模块如CH340、CP2102等8GB以上容量SD卡Class10及以上速度等级网线用于网络调试与文件传输软件工具Ubuntu 16.04 LTS推荐使用64位桌面版FMQL-Linux-SDK开发包从复旦微官网获取Procise设计工具版本需与芯片型号匹配IAR Embedded Workbench用于FSBL编译Petalinux工具链2018.2版本推荐FileZilla或其他SFTP客户端注意Ubuntu 16.04是官方推荐的开发环境使用其他版本可能导致工具链兼容性问题。如果必须使用更新的Ubuntu版本建议通过Docker创建16.04的容器环境。1.2 Ubuntu系统基础环境配置首先在Ubuntu 16.04上安装必要的依赖包打开终端执行以下命令sudo apt-get update sudo apt-get install -y build-essential git flex bison libncurses5-dev \ libssl-dev u-boot-tools device-tree-compiler gcc-arm-linux-gnueabihf \ tftpd-hpa nfs-kernel-server lib32z1 lib32ncurses5 lib32stdc6 \ zlib1g-dev libsdl1.2-dev libglib2.0-dev gawk wget diffstat \ chrpath socat xterm python unzip配置完成后建议创建一个专用的开发目录并设置环境变量mkdir -p ~/fmql_workspace echo export FMQL_WORKSPACE~/fmql_workspace ~/.bashrc source ~/.bashrc1.3 开发工具安装与验证交叉编译器安装 FMQL SDK通常自带交叉编译器如gcc-linaro-7.3.1但需要正确配置环境变量。假设SDK解压到~/fmql_workspace/FMQL-Linux-SDK执行cd ~/fmql_workspace/FMQL-Linux-SDK source env.sh # 设置交叉编译器等环境变量 arm-linux-gnueabihf-gcc --version # 验证编译器是否可用Petalinux工具链安装 Petalinux是Xilinx提供的嵌入式Linux开发工具同样适用于FMQL平台sudo mkdir -p /opt/pkg/petalinux sudo chown $USER:$USER /opt/pkg/petalinux ./petalinux-v2018.2-final-installer.run /opt/pkg/petalinux安装完成后需要将Petalinux加入环境变量echo source /opt/pkg/petalinux/settings.sh ~/.bashrc source ~/.bashrc2. Procise工程创建与硬件配置2.1 新建Procise工程启动Procise设计工具选择File - New Project设置工程名称如fmql_sd_uart选择器件型号为FMAL20S400在工程类型中选择Empty Project点击Finish完成创建2.2 构建硬件系统设计在Procise中创建Block Design是配置FMQL芯片的关键步骤右键点击Block Design选择Create Block Design命名为system在空白处右键选择Add IP从列表中添加processing_system7模块双击添加的模块进入配置界面关键设置包括配置项参数设置说明MIO ConfigurationSD0: MIO[40:45], CD: MIO[47]SD卡接口引脚分配UART0: MIO[50:51]调试串口引脚分配Bank1电压LVCOMS1.8V匹配SD卡电平标准SD卡速度模式Fast提高数据传输速率保存配置后右键system.bd选择Generate Output Products导出硬件设计右键system.bd选择Export Hardware...勾选Include bitstream和Device Tree2.3 常见问题与解决方案问题1Procise无法识别FMQL器件型号解决方案确认安装的Procise版本与芯片型号匹配必要时更新器件支持包问题2Block Design验证报错解决方案检查MIO引脚分配是否冲突确保关键外设如DDR控制器已正确配置问题3硬件导出失败解决方案检查工程路径是否包含中文或特殊字符建议使用全英文路径3. 设备树与U-Boot编译实战3.1 设备树生成与定制设备树Device Tree是Linux内核识别硬件配置的重要机制。对于FMQL平台设备树通常由Procise生成基础版本再根据实际需求进行定制。将Procise生成的DeviceTree目录复制到Ubuntu开发环境进入FMQL-Linux-SDK目录准备编译环境cd ~/fmql_workspace/FMQL-Linux-SDK source env.sh编译设备树文件./build.sh --hw /path/to/DeviceTree --nofpga dtb提示--nofpga参数表示不使用可编程逻辑部分如果设计中包含FPGA逻辑则应移除该参数编译完成后生成的system-top.dtb文件位于images目录下将用于后续U-Boot编译3.2 U-Boot编译与配置FMQL平台使用U-Boot作为第二级Bootloader负责加载Linux内核和初始化更复杂的硬件环境。进入U-Boot源码目录cd u-boot-2018.07-fmsh应用默认配置并编译make fmql_common_defconfig make EXT_DTB../images/system-top.dtb -j4关键编译产物u-bootELF格式可执行文件u-boot.bin二进制镜像文件u-boot.srecMotorola S-record格式文件自定义U-Boot环境变量可选 编辑include/configs/fmql_common.h可以修改默认环境变量如#define CONFIG_BOOTCOMMAND \ fatload mmc 0 0x10000000 image.ub; \ bootm 0x100000003.3 常见编译错误处理错误1arm-linux-gnueabihf-gcc: command not found原因交叉编译器路径未正确设置解决确认已执行source env.sh检查PATH环境变量错误2dtc: invalid option -- 原因设备树编译器版本不匹配解决使用SDK自带的dtc工具或安装指定版本sudo apt-get install device-tree-compiler1.4.0-1错误3u-boot relocation offset is zero原因链接地址配置错误解决检查CONFIG_SYS_TEXT_BASE设置确保与硬件内存布局匹配4. 系统镜像构建与启动验证4.1 FSBL编译与BOOT.bin生成第一级启动加载器FSBL是FMQL启动链中的关键组件通常使用IAR工具链进行编译。在Procise中导出硬件设计后选择Project - Launch IAR打开工程在IAR中编译FSBL工程生成FSBL.out文件准备BOOT.bin组件FSBL.out从IAR编译生成u-boot.elf将编译的u-boot重命名(可选) user.bit如果有FPGA设计使用Procise创建启动镜像选择PSOC - Create Boot Image添加分区FSBL.out类型为bootloader目标CPU为APU x32u-boot.elf类型为datafile点击Create Image生成BOOT.bin4.2 Linux内核与根文件系统构建FMQL-Linux-SDK提供了两种构建方式全自动脚本编译和手动分步编译。全自动编译./build.sh all手动编译内核cd linux-4.14.55-fmsh make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- fmql_defconfig make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j4构建根文件系统cd buildroot-2018.02.3 make fmql_defconfig make编译完成后关键镜像文件位于images目录文件用途image.ub包含内核、设备树和根文件系统zImage压缩的内核镜像rootfs.cpio根文件系统归档4.3 SD卡部署与系统启动准备SD卡分区假设SD卡设备为/dev/sdXsudo fdisk /dev/sdX # 创建两个分区 # 1. FAT32分区32MB用于BOOT.bin和image.ub # 2. EXT4分区剩余空间用于根文件系统格式化并复制文件sudo mkfs.vfat -F 32 -n BOOT /dev/sdX1 sudo mkfs.ext4 -L ROOTFS /dev/sdX2 sudo mount /dev/sdX1 /mnt/boot sudo cp BOOT.bin image.ub /mnt/boot sudo umount /mnt/boot sudo mount /dev/sdX2 /mnt/rootfs sudo tar xvf rootfs.tar -C /mnt/rootfs sudo umount /mnt/rootfs启动验证将SD卡插入开发板连接串口调试工具如115200-8-N-1上电后观察串口输出确认各阶段正常启动4.4 常见启动问题排查现象1卡在Starting kernel...无输出可能原因内核镜像损坏或设备树不匹配排查检查image.ub生成过程确认设备树与硬件设计一致现象2内核panic无法挂载根文件系统可能原因根文件系统路径错误或格式不支持排查检查内核命令行参数root设置确认文件系统类型现象3U-Boot无法加载image.ub可能原因SD卡分区格式或文件系统错误排查在U-Boot中使用mmc list和fatls mmc 0命令验证SD卡识别5. 开发环境优化与高级技巧5.1 网络文件系统(NFS)配置使用NFS可以显著提高开发效率避免频繁烧写SD卡。在Ubuntu上安装NFS服务器sudo apt-get install nfs-kernel-server配置导出目录echo /home/$USER/fmql_workspace/rootfs *(rw,sync,no_subtree_check,no_root_squash) | sudo tee -a /etc/exports sudo exportfs -a在U-Boot中设置启动参数setenv bootargs consolettyPS0,115200 root/dev/nfs nfsroot192.168.1.100:/home/user/fmql_workspace/rootfs rw ipdhcp saveenv5.2 自动化构建脚本示例创建build_all.sh脚本实现一键编译#!/bin/bash # 设置环境变量 source env.sh # 清理旧构建 make -C u-boot-2018.07-fmsh distclean make -C linux-4.14.55-fmsh distclean make -C buildroot-2018.02.3 distclean # 编译设备树 ./build.sh --hw $1 --nofpga dtb # 编译U-Boot cd u-boot-2018.07-fmsh make fmql_common_defconfig make EXT_DTB../images/system-top.dtb -j4 cd .. # 编译内核 cd linux-4.14.55-fmsh make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- fmql_defconfig make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j4 cd .. # 构建根文件系统 cd buildroot-2018.02.3 make fmql_defconfig make cd .. # 打包最终镜像 ./build.sh image5.3 调试技巧与性能优化内核调试添加早期打印信息echo 8 /proc/sys/kernel/printk使用KGDB进行源码级调试make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- menuconfig # 启用KGDB相关选项性能优化调整CPU频率echo performance /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor优化DDR参数 修改U-Boot中的board/freescale/fmql/ddr_init.c文件电源管理低功耗模式配置echo mem /sys/power/state6. 实际项目经验分享在多个FMQL实际项目中我们发现以下几个关键点值得特别注意SD卡兼容性问题某些品牌的SD卡在FMQL上表现不稳定建议使用SanDisk Extreme或Samsung Pro系列DDR参数校准对于不同批次的开发板可能需要微调ddr_init.c中的时序参数使用mtest命令验证稳定性温度监控在长期运行的应用中建议实现温度监控机制cat /sys/class/thermal/thermal_zone0/temp生产部署建议使用fw_setenv工具固化环境变量考虑将根文件系统改为只读以提高可靠性实现OTA更新机制时保留至少一个备份启动分区调试串口复用当系统稳定后可以将UART0释放给应用程序使用改用UART1作为调试端口

更多文章