0001 =======================
0002 ARM Linux 2.6 and upper
0003 =======================
0004
0005 Please check <ftp://ftp.arm.linux.org.uk/pub/armlinux> for
0006 updates.
0007
0008 Compilation of kernel
0009 ---------------------
0010
0011 In order to compile ARM Linux, you will need a compiler capable of
0012 generating ARM ELF code with GNU extensions. GCC 3.3 is known to be
0013 a good compiler. Fortunately, you needn't guess. The kernel will report
0014 an error if your compiler is a recognized offender.
0015
0016 To build ARM Linux natively, you shouldn't have to alter the ARCH = line
0017 in the top level Makefile. However, if you don't have the ARM Linux ELF
0018 tools installed as default, then you should change the CROSS_COMPILE
0019 line as detailed below.
0020
0021 If you wish to cross-compile, then alter the following lines in the top
0022 level make file::
0023
0024 ARCH = <whatever>
0025
0026 with::
0027
0028 ARCH = arm
0029
0030 and::
0031
0032 CROSS_COMPILE=
0033
0034 to::
0035
0036 CROSS_COMPILE=<your-path-to-your-compiler-without-gcc>
0037
0038 eg.::
0039
0040 CROSS_COMPILE=arm-linux-
0041
0042 Do a 'make config', followed by 'make Image' to build the kernel
0043 (arch/arm/boot/Image). A compressed image can be built by doing a
0044 'make zImage' instead of 'make Image'.
0045
0046
0047 Bug reports etc
0048 ---------------
0049
0050 Please send patches to the patch system. For more information, see
0051 http://www.arm.linux.org.uk/developer/patches/info.php Always include some
0052 explanation as to what the patch does and why it is needed.
0053
0054 Bug reports should be sent to linux-arm-kernel@lists.arm.linux.org.uk,
0055 or submitted through the web form at
0056 http://www.arm.linux.org.uk/developer/
0057
0058 When sending bug reports, please ensure that they contain all relevant
0059 information, eg. the kernel messages that were printed before/during
0060 the problem, what you were doing, etc.
0061
0062
0063 Include files
0064 -------------
0065
0066 Several new include directories have been created under include/asm-arm,
0067 which are there to reduce the clutter in the top-level directory. These
0068 directories, and their purpose is listed below:
0069
0070 ============= ==========================================================
0071 `arch-*` machine/platform specific header files
0072 `hardware` driver-internal ARM specific data structures/definitions
0073 `mach` descriptions of generic ARM to specific machine interfaces
0074 `proc-*` processor dependent header files (currently only two
0075 categories)
0076 ============= ==========================================================
0077
0078
0079 Machine/Platform support
0080 ------------------------
0081
0082 The ARM tree contains support for a lot of different machine types. To
0083 continue supporting these differences, it has become necessary to split
0084 machine-specific parts by directory. For this, the machine category is
0085 used to select which directories and files get included (we will use
0086 $(MACHINE) to refer to the category)
0087
0088 To this end, we now have arch/arm/mach-$(MACHINE) directories which are
0089 designed to house the non-driver files for a particular machine (eg, PCI,
0090 memory management, architecture definitions etc). For all future
0091 machines, there should be a corresponding arch/arm/mach-$(MACHINE)/include/mach
0092 directory.
0093
0094
0095 Modules
0096 -------
0097
0098 Although modularisation is supported (and required for the FP emulator),
0099 each module on an ARM2/ARM250/ARM3 machine when is loaded will take
0100 memory up to the next 32k boundary due to the size of the pages.
0101 Therefore, is modularisation on these machines really worth it?
0102
0103 However, ARM6 and up machines allow modules to take multiples of 4k, and
0104 as such Acorn RiscPCs and other architectures using these processors can
0105 make good use of modularisation.
0106
0107
0108 ADFS Image files
0109 ----------------
0110
0111 You can access image files on your ADFS partitions by mounting the ADFS
0112 partition, and then using the loopback device driver. You must have
0113 losetup installed.
0114
0115 Please note that the PCEmulator DOS partitions have a partition table at
0116 the start, and as such, you will have to give '-o offset' to losetup.
0117
0118
0119 Request to developers
0120 ---------------------
0121
0122 When writing device drivers which include a separate assembler file, please
0123 include it in with the C file, and not the arch/arm/lib directory. This
0124 allows the driver to be compiled as a loadable module without requiring
0125 half the code to be compiled into the kernel image.
0126
0127 In general, try to avoid using assembler unless it is really necessary. It
0128 makes drivers far less easy to port to other hardware.
0129
0130
0131 ST506 hard drives
0132 -----------------
0133
0134 The ST506 hard drive controllers seem to be working fine (if a little
0135 slowly). At the moment they will only work off the controllers on an
0136 A4x0's motherboard, but for it to work off a Podule just requires
0137 someone with a podule to add the addresses for the IRQ mask and the
0138 HDC base to the source.
0139
0140 As of 31/3/96 it works with two drives (you should get the ADFS
0141 `*configure` harddrive set to 2). I've got an internal 20MB and a great
0142 big external 5.25" FH 64MB drive (who could ever want more :-) ).
0143
0144 I've just got 240K/s off it (a dd with bs=128k); thats about half of what
0145 RiscOS gets; but it's a heck of a lot better than the 50K/s I was getting
0146 last week :-)
0147
0148 Known bug: Drive data errors can cause a hang; including cases where
0149 the controller has fixed the error using ECC. (Possibly ONLY
0150 in that case...hmm).
0151
0152
0153 1772 Floppy
0154 -----------
0155 This also seems to work OK, but hasn't been stressed much lately. It
0156 hasn't got any code for disc change detection in there at the moment which
0157 could be a bit of a problem! Suggestions on the correct way to do this
0158 are welcome.
0159
0160
0161 `CONFIG_MACH_` and `CONFIG_ARCH_`
0162 ---------------------------------
0163 A change was made in 2003 to the macro names for new machines.
0164 Historically, `CONFIG_ARCH_` was used for the bonafide architecture,
0165 e.g. SA1100, as well as implementations of the architecture,
0166 e.g. Assabet. It was decided to change the implementation macros
0167 to read `CONFIG_MACH_` for clarity. Moreover, a retroactive fixup has
0168 not been made because it would complicate patching.
0169
0170 Previous registrations may be found online.
0171
0172 <http://www.arm.linux.org.uk/developer/machines/>
0173
0174 Kernel entry (head.S)
0175 ---------------------
0176 The initial entry into the kernel is via head.S, which uses machine
0177 independent code. The machine is selected by the value of 'r1' on
0178 entry, which must be kept unique.
0179
0180 Due to the large number of machines which the ARM port of Linux provides
0181 for, we have a method to manage this which ensures that we don't end up
0182 duplicating large amounts of code.
0183
0184 We group machine (or platform) support code into machine classes. A
0185 class typically based around one or more system on a chip devices, and
0186 acts as a natural container around the actual implementations. These
0187 classes are given directories - arch/arm/mach-<class> - which contain
0188 the source files and include/mach/ to support the machine class.
0189
0190 For example, the SA1100 class is based upon the SA1100 and SA1110 SoC
0191 devices, and contains the code to support the way the on-board and off-
0192 board devices are used, or the device is setup, and provides that
0193 machine specific "personality."
0194
0195 For platforms that support device tree (DT), the machine selection is
0196 controlled at runtime by passing the device tree blob to the kernel. At
0197 compile-time, support for the machine type must be selected. This allows for
0198 a single multiplatform kernel build to be used for several machine types.
0199
0200 For platforms that do not use device tree, this machine selection is
0201 controlled by the machine type ID, which acts both as a run-time and a
0202 compile-time code selection method. You can register a new machine via the
0203 web site at:
0204
0205 <http://www.arm.linux.org.uk/developer/machines/>
0206
0207 Note: Please do not register a machine type for DT-only platforms. If your
0208 platform is DT-only, you do not need a registered machine type.
0209
0210 ---
0211
0212 Russell King (15/03/2004)