* docs/grub.texi (Platform limitations): New section.
(Platform-specific operations): Likewise. * docs/grub-dev.texi (Porting): Likewise.
This commit is contained in:
		
							parent
							
								
									7626111087
								
							
						
					
					
						commit
						ca1dacea3c
					
				
					 3 changed files with 483 additions and 3 deletions
				
			
		|  | @ -1,3 +1,9 @@ | ||||||
|  | 2012-01-25  Vladimir Serbinenko  <phcoder@gmail.com> | ||||||
|  | 
 | ||||||
|  | 	* docs/grub.texi (Platform limitations): New section. | ||||||
|  | 	(Platform-specific operations): Likewise. | ||||||
|  | 	* docs/grub-dev.texi (Porting): Likewise. | ||||||
|  | 
 | ||||||
| 2012-01-25  Vladimir Serbinenko  <phcoder@gmail.com> | 2012-01-25  Vladimir Serbinenko  <phcoder@gmail.com> | ||||||
| 
 | 
 | ||||||
| 	IEEE1275 disk write support. | 	IEEE1275 disk write support. | ||||||
|  |  | ||||||
|  | @ -77,6 +77,7 @@ This edition documents version @value{VERSION}. | ||||||
| * Finding your way around:: | * Finding your way around:: | ||||||
| * Coding style:: | * Coding style:: | ||||||
| * Contributing Changes:: | * Contributing Changes:: | ||||||
|  | * Porting:: | ||||||
| * Error Handling:: | * Error Handling:: | ||||||
| * CIA:: | * CIA:: | ||||||
| * BIOS port memory map:: | * BIOS port memory map:: | ||||||
|  | @ -447,6 +448,315 @@ If your intention is to just get started, please do not submit a inclusion | ||||||
| request. Instead, please subscribe to the mailing list, and communicate first | request. Instead, please subscribe to the mailing list, and communicate first | ||||||
| (e.g. sending a patch, asking a question, commenting on another message...). | (e.g. sending a patch, asking a question, commenting on another message...). | ||||||
| 
 | 
 | ||||||
|  | @node Porting | ||||||
|  | @chapter Porting | ||||||
|  | 
 | ||||||
|  | GRUB2 is designed to be easily portable accross platforms. But because of the | ||||||
|  | nature of bootloader every new port must be done separately. Here is how I did | ||||||
|  | MIPS (loongson and ARC) and Xen ports. Note than this is more of suggestions, | ||||||
|  | not absolute truth. | ||||||
|  | 
 | ||||||
|  | First of all grab any architecture specifications you can find in public | ||||||
|  | (please avoid NDA). | ||||||
|  | 
 | ||||||
|  | First stage is ``Hello world''. I've done it outside of GRUB for simplicity. | ||||||
|  | Your task is to have a small program which is loadable as bootloader and | ||||||
|  | clearly shows its presence to you. If you have easily accessible console | ||||||
|  | you can just print a message. If you have a mapped framebuffer you know address | ||||||
|  | of, you can draw a square. If you have a debug facility, just hanging without | ||||||
|  | crashing might be enough. For the first stage you can choose to load the | ||||||
|  | bootloader across the network since format for network image is often easier | ||||||
|  | than for local boot and it skips the need of small intermediary stages and | ||||||
|  | nvram handling. Additionally you can often have a good idea of the needed | ||||||
|  | format by running ``file'' on any netbootable executable for given platform. | ||||||
|  | 
 | ||||||
|  | This program should probably have 2 parts: an assembler and C one. Assembler one | ||||||
|  | handles BSS cleaning and other needed setup (on some platforms you may need | ||||||
|  | to switch modes or copy the executable to its definitive position). So your code | ||||||
|  | may look like (x86 assembly for illustration purposes) | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  |         .globl _start | ||||||
|  | _start: | ||||||
|  | 	movl	$_bss_start, %edi | ||||||
|  | 	movl	$_end, %ecx | ||||||
|  | 	subl	%edi, %ecx | ||||||
|  | 	xorl	%eax, %eax | ||||||
|  | 	cld | ||||||
|  | 	rep | ||||||
|  | 	stosb | ||||||
|  |         call main | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | 
 | ||||||
