| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | ARM Linux 2.6 | 
|  | 2 | ============= | 
|  | 3 |  | 
|  | 4 | Please check <ftp://ftp.arm.linux.org.uk/pub/armlinux> for | 
|  | 5 | updates. | 
|  | 6 |  | 
|  | 7 | Compilation of kernel | 
|  | 8 | --------------------- | 
|  | 9 |  | 
|  | 10 | In order to compile ARM Linux, you will need a compiler capable of | 
| Adrian Bunk | 20faa7c | 2005-11-05 10:20:56 +0000 | [diff] [blame^] | 11 | generating ARM ELF code with GNU extensions.  GCC 3.3 is known to be | 
|  | 12 | a good compiler.  Fortunately, you needn't guess.  The kernel will report | 
|  | 13 | an error if your compiler is a recognized offender. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 14 |  | 
|  | 15 | To build ARM Linux natively, you shouldn't have to alter the ARCH = line | 
|  | 16 | in the top level Makefile.  However, if you don't have the ARM Linux ELF | 
|  | 17 | tools installed as default, then you should change the CROSS_COMPILE | 
|  | 18 | line as detailed below. | 
|  | 19 |  | 
|  | 20 | If you wish to cross-compile, then alter the following lines in the top | 
|  | 21 | level make file: | 
|  | 22 |  | 
|  | 23 | ARCH = <whatever> | 
|  | 24 | with | 
|  | 25 | ARCH = arm | 
|  | 26 |  | 
|  | 27 | and | 
|  | 28 |  | 
|  | 29 | CROSS_COMPILE= | 
|  | 30 | to | 
|  | 31 | CROSS_COMPILE=<your-path-to-your-compiler-without-gcc> | 
|  | 32 | eg. | 
|  | 33 | CROSS_COMPILE=arm-linux- | 
|  | 34 |  | 
|  | 35 | Do a 'make config', followed by 'make Image' to build the kernel | 
|  | 36 | (arch/arm/boot/Image).  A compressed image can be built by doing a | 
|  | 37 | 'make zImage' instead of 'make Image'. | 
|  | 38 |  | 
|  | 39 |  | 
|  | 40 | Bug reports etc | 
|  | 41 | --------------- | 
|  | 42 |  | 
|  | 43 | Please send patches to the patch system.  For more information, see | 
|  | 44 | http://www.arm.linux.org.uk/patches/info.html  Always include some | 
|  | 45 | explanation as to what the patch does and why it is needed. | 
|  | 46 |  | 
|  | 47 | Bug reports should be sent to linux-arm-kernel@lists.arm.linux.org.uk, | 
|  | 48 | or submitted through the web form at | 
|  | 49 | http://www.arm.linux.org.uk/forms/solution.shtml | 
|  | 50 |  | 
|  | 51 | When sending bug reports, please ensure that they contain all relevant | 
|  | 52 | information, eg. the kernel messages that were printed before/during | 
|  | 53 | the problem, what you were doing, etc. | 
|  | 54 |  | 
|  | 55 |  | 
|  | 56 | Include files | 
|  | 57 | ------------- | 
|  | 58 |  | 
|  | 59 | Several new include directories have been created under include/asm-arm, | 
|  | 60 | which are there to reduce the clutter in the top-level directory.  These | 
|  | 61 | directories, and their purpose is listed below: | 
|  | 62 |  | 
|  | 63 | arch-*	machine/platform specific header files | 
|  | 64 | hardware	driver-internal ARM specific data structures/definitions | 
|  | 65 | mach		descriptions of generic ARM to specific machine interfaces | 
|  | 66 | proc-*	processor dependent header files (currently only two | 
|  | 67 | categories) | 
|  | 68 |  | 
|  | 69 |  | 
|  | 70 | Machine/Platform support | 
|  | 71 | ------------------------ | 
|  | 72 |  | 
|  | 73 | The ARM tree contains support for a lot of different machine types.  To | 
|  | 74 | continue supporting these differences, it has become necessary to split | 
|  | 75 | machine-specific parts by directory.  For this, the machine category is | 
|  | 76 | used to select which directories and files get included (we will use | 
|  | 77 | $(MACHINE) to refer to the category) | 
|  | 78 |  | 
|  | 79 | To this end, we now have arch/arm/mach-$(MACHINE) directories which are | 
|  | 80 | designed to house the non-driver files for a particular machine (eg, PCI, | 
|  | 81 | memory management, architecture definitions etc).  For all future | 
|  | 82 | machines, there should be a corresponding include/asm-arm/arch-$(MACHINE) | 
|  | 83 | directory. | 
|  | 84 |  | 
|  | 85 |  | 
|  | 86 | Modules | 
|  | 87 | ------- | 
|  | 88 |  | 
|  | 89 | Although modularisation is supported (and required for the FP emulator), | 
|  | 90 | each module on an ARM2/ARM250/ARM3 machine when is loaded will take | 
|  | 91 | memory up to the next 32k boundary due to the size of the pages. | 
|  | 92 | Therefore, modularisation on these machines really worth it? | 
|  | 93 |  | 
|  | 94 | However, ARM6 and up machines allow modules to take multiples of 4k, and | 
|  | 95 | as such Acorn RiscPCs and other architectures using these processors can | 
|  | 96 | make good use of modularisation. | 
|  | 97 |  | 
|  | 98 |  | 
|  | 99 | ADFS Image files | 
|  | 100 | ---------------- | 
|  | 101 |  | 
|  | 102 | You can access image files on your ADFS partitions by mounting the ADFS | 
|  | 103 | partition, and then using the loopback device driver.  You must have | 
|  | 104 | losetup installed. | 
|  | 105 |  | 
|  | 106 | Please note that the PCEmulator DOS partitions have a partition table at | 
|  | 107 | the start, and as such, you will have to give '-o offset' to losetup. | 
|  | 108 |  | 
|  | 109 |  | 
|  | 110 | Request to developers | 
|  | 111 | --------------------- | 
|  | 112 |  | 
|  | 113 | When writing device drivers which include a separate assembler file, please | 
|  | 114 | include it in with the C file, and not the arch/arm/lib directory.  This | 
|  | 115 | allows the driver to be compiled as a loadable module without requiring | 
|  | 116 | half the code to be compiled into the kernel image. | 
|  | 117 |  | 
|  | 118 | In general, try to avoid using assembler unless it is really necessary.  It | 
|  | 119 | makes drivers far less easy to port to other hardware. | 
|  | 120 |  | 
|  | 121 |  | 
|  | 122 | ST506 hard drives | 
|  | 123 | ----------------- | 
|  | 124 |  | 
|  | 125 | The ST506 hard drive controllers seem to be working fine (if a little | 
|  | 126 | slowly).  At the moment they will only work off the controllers on an | 
|  | 127 | A4x0's motherboard, but for it to work off a Podule just requires | 
|  | 128 | someone with a podule to add the addresses for the IRQ mask and the | 
|  | 129 | HDC base to the source. | 
|  | 130 |  | 
|  | 131 | As of 31/3/96 it works with two drives (you should get the ADFS | 
|  | 132 | *configure harddrive set to 2). I've got an internal 20MB and a great | 
|  | 133 | big external 5.25" FH 64MB drive (who could ever want more :-) ). | 
|  | 134 |  | 
|  | 135 | I've just got 240K/s off it (a dd with bs=128k); thats about half of what | 
|  | 136 | RiscOS gets; but it's a heck of a lot better than the 50K/s I was getting | 
|  | 137 | last week :-) | 
|  | 138 |  | 
|  | 139 | Known bug: Drive data errors can cause a hang; including cases where | 
|  | 140 | the controller has fixed the error using ECC. (Possibly ONLY | 
|  | 141 | in that case...hmm). | 
|  | 142 |  | 
|  | 143 |  | 
|  | 144 | 1772 Floppy | 
|  | 145 | ----------- | 
|  | 146 | This also seems to work OK, but hasn't been stressed much lately.  It | 
|  | 147 | hasn't got any code for disc change detection in there at the moment which | 
|  | 148 | could be a bit of a problem!  Suggestions on the correct way to do this | 
|  | 149 | are welcome. | 
|  | 150 |  | 
|  | 151 |  | 
|  | 152 | CONFIG_MACH_ and CONFIG_ARCH_ | 
|  | 153 | ----------------------------- | 
|  | 154 | A change was made in 2003 to the macro names for new machines. | 
|  | 155 | Historically, CONFIG_ARCH_ was used for the bonafide architecture, | 
|  | 156 | e.g. SA1100, as well as implementations of the architecture, | 
|  | 157 | e.g. Assabet.  It was decided to change the implementation macros | 
|  | 158 | to read CONFIG_MACH_ for clarity.  Moreover, a retroactive fixup has | 
|  | 159 | not been made because it would complicate patching. | 
|  | 160 |  | 
|  | 161 | Previous registrations may be found online. | 
|  | 162 |  | 
|  | 163 | <http://www.arm.linux.org.uk/developer/machines/> | 
|  | 164 |  | 
|  | 165 | Kernel entry (head.S) | 
|  | 166 | -------------------------- | 
|  | 167 | The initial entry into the kernel is via head.S, which uses machine | 
|  | 168 | independent code.  The machine is selected by the value of 'r1' on | 
|  | 169 | entry, which must be kept unique. | 
|  | 170 |  | 
|  | 171 | Due to the large number of machines which the ARM port of Linux provides | 
|  | 172 | for, we have a method to manage this which ensures that we don't end up | 
|  | 173 | duplicating large amounts of code. | 
|  | 174 |  | 
|  | 175 | We group machine (or platform) support code into machine classes.  A | 
|  | 176 | class typically based around one or more system on a chip devices, and | 
|  | 177 | acts as a natural container around the actual implementations.  These | 
|  | 178 | classes are given directories - arch/arm/mach-<class> and | 
|  | 179 | include/asm-arm/arch-<class> - which contain the source files to | 
|  | 180 | support the machine class.  This directories also contain any machine | 
|  | 181 | specific supporting code. | 
|  | 182 |  | 
|  | 183 | For example, the SA1100 class is based upon the SA1100 and SA1110 SoC | 
|  | 184 | devices, and contains the code to support the way the on-board and off- | 
|  | 185 | board devices are used, or the device is setup, and provides that | 
|  | 186 | machine specific "personality." | 
|  | 187 |  | 
|  | 188 | This fine-grained machine specific selection is controlled by the machine | 
|  | 189 | type ID, which acts both as a run-time and a compile-time code selection | 
|  | 190 | method. | 
|  | 191 |  | 
|  | 192 | You can register a new machine via the web site at: | 
|  | 193 |  | 
|  | 194 | <http://www.arm.linux.org.uk/developer/machines/> | 
|  | 195 |  | 
|  | 196 | --- | 
|  | 197 | Russell King (15/03/2004) |