Back to home page




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