i.MX35 PDK嵌入式Linux开发套件:从硬件认知到多媒体应用实战
1. 项目概述
如果你刚拿到一块飞思卡尔(Freescale,现为NXP的一部分)的i.MX35 PDK 1.5开发套件,面对三块板子和一堆线缆,可能会有点无从下手。别担心,这种感觉我懂。十几年前我第一次接触这类嵌入式开发板时,也花了不少时间才把硬件连明白,更别提让系统跑起来了。这个套件虽然发布于2009年,但其核心的“3-Stack”平台设计理念和基于Linux的BSP(板级支持包)开发流程,至今仍是理解嵌入式系统从硬件到软件启动的绝佳教材。它不是一个过时的玩具,而是一个经典的、结构清晰的嵌入式系统教学与原型开发平台。
简单来说,i.MX35 PDK 1.5是一个围绕i.MX35应用处理器构建的嵌入式Linux开发与演示平台。它的核心价值在于,通过CPU板、调试板和功能板这三块独立又互联的板卡,清晰地分离了核心计算、调试接口和外设功能。这种模块化设计让你可以灵活地将其用作一个完整的开发平台(三块板全上),或者一个纯粹的演示平台(仅CPU板+功能板)。套件预装了Linux演示镜像,开箱即可体验音频播放、视频解码、图片浏览和FM收音机等功能,直观展示了i.MX35芯片在多媒体处理上的能力。对于开发者而言,它更是一个扎实的起点,你可以基于其提供的Linux BSP和工具链,进行深度定制和应用程序开发。接下来,我会带你一步步拆解这个套件,从硬件认识、平台搭建,到系统启动和基础应用,让你快速上手,并理解每一步背后的设计逻辑。
2. 套件详解与硬件认知
在动手连接任何线缆之前,花点时间认识一下你手中的三块板子,理解它们各自的分工,这能避免很多后续的困惑和误操作。这套“3-Stack”平台的设计非常模块化,每一块板子都有明确的职责。
2.1 核心三板:分工与协作逻辑
CPU板是系统的大脑和心脏。它的核心是i.MX35 ARM11应用处理器和配套的MC13892电源管理芯片。板上集成了512MB NAND Flash和512MB DDR2内存,构成了最小可运行系统。这块板通过一个500针的高密度板对板连接器(J1)与其他板卡通信。它的设计非常“干净”,只包含最核心的处理器、内存和电源管理,这种设计使得CPU板可以作为一个相对通用的核心模块,理论上可以适配不同的底板或载板。
调试板是开发者的“眼睛”和“双手”。它的主要作用是在开发阶段提供便利的调试和监控接口。板上最关键的部件是一个CPLD(复杂可编程逻辑器件),它实现了额外的以太网和串口控制器,专门用于调试目的。这意味着,即使目标系统(CPU+功能板)的网络或串口功能尚未调通,你依然可以通过调试板上的接口(J1以太网口和CON4串口)与系统通信。此外,它还提供了电流测量接口、多个调试LED和按钮,以及至关重要的启动模式配置开关(SW5-SW10)。一个重要的细节是:调试板上有一个电源使能开关(SW4-8)。当它处于ON时,电源会供给全部三块板;处于OFF时,则只给调试板自身供电。在组装开发平台时,务必确保此开关为ON。
功能板是系统的“五官和四肢”。它承载了所有的应用层外设,旨在展示i.MX35芯片的丰富功能。这包括一个7英寸WVGA分辨率的LCD触摸屏、摄像头接口、FM收音机模块、SD卡槽、USB OTG/Host接口、ATA硬盘接口、CAN总线接口、音频输入输出等。简单来说,所有让这个开发套件变得“有用”和“有趣”的功能都在这块板上。它通过两个500针连接器分别与调试板(J73)和CPU板(J78)对接。功能板上也有自己的启动配置开关(SW1, SW2),用于选择从NAND Flash、SD卡等设备启动。
注意:在接触任何板卡前,请务必采取防静电措施,如佩戴防静电手环或触摸接地的金属物体。精密芯片对静电非常敏感,一个不经意的放电就可能造成永久性损伤。
2.2 接口与开关配置全解析
仅仅知道板子有什么接口还不够,理解关键开关和连接器的配置逻辑,是成功启动系统的前提。这里最容易出错的就是启动模式的设置。
1. 调试板启动模式开关(SW5-SW10)这套开关用于配置CPU的初始启动源。根据官方指南,要运行预装在NAND Flash中的演示系统,需要将其设置为“8-bit NAND Flash”模式。具体设置如下(0=OFF,1=ON,X=任意):
- SW5: X (不关心)
- SW6: 1
- SW7: 0
- SW8: 0
- SW9: 1
- SW10: 0
2. 功能板启动模式开关(SW1, SW2)功能板的开关需要与调试板的设置协同工作。当调试板设置为NAND启动时,功能板的SW1所有拨码应置于OFF,SW2的1、4、5号拨码置于ON,其余OFF。这个组合告诉系统从CPU板上的NAND Flash中寻找启动代码。
3. 调试板串口选择与电源开关(SW4)
- SW4-1 (UART端口选择):应置于ON,选择CON4这个DB9串口作为调试输出。
- SW4-8 (电源使能):如前所述,在开发平台模式下必须为ON,否则CPU板和功能板将得不到电力。
4. 核心连接器
- 500针板对板连接器:这是三块板之间数据传输的“高速公路”。连接时务必注意,连接器有防呆设计(即键槽),对准后再均匀用力按压,确保连接牢固。官方文档强调连接时板间夹角不能超过10度,以防引脚受力不均弯曲或损坏。
- 电源接口:调试板的J2和功能板的J12都是5V直流电源输入口。在开发平台模式下,我们使用调试板的J2供电;在纯演示平台模式下,则使用功能板的J12供电。
- 调试串口(CON4):这是一个标准的DB9母头串口,用于连接PC,输出系统启动信息、内核日志,并提供命令行交互界面。这是开发初期最重要的调试手段。
理解这些硬件细节后,平台的物理组装就变成了一个按图索骥的过程。关键在于细心和遵循顺序,避免在通电状态下进行插拔操作。
3. 平台搭建与系统启动实操
现在,我们进入动手环节。根据你的目标——是进行软件开发调试,还是仅仅运行演示——你需要搭建两种不同的硬件平台。我会详细说明两种平台的搭建步骤、连接方法以及背后的原因。
3.1 开发平台搭建:三板合一
开发平台包含全部三块板卡,主要用于烧写系统、调试内核和驱动、以及运行需要串口交互的复杂应用。这是功能最全的模式。
第一步:连接功能板与调试板
- 将调试板平放在防静电桌垫上。
- 拿起功能板,对准调试板上的500针连接器(CN74)。注意观察连接器的键槽(一个凸起和凹槽),确保方向正确。
- 保持两块板平行,垂直向下均匀用力,直到听到轻微的“咔嗒”声或感觉连接器完全到位。务必确保板子完全平行贴合,没有翘起或倾斜。此时,功能板是“坐”在调试板之上的。
第二步:连接CPU板
- 将上一步组装好的“调试板+功能板”组合翻转过来,使功能板的底部朝上。
- 拿起CPU板,对准功能板底部的另一个500针连接器(J78)。同样注意防呆方向。
- 再次垂直向下均匀用力,将CPU板连接到功能板底部。至此,一个“调试板在中间,功能板在上,CPU板在下”的三明治结构就组装完成了。你可以用配套的尼龙支柱和螺丝进行固定,以增加物理稳定性,特别是在需要移动平台时。
第三步:连接PC与上电
- 串口连接:使用套件附带的RS-232串口线,一端连接调试板的CON4口,另一端连接你PC的串口(如果PC没有串口,你需要一个USB转串口适配器)。
- 网络连接(可选):使用网线连接调试板的J1以太网口到你的路由器或直接到PC。这在后续需要通过网络传输文件或进行网络调试时会用到。
- 电源连接:将5V/5A电源适配器插入插座,并将直流输出头插入调试板的J2电源接口。
- 启动配置复查:再次确认所有开关设置是否正确:
- 调试板SW4-1: ON, SW4-8: ON。
- 调试板启动开关(SW5-SW10):设置为NAND Flash模式(SW6=1, SW7=0, SW8=0, SW9=1, SW10=0)。
- 功能板启动开关(SW1全OFF,SW2的1,4,5为ON)。
- 启动串口终端:在你的PC上打开一个串口终端软件(如Windows的Putty、SecureCRT,或Linux的Minicom、screen)。新建一个串口连接,参数设置为:波特率115200,数据位8,停止位1,无奇偶校验,无流控制。
- 上电启动:将调试板上的电源开关(S4)拨到“1”的位置。此时,你应该能在串口终端上看到如瀑布般滚动的启动日志,从U-Boot引导程序开始,直到Linux内核启动完毕,最终出现登录提示符(通常是
root@freescale ~$)。如果没有任何输出,请立即断电,并重新检查所有连接和开关设置。
3.2 演示平台搭建:精简二板
如果你只想运行预装的演示程序,体验多媒体功能,而不需要进行底层调试,那么可以搭建更简洁的演示平台。这个模式下,调试板是不需要的,系统将通过功能板上的LCD触摸屏进行交互。
第一步:连接CPU板与功能板
- 直接将CPU板通过500针连接器连接到功能板的J78接口上。操作方法与三板模式下的第二步相同。
- 同样确保连接稳固。
第二步:连接电源与启动
- 电源连接:这次,将5V电源适配器直接连接到功能板的J12电源接口上。
- 启动配置:功能板上的启动开关(SW1, SW2)仍需按照NAND Flash模式设置(SW1全OFF,SW2的1,4,5为ON)。因为移除了调试板,所以无需关心调试板的开关。
- 上电启动:按下功能板上的电源按钮(S14)。此时,系统将从NAND Flash启动,并直接在7英寸LCD屏幕上显示图形化的启动界面和主菜单,而不会在串口输出大量日志(除非你额外连接了串口)。
实操心得:很多新手在搭建演示平台时,会习惯性地去按调试板上的开关,却发现系统没反应。记住,在二板模式下,供电和开关都在功能板上。另一个常见问题是屏幕不亮,请检查功能板与CPU板的连接是否牢固,以及电源适配器的输出电压是否为稳定的5V。
4. Linux演示镜像使用与多媒体功能体验
当系统成功启动,无论是通过串口看到了命令行,还是在LCD上看到了图形界面,都意味着硬件平台工作正常。接下来,我们深入了解一下这个预装的Linux演示系统能做什么,以及如何操作。
4.1 系统概览与文件管理
通过串口登录到系统后(用户名通常是root,无密码),你就拥有了一个完整的Linux命令行环境。你可以使用常见的Linux命令来探索系统:
ls /查看根目录。cat /proc/cpuinfo查看CPU信息。ifconfig查看网络配置(如果调试板以太网已连接并配置)。df -h查看存储空间使用情况。
演示系统的图形界面是一个定制的多媒体应用启动器。主界面通常分为两个标签页:“多媒体应用”和“设置”。在“设置”中,你可以配置语言、音量、显示参数等。而核心功能都在“多媒体应用”标签页中,包括音频播放器、视频播放器、图片浏览器和FM收音机。
这些应用播放的媒体文件默认存储在/mnt/flc/目录下,该目录下又分为Pictures、Music、Video三个子目录。系统启动时,会自动挂载NAND Flash上的某个分区到/mnt/flc。所以,要让应用找到内容,你需要把媒体文件放到对应的目录里。
4.2 多媒体文件导入的两种方法
预装的系统可能只包含少数示例文件。要播放自己的内容,你需要将文件导入到开发板。这里介绍两种最实用的方法。
方法一:通过SD卡(最便捷)这是官方推荐且最简单的方法,尤其适合演示平台模式。
- 准备SD卡:将SD卡格式化为FAT32文件系统(在Windows或Linux下均可)。注意:如果你需要在Windows和Linux系统间交叉使用这张SD卡,FAT32是最兼容的选择。
- 拷贝文件:在PC上,将你的图片、音乐、视频文件分别拷贝到SD卡根目录下,或者自己创建好
Pictures、Music、Video文件夹进行分类存放。 - 插入与挂载:将SD卡插入功能板下部的SD卡槽。系统会自动将其挂载到
/mnt/mmc或类似的目录下。你可以通过串口执行mount命令来查看具体的挂载点。 - 复制文件:通过串口,使用
cp命令将SD卡中的文件复制到系统的媒体目录。例如:
你也可以一次性复制整个文件夹:# 假设SD卡挂载在 /mnt/mmc cp /mnt/mmc/MyPhoto.jpg /mnt/flc/Pictures/ cp /mnt/mmc/MySong.mp3 /mnt/flc/Music/ cp /mnt/mmc/MyVideo.avi /mnt/flc/Video/cp -r /mnt/mmc/Pictures/* /mnt/flc/Pictures/
方法二:通过网络传输(适用于开发平台)如果你的开发平台通过调试板接入了网络,并且配置好了IP地址(可以通过DHCP自动获取或手动设置),那么可以使用SCP或SFTP工具从PC传输文件,这比反复插拔SD卡效率高得多。
- 在PC端,使用如FileZilla、WinSCP(Windows)或
scp命令(Linux/Mac)。 - 连接地址为开发板的IP地址,用户名为
root,密码通常为空。 - 直接将文件拖拽到远程目录
/mnt/flc/下对应的文件夹中。
4.3 四大核心应用操作指南
文件准备就绪后,就可以在LCD触摸屏上畅享多媒体功能了。每个应用的操作逻辑都很直观。
视频播放器:
- 在主菜单点击“视频播放器”。
- 界面右上角通常有一个下拉箭头或菜单按钮,点击后选择“打开文件”。
- 文件浏览器会定位到
/mnt/flc/Video目录,列出所有支持格式的视频文件。 - 点击选择文件即可播放。播放界面会有进度条、暂停/播放、停止、音量调节以及全屏按钮。实测下来,触摸屏的响应在播放高码率视频时可能会稍有延迟,这属于正常现象,因为处理器资源被视频解码大量占用。
音频播放器:
- 点击“音频播放器”。
- 同样通过菜单打开文件,定位到
/mnt/flc/Music目录。 - 支持创建和管理播放列表。播放界面提供基本的播放控制、进度条和音量调节。一个小技巧:通过系统“设置”中的音频输出选项,你可以选择是通过板载扬声器、耳机接口还是其他方式输出。
图片浏览器:
- 点击“图片浏览器”,应用会直接打开
/mnt/flc/Pictures目录,以缩略图形式展示图片。 - 点击任意一张图片进入全屏查看模式。
- 在查看模式下,屏幕边缘通常会浮现出工具栏,提供放大/缩小、旋转、切换到上一张/下一张、幻灯片播放等功能。需要注意的是,��于屏幕分辨率是WVGA(800x480),过高分辨率的图片在缩放时可能会消耗较多时间。
FM收音机:
- 点击“FM收音机”应用。
- 确保已将耳机插入功能板的耳机接口(J80),耳机在此充当FM天线。
- 应用界面通常有频率显示、手动调谐旋钮(虚拟或物理按键映射)、自动搜台按钮和音量控制。
- 点击“自动搜台”,系统会扫描并保存可用的电台。之后就可以在已保存的电台列表中选择收听。
4.4 支持的编解码器与格式清单
了解系统支持哪些格式,可以避免放入不兼容的文件导致应用无响应。根据官方文档,这个演示镜像集成了飞思卡尔的多媒体框架(MFW),支持以下编解码器:
| 插件/组件 | 描述 | 支持功能 |
|---|---|---|
| mfw_mp3decoder | MPEG Layer 3 (MP3) 解码器 | 播放、暂停、停止、跳转、读取元数据 |
| mfw_wmadecoder | WMA7, WMA8, WMA9 解码器 | 播放、暂停、停止、跳转、读取元数据(不支持WMA Pro 和 Lossless) |
| mfw_aacdecoder | AAC LC 解码器 | 播放、暂停、停止、跳转、读取元数据(注意:对ADIF格式的AAC文件可能不支持跳转) |
| mfw_h264decoder | H.264 Baseline Profile 解码器 | 播放、暂停、停止、跳转、读取元数据 |
| mfw_mpeg4decoder | MPEG-4 / H.263 Simple Profile 解码器 | 播放、暂停、停止、读取元数据 |
| mfw_avidemuxer | AVI 文件解析器(支持H.264+MP3, MPEG-4+MP3组合) | 播放、暂停、停止、跳转、读取元数据 |
| mfw_asfdemuxer | ASF 文件解析器(支持WMA+WMV组合) | 播放、暂停、停止、跳转、读取元数据 |
| mfw_mp4demuxer | MP4 文件解析器(支持H.264+AAC, H.264+MP3, MPEG-4+MP3组合) | 播放、暂停、停止、跳转、读取元数据 |
格式选择建议:
- 视频:优先选择
MP4 (H.264 + AAC)或AVI (H.264 + MP3)格式,这是兼容性最好的组合。 - 音频:最稳妥的是
MP3格式,AAC和WMA(非Pro版)也基本没问题。 - 图片:常见的JPEG、PNG、BMP格式通常都能被支持。
如果你遇到文件无法播放,首先检查其格式是否在上述支持列表中,其次检查文件是否损坏,或者码率是否过高(对于2009年的硬件,建议视频分辨率不超过720p,码率在2-3Mbps以下为宜)。
5. 开发环境准备与后续探索
运行演示镜像只是第一步。这个PDK套件的真正威力在于它提供了一个完整的嵌入式Linux开发环境。你可以修改内核、编写驱动、开发自己的应用程序,甚至构建一个全新的根文件系统。
5.1 搭建Linux主机开发环境
要进行深度开发,你需要在PC上搭建一个Linux开发环境。官方文档推荐使用Red Hat、Fedora Core、Debian或SuSE的特定版本。以当今更流行的Ubuntu为例,你需要安装一些必要的构建工具和库。以下是在Ubuntu系统上的基础准备命令:
sudo apt-get update sudo apt-get install build-essential libncurses5-dev u-boot-tools \ bison flex texinfo zip unzip zlib1g-dev gettext \ g++ libtool-bin git-core diffstat gawk chrpath \ wget cpio python3 python3-pip这些包提供了编译器、链接器、内核配置工具等构建嵌入式Linux系统所需的基础设施。
5.2 获取与使用BSP及工具链
飞思卡尔为i.MX35 PDK提供了完整的Linux BSP(板级支持包),其中包含了最重要的两个工具:
- LTIB (Linux Target Image Builder):这是一个用于配置、编译和打包整个目标板(即开发板)软件系统的图形化/命令行工具。你可以通过它选择内核版本、配置内核选项、选择需要包含的软件包(如BusyBox、各种库和应用程序),最终生成一个可以烧写到板子上的完整镜像文件(通常是
.img或.sdcard格式)。 - 交叉编译工具链 (Toolchain):这是一套运行在x86 PC上,但能生成ARM目标代码(i.MX35是ARM11)的编译器、调试器等工具集合。它通常作为LTIB的一部分被安装。
典型的开发流程:
- 从NXP官网(原飞思卡尔)下载对应版本的BSP安装包。
- 在Linux主机上安装LTIB,这通常会同时安装好交叉编译工具链。
- 运行LTIB,选择i.MX35 PDK的平台配置。
- 在LTIB的菜单中定制你的系统:比如升级内核、增加或删除软件包、修改文件系统内容等。
- 执行构建命令,LTIB会自动下载源代码(或使用本地缓存)、配置、编译所有组件,并最终生成系统镜像。
- 使用
dd命令或飞思卡尔提供的烧写工具(如mfgtool),将新生成的镜像烧写到开发板的NAND Flash或SD卡中。 - 重启开发板,验证你的定制系统。
5.3 常见问题排查与调试技巧
在开发过程中,你肯定会遇到各种问题。这里分享几个最经典的排查思路:
1. 系统无法启动,串口无任何输出
- 检查电源:用万用表测量5V电源接口处的电压是否稳定在5V左右,电流是否足够。
- 检查启动模式开关:这是最常出错的地方!反复对照文档,确认SW5-SW10以及SW1、SW2的设置完全正确。可以用手机拍下开关位置再放大检查。
- 检查串口连接与配置:确认串口线是否完好,PC端串口号选择是否正确,波特率是否设置为115200,流控制是否为“无”。
- 最小系统法:如果可能,尝试仅连接CPU板和调试板(不接功能板),看串口是否有输出,以排除功能板故障的影响。
2. 系统启动到一半卡住(例如卡在“Starting kernel...”或文件系统挂载错误)
- 观察串口日志:仔细阅读卡住前最后几行打印的信息,通常会有错误提示,如“Kernel panic”、“Failed to mount root fs”等。
- 内核问题:可能是编译的内核镜像不对,或者设备树(Device Tree)配置有误。确保使用BSP中针对PDK的默认配置开始修改。
- 文件系统问题:根文件系统镜像损坏或格式不被识别。检查LTIB中文件系统类型的配置(通常是jffs2或ubifs for NAND),并重新烧写。
3. 多媒体应用无法播放文件或播放卡顿
- 检查文件格式:确认文件格式和编码在支持列表内。
- 检查文件路径:确认文件是否已正确拷贝到
/mnt/flc下的对应目录。 - 资源占用:通过串口登录,使用
top命令查看CPU和内存占用率。播放高清视频时占用率高是正常的。如果播放低分辨率视频也卡顿,可能是系统后台有其他进程在运行,或者SD卡读取速度慢。 - 驱动问题:如果自己编译的系统出现此问题,可能是多媒体驱动(如VPU视频编解码驱动、GPU驱动)没有正确编译进内核或模块没有加载。检查内核配置中
Device Drivers -> Multimedia support -> V4L2 drivers以及飞思卡尔特有的多媒体框架相关选项。
4. 触摸屏校准或响应不准
- 校准工具:演示系统通常内置触摸屏校准程序。在串口下查找或通过设置菜单寻找校准选项。
- 驱动配置:如果是自定义系统,需要确保内核中正确配置了触摸屏控制器(通常是基于SPI或I2C接口的电阻屏控制器)的驱动,并且设备树中正确描述了其在硬件上的连接。
嵌入式开发就是一个不断遇到问题、分析日志、查找原因、解决问题的过程。善用串口这个最原始的调试工具,它能告诉你系统内部发生的几乎所有事情。养成查看/var/log/messages或使用dmesg命令的习惯,绝大多数软件层面的问题都能在这里找到线索。