|  | static const char msg[] = "Hello, world"; | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | putchar (int c) | ||||||
|  | @{ | ||||||
|  |   ... | ||||||
|  | @} | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | main (void) | ||||||
|  | @{ | ||||||
|  |   const char *ptr = msg; | ||||||
|  |   while (*ptr) | ||||||
|  |     putchar (*ptr++); | ||||||
|  |   while (1); | ||||||
|  | @} | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | Sometimes you need a third file: assembly stubs for ABI-compatibility. | ||||||
|  | 
 | ||||||
|  | Once this file is functional it's time to move it into GRUB2. The startup | ||||||
|  | assembly file goes to grub-core/kern/$cpu/$platform/startup.S. You should also | ||||||
|  | include grub/symbol.h and replace call to entry point with call to | ||||||
|  | EXT_C(grub_main). The C file goes to grub-core/kern/$cpu/$platform/init.c | ||||||
|  | and its entry point is renamed to void grub_machine_init (void). Keep final | ||||||
|  | infinite loop for now. Stubs file if any goes to | ||||||
|  | grub-core/kern/$cpu/$platform/callwrap.S. Sometimes either $cpu or $platform | ||||||
|  | is dropped if file is used on several cpus respectivelyplatforms. | ||||||
|  | Check those locations if they already have what you're looking for. | ||||||
|  | 
 | ||||||
|  | Then modify in configure.ac the following parts: | ||||||
|  | 
 | ||||||
|  | CPU names: | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | case "$target_cpu" in | ||||||
|  |   i[[3456]]86)	target_cpu=i386 ;; | ||||||
|  |   amd64)	target_cpu=x86_64 ;; | ||||||
|  |   sparc)	target_cpu=sparc64 ;; | ||||||
|  |   s390x)	target_cpu=s390 ;; | ||||||
|  |   ... | ||||||
|  | esac | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | Sometimes CPU have additional architecture names which don't influence booting. | ||||||
|  | You might want to have some canonical name to avoid having bunch of identical | ||||||
|  | platforms with different names. | ||||||
|  | 
 | ||||||
|  | NOTE: it doesn't influence compile optimisations which depend solely on | ||||||
|  | chosen compiler and compile options. | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | if test "x$with_platform" = x; then | ||||||
|  |   case "$target_cpu"-"$target_vendor" in | ||||||
|  |     i386-apple) platform=efi ;; | ||||||
|  |     i386-*) platform=pc ;; | ||||||
|  |     x86_64-apple) platform=efi ;; | ||||||
|  |     x86_64-*) platform=pc ;; | ||||||
|  |     powerpc-*) platform=ieee1275 ;; | ||||||
|  |     ... | ||||||
|  |   esac | ||||||
|  | else | ||||||
|  |   ... | ||||||
|  | fi | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | This part deals with guessing the platform from CPU and vendor. Sometimes you | ||||||
|  | need to use 32-bit mode for booting even if OS runs in 64-bit one. If so add | ||||||
|  | your platform to: | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | case "$target_cpu"-"$platform" in | ||||||
|  |   x86_64-efi) ;; | ||||||
|  |   x86_64-emu) ;; | ||||||
|  |   x86_64-*) target_cpu=i386 ;; | ||||||
|  |   powerpc64-ieee1275) target_cpu=powerpc ;; | ||||||
|  | esac | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | Add your platform to the list of supported ones: | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | case "$target_cpu"-"$platform" in | ||||||
|  |   i386-efi) ;; | ||||||
|  |   x86_64-efi) ;; | ||||||
|  |   i386-pc) ;; | ||||||
|  |   i386-multiboot) ;; | ||||||
|  |   i386-coreboot) ;; | ||||||
|  |   ... | ||||||
|  | esac | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | If explicit -m32 or -m64 is needed add it to: | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | case "$target_cpu" in | ||||||
|  |   i386 | powerpc) target_m32=1 ;; | ||||||
|  |   x86_64 | sparc64) target_m64=1 ;; | ||||||
|  | esac | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | Finally you need to add a conditional to the following block: | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | AM_CONDITIONAL([COND_mips_arc], [test x$target_cpu = xmips -a x$platform = xarc]) | ||||||
|  | AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) | ||||||
|  | AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | Next stop is gentpl.py. You need to add your platform to the list of supported | ||||||
|  | ones (sorry that this list is duplicated): | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", | ||||||
|  |                    "i386_multiboot", "i386_ieee1275", "x86_64_efi", | ||||||
|  |                    "mips_loongson", "sparc64_ieee1275", | ||||||
|  |                    "powerpc_ieee1275", "mips_arc", "ia64_efi", | ||||||
|  |                    "mips_qemu_mips", "s390_mainframe" ] | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | You may also want already to add new platform to one or several of available | ||||||
|  | groups. In particular we always have a group for each CPU even when only | ||||||
|  | one platform for given CPU is available. | ||||||
|  | 
 | ||||||
