2026/9/11 17:30:38

Linux 内核中的 Intel StrongARM SA-1100 平台支持:Assabet 板级引导、SA1100 串口与 JFFS2 实战指南

Linux 内核中的 Intel StrongARM SA-1100 平台支持:Assabet 板级引导、SA1100 串口与 JFFS2 实战指南 Linux 内核中的 Intel StrongARM SA-1100 平台支持Assabet 板级引导、SA1100 串口与 JFFS2 实战指南【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux导读本文以 Linux 内核官方文档 Documentation/arch/arm/sa1100/index.rst 及其下属文档为核心系统讲解基于 Intel StrongARM SA-1100SA-1110处理器的板级 Linux 支持包括 Assabet 评估板的完整引导流程内核构建、RedBoot 引导器配置、TFTP/Y-Modem 加载、MTD 分区与 JFFS2 根文件系统、SA1100 内置串口的设备节点规划以及 CerfBoard 与 LART 两块典型开发板的移植要点。读完本文你将掌握一套可复现的 SA-1100 嵌入式 Linux 部署链路并能从当前内核源码arch/arm/mach-sa1100/、drivers/tty/serial/sa1100.c、drivers/mtd/maps/sa1100-flash.c中印证每一步的底层实现。一、SA-1100 平台与内核文档体系概览1.1 StrongARM SA-1100 是什么Intel StrongARM SA-1100 是 1990 年代末面向手持与嵌入式设备推出的 ARM 处理器SA-1110 为其后续型号。它在片上集成了大量外设3 路 UART含红外 SIR/FIR、LCD 控制器、PCMCIA/CF 控制器、USB 功能控制器、音频接口UDA1341/UCB1200 编解码器并可通过 Neponset 子卡扩展 COM 口、USB 与 PCMCIA。Linux 内核将其归入arch/arm/mach-sa1100/目录管理。1.2 文档目录结构与本文组织Documentation/arch/arm/sa1100/index.rst 是这一主题的索引页共收录四份文档文档主题assabet.rstIntel AssabetSA-1110 评估板的完整部署指南cerf.rstIntrinsyc CerfBoard/Cube已停产板级支持说明lart.rstLinux Advanced Radio TerminalLART开发板简介serial_uart.rstSA1100 内置串口的主/次设备号分配与设备节点创建从内核源码看SA-1100 机器家族还包含 Colliecollie.c、H3600h3600.c、Jornada 720jornada720.c等机型本文聚焦文档明确覆盖的 Assabet、CerfBoard、LART 三块板卡。二、Assabet 评估板从零构建内核Assabet 是 Intel 官方的 SA-1110 评估板相关说明可查阅当时的 Intel 开发者网站及 CMU 的可穿戴计算项目资料原文档给出了对应外部链接。内核构建采用经典的defconfig流程make assabet_defconfig make oldconfig make zImage构建完成后内核镜像位于linux/arch/arm/boot/zImage。当前仓库中 arch/arm/configs/assabet_defconfig 保存了这份默认配置其中与本文后续内容直接相关的关键项包括CONFIG_ARCH_SA1100y、CONFIG_SA1100_ASSABETy启用 SA-1100 架构与 Assabet 板级支持CONFIG_CMDLINEmem32M consolettySA0,38400n8 initrd0xc0800000,3M root/dev/ram默认命令行把ttySA0指定为控制台波特率 384008N1并使用 initrd 作为初始根文件系统CONFIG_SERIAL_SA1100y、CONFIG_SERIAL_SA1100_CONSOLEy启用 SA1100 串口驱动与串口控制台CONFIG_MTDy、CONFIG_MTD_REDBOOT_PARTSy、CONFIG_MTD_BLOCKy、CONFIG_MTD_CFIy、CONFIG_MTD_SA1100y启用 MTD 层、RedBoot 分区解析与 SA1100 片选上的 CFI NOR FlashCONFIG_JFFS2_FSy启用 JFFS2 闪存文件系统CONFIG_PCMCIA_SA1100y、CONFIG_PCMCIA_PCNETyPCMCIA 与 CF 网卡支持。make oldconfig的作用是让新引入的配置选项沿用既有默认值适合在升级内核源码后复用旧的.configmake zImage只生成压缩内核镜像若需要模块还需追加make modules参见下文 CerfBoard 一节。三、引导器选型与 RedBoot 初始配置3.1 可用的引导器原文档列出三款能为 Assabet 引导 Linux 的引导器BLOBLART 项目使用的引导器社区贡献补丁为其加入了 Assabet 支持Compaq Bootldr John Dorsey 补丁Compaq 为 iPAQ Pocket PC 开发的引导器Dorsey 的补丁为其加入 Assabet 与 JFFS 文件系统支持RedBootRed Hat 基于 eCos RTOS 硬件抽象层开发的引导器支持包括 Assabet 在内的众多平台。原文档明确推荐RedBoot理由是它是三者中唯一具备网络支持且维护最活跃的引导器。可用的预编译 RedBoot 二进制redboot-assabet*.tgz附安装说明redboot-assabet*.txt可从当时的内核 ARM 社区 FTP 镜像获取需要先将其烧入 Assabet 的 Flash。3.2 初始化 Flash 与网络配置RedBoot 安装完成后通过串口进入 RedBoot 命令行做首次配置fis init -ffis init -f用于初始化 Flash 映像系统FIS目录-f表示强制重建。随后初始化非易失性设置是否使用 BOOTP、静态 IP 等fconfig -ifconfig以交互方式将配置写入 Flash 中的非易失性存储-i进入交互模式。关于 CF 网卡原文档示例为 Socket Communications 的 CF LP-E由于 RedBoot 无法动态检测网卡必须在 RedBoot 运行之前插入才能用它进行 TFTP 传输。四、将内核镜像写入 Flash4.1 加载 zImage 到 RAM如果 TFTP 服务器上已有 zImageload zImage -r -b 0x100000参数含义-r表示原始二进制文件-b 0x100000指定加载到 RAM 的物理地址 0x100000。如果走串口 Y-Modem 上传load -m ymodem -r -b 0x1000004.2 写入 Flashfis create Linux kernel -b 0x100000 -l 0xc0000该命令把 RAM 0x100000 处、长度 0xc0000768 KB的数据写入 Flash并命名为Linux kernel同时记录到 FIS 目录。4.3 加载 ramdisk 与启动内核内核启动仍需要文件系统。通过 TFTP 加载 ramdisk 镜像load ramdisk_image.gz -r -b 0x800000同样支持 Y-Modem把文件名替换为-y ymodem即可。之后从 Flash 取回内核并执行fis load Linux kernel exec -b 0x100000 -l 0xc0000exec在指定地址执行内核-b与-l必须与写入时一致。ramdisk 也可存入 Flash但正如下一节所述对可写根文件系统而言 JFFS2 是更优方案。五、在 Flash 上使用 JFFS2 根文件系统5.1 为什么选择 JFFS2JFFS2Second Journalling Flash File System是与 MTD 层配合使用的日志型闪存文件系统MTD 负责底层 Flash 管理二者结合是当时在 Flash 上存放可写文件系统最便捷的方案。原文档给出的完整实践如下。先加载示例 JFFS2 镜像来自 RedBoot 预编译包同一 FTP 站点load sample_img.jffs2 -r -b 0x100000实际输出示例RedBoot load sample_img.jffs2 -r -b 0x100000 Raw file loaded 0x00100000-0x003774245.2 计算 Flash 空闲区与镜像尺寸用fis free查询未分配 Flash 区间RedBoot fis free 0x500E0000 .. 0x503C0000随后计算两个关键数值实际值随文件系统大小与 Flash 类型变化务必按自己的输出替换size of unallocated flash: 0x503c0000 - 0x500e0000 0x2e0000 size of the filesystem image: 0x00377424 - 0x00100000 0x2774245.3 解锁、擦除、写入并登记分区fis unlock -f 0x500E0000 -l 0x2e0000 fis erase -f 0x500E0000 -l 0x2e0000 fis write -b 0x100000 -l 0x277424 -f 0x500E0000 fis create JFFS2 -n -f 0x500E0000 -l 0x2e0000四步含义先解锁目标 Flash 区-f指定 Flash 地址、-l指定长度再整体擦除然后把 RAM 中的镜像写入最后用-n不搬运数据仅登记在 FIS 目录中创建名为JFFS2、覆盖整个未分配区间的分区。5.4 从 FIS 到 Linux MTD 分区写入后RedBoot 的fis list显示 Flash 布局RedBoot fis list Name FLASH addr Mem addr Length Entry point RedBoot 0x50000000 0x50000000 0x00020000 0x00000000 RedBoot config 0x503C0000 0x503C0000 0x00020000 0x00000000 FIS directory 0x503E0000 0x503E0000 0x00020000 0x00000000 Linux kernel 0x50020000 0x00100000 0x000C0000 0x00000000 JFFS2 0x500E0000 0x500E0000 0x002E0000 0x00000000Linux 启动时则打印对应的 MTD 探测与分区信息SA1100 flash: probing 32-bit flash bus SA1100 flash: Found 2 x16 devices at 0x0 in 32-bit mode Using RedBoot partition definition Creating 5 MTD partitions on SA1100 flash: 0x00000000-0x00020000 : RedBoot 0x00020000-0x000e0000 : Linux kernel 0x000e0000-0x003c0000 : JFFS2 0x003c0000-0x003e0000 : RedBoot config 0x003e0000-0x00400000 : FIS directory这段启动日志正是内核 MTD 子系统的真实行为其实现位于 drivers/mtd/maps/sa1100-flash.c该驱动负责 SA11x0 片选上的 Flash 探测与映射源码头注明确标注(C) 2000 Nicolas Pitre与本文 Assabet 文档作者一致配合CONFIG_MTD_REDBOOT_PARTS解析 RedBoot FIS 目录生成分区。第 5 个分区即文档强调的第三个、JFFS2 所在分区在 Linux 中对应/dev/mtdblock2。因此内核与根文件系统都放在 Flash 时的完整启动命令为fis load Linux kernel exec -b 0x100000 -l 0xc0000 -c root/dev/mtdblock2-c向内核传递root/dev/mtdblock2命令行指定根设备为第三个 MTD 块设备。除 JFFS2 外也可选用 cramfs 等只读文件系统、通过 NFS 挂载根文件系统或在 ramdisk/NFS 引导后从 Linux 内部直接烧写 FlashMTD 仓库还提供擦除等大量 Flash 工具JFFS2 可直接挂载到刚擦除的分区上并拷贝文件。六、用 RedBoot 脚本自动化引导每次复位都手工输入上述命令显然不现实RedBoot 提供脚本机制固化启动流程。原文档给出从 TFTP 加载内核与 ramdisk 的完整交互示例RedBoot fconfig Run script at boot: false true Boot script: Enter script, terminate with empty line load zImage -r -b 0x100000 load ramdisk_ks.gz -r -b 0x800000 exec -b 0x100000 -l 0xc0000 Boot script timeout (1000ms resolution): 3 Use BOOTP for network configuration: true GDB connection port: 9000 Network debug at boot time: false Update RedBoot non-volatile configuration - are you sure (y/n)? y要点说明Run script at boot设为true后每次上电自动执行脚本Boot script timeout以 1000ms 为分辨率设为 3 表示等待 3 秒期间可按中断键进入交互模式Use BOOTP使能 DHCP/BOOTP 自动取网络配置GDB connection port: 9000是 RedBoot 内建 GDB stub 的调试端口。保存后Assabet 复位即可一路引导到登录提示符。七、SA1100 内置串口设备号、节点与用户态配置7.1 官方分配的主/次设备号Documentation/arch/arm/sa1100/serial_uart.rst 记录了 2000 年 9 月由 H. Peter Anvin 代表设备列表维护者devicelanana.org正式分配的设备号主设备号 204/205 为低密度串口设备SA1100 三个内置串口使用 204 上的次设备号 5/6/7另在 205 上提供对应的拨号callout设备主设备号次设备号设备名用途2045/dev/ttySA0SA1100 内置串口 02046/dev/ttySA1SA1100 内置串口 12047/dev/ttySA2SA1100 内置串口 22055/dev/cusa0ttySA0 的 callout 设备2056/dev/cusa1ttySA1 的 callout 设备2057/dev/cusa2ttySA2 的 callout 设备这份分配在内核驱动中得到了印证drivers/tty/serial/sa1100.c 开头的#define SERIAL_SA1100_MAJOR 204与#define MINOR_START 5以及NR_PORTS 3与文档中的主设备号 204、起始次设备号 5、3 个端口完全一致。该驱动将 SA1100 UART 的 UTCR0-3/UTSR0-1/UTDR 等寄存器映射为标准的struct uart_port操作集并入内核串口核心serial_core.h。7.2 创建设备节点在基于 SA1100 设备的根文件系统中必须手工创建这些 inodemknod ttySA0 c 204 5 mknod ttySA1 c 204 6 mknod ttySA2 c 204 7 mknod cusa0 c 205 5 mknod cusa1 c 205 6 mknod cusa2 c 205 7mknod 名字 c 主设备号 次设备号中c表示字符设备。若使用 devtmpfs/udev 等动态设备管理也可以由内核在注册驱动时自动生成节点但嵌入式最小系统中手工mknod仍是文档给出的权威做法。7.3 用户态适配inittab 与 securetty除设备节点外用户态程序必须使用正确的设备名。经典例子是/etc/inittab中启动 getty 的配置把ttyS0替换为ttySA0、ttyS1替换为ttySA1依此类推别忘在/etc/securetty中加入ttySA0、console或相应 tty 名否则 root 将不允许在该终端登录。Assabet 默认配置中consolettySA0,38400n8的命令行与上述设备节点体系配套控制台输出走ttySA0波特率 38400、8 数据位、无校验、1 停止位。八、CerfBoard 与 LART另两块 SA-1100 板卡8.1 Intrinsyc CerfBoard/CubeCerfBoard 是 Intrinsyc 基于 StrongARM SA-1110 的板卡级计算机约 2 英寸见方板载以太网控制器、RS232 兼容串口、USB 功能口与一个 CompactFlash 插槽。原文档特别声明StrongARM 版本的 CerfBoard/Cube 已停产本文介绍的是内核对其的既有支持。当前版本内核支持CompactFlash 插槽需在 General Setup 中启用 PCMCIA 及相应选项板载 Crystal CS8900 以太网控制器Network Devices 中选 Cerf CS8900A support带串口控制台的串口硬编码为 38400 8N1。交叉编译并部署的完整命令序列需要一台同时运行 BOOTP 与 TFTP 的服务器评估套件附有引导器详细说明make ARCHarm CROSS_COMPILEarm-linux- cerfcube_defconfig make ARCHarm CROSS_COMPILEarm-linux- zImage make ARCHarm CROSS_COMPILEarm-linux- modules cp arch/arm/boot/zImage TFTP directory注意这里显式传入了ARCHarm与CROSS_COMPILEarm-linux-交叉编译参数zImage构建完成后拷入 TFTP 目录供目标板引导器BOOTP 取 IP、TFTP 取镜像加载。当前仓库未收录cerfcube_defconfig该板卡支持已在较新内核中移除上述命令保留了原文档的原始记录实际操作应以目标内核版本对应的配置名为准。8.2 Linux Advanced Radio TerminalLARTLART 是一块 7.5×10cm 的 SA-1100 板卡专为嵌入式应用设计32MB DRAM、4MB Flash ROM、双 RS232 以及全部 StrongARM 外设几乎所有 SA 信号都通过连接器引出电源输入 3.5V~16V余量设计用于支撑多种子板当时正在开发四合一 Ethernet/IDE/PS2/声卡子板。值得注意的历史意义是LART 的硬件设计以开放许可发布是早期开放硬件运动的重要代表详见 lartmaker.nl 网站资料。九、Assabet 外设支持状态一览-rmk 树原文档以状态报告形式记录了 -rmk 内核树截至 2001-10-14 的 Assabet 外设支持情况对评估板卡可用性极具参考价值Assabet 本板串口Radio 口TX/RX/CTS/DSR/DCD/RI 可用PM电源管理未测试COM 口TX/RX/CTS/DSR/DCD/RTS/DTR/PM 可用I2C 已实现、未完全测试L3 总线完全测试通过PM 未测试视频LCD 完全测试通过注意连接 Neponset 子卡时 LCD 不能 blankVideo out 未完全测试音频 UDA1341播放完全测试通过录音已实现未测试PM 未测试UCB1200音频播放/录音、电话音频播放/录音均已实现但未重度测试POTS 控制不支持触摸屏可用PM 未测试其他PCMCIA LPE 完全测试通过USB 不支持IRDA SIR 与 FIR 均完全测试通过PM 未测试。Neponset 子卡串口 COM1/2TX/RX/CTS/DSR/DCD/RTS/DTR 可用PM 未测试USB 已实现未重度测试PCMCIA 已实现未重度测试CF 已实现未重度测试PM 未测试。更多内容可查阅 -npNicolas Pitre维护树。该状态表对应的板级代码可在 arch/arm/mach-sa1100/assabet.c 与 arch/arm/mach-sa1100/neponset.c 中找到实现。结语从 Assabet 的 RedBoot 部署、JFFS2 分区计算到 SA1100 串口的设备号体系再到 CerfBoard 与 LART 的板级差异本文完整还原了 Linux 内核官方文档对 SA-1100 平台的部署指导并用assabet_defconfig、drivers/tty/serial/sa1100.c、drivers/mtd/maps/sa1100-flash.c等源码做了交叉印证。对于研究早期 ARM 嵌入式 Linux 引导流程、MTD/JFFS2 实践或经典串口设备号机制的读者这些文档与源码仍是可直接对照的权威素材。参考文件索引文档 index.rst、assabet.rst、cerf.rst、lart.rst、serial_uart.rst配置 arch/arm/configs/assabet_defconfig串口驱动 drivers/tty/serial/sa1100.cMTD Flash 映射驱动 drivers/mtd/maps/sa1100-flash.c板级代码 arch/arm/mach-sa1100/assabet.c、arch/arm/mach-sa1100/neponset.c、arch/arm/mach-sa1100/Kconfig【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考