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 的支持。

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

Bootldr 是 Compaq 为 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-Modem 上传代替 TFTP,方法是将文件名替换为“-y ymodem”。

现在可以像这样从闪存中检索内核

fis load "Linux kernel"

或如前所述加载。 要引导内核

exec -b 0x100000 -l 0xc0000

ramdisk 映像也可以存储到闪存中,但是对于闪存文件系统,有更好的解决方案,如下所述。

使用 JFFS2

使用 JFFS2(第二个日志闪存文件系统)可能是将可写文件系统存储到闪存中的最方便的方法。 JFFS2 与负责低级闪存管理的 MTD 层结合使用。 有关 Linux MTD 的更多信息,请访问在线:http://www.linux-mtd.infradead.org/。 来自同一站点的 JFFS 如何操作提供了有关创建 JFFS/JFFS2 映像的一些信息。

例如,可以从下面提到的预编译 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 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

(LCD 不喜欢与连接的 neponset 一起消隐)

  • 视频输出:不完全

音频

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)树中找到更多内容。