|  | Then comes grub-core/Makefile.core.def. In the block ``kernel'' you'll need | ||||||
|  | to define ldflags for your platform ($cpu_$platform_ldflags). You also need to | ||||||
|  | declare startup asm file ($cpu_$platform_startup) as well as any other files | ||||||
|  | (e.g. init.c and callwrap.S) (e.g. $cpu_$platform = kern/$cpu/$platform/init.c). | ||||||
|  | At this stage you will also need to add dummy dl.c and cache.S with functions | ||||||
|  | grub_err_t grub_arch_dl_check_header (void *ehdr), grub_err_t | ||||||
|  | grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr) (dl.c) and | ||||||
|  | void grub_arch_sync_caches (void *address, grub_size_t len) (cache.S). They | ||||||
|  | won't be used for now. | ||||||
|  | 
 | ||||||
|  | You will need to create directory include/$cpu/$platform and a file | ||||||
|  | include/$cpu/types.h. The later folowing this template: | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | #ifndef GRUB_TYPES_CPU_HEADER | ||||||
|  | #define GRUB_TYPES_CPU_HEADER	1 | ||||||
|  | 
 | ||||||
|  | /* The size of void *.  */ | ||||||
|  | #define GRUB_TARGET_SIZEOF_VOID_P	4 | ||||||
|  | 
 | ||||||
|  | /* The size of long.  */ | ||||||
|  | #define GRUB_TARGET_SIZEOF_LONG		4 | ||||||
|  | 
 | ||||||
|  | /* mycpu is big-endian.  */ | ||||||
|  | #define GRUB_TARGET_WORDS_BIGENDIAN	1 | ||||||
|  | /* Alternatively: mycpu is little-endian.  */ | ||||||
|  | #undef GRUB_TARGET_WORDS_BIGENDIAN | ||||||
|  | 
 | ||||||
|  | #endif /* ! GRUB_TYPES_CPU_HEADER */ | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | You will also need to add a dummy file to datetime and setjmp modules to | ||||||
|  | avoid any of it having no files. It can be just completely empty at this stage. | ||||||
|  | 
 | ||||||
|  | You'll need to make grub-mkimage.c (util/grub_mkimage.c) aware of the needed | ||||||
|  | format. For most commonly used formats like ELF, PE, aout or raw the support | ||||||
|  | is already present and you'll need to make it follow the existant code paths | ||||||
|  | for your platform adding adjustments if necessary. When done compile: | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | ./autogen.sh | ||||||
|  | ./configure --target=$cpu --with-platform=$platform TARGET_CC=.. OBJCOPY=... STRIP=... | ||||||
|  | make > /dev/null | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | And create image | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | ./grub-mkimage -d grub-core -O $format_id -o test.img | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | And it's time to test your test.img. | ||||||
|  | 
 | ||||||
|  | If it works next stage is to have heap, console and timer. | ||||||
|  | 
 | ||||||
