ARM Linux 2.6 及以上版本

请检查 <ftp://ftp.arm.linux.org.uk/pub/armlinux> 以获取更新。

内核编译

为了编译 ARM Linux,您需要一个能够生成带有 GNU 扩展的 ARM ELF 代码的编译器。 据了解 GCC 3.3 是一个不错的编译器。 幸运的是,您无需猜测。 如果您的编译器是公认的违规者,内核将报告错误。

要以本机方式构建 ARM Linux,您不必更改顶级 Makefile 中的 ARCH = 行。 但是,如果您没有将 ARM Linux ELF 工具安装为默认工具,则应按以下详细信息更改 CROSS_COMPILE 行。

如果要交叉编译,请更改顶级 make 文件中的以下行

ARCH = <whatever>

使用

ARCH = arm

CROSS_COMPILE=

改为

CROSS_COMPILE=<your-path-to-your-compiler-without-gcc>

例如。

CROSS_COMPILE=arm-linux-

执行 ‘make config’,然后执行 ‘make Image’ 来构建内核 (arch/arm/boot/Image)。 可以通过执行 ‘make zImage’ 而不是 ‘make Image’ 来构建压缩映像。

错误报告等

请将补丁发送到补丁系统。 有关更多信息,请参见 http://www.arm.linux.org.uk/developer/patches/info.php 始终包含对补丁所做工作以及需要该补丁的原因的说明。

错误报告应发送至 linux-arm-kernel@lists.arm.linux.org.uk,或通过以下网址的网络表单提交:http://www.arm.linux.org.uk/developer/

发送错误报告时,请确保其中包含所有相关信息,例如,在问题之前/期间打印的内核消息,您正在执行的操作等。

包含文件

在 include/asm-arm 下创建了几个新的 include 目录,目的是减少顶级目录中的混乱。 这些目录及其用途如下所示

arch-*

特定于机器/平台的头文件

硬件

驱动程序内部 ARM 特定数据结构/定义

mach

通用 ARM 到特定机器接口的描述

proc-*

处理器相关的头文件(目前只有两类)

机器/平台支持

ARM 树包含对许多不同机器类型的支持。 为了继续支持这些差异,有必要按目录拆分特定于机器的部分。 为此,机器类别用于选择包含哪些目录和文件(我们将使用 $(MACHINE) 来引用该类别)

为此,我们现在有 arch/arm/mach-$(MACHINE) 目录,这些目录旨在容纳特定机器的非驱动程序文件(例如,PCI、内存管理、体系结构定义等)。 对于所有将来的机器,都应有一个相应的 arch/arm/mach-$(MACHINE)/include/mach 目录。

模块

尽管支持模块化(并且 FP 模拟器需要模块化),但在加载时,ARM2/ARM250/ARM3 机器上的每个模块都会占用内存,直至下一个 32k 边界(由于页面大小)。 因此,在这些机器上进行模块化真的值得吗?

但是,ARM6 及更高版本的机器允许模块占用 4k 的倍数,因此,使用这些处理器的 Acorn RiscPC 和其他体系结构可以很好地利用模块化。

ADFS 镜像文件

您可以通过挂载 ADFS 分区,然后使用环回设备驱动程序来访问 ADFS 分区上的镜像文件。 您必须安装 losetup。

请注意,PCEmulator DOS 分区在开头有一个分区表,因此,您必须为 losetup 提供 ‘-o offset’。

对开发者的请求

编写包含单独汇编程序文件的设备驱动程序时,请将其包含在 C 文件中,而不是 arch/arm/lib 目录中。 这允许将驱动程序编译为可加载模块,而无需将一半的代码编译到内核镜像中。

通常,除非确实有必要,否则请尽量避免使用汇编程序。 这使得驱动程序更难移植到其他硬件。

ST506 硬盘

ST506 硬盘控制器似乎工作正常(如果有点慢)。 目前,它们只能在 A4x0 主板上的控制器上工作,但是要使其在 Podule 上工作,只需要有一个带有 podule 的人将 IRQ 掩码和 HDC 基本地址添加到源代码中。

截至 96 年 3 月 31 日,它与两个驱动器一起工作(您应该将 ADFS *configure 硬盘设置为 2)。 我有一个内部 20MB 和一个巨大的外部 5.25 英寸 FH 64MB 驱动器(谁还需要更多 :-) )。

我刚刚从它那里获得了 240K/s(一个 bs=128k 的 dd); 这大约是 RiscOS 获得的一半; 但这比我上周获得的 50K/s 好多了 :-)

已知错误:驱动器数据错误可能会导致挂起; 包括控制器已使用 ECC 修复错误的情况。 (可能仅在这种情况下……嗯)。

1772 软盘

这似乎也可以正常工作,但最近没有进行太多测试。 目前还没有任何用于磁盘更改检测的代码,这可能有点问题! 欢迎就正确的方法提出建议。

CONFIG_MACH_CONFIG_ARCH_

2003 年对新机器的宏名称进行了更改。 历史上,CONFIG_ARCH_ 用于真正的架构,例如 SA1100,以及架构的实现,例如 Assabet。 为了清楚起见,决定将实现宏更改为读取 CONFIG_MACH_。 此外,由于这会使修补复杂化,因此没有进行追溯修复。

以前的注册可以在网上找到。

内核入口 (head.S)

通过 head.S 进入内核的初始入口,该入口使用机器无关的代码。 机器由入口处的 ‘r1’ 值选择,该值必须保持唯一。

由于 Linux 的 ARM 端口提供了大量的机器,因此我们有一种管理它的方法,以确保我们最终不会重复大量的代码。

我们将机器(或平台)支持代码分组到机器类中。 一个类通常基于一个或多个片上系统设备,并充当实际实现的自然容器。 这些类被赋予目录 - arch/arm/mach-<class> - 其中包含源文件和 include/mach/ 以支持机器类。

例如,SA1100 类基于 SA1100 和 SA1110 SoC 设备,并且包含支持如何使用板载和板外设备,或如何设置设备的代码,并提供该机器特定的“个性”。

对于支持设备树 (DT) 的平台,机器选择在运行时通过将设备树 blob 传递给内核来控制。 在编译时,必须选择对机器类型的支持。 这允许将单个多平台内核构建用于多种机器类型。

对于不使用设备树的平台,此机器选择由机器类型 ID 控制,该 ID 既充当运行时代码选择方法,又充当编译时代码选择方法。 您可以通过以下网址的网站注册新机器

注意:请勿为仅 DT 平台注册机器类型。 如果您的平台是仅 DT 平台,则无需注册机器类型。

---

Russell King (15/03/2004)