从零组装Intel Edison:嵌入式Linux开发实战与系统移植指南

发布时间:2026/7/29 4:03:40
从零组装Intel Edison:嵌入式Linux开发实战与系统移植指南
1. 项目缘起为什么今天还要玩Edison如果你在开源硬件社区混迹过一段时间大概率听说过Intel Edison这个名字。它诞生于2014年是英特尔雄心勃勃进军物联网IoT领域的一款标志性产品。一块邮票大小的核心计算模块集成了双核Atom处理器、Quark微控制器、1GB内存、4GB eMMC存储还自带Wi-Fi和蓝牙这在当时绝对是“黑科技”级别的存在。然而随着英特尔在2017年宣布停产Edison这款曾经被寄予厚望的明星产品逐渐淡出了主流视野。那么问题来了一个已经停产多年的开发板为什么我们今天还要“从零开始”去组装它这听起来像是一种复古情怀或者是对“电子垃圾”的再利用。但在我看来原因远比这深刻。首先Edison的硬件设计理念至今仍不过时。它的模块化思想——将高性能计算核心、无线连接和基础I/O分离——正是如今许多边缘计算设备的雏形。通过亲手组装你能透彻理解一个完整的嵌入式系统是如何从核心板、扩展板一步步构建起来的这种对系统层级的认知是直接使用集成度更高的树莓派Raspberry Pi或Jetson Nano难以获得的。其次Edison是一个绝佳的“解剖”对象。因为它已经停产相关的官方支持文档和社区资源虽然不再更新但反而沉淀得非常完整。你不会被日新月异的工具链和SDK搞得晕头转向可以静下心来按照一个相对固定的路径深入Linux系统移植、驱动编译、交叉编译环境搭建等底层技术。这个过程对于想深入嵌入式Linux开发的初学者来说价值巨大。最后市面上仍有不少库存的Edison模块和配套的扩展板在流通价格也相当亲民使得这个“从零开始”的项目具备了现实的可操作性。所以这篇教程的目标不是教你如何使用一个现成的Edison开发套件而是带你完整地走一遍“攒机”流程从认识各个部件、准备必要的工具和软件到硬件组装、系统烧录、环境配置再到最终点亮第一个程序。你会遇到一些因为年代久远而产生的“坑”我也会把这些踩坑经验和解决方案毫无保留地分享出来。整个过程更像是一次对经典嵌入式架构的致敬与深度学习。2. 硬件清单详解不只是“买买买”组装一台Edison你需要准备核心的计算模块和让它“发挥作用”的扩展板。这里的选择和背后的考量是项目成功的第一步。2.1 核心Intel Edison计算模块这是整个系统的大脑。你在购买时通常会看到两种形态一种是裸模块就是那块邮票大小的板子本身另一种是已经焊接在小型载板Breakout Board上的模块。对于新手我强烈建议选择后者。原因很简单Edison模块的引脚是邮票孔间距极小0.8mm手工焊接难度极高极易因受热不均或连锡而损坏。预焊接好的载板提供了标准2.54mm间距的排母让你能用杜邦线轻松连接大大降低了入门门槛。注意务必确认你购买的模块是“Edison for Arduino”或兼容版本。早期有些Edison模块的引脚定义略有不同与主流扩展板可能不兼容。模块本身的关键参数需要了解双核Intel Atom凌动CPU主频500MHz一个Intel Quark微控制器主频100MHz用于低功耗传感任务1GB LPDDR3内存4GB eMMC闪存实际可用约2.7GB因为一部分被系统占用支持802.11 a/b/g/n Wi-Fi和蓝牙4.0。这些参数在今天看来平平无奇但在当时足以运行一个完整的Yocto Linux发行版。2.2 躯干扩展板的选择与考量单独的Edison模块无法直接使用必须通过扩展板来供电和扩展接口。主要有三类选择Arduino扩展板Arduino Expansion Board这是最经典、最推荐新手使用的选择。它本质上是一个Arduino Uno形状的底板将Edison的引脚映射到标准的Arduino接口上。这意味着你可以直接使用海量的Arduino Shield传感器扩展板并且编程上可以兼容Arduino IDE通过Intel的插件。它自带一个USB OTG接口用于连接电脑编程和供电和一个DC电源接口7-15V。它的最大价值在于生态兼容性让你能快速利用现有的Arduino资源进行原型开发。迷你扩展板Mini Breakout Board比Arduino扩展板更小巧通常只引出Edison的核心电源、UART串口、USB OTG和少量GPIO。它适合对体积有严格要求且不需要连接大量Arduino Shield的项目。使用它你通常需要通过串口终端进行系统交互和编程。自定义底板对于资深玩家或产品原型可以自己设计PCB底板。这需要你仔细研究Edison的硬件设计指南HDG处理好电源时序、信号完整性等问题。这是最灵活也是最复杂的方式。对于本教程我们以Arduino扩展板作为标准平台进行讲解因为它最通用遇到的问题和解决方案也最具代表性。2.3 其他必备与可选配件电源Arduino扩展板可以通过Micro USB线连接至板上的USB-OTG口供电但功率有限约500mA。为了稳定运行特别是当连接了外设时强烈建议使用7-12V/1A以上的DC电源适配器插入扩展板的DC插座。不稳定的电源是后续很多诡异问题的根源。Micro USB数据线至少准备一条质量好的。它用于系统烧录、串口通信和ADB调试。Micro SD卡可选但推荐虽然Edison自带eMMC但一张Class 10或以上的高速Micro SD卡建议8GB或以上非常有用。你可以将系统刷写到SD卡上启动这样不会改动eMMC里的原厂系统方便折腾和恢复。很多社区版系统镜像也推荐从SD卡启动。跳线帽/杜邦线用于配置启动模式。Arduino扩展板上通常有多个跳线Jumper如J16-17USB OTG功能选择、J13-14SD卡启动选择等。基础工具小号十字螺丝刀用于固定Edison模块到扩展板、镊子用于设置跳线帽。3. 硬件组装实战步步为营避免“硬伤”拿到所有部件后别急着通电。正确的组装顺序和细节检查能避免短路、损坏等悲剧。3.1 模块安装与固定如果你的Edison模块已经焊接在小型载板上那么你需要将这个载板插入Arduino扩展板。找到扩展板中央那个70引脚的双排插槽。注意方向载板的一端通常会有个白色三角或圆点标记对应扩展板插槽上标有“△”或“PIN 1”的一端。对准后垂直、均匀用力按下确保所有引脚都牢固接触。接下来使用附带的螺丝和尼龙柱将Edison模块或载板的四个角固定到Arduino扩展板上。这一步很重要能防止因搬运或插拔线缆导致连接器松动甚至脱落。3.2 关键跳线设置决定启动命运Arduino扩展板上有几组关键的跳线帽它们决定了Edison的启动和行为模式。这是组装环节最容易出错的地方。J16-17USB OTG模式这组跳线决定了板子上那个Micro USB口的功能。当跳线帽连接短路J16和J17时该USB口处于设备Device模式可以连接电脑进行刷机、ADB调试和串口通信。当断开时它处于主机Host模式可以连接USB外设如摄像头、键盘。在首次烧录系统和日常调试时必须确保跳线帽连接Device模式。J13-14启动介质选择这组跳线控制Edison从何处启动。J13和J14都断开时从内置的eMMC启动。如果你想从Micro SD卡启动需要用跳线帽连接J13短路中间和SD卡标记的引脚。对于第一次组装建议先保持断开从eMMC启动原厂系统确保硬件基本正常。实操心得跳线帽非常小容易丢失。可以用一小段导线弯成“U”形临时替代或者干脆购买一包各种颜色的跳线帽备用。在改变跳线设置前务必先断开所有电源。3.3 上电前的最终检查视觉检查检查所有插接处是否到位有无引脚弯曲。检查螺丝是否拧紧但不要过度用力导致板子变形。电源检查如果使用DC电源确认电压在7-15V范围内极性正确中心为正。首次上电建议先不使用DC电源仅连接Micro USB线到电脑这样电流有限即使短路也能减少损失。连接检查确保USB线连接的是扩展板上标记为“USB-OTG”的Micro USB口而不是旁边的“UART”口如果有。完成以上步骤后就可以进行首次上电了。4. 系统烧录与首次启动打通“任督二脉”给组装好的Edison上电通过USB连接电脑你会看到板上的电源指示灯PWR和至少一个用户指示灯通常标有LED亮起。但这只是通了电eMMC里可能没有系统或者系统需要更新。我们需要为它安装或更新操作系统。4.1 驱动安装让电脑认识Edison将Edison通过USB线连接到Windows电脑。设备管理器里可能会出现两个新设备一个USB串行设备COM口另一个可能显示为未知设备DFU Device。我们需要安装驱动。虽然英特尔官方停止了支持但驱动文件仍然可以在网络存档中找到。核心是两个驱动Intel Edison USB CDC Driver用于串口通信。Intel Edison DFU Driver用于设备固件升级刷机。安装后在设备管理器中USB串行设备会变成Intel Edison USB COM Port并分配一个COM号如COM3。DFU Device会变成Intel Edison USB Device。踩坑记录在Windows 10/11上驱动安装可能会因为数字签名问题失败。需要在高级启动选项中临时禁用驱动程序强制签名。这是一个常见的门槛耐心按步骤操作即可。4.2 使用Flash Tool Lite烧录系统这是英特尔官方提供的图形化刷机工具对新手最友好。你需要准备一个系统镜像文件.zip格式。推荐使用社区维护的Ubilinux镜像它是一个基于Debian的系统软件源更丰富比原厂的Yocto系统更易用。解压下载的镜像文件。打开Flash Tool Lite在Select Target中选择Edison。在Flash Firmware页面点击Browse选择解压后镜像文件夹中的FlashEdison.json文件。将Edison彻底断电。按住扩展板上的**“SW1”按钮**通常是个小按键不是复位键不放然后插入USB线连接到电脑。等待2-3秒后松开SW1。此时工具中的Device状态应该会显示Edison [DFU]。点击Start to Flash刷机过程开始。整个过程大约需要5-10分钟期间不要断开USB线。进度条走完显示Success即告完成。4.3 串口登录与初始配置刷机完成后Edison会自动重启。此时我们需要通过串口终端登录系统进行初始配置。使用串口终端软件如PuTTY、MobaXterm或VS Code的串口插件。连接类型选择Serial端口选择之前设备管理器里看到的COM口如COM3波特率设置为115200数据位8停止位1无校验无流控。连接后按几次回车应该会出现rootedison:~#的登录提示符。默认用户是root没有密码直接回车即可进入。首次启动系统可能会运行一个配置向导。如果没有你可以手动运行configure_edison --setup来设置设备名称给你的Edison起个名字如my-edison。Wi-Fi连接输入你的Wi-Fi SSID和密码让Edison联网。密码设置为root用户设置一个密码。完成这些你的Edison就有了灵魂可以通过网络SSH访问了。记下屏幕上显示的IP地址。5. 开发环境搭建与“Hello, World!”系统跑起来了接下来就是让它干活。我们将搭建一个最基础的开发环境并完成一个简单的交互。5.1 网络连接与SSH登录在串口终端里用ifconfig命令查看wlan0无线网卡的IP地址。假设是192.168.1.100。 在你的电脑上打开一个SSH客户端如PuTTY、Windows Terminal或Mac/Linux的终端输入ssh root192.168.1.100输入你之前设置的密码就能远程登录到Edison了。从此你可以告别串口线使用更舒适的SSH终端进行操作。5.2 基础软件包更新与安装Edison的Ubilinux系统基于Debian使用apt包管理器。首先更新软件源并升级现有软件apt-get update apt-get upgrade -y然后安装一些必备的开发工具apt-get install -y python3 python3-pip git vim build-essential如果你想使用Arduino IDE进行编程还需要在电脑端操作。Edison的Arduino开发需要一种特殊模式程序在电脑上编译然后通过Wi-Fi或USB上传到Edison上运行。这需要安装Intel的Edison Arduino扩展包。由于官方源已失效需要手动添加社区维护的源过程较为繁琐。对于入门我建议先从直接在Edison上运行Python脚本开始更直观。5.3 第一个程序点亮LED与读取按钮让我们通过一个简单的硬件交互程序验证GPIO工作是否正常。Edison的GPIO编号有两种体系Linux内核的GPIO编号和更易用的MRAA库编号。我们使用mraa库它被预装在Ubilinux中。登录SSH创建一个Python文件vim led_button.py输入以下内容#!/usr/bin/env python import mraa import time # 初始化LED连接到GPIO 13 这是Arduino扩展板上的数字引脚13 led mraa.Gpio(13) led.dir(mraa.DIR_OUT) # 设置为输出模式 # 初始化按钮连接到GPIO 12 这是Arduino扩展板上的数字引脚12 外部接上拉电阻 button mraa.Gpio(12) button.dir(mraa.DIR_IN) # 设置为输入模式 print(按下连接到GPIO 12的按钮来控制GPIO 13的LED。按CtrlC退出。) try: while True: button_state button.read() # 读取按钮状态 if button_state 0: # 假设按钮按下为低电平接地 led.write(1) # 点亮LED print(按钮按下LED亮) else: led.write(0) # 熄灭LED print(按钮释放LED灭) time.sleep(0.1) # 延时100ms 防抖和降低CPU占用 except KeyboardInterrupt: print(程序退出。) led.write(0) # 确保退出时LED熄灭保存退出按Esc然后输入:wq。按照注释用杜邦线将一个LED串联一个220欧姆电阻接到数字引脚13和GND之间将一个轻触开关一端接到数字引脚12另一端接GND使用内部上拉所以按钮按下是低电平。运行程序python3 led_button.py按下按钮你应该能看到LED随之亮灭并在终端看到打印信息。这证明了你的Edison硬件组装正确GPIO驱动工作正常并且你具备了在它上面进行基础编程的能力。6. 进阶配置与深度优化指南当基础功能跑通后你可以根据项目需求进行更深度的定制和优化这部分往往决定了项目的最终体验和性能。6.1 系统性能调优与服务管理Edison的Atom处理器性能有限合理的系统调优能释放更多潜力。首先检查并设置CPU运行模式。Edison的CPU频率是动态调整的但有时会被限制在低功耗模式。# 查看当前CPU频率策略 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # 通常会是powersave。对于需要计算性能的场景可以临时改为performance echo performance /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor你可以将这条命令添加到/etc/rc.local文件中在exit 0之前使其开机生效。其次管理开机自启动服务。使用systemctl命令。# 列出所有服务 systemctl list-unit-files --typeservice # 禁用不必要的服务以节省资源例如蓝牙如果你不用 systemctl disable bluetooth.service # 启用SSH服务确保它开机启动 systemctl enable ssh对于Ubilinuxavahi-daemon用于mDNS实现主机名.local访问和chrony时间同步是建议保持开启的有用服务。6.2 使用Micro SD卡扩展存储与系统内置的eMMC空间紧张使用SD卡是必选项。首先将SD卡插入卡槽注意跳线J13需要连接才能从SD卡启动。使用fdisk -l命令查看磁盘SD卡通常对应/dev/mmcblk1。方案A将SD卡挂载为数据盘。这是最简单的方式不改变启动顺序。# 假设SD卡是/dev/mmcblk1p1 mkdir -p /media/sdcard mount /dev/mmcblk1p1 /media/sdcard # 为了开机自动挂载编辑/etc/fstab添加一行 # /dev/mmcblk1p1 /media/sdcard auto defaults,noatime 0 0之后你可以将Python库、项目文件、日志等存储到/media/sdcard。方案B将系统完全安装到SD卡并从中启动。这需要先将镜像刷写到SD卡使用Win32DiskImager或dd命令然后连接J13跳线。这样做的好处是系统盘空间巨大可以安装更多软件且不会破坏eMMC中的原厂系统方便随时切换回去。6.3 无线网络配置的稳定性陷阱Edison的Wi-Fi在早期驱动下可能不太稳定。除了在configure_edison中设置手动编辑网络配置有时更可靠。vim /etc/network/interfaces确保无线网络配置类似如下根据你的网络修改ssid和pskauto wlan0 iface wlan0 inet dhcp wpa-ssid 你的Wi-Fi名称 wpa-psk 你的Wi-Fi密码如果遇到频繁断连可以尝试禁用电源管理# 创建一个配置文件 echo options iwlwifi power_save0 /etc/modprobe.d/iwlwifi.conf然后重启网络服务或重启设备。6.4 交叉编译环境搭建在PC上为Edison编译程序在Edison本机上编译大型程序如OpenCV会非常慢。搭建交叉编译环境在性能更强的电脑上编译然后将二进制文件拷贝到Edison上运行是标准的开发流程。在电脑宿主机上安装工具链。你需要找到与Edison系统内核版本匹配的交叉编译工具链。对于Ubilinux基于Debian Jessie可以尝试使用gcc-arm-linux-gnueabihf。# 在Ubuntu/Debian宿主机上 sudo apt-get install gcc-arm-linux-gnueabihf g-arm-linux-gnueabihf编写一个简单的C程序例如hello.c。#include stdio.h int main() { printf(Hello, Cross-Compiled World!\n); return 0; }使用交叉编译器编译。arm-linux-gnueabihf-gcc -o hello_edison hello.c -static使用-static参数进行静态链接可以避免因Edison上缺少特定版本的动态链接库而运行失败。将生成的可执行文件hello_edison通过SCP拷贝到Edison。scp hello_edison root192.168.1.100:/home/root/在Edison上运行。chmod x hello_edison ./hello_edison如果看到输出说明交叉编译环境搭建成功。对于复杂的项目如使用CMake你需要相应地设置工具链文件Toolchain File来指定交叉编译器。7. 常见问题排查与修复实录即使按照教程操作你也可能会遇到一些“坑”。这里汇总了几个典型问题及其排查思路。7.1 上电无任何反应指示灯不亮检查电源确保USB线或DC电源适配器是好的。尝试更换一个电源或USB端口。检查跳线确认J16-17USB OTG跳线帽已连接。如果断开USB口无法从电脑取电。检查模块安装断电后重新拔插Edison模块确保所有引脚接触良好螺丝固定稳固。最坏情况可能存在硬件损坏如模块或扩展板短路。需要逐一替换部件排查。7.2 电脑无法识别USB设备无COM口或DFU驱动问题这是最常见的原因。确保已正确安装Intel Edison USB CDC和DFU驱动。在设备管理器中检查是否有带黄色叹号的未知设备。USB线问题有些USB线只能充电不能传输数据。换一条确认能传输数据的Micro USB线。进入DFU模式失败刷机时需要先断电按住SW1不放再上电。这个时机要把握好多试几次。可以观察电脑是否有识别USB设备的提示音。7.3 刷机过程失败或卡住镜像文件问题确保下载的镜像文件完整并且解压后选择了正确的FlashEdison.json文件。尝试重新下载镜像。USB端口问题使用电脑主板后置的USB 2.0端口避免使用USB 3.0端口或经过扩展坞的端口兼容性更好。关闭杀毒软件和防火墙有时安全软件会干扰刷机工具与设备的通信。彻底清理旧环境如果之前刷过其他系统可以尝试在Flash Tool Lite中选择“Erase All”选项后再刷写。7.4 系统启动后无法连接Wi-Fi密码或加密方式错误确保Wi-Fi密码正确并且网络使用的是WPA/WPA2-Personal即WPA-PSK加密。Edison对某些企业级加密如WPA2-Enterprise支持不好。信号强度问题Edison的Wi-Fi天线性能一般。确保设备离路由器不要太远或者尝试连接2.4GHz频段通常比5GHz频段穿透力更强。手动配置网络如前文所述尝试通过编辑/etc/network/interfaces文件进行配置然后重启网络服务systemctl restart networking。7.5 GPIO操作无反应或行为异常引脚编号错误这是最大的坑。确保你使用的mraa.Gpio()中的数字是MRAA库的编号而不是物理引脚号。查阅Edison Arduino扩展板引脚映射图至关重要。例如Arduino数字引脚13对应的是MRAA GPIO 13。引脚复用冲突Edison的许多引脚功能是复用的。某些引脚可能默认被设置为其他功能如I2C、UART。在使用前需要确保它们被设置为GPIO模式。对于Arduino扩展板MRAA库通常会处理好这些但如果你使用迷你扩展板或自定义底板可能需要手动配置。外部电路问题LED是否接了限流电阻按钮电路是上拉还是下拉使用万用表检查硬件连接是否正确。组装和驾驭一块Intel Edison就像与一位经验丰富但稍显年迈的工程师合作。它不会像最新的开发板那样“开箱即用”每一步都需要你理解其背后的原理。你会遇到驱动兼容、文档缺失、社区冷清等挑战但每解决一个问题你对嵌入式系统从硬件到软件的理解就会加深一层。这个过程所锻炼的排查问题、查阅资料、动手实验的能力远比单纯学会使用一块新板子更有价值。当最终看到你自己组装的Edison稳定运行并完成你设想的项目时那种成就感是独一无二的。它不仅仅是一个工具更是一段浓缩了嵌入式开发核心逻辑的实践课程。