|  | To have the heap working you need to determine which regions are suitable for | ||||||
|  | heap usage, allocate them from firmware and map (if applicable). Then call | ||||||
|  | grub_mm_init_region (vois *start, grub_size_t s) for every of this region. | ||||||
|  | As a shortcut for early port you can allocate right after _end or have | ||||||
|  | a big static array for heap. If you do you'll probably need to come back to | ||||||
|  | this later. As for output console you should distinguish between an array of | ||||||
|  | text, terminfo or graphics-based console. Many of real-world examples don't | ||||||
|  | fit perfectly into any of these categories but one of the models is easier | ||||||
|  | to be used as base. In second and third case you should add your platform to  | ||||||
|  | terminfokernel respectively videoinkernel group. A good example of array of | ||||||
|  | text is i386-pc (kern/i386/pc/init.c and term/i386/pc/console.c). | ||||||
|  | Of terminfo is ieee1275 (kern/ieee1275/init.c and term/ieee1275/console.c). | ||||||
|  | Of video is loongson (kern/mips/loongson/init.c). Note that terminfo has | ||||||
|  | to be inited in 2 stages: one before (to get at least rudimentary console | ||||||
|  | as early as possible) and another after the heap (to get full-featured console). | ||||||
|  | For the input there are string of keys, terminfo and direct hardware. For string | ||||||
|  | of keys look at i386-pc (same files), for termino ieee1275 (same files) and for | ||||||
|  | hardware loongson (kern/mips/loongson/init.c and term/at_keyboard.c). | ||||||
|  | 
 | ||||||
|  | For the timer you'll need to call grub_install_get_time_ms (...) with as sole | ||||||
|  | argument a function returning a grub_uint64_t of a number of milliseconds | ||||||
|  | elapsed since arbitrary point in the past. | ||||||
|  | 
 | ||||||
|  | Once these steps accomplished you can remove the inifinite loop and you should | ||||||
|  | be able to get to the minimal console. Next step is to have module loading | ||||||
|  | working. For this you'll need to fill kern/$cpu/dl.c and kern/$cpu/cache.S | ||||||
|  | with real handling of relocations and respectively the real sync of I and D | ||||||
|  | caches. Also you'll need to decide where in the image to store the modules. | ||||||
|  | Usual way is to have it concatenated at the end. In this case you'll need to | ||||||
|  | modify startup.S to copy modules out of bss to let's say ALIGN_UP (_end, 8) | ||||||
|  | before cleaning out bss. You'll probably find useful to add total_module_size | ||||||
|  | field to startup.S. In init.c you need to set grub_modbase to the address | ||||||
|  | where modules can be found. You may need grub_modules_get_end () to avoid | ||||||
|  | declaring the space occupied by modules as usable for heap. You can test modules | ||||||
|  | with: | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | ./grub-mkimage -d grub-core -O $format_id -o test.img hello | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | and then running ``hello'' in the shell. | ||||||
|  | 
 | ||||||
|  | Once this works, you should think of implementing disk access. Look around | ||||||
|  | disk/ for examples. | ||||||
|  | 
 | ||||||
|  | Then, very importantly, you probably need to implement the actual loader | ||||||
|  | (examples available in loader/) | ||||||
|  | 
 | ||||||
|  | Last step to have minimally usable port is to add support to grub-install to | ||||||
|  | put GRUB in a place where firmware or platform will pick it up. | ||||||
|  | 
 | ||||||
|  | Next steps are: filling datetime.c, setjmp.S, network (net/drivers), | ||||||
|  | video (video/), halt (lib/), reboot (lib/). | ||||||
|  | 
 | ||||||
|  | Please add your platform to Platform limitations and Supported kernels chapter | ||||||
|  | in user documentation and mention any steps you skipped which result in reduced | ||||||
|  | features or performance. Here is the quick checklist of features. Some of them | ||||||
|  | are less important than others and skipping them is completely ok, just needs | ||||||
|  | to be mentioned in user documentation. | ||||||
|  | 
 | ||||||
