| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 			   ARM Linux 2.6 | 
					
						
							|  |  |  | 			   ============= | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Please check <ftp://ftp.arm.linux.org.uk/pub/armlinux> for | 
					
						
							|  |  |  |     updates. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Compilation of kernel | 
					
						
							|  |  |  | --------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   In order to compile ARM Linux, you will need a compiler capable of | 
					
						
							| 
									
										
										
										
											2005-11-05 10:20:56 +00:00
										 |  |  |   generating ARM ELF code with GNU extensions.  GCC 3.3 is known to be | 
					
						
							|  |  |  |   a good compiler.  Fortunately, you needn't guess.  The kernel will report | 
					
						
							|  |  |  |   an error if your compiler is a recognized offender. | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   To build ARM Linux natively, you shouldn't have to alter the ARCH = line | 
					
						
							|  |  |  |   in the top level Makefile.  However, if you don't have the ARM Linux ELF | 
					
						
							|  |  |  |   tools installed as default, then you should change the CROSS_COMPILE | 
					
						
							|  |  |  |   line as detailed below. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   If you wish to cross-compile, then alter the following lines in the top | 
					
						
							|  |  |  |   level make file: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ARCH = <whatever> | 
					
						
							|  |  |  | 	with | 
					
						
							|  |  |  |     ARCH = arm | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	and | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     CROSS_COMPILE= | 
					
						
							|  |  |  | 	to | 
					
						
							|  |  |  |     CROSS_COMPILE=<your-path-to-your-compiler-without-gcc> | 
					
						
							|  |  |  | 	eg. | 
					
						
							|  |  |  |     CROSS_COMPILE=arm-linux- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Do a 'make config', followed by 'make Image' to build the kernel  | 
					
						
							|  |  |  |   (arch/arm/boot/Image).  A compressed image can be built by doing a  | 
					
						
							|  |  |  |   'make zImage' instead of 'make Image'. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Bug reports etc | 
					
						
							|  |  |  | --------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Please send patches to the patch system.  For more information, see | 
					
						
							|  |  |  |   http://www.arm.linux.org.uk/patches/info.html  Always include some | 
					
						
							|  |  |  |   explanation as to what the patch does and why it is needed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Bug reports should be sent to linux-arm-kernel@lists.arm.linux.org.uk, | 
					
						
							|  |  |  |   or submitted through the web form at | 
					
						
							|  |  |  |   http://www.arm.linux.org.uk/forms/solution.shtml | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   When sending bug reports, please ensure that they contain all relevant | 
					
						
							|  |  |  |   information, eg. the kernel messages that were printed before/during | 
					
						
							|  |  |  |   the problem, what you were doing, etc. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Include files | 
					
						
							|  |  |  | ------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Several new include directories have been created under include/asm-arm, | 
					
						
							|  |  |  |   which are there to reduce the clutter in the top-level directory.  These | 
					
						
							|  |  |  |   directories, and their purpose is listed below: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    arch-*	machine/platform specific header files | 
					
						
							|  |  |  |    hardware	driver-internal ARM specific data structures/definitions | 
					
						
							|  |  |  |    mach		descriptions of generic ARM to specific machine interfaces | 
					
						
							|  |  |  |    proc-*	processor dependent header files (currently only two | 
					
						
							|  |  |  | 		categories) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Machine/Platform support | 
					
						
							|  |  |  | ------------------------ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   The ARM tree contains support for a lot of different machine types.  To | 
					
						
							|  |  |  |   continue supporting these differences, it has become necessary to split | 
					
						
							|  |  |  |   machine-specific parts by directory.  For this, the machine category is | 
					
						
							|  |  |  |   used to select which directories and files get included (we will use | 
					
						
							|  |  |  |   $(MACHINE) to refer to the category) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   To this end, we now have arch/arm/mach-$(MACHINE) directories which are | 
					
						
							|  |  |  |   designed to house the non-driver files for a particular machine (eg, PCI, | 
					
						
							|  |  |  |   memory management, architecture definitions etc).  For all future | 
					
						
							| 
									
										
										
										
											2008-08-05 16:14:15 +01:00
										 |  |  |   machines, there should be a corresponding arch/arm/mach-$(MACHINE)/include/mach | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |   directory. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Modules | 
					
						
							|  |  |  | ------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Although modularisation is supported (and required for the FP emulator), | 
					
						
							|  |  |  |   each module on an ARM2/ARM250/ARM3 machine when is loaded will take | 
					
						
							|  |  |  |   memory up to the next 32k boundary due to the size of the pages. | 
					
						
							| 
									
										
										
										
											2006-03-24 18:13:37 +01:00
										 |  |  |   Therefore, is modularisation on these machines really worth it? | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   However, ARM6 and up machines allow modules to take multiples of 4k, and | 
					
						
							|  |  |  |   as such Acorn RiscPCs and other architectures using these processors can | 
					
						
							|  |  |  |   make good use of modularisation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ADFS Image files | 
					
						
							|  |  |  | ---------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   You can access image files on your ADFS partitions by mounting the ADFS | 
					
						
							|  |  |  |   partition, and then using the loopback device driver.  You must have | 
					
						
							|  |  |  |   losetup installed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Please note that the PCEmulator DOS partitions have a partition table at | 
					
						
							|  |  |  |   the start, and as such, you will have to give '-o offset' to losetup. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Request to developers | 
					
						
							|  |  |  | --------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   When writing device drivers which include a separate assembler file, please | 
					
						
							|  |  |  |   include it in with the C file, and not the arch/arm/lib directory.  This | 
					
						
							|  |  |  |   allows the driver to be compiled as a loadable module without requiring | 
					
						
							|  |  |  |   half the code to be compiled into the kernel image. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   In general, try to avoid using assembler unless it is really necessary.  It | 
					
						
							|  |  |  |   makes drivers far less easy to port to other hardware. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ST506 hard drives | 
					
						
							|  |  |  | ----------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   The ST506 hard drive controllers seem to be working fine (if a little | 
					
						
							|  |  |  |   slowly).  At the moment they will only work off the controllers on an | 
					
						
							|  |  |  |   A4x0's motherboard, but for it to work off a Podule just requires | 
					
						
							|  |  |  |   someone with a podule to add the addresses for the IRQ mask and the | 
					
						
							|  |  |  |   HDC base to the source. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   As of 31/3/96 it works with two drives (you should get the ADFS | 
					
						
							|  |  |  |   *configure harddrive set to 2). I've got an internal 20MB and a great | 
					
						
							|  |  |  |   big external 5.25" FH 64MB drive (who could ever want more :-) ). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   I've just got 240K/s off it (a dd with bs=128k); thats about half of what | 
					
						
							|  |  |  |   RiscOS gets; but it's a heck of a lot better than the 50K/s I was getting | 
					
						
							|  |  |  |   last week :-) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Known bug: Drive data errors can cause a hang; including cases where | 
					
						
							|  |  |  |   the controller has fixed the error using ECC. (Possibly ONLY | 
					
						
							|  |  |  |   in that case...hmm). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1772 Floppy | 
					
						
							|  |  |  | ----------- | 
					
						
							|  |  |  |   This also seems to work OK, but hasn't been stressed much lately.  It | 
					
						
							|  |  |  |   hasn't got any code for disc change detection in there at the moment which | 
					
						
							|  |  |  |   could be a bit of a problem!  Suggestions on the correct way to do this | 
					
						
							|  |  |  |   are welcome. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CONFIG_MACH_ and CONFIG_ARCH_ | 
					
						
							|  |  |  | ----------------------------- | 
					
						
							|  |  |  |   A change was made in 2003 to the macro names for new machines. | 
					
						
							|  |  |  |   Historically, CONFIG_ARCH_ was used for the bonafide architecture, | 
					
						
							|  |  |  |   e.g. SA1100, as well as implementations of the architecture, | 
					
						
							|  |  |  |   e.g. Assabet.  It was decided to change the implementation macros | 
					
						
							|  |  |  |   to read CONFIG_MACH_ for clarity.  Moreover, a retroactive fixup has | 
					
						
							|  |  |  |   not been made because it would complicate patching. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Previous registrations may be found online. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <http://www.arm.linux.org.uk/developer/machines/> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Kernel entry (head.S) | 
					
						
							|  |  |  | -------------------------- | 
					
						
							|  |  |  |   The initial entry into the kernel is via head.S, which uses machine | 
					
						
							|  |  |  |   independent code.  The machine is selected by the value of 'r1' on | 
					
						
							|  |  |  |   entry, which must be kept unique. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Due to the large number of machines which the ARM port of Linux provides | 
					
						
							|  |  |  |   for, we have a method to manage this which ensures that we don't end up | 
					
						
							|  |  |  |   duplicating large amounts of code. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   We group machine (or platform) support code into machine classes.  A | 
					
						
							|  |  |  |   class typically based around one or more system on a chip devices, and | 
					
						
							|  |  |  |   acts as a natural container around the actual implementations.  These | 
					
						
							|  |  |  |   classes are given directories - arch/arm/mach-<class> and | 
					
						
							| 
									
										
										
										
											2008-08-05 16:14:15 +01:00
										 |  |  |   arch/arm/mach-<class> - which contain the source files to/include/mach | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |   support the machine class.  This directories also contain any machine | 
					
						
							|  |  |  |   specific supporting code. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   For example, the SA1100 class is based upon the SA1100 and SA1110 SoC | 
					
						
							|  |  |  |   devices, and contains the code to support the way the on-board and off- | 
					
						
							|  |  |  |   board devices are used, or the device is setup, and provides that | 
					
						
							|  |  |  |   machine specific "personality." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   This fine-grained machine specific selection is controlled by the machine | 
					
						
							|  |  |  |   type ID, which acts both as a run-time and a compile-time code selection | 
					
						
							|  |  |  |   method. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   You can register a new machine via the web site at: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <http://www.arm.linux.org.uk/developer/machines/> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --- | 
					
						
							|  |  |  | Russell King (15/03/2004) |