Back to home page

OSCL-LXR

 
 

    


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)