|  | Checklist: | ||||||
|  | @itemize | ||||||
|  | @item Is heap big enough? | ||||||
|  | @item Which charset is supported by console? | ||||||
|  | @item Does platform have disk driver? | ||||||
|  | @item Do you have network card support? | ||||||
|  | @item Are you able to retrieve datetime (with date)? | ||||||
|  | @item Are you able to set datetime (with date)? | ||||||
|  | @item Is serial supported? | ||||||
|  | @item Do you have direct disk support? | ||||||
|  | @item Do you have direct keyboard support? | ||||||
|  | @item Do you have USB support? | ||||||
|  | @item Do you support loading through network? | ||||||
|  | @item Do you support loading from disk? | ||||||
|  | @item Do you support chainloading? | ||||||
|  | @item Do you support network chainloading? | ||||||
|  | @item Does cpuid command supports checking all | ||||||
|  | CPU features that the user might want conditionalise on | ||||||
|  | (64-bit mode, hypervisor,...) | ||||||
|  | @item Do you support hints? How reliable are they? | ||||||
|  | @item Does platform have ACPI? If so do ``acpi'' and ``lsacpi'' modules work? | ||||||
|  | @item Do any of platform-specific operations mentioned in the relevant section of | ||||||
|  | user manual makes sense on your platform? | ||||||
|  | @item Does your platform support PCI? If so is there an appropriate driver for | ||||||
|  | GRUB? | ||||||
|  | @item Do you support badram? | ||||||
|  | @end itemize | ||||||
|  | 
 | ||||||
| @node Error Handling | @node Error Handling | ||||||
| @chapter Error Handling | @chapter Error Handling | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										170
									
								
								docs/grub.texi
									
										
									
									
									
								
							
							
						
						
									
										170
									
								
								docs/grub.texi
									
										
									
									
									
								
							|  | @ -91,6 +91,8 @@ This edition documents version @value{VERSION}. | ||||||
| * Commands::                    The list of available builtin commands | * Commands::                    The list of available builtin commands | ||||||
| * Internationalisation::        Topics relating to language support | * Internationalisation::        Topics relating to language support | ||||||
| * Security::                    Authentication and authorisation | * Security::                    Authentication and authorisation | ||||||
|  | * Platform limitations::        The list of platform-specific limitations | ||||||
|  | * Platform-specific operations:: Platform-specific operations | ||||||
| * Supported kernels::           The list of supported kernels | * Supported kernels::           The list of supported kernels | ||||||
| * Troubleshooting::             Error messages produced by GRUB | * Troubleshooting::             Error messages produced by GRUB | ||||||
| * Invoking grub-install::       How to use the GRUB installer | * Invoking grub-install::       How to use the GRUB installer | ||||||
|  | @ -4072,6 +4074,167 @@ adding @kbd{set superusers=} and @kbd{password} or @kbd{password_pbkdf2} | ||||||
| commands. | commands. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @node Platform limitations | ||||||
|  | @chapter Platform limitations | ||||||
|  | 
 | ||||||
|  | GRUB2 is designed to be portable and is actually ported across platforms. We | ||||||
|  | try to keep all platforms at the level. Unfortunately some platforms are better | ||||||
|  | supported than others. This is detailed in current and 2 following sections. | ||||||
|  | 
 | ||||||
|  | ARC platform is unable to change datetime (firmware doesn't seem to provide a | ||||||
|  | function for it). | ||||||
|  | EMU has similar limitation. | ||||||
|  | 
 | ||||||
|  | Console charset refers only to firmware-assisted console. gfxterm is always | ||||||
|  | Unicode (see Internationalisation section for its limitations). Serial is | ||||||
|  | configurable to UTF-8 or ASCII (see Internationalisation). In case of qemu | ||||||
|  | and coreboot ports the refered console is vga_text. Loongson always uses | ||||||
|  | gfxterm. | ||||||
|  | 
 | ||||||
|  | Most limited one is ASCII. CP437 provides additionally pseudographics. | ||||||
|  | GRUB2 doesn't use any language characters from CP437 as often CP437 is replaced | ||||||
|  | by national encoding compatible only in pseudographics. | ||||||
|  | Unicode is the most versatile charset which supports many languages. However | ||||||
|  | the actual console may be much more limited depending on firmware | ||||||
|  | 
 | ||||||
