Intel Assabet (SA-1110 评估) 主板

请参阅: http://developer.intel.com

另请参阅 John G Dorsey <jd5q@andrew.cmu.edu> 的一些说明: http://www.cs.cmu.edu/~wearable/software/assabet.html

构建内核

使用当前默认设置构建内核

make assabet_defconfig
make oldconfig
make zImage

生成的内核镜像文件应位于 linux/arch/arm/boot/zImage。

安装引导加载程序

一些能够在 Assabet 上启动 Linux 的引导加载程序可用

BLOB (http://www.lartmaker.nl/lartware/blob/)

BLOB 是 LART 项目中使用的引导加载程序。一些贡献的补丁已合并到 BLOB 中,以增加对 Assabet 的支持。

康柏的 Bootldr + John Dorsey 为 Assabet 支持提供的补丁 (http://www.handhelds.org/Compaq/bootldr.html) (http://www.wearablegroup.org/software/bootldr/)

Bootldr 是康柏为 iPAQ Pocket PC 开发的引导加载程序。John Dorsey 提供了附加补丁,以增加对 Assabet 和 JFFS 文件系统的支持。

RedBoot (http://sources.redhat.com/redboot/)

RedBoot 是 Red Hat 基于 eCos RTOS 硬件抽象层开发的引导加载程序。它支持 Assabet 以及许多其他硬件平台。

RedBoot 目前是推荐的选择,因为它是唯一支持网络功能的,并且是维护最活跃的。

下面显示了如何使用 RedBoot 启动 Linux 的简要示例。但首先,您需要在闪存中安装 RedBoot。一个已知的、可工作的预编译 RedBoot 二进制文件可从以下位置获取

查找 redboot-assabet*.tgz。一些安装信息在 redboot-assabet*.txt 中提供。

RedBoot 初始配置

这里使用的命令在 RedBoot 用户指南中进行了解释,该指南在线地址为 http://sources.redhat.com/ecos/docs.html。请参考它以获取详细说明。

如果您有 CF 网卡(我的 Assabet 套件包含一张 Socket Communications Inc. 的 CF+ LP-E),您应该强烈考虑将其用于 TFTP 文件传输。您必须在 RedBoot 运行之前插入它,因为它无法动态检测到。

初始化闪存目录

fis init -f

要初始化非易失性设置,例如是否要使用 BOOTP 或静态 IP 地址等,请使用此命令

fconfig -i

将内核镜像写入闪存

首先,内核镜像必须加载到 RAM 中。如果您的 TFTP 服务器上有 zImage 文件

load zImage -r -b 0x100000

如果您更愿意通过串口使用 Y-Modem 上传

load -m ymodem -r -b 0x100000

写入闪存

fis create "Linux kernel" -b 0x100000 -l 0xc0000

启动内核

内核仍然需要文件系统才能启动。Ramdisk 镜像可以按如下方式加载

load ramdisk_image.gz -r -b 0x800000

同样,可以通过将文件名替换为 ‘-y ymodem’ 来使用 Y-Modem 上传而不是 TFTP。

现在可以从闪存中检索内核,如下所示

fis load "Linux kernel"

或按前述方式加载。要启动内核

exec -b 0x100000 -l 0xc0000

Ramdisk 镜像也可以存储到闪存中,但如后所述,对于闪存上的文件系统有更好的解决方案。

使用 JFFS2

使用 JFFS2(第二代日志闪存文件系统)可能是将可写文件系统存储到闪存中最便捷的方式。JFFS2 与 MTD 层结合使用,MTD 层负责低级闪存管理。有关 Linux MTD 的更多信息,可在线访问:http://www.linux-mtd.infradead.org/。关于创建 JFFS/JFFS2 镜像的 JFFS 操作指南可从同一网站获取。

例如,可以从下面提到的与预编译 RedBoot 镜像相同的 FTP 站点检索示例 JFFS2 镜像。

加载此文件

load sample_img.jffs2 -r -b 0x100000

结果应如下所示

RedBoot> load sample_img.jffs2 -r -b 0x100000
Raw file loaded 0x00100000-0x00377424

现在我们必须知道未分配闪存的大小

fis free

结果

RedBoot> fis free
  0x500E0000 .. 0x503C0000

上述值可能因文件系统大小和闪存类型而异。请将它们作为示例,并在使用时注意进行适当替换。

我们必须确定一些值

size of unallocated flash:      0x503c0000 - 0x500e0000 = 0x2e0000
size of the filesystem image:   0x00377424 - 0x00100000 = 0x277424

我们当然希望安装文件系统镜像,但我们也希望将其所有剩余的闪存空间都分配给它。要写入它

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

一旦 Linux 在启动过程中发现了 MTD “分区”,文件系统就会与它关联。在 RedBoot 中,‘fis list’ 命令会显示它们

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  0x00000000

然而 Linux 应该显示类似以下内容

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"

这里重要的是我们感兴趣的分区位置,它是第三个。在 Linux 中,这对应于 /dev/mtdblock2。因此,要在闪存中使用内核及其根文件系统启动 Linux,我们需要这个 RedBoot 命令

fis load "Linux kernel"
exec -b 0x100000 -l 0xc0000 -c "root=/dev/mtdblock2"

当然,除了 JFFS 之外,还可以使用其他文件系统,例如 cramfs。您可能希望通过 NFS 等方式启动根文件系统。此外,也可以在从 ramdisk 或 NFS 启动 Linux 后,直接从 Linux 内部刷写文件系统,这有时更方便。Linux MTD 仓库也有许多处理闪存的工具,例如擦除闪存。然后 JFFS2 可以直接挂载到刚擦除的分区上,文件也可以直接复制过去。等等...

RedBoot 脚本

如果每次 Assabet 重启时都必须输入上述所有命令,那它们就不是那么有用了。因此,可以使用 RedBoot 的脚本功能来自动化启动过程。

例如,我使用此命令来启动 Linux,其中内核和 ramdisk 镜像都从网络上的 TFTP 服务器获取

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

然后,重启 Assabet 只需要等待登录提示符即可。

Nicolas Pitre nico@fluxnic.net

2001年6月12日

-rmk 树中外设的状态 (2001年10月14日更新)

Assabet
串口
无线电: TX, RX, CTS, DSR, DCD, RI
  • 电源管理 (PM): 未测试。

  • COM: TX, RX, CTS, DSR, DCD, RTS, DTR, 电源管理 (PM)

  • 电源管理 (PM): 未测试。

  • I2C: 已实现,未完全测试。

  • L3: 已完全测试,通过。

  • 电源管理 (PM): 未测试。

视频
  • LCD: 已完全测试。电源管理 (PM)

(连接 neponset 时 LCD 不喜欢被清屏)

  • 视频输出: 未完全测试

音频

UDA1341: - 播放: 已完全测试,通过。- 录音: 已实现,未测试。- 电源管理 (PM): 未测试。

UCB1200: - 音频播放: 已实现,未充分测试。- 音频录制: 已实现,未充分测试。- 电信音频播放: 已实现,未充分测试。- 电信音频录制: 已实现,未充分测试。- POTS 控制: 否 - 触摸屏: 是 - 电源管理 (PM): 未测试。

其他
  • PCMCIA

  • LPE: 已完全测试,通过。

  • USB: 否

  • IRDA

  • SIR: 已完全测试,通过。

  • FIR: 已完全测试,通过。

  • 电源管理 (PM): 未测试。

Neponset
串口
  • COM1,2: TX, RX, CTS, DSR, DCD, RTS, DTR

  • 电源管理 (PM): 未测试。

  • USB: 已实现,未充分测试。

  • PCMCIA: 已实现,未充分测试。

  • CF: 已实现,未充分测试。

  • 电源管理 (PM): 未测试。

更多内容可以在 -np (Nicolas Pitre 的) 树中找到。