|  | On BIOS network is supported only if the image is loaded through network. | ||||||
|  | On sparc64 GRUB is unable to determine which server it was booted from. | ||||||
|  | 
 | ||||||
|  | On platforms not having direct serial support (as indicated in the line serial) | ||||||
|  | you can still redirect firmware console to serial if it allows so. | ||||||
|  | 
 | ||||||
|  | Direct ATA/AHCI support allows to circumvent various firmware limitations but | ||||||
|  | isn't needed for normal operation except on baremetal ports. | ||||||
|  | 
 | ||||||
|  | AT keyboard support allows keyboard layout remapping and support for keys not | ||||||
|  | available through firmware. It isn't needed for normal operation except | ||||||
|  | baremetal ports. | ||||||
|  | 
 | ||||||
|  | USB support provides benefits similar to ATA (for USB disks) or AT (for USB | ||||||
|  | keyboards). In addition it allows USBserial. | ||||||
|  | 
 | ||||||
|  | Chainloading refers to the ability to load another bootloader through the same protocol | ||||||
|  | 
 | ||||||
|  | Hints allow faster disk discovery by already knowing in advance which is the disk in | ||||||
|  | question. On some platforms hints are correct unless you move the disk between boots. | ||||||
|  | On other platforms it's just an educated guess. | ||||||
|  | Note that hint failure results in just reduced performance, not a failure | ||||||
|  | 
 | ||||||
|  | BadRAM is the ability to mark some of the RAM as ``bad''. Note: due to protocol | ||||||
|  | limitations mips-loongson (with Linux protocol) | ||||||
|  | and mips-qemu_mips can use only memory up to first hole. | ||||||
|  | 
 | ||||||
|  | @multitable @columnfractions .20 .20 .20 .20 .20 | ||||||
|  | @item                    @tab BIOS    @tab Coreboot @tab Multiboot    @tab Qemu  | ||||||
|  | @item video              @tab yes     @tab yes      @tab yes          @tab yes | ||||||
|  | @item console charset    @tab CP437   @tab CP437    @tab CP437        @tab CP437 | ||||||
|  | @item network            @tab yes (*) @tab no       @tab no           @tab no | ||||||
|  | @item serial             @tab yes     @tab yes      @tab yes          @tab yes | ||||||
|  | @item ATA/AHCI           @tab yes     @tab yes      @tab yes          @tab yes | ||||||
|  | @item AT keyboard        @tab yes     @tab yes      @tab yes          @tab yes | ||||||
|  | @item USB                @tab yes     @tab yes      @tab yes          @tab yes | ||||||
|  | @item chainloader        @tab local   @tab yes      @tab yes          @tab no | ||||||
|  | @item cpuid              @tab partial @tab partial  @tab partial      @tab partial | ||||||
|  | @item hints              @tab guess   @tab guess    @tab guess        @tab guess | ||||||
|  | @item PCI                @tab yes     @tab yes      @tab yes          @tab yes | ||||||
|  | @item badram             @tab yes     @tab yes      @tab yes          @tab yes | ||||||
|  | @item compression        @tab always  @tab pointless @tab no           @tab no | ||||||
|  | @item exit               @tab yes     @tab no       @tab no           @tab no | ||||||
|  | @end multitable | ||||||
|  | 
 | ||||||
|  | @multitable @columnfractions .20 .20 .20 .20 .20 | ||||||
|  | @item                    @tab ia32 EFI    @tab amd64 EFI @tab ia32 IEEE1275 @tab Itanium | ||||||
|  | @item video              @tab yes         @tab yes       @tab no            @tab no | ||||||
|  | @item console charset    @tab Unicode     @tab Unicode   @tab ASCII         @tab Unicode | ||||||
|  | @item network            @tab yes         @tab yes       @tab yes           @tab yes | ||||||
|  | @item serial             @tab yes         @tab yes       @tab yes           @tab no | ||||||
|  | @item ATA/AHCI           @tab yes         @tab yes       @tab yes           @tab no | ||||||
|  | @item AT keyboard        @tab yes         @tab yes       @tab yes           @tab no | ||||||
|  | @item USB                @tab yes         @tab yes       @tab yes           @tab no | ||||||
|  | @item chainloader        @tab local       @tab local     @tab no            @tab local | ||||||
|  | @item cpuid              @tab partial     @tab partial   @tab partial       @tab no | ||||||
|  | @item hints              @tab guess       @tab guess     @tab good          @tab guess | ||||||
|  | @item PCI                @tab yes         @tab yes       @tab yes           @tab no | ||||||
|  | @item badram             @tab yes         @tab yes       @tab no            @tab yes | ||||||
|  | @item compression        @tab no          @tab no        @tab no            @tab no | ||||||
|  | @item exit               @tab yes         @tab yes       @tab yes           @tab yes | ||||||
|  | @end multitable | ||||||
|  | 
 | ||||||
|  | @multitable @columnfractions .20 .20 .20 .20 .20 | ||||||
|  | @item                    @tab Loongson    @tab sparc64 @tab Powerpc @tab ARC | ||||||
|  | @item video              @tab yes         @tab no      @tab yes     @tab no | ||||||
|  | @item console charset    @tab N/A         @tab ASCII   @tab ASCII   @tab ASCII | ||||||
|  | @item network            @tab no          @tab yes (*) @tab yes     @tab no | ||||||
|  | @item serial             @tab yes         @tab no      @tab no      @tab no | ||||||
|  | @item ATA/AHCI           @tab yes         @tab no      @tab no      @tab no | ||||||
|  | @item AT keyboard        @tab yes         @tab no      @tab no      @tab no | ||||||
|  | @item USB                @tab yes         @tab no      @tab no      @tab no | ||||||
|  | @item chainloader        @tab yes         @tab no      @tab no      @tab no | ||||||
|  | @item cpuid              @tab no          @tab no      @tab no      @tab no | ||||||
|  | @item hints              @tab good        @tab good    @tab good    @tab no | ||||||
|  | @item PCI                @tab yes         @tab no      @tab no      @tab no | ||||||
|  | @item badram             @tab yes (*)     @tab no      @tab no      @tab no | ||||||
|  | @item compression        @tab configurable @tab no     @tab no      @tab configurable | ||||||
|  | @item exit               @tab no          @tab yes     @tab yes     @tab yes | ||||||
|  | @end multitable | ||||||
|  | 
 | ||||||
|  | @multitable @columnfractions .20 .20 .20 .20 .20 | ||||||
|  | @item                    @tab MIPS qemu @tab emu | ||||||
|  | @item video              @tab no        @tab no | ||||||
|  | @item console charset    @tab CP437     @tab ASCII | ||||||
|  | @item network            @tab no        @tab yes | ||||||
|  | @item serial             @tab yes       @tab no | ||||||
|  | @item ATA/AHCI           @tab yes       @tab no | ||||||
|  | @item AT keyboard        @tab yes       @tab no | ||||||
|  | @item USB                @tab N/A       @tab yes | ||||||
|  | @item chainloader        @tab yes       @tab no | ||||||
|  | @item cpuid              @tab no        @tab no | ||||||
|  | @item hints              @tab guess     @tab no | ||||||
|  | @item PCI                @tab no        @tab no | ||||||
|  | @item badram             @tab yes (*)   @tab no | ||||||
|  | @item compression        @tab configurable @tab no | ||||||
|  | @item exit               @tab no        @tab yes | ||||||
|  | @end multitable | ||||||
|  | 
 | ||||||
|  | @node Platform-specific operations | ||||||
|  | @chapter Outline | ||||||
|  | 
 | ||||||
|  | Some platforms have features which allows to implement | ||||||
|  | some commands useless or not implementable on others. | ||||||
|  | 
 | ||||||
|  | Quick summary: | ||||||
|  | 
 | ||||||
|  | Information retrieval: | ||||||
|  | 
 | ||||||
|  | @itemize | ||||||
|  | @item mipsel-loongson: lsspd | ||||||
|  | @item mips-arc: lsdev | ||||||
|  | @item efi: lsefisystab, lssal, lsefimmap | ||||||
|  | @item i386-pc: lsapm | ||||||
|  | @item acpi-enabled (i386-pc, i386-coreboot, i386-multiboot, *-efi): lsacpi | ||||||
|  | @end itemize | ||||||
|  | 
 | ||||||
|  | Workarounds for platform-specific issues: | ||||||
|  | @itemize | ||||||
|  | @item i386-efi/x86_64-efi: loadbios, fixvideo | ||||||
|  | @item acpi-enabled (i386-pc, i386-coreboot, i386-multiboot, *-efi): | ||||||
|  |     acpi (override ACPI tables) | ||||||
|  | @item i386-pc: drivemap | ||||||
|  | @item i386-pc: sendkey | ||||||
|  | @end itemize | ||||||
|  | 
 | ||||||
|  | Advanced operations for power users: | ||||||
|  | @itemize | ||||||
|  | @item x86: iorw (direct access to I/O ports) | ||||||
|  | @end itemize | ||||||
|  | 
 | ||||||
|  | Miscelaneous: | ||||||
|  | @itemize | ||||||
|  | @item cmos (x86-*, ieee1275, mips-qemu_mips, mips-loongson): cmostest | ||||||
|  |     (used on some laptops to check for special power-on key) | ||||||
|  | @item i386-pc: play | ||||||
|  | @end itemize | ||||||
|  | 
 | ||||||
| @node Supported kernels | @node Supported kernels | ||||||
| @chapter Supported boot targets | @chapter Supported boot targets | ||||||
| 
 | 
 | ||||||
|  | @ -4129,7 +4292,7 @@ X86 support is summarised in the following table. ``Yes'' means that the kernel | ||||||
| @end multitable | @end multitable | ||||||
| 
 | 
 | ||||||
| @multitable @columnfractions .50 .22 .22 | @multitable @columnfractions .50 .22 .22 | ||||||
| @item                                @tab 32-bit EFI    @tab 64-bit EFI | @item                                @tab ia32 EFI      @tab amd64 EFI | ||||||
| @item BIOS chainloading              @tab no (1)        @tab no (1) | @item BIOS chainloading              @tab no (1)        @tab no (1) | ||||||
| @item NTLDR                          @tab no (1)        @tab no (1) | @item NTLDR                          @tab no (1)        @tab no (1) | ||||||
| @item Plan9                          @tab no (1)        @tab no (1) | @item Plan9                          @tab no (1)        @tab no (1) | ||||||
|  | @ -4155,7 +4318,7 @@ X86 support is summarised in the following table. ``Yes'' means that the kernel | ||||||
| @end multitable | @end multitable | ||||||
| 
 | 
 | ||||||
| @multitable @columnfractions .50 .22 .22 | @multitable @columnfractions .50 .22 .22 | ||||||
| @item                                @tab IEEE1275 | @item                                @tab ia32 IEEE1275 | ||||||
| @item BIOS chainloading              @tab no (1) | @item BIOS chainloading              @tab no (1) | ||||||
| @item NTLDR                          @tab no (1) | @item NTLDR                          @tab no (1) | ||||||
| @item Plan9                          @tab no (1) | @item Plan9                          @tab no (1) | ||||||
|  | @ -4189,7 +4352,8 @@ X86 support is summarised in the following table. ``Yes'' means that the kernel | ||||||
| @item Requires ACPI | @item Requires ACPI | ||||||
| @end enumerate | @end enumerate | ||||||
| 
 | 
 | ||||||
| PowerPC and Sparc ports support only Linux. MIPS port supports Linux and multiboot2. | PowerPC, IA64 and Sparc64 ports support only Linux. MIPS port supports Linux | ||||||
|  | and multiboot2. | ||||||
| 
 | 
 | ||||||
| @chapter Boot tests | @chapter Boot tests | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue