lilo-24.0/0000755000175000017500000000000012154434420011347 5ustar adjooadjoolilo-24.0/diagnose/0000755000175000017500000000000011405454075013146 5ustar adjooadjoolilo-24.0/diagnose/GPLicence0000644000175000017500000004307605022247406014670 0ustar adjooadjoo GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. lilo-24.0/diagnose/LGPLicence0000644000175000017500000006357506663736400015023 0ustar adjooadjooGNU Lesser Public License Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. one line to give the library's name and an idea of what it does. Copyright (C) year name of author This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. signature of Ty Coon, 1 April 1990 Ty Coon, President of Vice That's all there is to it! lilo-24.0/diagnose/Makefile0000644000175000017500000000556611406723623014621 0ustar adjooadjoo# -*- makefile -*- # Makefile for BCC tests # adding variables include ../make.vars MODEL=s CC = bcc -M$(MODEL) CPP = gcc -E CINCL = /usr/lib/bcc/include AS = as86 LINK = $(CC) -v COPT = -ansi -I$(CINCL) -c -O -DDEBUG=0 LOPT = -m >$*.map -M -d AOPT = -0 -a -w FD = msdos.b FDSIZE = 1440 MFILE=/tmp/liloboot LOOP=/dev/loop5 .SUFFIXES: .com .S .c.o: $(CC) $(COPT) -o $@ $< -A-l -A$*.lis .o.com: $(LINK) $(LOPT) -o $@ $^ .s.o: $(AS) $(AOPT) -l $*.lis -o $@ $< all: check test4d.com test4.com test5.com bootdiagnostic.b.gz check: # You need the bcc compiler for some steps! @if [ -x /usr/bin/bcc -o -x /usr/local/bin/bcc ]; then echo Okay; \ else echo "*** WARNING ***"; \ echo "You don't seem to have the 'bcc' compiler from the 'dev86' package. "; \ echo "***************"; exit 1; \ fi floppy: bootdiagnostic.b.gz @echo @echo Insert a blank, formatted, floppy into drive 0 @echo "Press to continue, <^C> to abort ..." @read gzip -d >floppy.b dd if=sector.b bs=2 skip=31 count=225 >>floppy.b mount -t msdos -o loop=$(LOOP) bootdiagnostic.b $(MFILE) dd if=floppy.b of=$(LOOP) bs=512 chown 0.0 *.com cp -ufv ../COPYING $(MFILE) cp -ufv test4.com $(MFILE)/hipboot.sys cp -ufv test4.com $(MFILE)/diag2sa.com cp -ufv test4d.com $(MFILE)/diag2.com if [ -f ../disk.b ]; then cp -ufv ../disk.b $(MFILE)/diag1.com; fi umount $(MFILE) rm -rf $(MFILE) gzip -9 bootdiagnostic.b.gz rm -f bootdiagnostic.b check2: # You need root permissions for some steps! (Test with mkfs.msdos) @if [ `which mkfs.msdos | grep -c mkfs` -eq 1 ]; then echo Okay; \ else echo "*** WARNING ***"; \ echo -n "You don't seem to have the commands 'mkfs.msdos'. "; \ echo "Perhaps you are not ROOT ?"; \ echo "***************"; exit 1; \ fi test4.com: test4.o bios_start.o cprintf.o test5.com: test5.o bios_start.o cprintf.o sector.o: sector.s test4.o: test4.c ../src/bdata.h test5.o: test5.c ../src/bdata.h cprintf.o: cprintf.c bios_start.o: bios.c bcc -c -u -I$(CINCL) -DL_bios_start -D__AS386_16__ -D__STANDALONE__ -o bios_start.o bios.c -v test4d.o: test4.c ../src/bdata.h bcc -Md $(COPT) -o $@ $< test4d.com: test4d.o bcc -Md $(LOPT) -o $@ $^ sector.s: sector.S $(CPP) -traditional -o $@ $< sector.img: sector.o ld86 -0 -s -o $@ $< sector.b: sector.img dd if=$< of=$@ bs=32 skip=1 floppy.b: sector.b dd if=sector.b bs=2 count=1 of=floppy.b dd if=$(FD) bs=2 skip=1 count=30 >>floppy.b dd if=sector.b bs=2 skip=31 count=225 >>floppy.b tidy: rm -f *.map *.lis core clean: rm -f *.o *.s *.img *.b *.com *.gz distclean: clean rm -f *~ lilo-24.0/diagnose/README0000644000175000017500000000213507421605505014026 0ustar adjooadjooThis directory contains the files for making the bootable diagnostic diskette, version 2. They are released under the terms of the BSD licence, contained in the file COPYING in the root LILO source directory. sector.S -- the MSDOS boot code which boots HIPBOOT.SYS test4.c -- the actual diagnostic Robert de Bath's "dev-0.16.0" package is REQUIRED to correctly make the programs in this directory. The following sources are derived from his package, are his property, and are released under the 'LGPLicence' contained in this directory. bios.c -- modified source for the bios_start.o program cprintf.c -- modified source for the standalone print routine The files placed on the MSDOS floppy are as follows: test4d.com -- DOS version 2 of the diagnostic, runs under MSDOS; useful for capturing output to a file, BUT output is not guaranteed to be the same as the standalone version 2 program test4.com -- standalone version 2 of the diagnostic, bootable if copied to 'hipboot.sys' disk.com -- version 1 of the disk diagnostic, bootable if copied to 'hipboot.sys' (14-Jan-2002) -- jrc lilo-24.0/diagnose/README.diagnostic0000644000175000017500000000227007464637422016163 0ustar adjooadjoo Notes for "bootdiagnostic.b.gz" 03-May-2002 The lilo boot disk diagnostic (version 2.1) is distributed in binary form in the file: bootdiagnostic.b.gz In order to create the bootable diagnostic floppy from this file, issue the following commands: gunzip bootdiagnostic.b.gz dd if=bootdiagnostic.b of=/dev/fd0 The entire 1.44M floppy disk will be written. This is an msdos filesystem diskette with the files: disk.com version 1 of the bootable lilo diagnostic test4.com version 2 test4d.com version 2, MSDOS executable hipboot.sys copy of test4.com Whichever file is copied to 'hipboot.sys' will be booted by the special bootloader on the floppy. As distributed, version 2, or 'test4.com' is the file copied to 'hipboot.sys'. The MSDOS executable is of some use if you can boot a bare DOS system. It may be executed from the DOS prompt to capture the output to a file; viz., A> test4d.com >log.txt (you'll have to hit a lot of CR's to get past all the pauses) The output from test4d.com is not necessarily the same as from the booted file 'test4.com', since MSDOS intercepts and modifies the responses to certain bios calls. User beware. --John Coffman lilo-24.0/diagnose/bios.c0000644000175000017500000001255007420653325014252 0ustar adjooadjoo/* Copyright (C) 1996 Robert de Bath * This file is part of the Linux-8086 C library and is distributed * under the GNU Library General Public License. */ /* Modified 14-Jan-2002 by John Coffman for inclusion * in the set of LILO diagnostics. This code is the property of Robert * de Bath, and is used with his permission. */ #define MSDOS_TOO 1 #define SAVE_SP 1 #if !__FIRST_ARG_IN_AX__ #ifdef __AS386_16__ #ifdef __STANDALONE__ #include #include #include #ifdef L_bios_start char ** environ = { 0 }; int errno; void (*__cleanup)() = 0; #asm .data export ___argr ___argr: .word 0,0,0,0,0,0,0,0 ! A struct REGS export ___argseg ___argseg: .word 0,0,0,0 ! A struct SREGS ___argr_end: defarg: .word boot_str, 0 boot_str: .asciz "boot" loop_save: .word 0 .text #if SAVE_SP sssp_save: .word 0,0 ! dirty area if startup SS & SP are to be seen #endif export ___cstartup ! Crt0 startup ___cstartup: cli #if MSDOS_TOO seg es cmp word ptr [0],#$20CD ! "int 20h" at psp: ES:0000 jne not_dos push ax ! DOS provides us a stack mov ax,cs add ax,#$10 ! bump CS by 0x10 push ax mov ax,#is_dos ! resume address push ax retf ! continue at next instruction is_dos: pop ax ! restore saved AX seg cs mov word ptr [iret_ins-2],es ! patch return to int 20h exit not_dos: #endif #if SAVE_SP seg cs mov [sssp_save],sp seg cs mov [sssp_save+2],ss ! save startup SS:SP #endif mov sp,cs add sp,#__segoff mov ss,sp mov sp,#___argr_end push ds #if SAVE_SP seg cs push [sssp_save+2] ! startup SS #else push ss #endif push cs push es #if SAVE_SP seg cs push [sssp_save] ! startup SP to flags #else pushf ! to flags, but why? #endif push bp ! to cflags push di ! save the startup registers push si ! pushes are shorter than mov mem,reg push dx push cx push bx push ax xor sp,sp ! maximum stack push bp ! perhaps bp should be zeroed first sti ! now turn on interrupts push ss ! set up the ES and DS pop ds ! equal to the SS zap_bss: ! Clear the BSS push ds pop es ! ES now = DS mov di,#__edata mov cx,#__end sub cx,di xor ax,ax cld rep stosb push [_environ] mov ax,#defarg ! Don`t define __mkargv, standalone programs don`t push ax ! get any arguments. mov ax,#1 push ax mov bx,#auto_start ! Pointer to first autostart function auto_run: mov [loop_save],bx mov bx,[bx] test bx,bx jz no_entry call bx ! Call the function no_entry: mov bx,[loop_save] inc bx ! next inc bx jmp auto_run ! And round for the next. call_exit: ! Last item called by above. pop bx ! Be tidy. push ax ! At the end the last called was main() push it`s call _exit ! return val and call exit(); bad_exit: jmp bad_exit ! Exit returned !! loc 2 .word _main ! Segment 2 is the trailing pointers, main and the .word call_exit ! routine to call exit. data_start: .text export _exit _exit: ! exit(rv) function mov bx,sp push [bx+2] ! Copy the `rv` for the exit fuctions. mov bx,[___cleanup] ! Call exit, normally this is `__do_exit` test bx,bx je no_clean ! But it`s default is null call bx no_clean: inc sp inc sp export __exit __exit: xor ax,ax mov es,ax seg es mov [$E6*4+2],cs ! seg es mov [$E6*4],#iret_ins dec ax ! AX = $FFFF int $E6 ! Try to exit DOSEMU ! If we get here we`re not in dosemu. seg es mov [$472],#$1234 ! Warm reboot. jmpi $0000,$FFFF ! DO NOT SEPARATE iret_ins: ! THIS LABEL FROM THE jmpi ... iret ! interrupt return!! not retf (==reti) export ___mkargv ! must resolve this reference ___mkargv: ret #endasm #endif /****************************************************************************/ #ifdef L_bios_write write(fd,buf,len) int fd,len; char * buf; { register int v, c; if(fd == 1 || fd == 2) { for(v=len; v>0; v--) { c= *buf++; if( c == '\n') bios_putc('\r'); bios_putc(c); } return len; } return (*__files)(CMD_WRITE, fd, buf, len); } #endif /****************************************************************************/ #ifdef L_bios_read read(fd,buf,len) int fd,len; char * buf; { if(fd == 0) return bios_rdline(buf, len); return (*__files)(CMD_READ, fd, buf, len); } #endif /****************************************************************************/ #ifdef L_bios_lseek long lseek(fd, offt, whence) int fd, whence; long offt; { if( fd >= 0 && fd <= 2 ) errno = ESPIPE; else { if( (*__files)(CMD_LSEEK, fd, &offt, whence) >= 0 ) return offt; } return -1L; } #endif /****************************************************************************/ #ifdef L_bios_close close(fd) int fd; { if( fd >= 0 && fd <= 2 ) errno = ENOSYS; else return (*__files)(CMD_CLOSE, fd); return -1; } #endif /****************************************************************************/ #ifdef L_bios_nofiles int (*__files)() = __nofiles; int __nofiles(cmd, fd, buf, len) int cmd, fd, len; char * buf; { errno = EBADF; return -1; } #endif /****************************************************************************/ #ifdef L_bios_isatty isatty(fd) int fd; { if( fd >= 0 && fd <= 2 ) return 1; return 0; } #endif /****************************************************************************/ #endif #endif #endif lilo-24.0/diagnose/cprintf.c0000644000175000017500000001022710117163134014751 0ustar adjooadjoo/* Copyright (C) 1996 Robert de Bath * This file is part of the Linux-8086 C library and is distributed * under the GNU Library General Public License. */ /* Modified 14-Jan-2002 by John Coffman for inclusion * in the set of LILO diagnostics. This code is the property of Robert * de Bath, and is used with his permission. */ #include /* #include */ #define ASM_CVT 1 #if __MSDOS__ #include #define putch(ch) fputc(ch,stdout) #else #define putch(ch) bios_putc(ch) #endif static unsigned char * __numout(long i, int base); int cprintf(char * fmt, ...) { register int c; int count = 0; int type, base; long val; char * cp; char padch=' '; int minsize, maxsize; va_list ap; va_start(ap, fmt); while(c=*fmt++) { count++; if(c!='%') { if (c=='\n') putch('\r'); putch(c); } else { type=1; padch = *fmt; maxsize=minsize=0; if(padch == '-') fmt++; for(;;) { c=*fmt++; if( c<'0' || c>'9' ) break; minsize*=10; minsize+=c-'0'; } if( c == '.' ) for(;;) { c=*fmt++; if( c<'0' || c>'9' ) break; maxsize*=10; maxsize+=c-'0'; } if( padch == '-' ) minsize = -minsize; else if( padch != '0' ) padch=' '; if( c == 0 ) break; if(c=='h') { c=*fmt++; type = 0; } else if(c=='l') { c=*fmt++; type = 2; } switch(c) { case 'x': base=16; type |= 4; if(0) { case 'o': base= 8; type |= 4; } if(0) { case 'u': base=10; type |= 4; } if(0) { case 'd': base=-10; } switch(type) { case 0: val=va_arg(ap, short); break; case 1: val=va_arg(ap, int); break; case 2: val=va_arg(ap, long); break; case 4: val=va_arg(ap, unsigned short); break; case 5: val=va_arg(ap, unsigned int); break; case 6: val=va_arg(ap, unsigned long); break; default:val=0; break; } cp = __numout(val,base); if(0) { case 's': cp=va_arg(ap, char *); } count--; c = strlen(cp); if( !maxsize ) maxsize = c; if( minsize > 0 ) { minsize -= c; while(minsize>0) { putch(padch); count++; minsize--; } minsize=0; } if( minsize < 0 ) minsize= -minsize-c; while(*cp && maxsize-->0 ) { putch(*cp++); count++; } while(minsize>0) { putch(' '); count++; minsize--; } break; case 'c': putch(va_arg(ap, int)); break; default: putch(c); break; } } } va_end(ap); return count; } static char nstring[]="0123456789ABCDEF"; #if ASM_CVT==0 #define NUMLTH 11 static unsigned char * __numout(long i, int base) { static unsigned char out[NUMLTH+1]; int n; int flg = 0; unsigned long val; if (base<0) { base = -base; if (i<0) { flg = 1; i = -i; } } val = i; out[NUMLTH] = '\0'; n = NUMLTH-1; do { out[n--] = nstring[val % base]; val /= base; } while(val); if(flg) out[n--] = '-'; return &out[n+1]; } #else #asm ! numout.s ! #if 0 .data _nstring: .ascii "0123456789ABCDEF" .byte 0 #endif .bss ___out lcomm $C .text ___numout: push bp mov bp,sp push di push si add sp,*-4 mov byte ptr -8[bp],*$0 ! flg = 0 mov si,4[bp] ; i or val.lo mov di,6[bp] ; i or val.hi mov cx,8[bp] ; base test cx,cx ! base < 0 ? jge .3num neg cx ! base = -base or di,di ! i < 0 ? jns .5num mov byte ptr -8[bp],*1 ! flg = 1 neg di ! i = -i neg si sbb di,*0 .5num: .3num: mov byte ptr [___out+$B],*$0 ! out[11] = nul mov -6[bp],*$A ! n = 10 .9num: !!! out[n--] = nstring[val % base]; xor dx,dx xchg ax,di div cx xchg ax,di xchg ax,si div cx xchg ax,si ! val(new) = val / base mov bx,dx ! dx = val % base mov al,_nstring[bx] mov bx,-6[bp] dec word ptr -6[bp] mov ___out[bx],al mov ax,si or ax,di ! while (val) jne .9num cmp byte ptr -8[bp],*$0 ! flg == 0 ? je .Dnum mov bx,-6[bp] dec word ptr -6[bp] mov byte ptr ___out[bx],*$2D ! out[n--] = minus .Dnum: mov ax,-6[bp] add ax,#___out+1 add sp,*4 pop si pop di pop bp ret #endasm #endif lilo-24.0/diagnose/sector.S0000644000175000017500000002441710330243737014576 0ustar adjooadjoo; sector.S -- boot program named: HIPBOOT.SYS ; from any MSDOS floppy diskette ; ; Copyright 2001-2005 John Coffman. ; All rights reserved. ; ; Licensed under the terms contained in the file 'COPYING' in the LILO ; source directory. ; #define DEBUG 0 /* enables loading .EXE for codeview debugging */ #define OPTION 1 /* enables fast directory search exit */ #define LARGE 0 /* enables loading code >32K */ #define TESTFAT 0 /* enables testing for FAT12/FAT16 */ #define SYSSEG 0x1000 /* load at a fixed address SYSSEG:0000 */ ;;directory_entry block 0 dir_filename: .blkb 8 dir_filename_ext: .blkb 3 dir_attribute: .blkb 1 dir_Reserved: .blkb 10 dir_time_updated: .blkw 1 dir_date_updated: .blkw 1 dir_cluster: .blkw 1 dir_file_size: .blkw 2 dir_entry_size: endb base equ 0x7C00 buffer equ 0x0500 ;scratch disk buffer ;contAddr equ SS:[bp-4] ;dword DO NOT MOVE ;dataBase equ SS:[bp-8] ;dword DO NOT MOVE ;FATshift equ SS:[bp-9] ; byte ;diskNumber equ SS:[bp-10] ; byte DO NOT MOVE ;dirBase equ SS:[bp-14] ;dword ;nDirSec equ SS:[bp-16] ;word ;FATsector equ SS:[bp-18] ;word ;FATnibbles equ SS:[bp-20] ;word stacksize equ 20 block -stacksize FATnibbles: .blkw 1 FATsector: .blkw 1 nDirSec: .blkw 1 dirBase: .blkw 2 diskNumber: .blkb 1 ; DO NOT MOVE FATshift: .blkb 1 dataBase: .blkw 2 ; DO NOT MOVE contAddr: .blkw 2 ; DO NOT MOVE stack: /* this had better be zero */ .blkb 3 ; jump instruction .blkb 8 ; system ID string secSiz: .blkw 1 ; bytes_per_sector secPerCl: .blkb 1 ; sectors_per_cluster FATbase: .blkw 1 ; reserved_sectors nFATs: .blkb 1 ; FAT_copies nDirEnt: .blkw 1 ; directory_entries totSec: .blkw 1 ; total_sectors media: .blkb 1 ; media_descriptor secPerFAT: .blkw 1 ; sectors_per_FAT nSEC: .blkw 1 ; sectors_per_track nSides: .blkw 1 ; heads_per_cylinder hidSec: .blkw 2 ; hidden_sectors .blkb 22 fs_id: .blkb 8 ; filesystem_id endb .globl _main org 0 ; jump instruction _main: jmp beginning nop system_id_string: .ascii "DISKBOOT" ; 8 chars msdos_boot_data: bytes_per_sector: dw 512 sectors_per_cluster: db 1 reserved_sectors: dw 1 FAT_copies: db 2 directory_entries: dw 224 ; 112 & 224 are typical total_sectors: dw 2880 media_descriptor: db 0xf0 ; 0f9H, 0f0h, 0fAh, etc. sectors_per_FAT: dw 9 sectors_per_track: dw 18 heads_per_cylinder: dw 2 hidden_sectors: dd 0 ; always zero for floppies total_sectors_2: dd 0 ; actual value if 'total_sectors' is zero BPB_rsvd: dw 0 ; reserved vol_id_marker: db 0x29 ; marker? for volume ID serial_number: dd 0 ; volume unique ID number volume_label: .ascii "NO NAME " ; 11 chars filesystem_id: .ascii "FAT12 " ; 8 chars beginning: xor ax,ax mov bp,#base ;origin at 7C00 #if DEBUG xor dl,dl mov ax,ss #endif cli mov ss,ax lea sp,(bp-stacksize) sti cld mov es,ax ;both at zero mov ds,ax #if DEBUG xor ax,ax #endif mov diskNumber(bp),dl ;save disk number int 0x13 ;reset the disk system jc error noError: mov ax,#0x0403 ;shift=4, nibbles=3 -- FAT12 fat12 equ *-2 #if TESTFAT cmp byte ptr fs_id+4(bp),#$36 ; '6' jne isFAT12 mov ax,#0004 ;shift=0, nibbles=4 -- FAT16 isFAT12: #endif mov FATshift(bp),ah ;set shift count cbw mov FATnibbles(bp),ax ;set number of nibbles per FAT index entry mov al,nFATs(bp) ;number of FATs ; cbw mul word ptr secPerFAT(bp) ;* sectors per FAT add ax,FATbase(bp) ;+ FAT base adc dx,#0 ; SI = 0 mov dirBase(bp),ax mov dirBase+2(bp),dx ;save directory base mov dataBase(bp),ax mov dataBase+2(bp),dx ;still forming Data base mov ax,#dir_entry_size mul word ptr nDirEnt(bp) mov bx,secSiz(bp) add ax,bx dec ax div bx ;get base of data #if DEBUG add bx,bx #endif #if SYSSEG mov contAddr(bp),ss ; SS = 0 mov word ptr contAddr+2(bp),#SYSSEG ; begin at SYSSEG:0000 #else add bx,#base mov contAddr(bp),bx ;save continuation address mov contAddr+2(bp),es #endif mov nDirSec(bp),ax ;save no. of Directory sectors add dataBase(bp),ax adc word ptr dataBase+2(bp),#0 ; SI = 0 ; scan the directory for the required bootstrap file mov ax,dirBase(bp) ; starting disk block in DX:AX mov dx,dirBase+2(bp) dirscan: mov bx,#buffer ; ES:BX points to buffer call ReadSector mov di,bx mov bx,secSiz(bp) dirscan1: call S21 tofind: .ascii "HIPBOOT SYS" error: call write db 13,10,10 .ascii 'Non-SYSTEM disk or disk error' db 13,10 .ascii 'Press any key to re-boot ...' db 0 done: xor ax,ax int 0x16 ;wait for keypress int 0x19 ;re-boot S21: pop si push di mov cx,#11 ;name length rep seg cs cmpsb ;byte ptr CS:[si],ES:[di] pop di je hipboot #if OPTION cmp byte ptr (di),#0 je endOfDirectory #endif lea di,dir_entry_size(di) sub bx,#dir_entry_size jg dirscan1 inc ax dec word ptr nDirSec(bp) jnz dirscan endOfDirectory: error2: jmp error ReadSector: push dx ;save registers push cx push ax add ax,hidSec(bp) ;+ Hidden Sectors adc dx,hidSec+2(bp) ; xchg ax,dx push dx ;AX=dividend-hi, DX=dividend-low cwd div word ptr nSEC(bp) ;DX=remainder, AX=quo-hi pop cx xchg ax,cx ;CX=quo-hi, DX:AX=dividend-low div word ptr nSEC(bp) ;remainder is sector number, zero based inc dx ;DX=sector#, CX:AX=quotient push dx ;save sector number mov dx,cx ;DX:AX=quotient div word ptr nSides(bp) ;DX = side, AX = Cyl No. mov cl,#6 shl ah,cl ;AH is hi-bits of cyl no. pop cx ;restore sector number or cl,ah mov ch,al mov dh,dl mov dl,diskNumber(bp) retry: mov ax,#0x0201 ;BIOS read 1 sector int 0x13 #if DEBUG jnc readcont xor ax,ax int 0x13 jmp retry readcont: #endif error3: jc error2 pop ax pop cx pop dx ret hipboot: mov cx,dir_cluster(di) mov word ptr FATsector(bp),#-1 ;no FAT sector present les bx,contAddr(bp) ;get continue address nextCluster: call readCluster push es push bx mov ax,FATnibbles(bp) ;get number of nibbles in a FAT entry mul cx ;DX:AX is nibble index shr dx,1 rcr ax,1 ;DX:AX is byte index, CF=odd/even pushf ;save CF mov si,secSiz(bp) ;sector size to SI div si ;AX is rel. sector, DX is byte offset mov di,dx ;DI is byte offset push ds pop es mov bx,#buffer call ForceFatSector ;AX is rel. FATsector to force mov dl,(bx+di) ;get low byte dec si inc di and di,si ;mask DI byte offset jnz sameFATsec inc ax call ForceFatSector sameFATsec: mov dh,(bx+di) popf ;restore shift flag mov cl,FATshift(bp) jc shiftIt shl dx,cl shiftIt: shr dx,cl mov si,#-1 shr si,cl ;si is EOF and si,#-8 ;0xFFF8 mov cx,dx ;CX is next cluster pop bx pop es cmp cx,si jb nextCluster mov ch,media(bp) ;pass on media descriptor lea sp,diskNumber(bp) pop dx pop bx ;low order start of data pop ax ;high order start of data #if DEBUG jmp done #endif retf readCluster: push cx mov al,secPerCl(bp) ;sectors per cluster cbw xchg ax,cx ;AX=cluster #, CX=# sectors per cluster dec ax dec ax ;base it at 0, instead of 2 mul cx add ax,dataBase(bp) ;offset onto disk adc dx,dataBase+2(bp) readClus1: call ReadSector ;read a sector add bx,secSiz(bp) ;update address #if LARGE jnc readClus2 mov si,es ;get segment register add si,#0x1000 ;REAL mode increment mov es,si ;update segment register #else jc error3 ;segment overflow #endif readClus2: inc ax ;update sector number jnz readClus3 inc dx readClus3: loop readClus1 pop cx ret ForceFatSector: push dx cmp ax,FATsector(bp) je gotFATsector mov FATsector(bp),ax add ax,FATbase(bp) xor dx,dx call ReadSector gotFATsector: pop dx ret write: pop si ;get character string pointer write1: seg cs lodsb ;byte ptr CS:[si] test al,al jz return mov ah,#0x0e mov bx,#7 int 0x10 jmp write1 return: jmp si org 510 dw 0xAA55 ; BOOT_SIGNATURE endup: theend: lilo-24.0/diagnose/test4.c0000644000175000017500000007205611403520137014356 0ustar adjooadjoo/* test4.c */ /* Copyright 2001-2005 John Coffman. All rights reserved. Licensed under the terms contained in the file 'COPYING' in the LILO source directory. */ #include #include "../src/bdata.h" #define DISK_VERSION "2.4" #if __MSDOS__==0 #define putch bios_putc #define getch bios_getc #define printf cprintf #define CR 13 #else #include #define putch(c) fputc((c),stdout) #define getch getchar #define CR 10 #endif #define CTRL_C 03 #define SPACER "\f\n" #define SEQ 0x3C4 #define FS_REG 0x80 #ifndef EDD_SUBSET #define EDD_SUBSET 4 #define EDD_LOCK 2 #define EDD_PACKET 1 #endif #ifndef SECTOR_SIZE #define SECTOR_SIZE 512 #endif #define nelem(a) (sizeof(a)/sizeof((a)[0])) typedef unsigned char byte; typedef unsigned short word; typedef unsigned long dword; extern union REGS __argr; extern struct SREGS __argseg; union REGS reg, oreg; struct SREGS sreg; int last_good_disk; int video_1 = 0xF00; int fs_mod = 0; int num_hd = BD_MAX_HARD; int errno; dword hma; /* highest memory address */ struct { long start, start_hi, length, length_hi, mtype; } mem_map; #define E820_MAGIC 0x534D4150 struct gdt_entry { unsigned short limit; unsigned short base01; unsigned char base2; unsigned char dtype; /* 0x93 for data */ unsigned char limit2; /* limit in low nibble, granularity & 32-bit in high nibble */ unsigned char base3; }; struct gdt_entry gdt[6]; static int get_fs(void) { #asm mov ax,fs #endasm } static int set_fs(int val) { int i = val; #asm mov ax,4[bp] mov fs,ax #endasm return i; } static int check_fs(void) { int ret = 0; #if DEBUG>=2 printf("#"); #endif if (get_fs() != FS_REG) { fs_mod = ret = 1; printf("\nThe FS register has been modified.\n"); set_fs(FS_REG); } return ret; } static int hicopy (unsigned long to, unsigned long from, int wcount) { int status; unsigned char save; memset(gdt, 0, sizeof(gdt)); gdt[2].limit = gdt[3].limit = 0xFFFF; gdt[2].dtype = gdt[3].dtype = 0x93; gdt[2].base01 = from; gdt[2].base2 = from>>16; gdt[2].base3 = from>>24; gdt[3].base01 = to; gdt[3].base2 = to>>16; save = gdt[3].base3 = to>>24; segread(&sreg); sreg.es = sreg.ds; reg.h.ah = 0x87; reg.x.cx = wcount; reg.x.si = gdt; /*** gdt[3].base3 &= 0; / crosstalk */ int86x(0x15, ®, &oreg, &sreg); status = oreg.h.ah; if (oreg.x.cflag) status |= 0x100; if (save!=gdt[3].base3) status |= 0x200; errno |= status; return status; } unsigned long linear(void *ptr) { segread(&sreg); return ((unsigned long)sreg.ds<<4) + (unsigned int)ptr; } word hipeekw(long address) { word temp; hicopy(linear(&temp), address, 1); return temp; } int hipokew(long address, word value) { return hicopy(address, linear(&value), 1); } #if __MSDOS__==0 static bios_putc0(int c) { union REGS reg; if (c=='\f') { #if 0 reg.h.ah = 0x0F; int86(0x10, ®, ®); reg.h.ah = 0; int86(0x10, ®, ®); #else static word upper = 0; if (!upper) { __set_es(0x40); /* address BIOS data area */ upper = __peek_es(0x84); if (upper < 24 || upper > 50) upper = 24; upper <<= 8; reg.h.ah = 0x0F; /* get video mode */ int86(0x10, ®, ®); upper |= (reg.h.ah-1); } reg.x.ax = 0x0600; /* blank screen area */ reg.h.bh = 7; reg.x.cx = 0x0000; reg.x.dx = upper; int86(0x10, ®, ®); reg.h.ah = 2; /* set cursor position */ reg.h.bh = 0; reg.x.dx = 0x0000; int86(0x10, ®, ®); #endif } else { reg.h.al = c; reg.h.ah = 14; reg.x.bx = 7; int86(0x10, ®, ®); } } void bios_putc(char c) { static int col; switch(c) { case '\t': do bios_putc(' '); while(col&7); break; case '\n': bios_putc0('\r'); /* fall into CR */ case '\f': case '\r': col=0; default: bios_putc0(c); if (c>=' ' && c<0177) col++; } } #endif static int a20(void) /* Return 1 if a20 is enabled, 0 if disabled */ { #asm push ds push es xor ax,ax mov es,ax dec ax mov ds,ax cli mov al,[0x10] mov ah,al seg es cmp al,[0] jne a20_8 xor al,#0x5A mov [0x10],al seg es cmp al,[0] jne a20_8 xor al,al jmp a20_9 a20_8: mov al,#1 a20_9: mov [0x10],ah cbw sti pop es pop ds #endasm } static void sizeit(unsigned long sectors) { static char suf[] = "KMGT"; int fract; char *cp; /* print disk size in K,M,G,T */ sectors /= 2; cp = suf; if (sectors <= 999) { printf("%ld%c", sectors, *cp); return; } cp++; while (sectors > 999999) { sectors /= 1000; cp++; } if (sectors > 2999) { sectors *= 1024; sectors /= 1000; } sectors += 5; /* round decimal part */ sectors /= 10; fract = sectors % 100; sectors /= 100; printf("%ld.%02d%c", sectors, fract, *cp); } static void banner(char *version) { printf( "\n\n\n" ">>>> Disk Detection and Parameter Display <<<<\n\n\n" "Version %s, Copyright (C) 1999-2005 John Coffman \n" "Portions Copyright (C) 1996-2001 Robert de Bath, used with permission\n" "Re-use and redistribution rights set forth in the file \"COPYING\".\n\n", version); } static void testDX(void) { #if __MSDOS__==0 printf("Boot reported from DX = 0x%04x (boot device is 0x%02x in DL)\n", __argr.x.dx, __argr.h.dl); if (__argr.h.dl == 0 || __argr.h.dl == 1) { printf("If you booted from the %s floppy drive, then this is correct.", __argr.h.dl ? "second" : "first"); } else if (__argr.h.dl >= 0x80 && __argr.h.dl <= 0x8f) { printf("If you booted from %s hard drive, then this is correct.", __argr.h.dl==0x80 ? "the first" : __argr.h.dl==0x81 ? "the second" : "a" ); } else { printf("It looks like the BIOS failed to report the boot device in DL.\n"); } #endif } static int smsw(void) { #asm smsw ax #endasm } static long e820(long b) { #asm push bp mov bp,sp push ds pop es mov di,#_mem_map mov eax,#0xE820 mov ebx,[bp+4] mov ecx,#20 mov edx,#E820_MAGIC stc int 0x15 jc e820_err cmp eax,#E820_MAGIC mov ax,#-2 jne e820_exit cmp ecx,#20 mov ax,#-3 jne e820_exit push ebx pop ax pop dx jmp e820_exit e820_err: mov ax,#-1 e820_err2: cwd e820_exit: leave #endasm } static int inb(int port) { #asm mov bx,sp mov dx,[bx+2] in al,dx xor ah,ah #endasm } static int outb(int port, int data) { #asm mov bx,sp mov dx,[bx+2] mov ax,[bx+4] out dx,al #endasm } static void v86test(void) { static char s1[] = "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; if (smsw()&1) { printf(s1); printf( "!!! *** Warning: DOS is not running in REAL mode *** !!!\n" "!!! *** Reported results may not be accurate *** !!!\n" ); printf(s1); } } static void yesno(int i) { printf("%s\n", i?"yes":"no"); } static void decimal(unsigned long value) { unsigned int v[4]; int i; for (i=0; i<4; i++) { v[i] = value % 1000; value /= 1000; } if (v[3]) printf("%d,%03d,%03d,%03d", v[3], v[2], v[1], v[0]); else if (v[2]) printf("%d,%03d,%03d", v[2], v[1], v[0]); else if (v[1]) printf("%d,%03d", v[1], v[0]); else printf("%d", v[0]); } static void print_regs(union REGS *reg) { printf("AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x\n", reg->x.ax, reg->x.bx, reg->x.cx, reg->x.dx, reg->x.si, reg->x.di); } static void print_sregs(struct SREGS *sreg) { printf("DS=%04x ES=%04x CS=%04x SS=%04x\n", sreg->ds, sreg->es, sreg->cs, sreg->ss); } static int is_msdos(void) { #if __MSDOS__ return 1; #else return (__argseg.es+0x10 == __argseg.cs); #endif } static void pause(void) { char ch; /* Must be standalone */ check_fs(); printf("\n\n\nHit to continue, <^C> to quit ..."); do { ch = getch(); if (ch==CTRL_C) exit(0); #if DEBUG>=1 if (ch != CR) printf(" %o", ch); #endif } while (ch != CR); printf("\n"); } static void video_fix(void) { outb(SEQ, 1); video_1 = inb(SEQ+1); /* dirty hack for DELL Dimension 4300 computers */ printf("\f\n"); } static void print_carry(int flag) { printf(" Carry = %d\n", flag); } static void get_equip_cfg(void) { static char *vmode[4] = { "reserved", "40x25 color", "80x25 color", "80x25 monochrome" }; word flag; int n; pause(); printf(SPACER "Int 11h\t\t\t\t[PC][AT][PS/2]\n" "Get Equipment Configuration\n\n" "Returns:\n "); flag = int86(0x11, ®, ®); print_regs(®); printf("\nHas floppy drive(s): "); yesno(flag&1); printf("Has math coprocessor: "); yesno(flag&2); printf("Has pointing device: "); yesno(flag&4); printf("Initial video mode: %s\n", vmode[(flag>>4)&3]); n = flag&1 ? ((flag>>6)&3)+1 : 0; if (n) printf("Floppy drives installed: %d\n", ((flag>>6)&3)+1 ); n = (flag>>9)&7; printf("Serial interfaces: %d\n", n); printf("Has game adapter: "); yesno(flag&4096); n = (flag>>14)&3; printf("Parallel interfaces: %d\n", n); } static void get_conv_mem(void) { int mem; pause(); printf(SPACER "Int 12h\t\t\t\t[PC][AT][PS/2]\n" "Get Conventional Memory Size\n\n" "Returns:\n "); mem = int86(0x12, ®, ®); print_regs(®); printf("\nThere is %dK of low memory. EBDA size = %dK EBDA starts at 0x%lx\n", mem, 640-mem, (long)mem<<10 ); printf("\n(The A20 line is %sabled.)\n", a20() ? "en" : "dis"); } static void mov_ext_mem(void) { word status, temp, vtemp; dword high, veryhigh; pause(); segread(&sreg); sreg.es = sreg.ds; printf(SPACER "Int 15h Function 87h\t\t[AT][PS/2]\n" "Move Extended Memory Block\n\n" "Call With:\n "); print_sregs(&sreg); reg.x.ax = 0x8700; reg.x.cx = 1; reg.x.si = &gdt; printf(" "); print_regs(®); high = 1024L*(1024L+128)-2; /* 1Mb + 128K */ veryhigh = high+16L*1024L*1024L; if (veryhigh >= hma) veryhigh=0; #define WORDA 0xA5C6 #define WORDB 0x6CA5 errno = 0; temp = hipeekw(high); status = hipokew(high, WORDA^temp); printf("\nReturns:\n "); print_sregs(&sreg); printf(" "); print_regs(&oreg); print_carry((status>>8) & 1); printf("\nR/W test at address %08lx ", high); if (hipeekw(high) != (WORDA^temp)) errno |= 0x400; hipokew(high, temp); if (hipeekw(high) != temp) errno |= 0x800; printf("%ssuccessful\n", errno ? "un" : ""); if (errno) printf("Error code = 0x%04x\n", errno); if (veryhigh) { printf("R/W test at address %08lx ", veryhigh); vtemp = hipeekw(veryhigh); hipokew(veryhigh, WORDB^vtemp); if (hipeekw(high) != temp) errno |= 0x200; if (hipeekw(veryhigh) != (WORDB^vtemp)) errno |= 0x400; hipokew(veryhigh, vtemp); if (hipeekw(high) != temp) errno |= 0x200; if (hipeekw(veryhigh) != vtemp) errno |= 0x800; printf("%ssuccessful\n", errno ? "un" : ""); if (errno) printf("Error code = 0x%04x\n", errno); } if (errno & 0xE00) printf("\nThere is crosstalk between the two addresses\n" "The function does not support full 386 32-bit addressing.\n"); } #define NAREA 32 static void get_ext_mem(void) { long b, b1; dword t; int i; pause(); printf(SPACER "Int 15h Function E820h\t\t[EXT]\n" "Get Memory Map\n\n" "Call With:\n" " EAX=0000E820 EBX=00000000 ECX=00000014 EDX=%lx\n\n", E820_MAGIC ); b = e820(b1=i=0); if (b > 0) { dword start[NAREA], length[NAREA]; int j, k, ovlap; /* 00 000000000000 000000000000 (1) avail */ printf("EBX Start Length Type\n\n"); do { printf(" %02lx %04hx%08lx %04hx%08lx (%d) %s\n", b1, (short)mem_map.start_hi, mem_map.start, (short)mem_map.length_hi, mem_map.length, (int)mem_map.mtype, mem_map.mtype == 1 ? "available" : mem_map.mtype == 2 ? "reserved" : mem_map.mtype == 3 ? "ACPI" : mem_map.mtype == 4 ? "NVS" : "unknown-reserved"); if (mem_map.mtype==1 && mem_map.start_hi==0 && mem_map.start<=1024L*1024L) { if (mem_map.length_hi==0) hma = mem_map.start+mem_map.length; else hma = 0xFFF00000L; } if (i < NAREA) { start[i] = *(dword*)(((char*)&mem_map.start)+1); length[i] = *(dword*)(((char*)&mem_map.length)+1); } i++; b = e820(b1=b); } while (b1 > 0); printf("\n"); if (i > NAREA) { i = NAREA; } ovlap = 0; for (k=0; k= e && ee > e)) { printf("*** Memory areas %d and %d overlap ***\n", k, j); ovlap++; } } } if (!ovlap) printf("No memory areas overlap\n"); } else { printf("Returns:\n"); if (b==-1) print_carry(1); else if (b==-2) printf(" EAX=\n"); else if (b==-3) printf(" EAX=%lx EBX=******** ECX=\n", E820_MAGIC); else printf(" EAX=%lx EBX=00000000\n", E820_MAGIC); printf("\nFunction is not supported.\n"); } pause(); printf(SPACER "Int 15h Function E801h\t\t[EXT]\n" "Get Extended Memory Blocks\n\n" "Call With:\n "); reg.x.ax = 0xE801; print_regs(®); int86(0x15, ®, &oreg); printf("\nReturns:\n "); print_regs(&oreg); print_carry(oreg.x.cflag); if (!oreg.x.cflag) { printf("\nNumber of 1K blocks between 1M and 16M: %u\n", oreg.x.ax); printf( "Number of 64K blocks above 16M: %u\n", oreg.x.bx); t = 1024L*(oreg.x.ax+1024); t += 64L*1024L*oreg.x.bx; if (!hma) hma = t; else if (hma!=t) printf("A different amount of memory is reported by this function\n"); } else printf("\nFunction is not supported.\n"); pause(); printf(SPACER "Int 15h Function 88h\t\t[AT][PS/2]\n" "Get Extended Memory Size\n\n" "Call With:\n "); reg.x.ax = 0x8800; print_regs(®); int86(0x15, ®, ®); printf("\nReturns:\n "); print_regs(®); printf("\nThere is "); decimal( (unsigned long)reg.x.ax ); printf("K of extended memory.\n"); t = (reg.x.ax + 1024L) * 1024L; if (!hma) hma = t; } static int get_video_mode(void) { int m, row, col; pause(); printf(SPACER "Int 10h Function 0Fh\t\t[MDA][CGA][PCjr]\n" "Get Video Mode\t\t\t[EGA][MCGA][VGA]\n\n" "Call With:\n "); reg.x.ax = 0x0F00; reg.x.bx = -1; print_regs(®); int86(0x10, ®, ®); printf("\nReturns:\n "); print_regs(®); m = reg.h.al; __set_es(0x40); /* address BIOS data area */ reg.h.bl = row = __peek_es(0x84); printf("Fetch 0040:0084 (rows-1) to BL\n" "--> "); print_regs(®); col = reg.h.ah; printf("\nVideo mode = 0x%02x (%dx%d %s)\n", m, col, row+1, m==7 ? "monochrome" : m==3 ? "color" : "unknown"); printf("Active display page = %d\n", (int)reg.h.bh); return !(m==7 || col<80); } static int get_cfg_info(void) { pause(); printf(SPACER "Int 10h Function 12h\t\t[EGA][VGA]\n" "Subfunction 10h\n" "Get Configuration Information\n\n" "Call With:\n "); reg.x.ax = 0x1200; reg.x.bx = 0xFF10; print_regs(®); int86(0x10, ®, ®); printf("\nReturns:\n "); print_regs(®); if (reg.h.bh > 1) return 0; printf("\n%s display\n", reg.h.bh==0 ? "Color" : reg.h.bh==1 ? "Monochrome" : "Unknown"); printf("EGA memory = %dK\n", reg.h.bl <= 3 ? (reg.h.bl+1)*64 : 0); printf("Feature bits = 0x%02x\n", (int)reg.h.ch); printf("Configuration switch = 0x%02x\n", (int)reg.h.cl); return 1; } static int enable_refresh(void) { pause(); printf(SPACER "Int 10h Function 12h\t\t[VGA]\n" "Subfunction 36h\n" "Enable Screen Refresh\n\n" "Call With:\n "); reg.x.ax = 0x1200; reg.x.bx = 0x0036; reg.x.cx = 0; reg.x.dx = 0x80; print_regs(®); int86(0x10, ®, &oreg); printf("\nReturns:\n "); print_regs(&oreg); printf("\n"); printf("Function is %ssupported.\n", oreg.h.al==0x12 ? "" : "NOT "); if (oreg.x.dx != reg.x.dx || oreg.x.cx != reg.x.cx || oreg.x.si != reg.x.si || oreg.x.di != reg.x.di) printf("Error: Register(s) are not preserved.\n"); reg.x.dx = 0; return 1; } static int get_comb_code(void) { static char *dcode[] = { "none", "Monochrome", "CGA", "reserved", "EGA (color)", "EGA (mono)", "PGA", "VGA (monochrome)", "VGA (color)", "reserved", "MCGA (digital color)", "MCGA (monochrome)", "MCGA (color)", "UNKNOWN" }; int code; pause(); printf(SPACER "Int 10h Function 1Ah\t\t[PS/2]\n" "Subfunction 00h\n" "Get Display Combination Code\n\n" "Call With:\n "); reg.x.ax = 0x1A00; reg.x.bx = reg.x.cx = 0; print_regs(®); int86(0x10, ®, ®); printf("\nReturns:\n "); print_regs(®); if (reg.h.al != 0x1A) return 0; code = reg.h.bl <= 12 ? reg.h.bl : 13; printf("\nActive display: %s\n", dcode[code]); code = reg.h.bh <= 12 ? reg.h.bh : 13; printf("Inactive display: %s\n", dcode[code]); return (reg.h.bl>=4); } static void print_io_status(int status) { static char *errmsg[] = {"no error", "invalid command", /* 0-1 */ "address mark not found", "disk write-protected", /* 2-3 */ "sector not found", "reset failed", "floppy disk removed", /* 4-6 */ "bad parameter table", "DMA overrun", /* 7-8 */ "DMA crossed 64k boundary", "bad sector flag", /* 9-A */ "bad track flag", "media type not found", /* B-C */ "invalid number of sectors on format", /* D */ "control data address mark detected", /* E */ "DMA arbitration level out of range", /* F */ "uncorrectable CRC or ECC data error", /* 10 */ "ECC corrected data error" /* 11 */ }; char *err; if (status <= 0x11) err = errmsg[status]; else switch(status) { case 0x20: err = "controller failure"; break; case 0x40: err = "seek failed"; break; case 0x80: err = "disk timeout (failed to respond)"; break; case 0xAA: err = "drive not ready"; break; case 0xBB: err = "undefined error"; break; case 0xCC: err = "write fault"; break; case 0xE0: err = "status register error"; break; case 0xFF: err = "sense operation failed"; break; default: err = "???"; } printf(" BIOS error code = 0x%02x (%s)\n", status, err); } static void do_edd(int dev) { int m, subset; pause(); printf(SPACER "Int 13h Function 41h\t\t[EDD]\n" "Check EDD Extensions Present (device %02xh)\n\n" "Call With:\n ", dev); reg.x.ax = 0x41ED; reg.x.bx = 0x55AA; reg.x.dx = dev; print_regs(®); int86(0x13, ®, &oreg); printf("\nReturns:\n "); print_regs(&oreg); print_carry(oreg.x.cflag); m = 0; if (oreg.x.cflag) print_io_status(oreg.h.ah); else if (oreg.x.bx == 0xAA55 && (oreg.x.cx&EDD_SUBSET+EDD_LOCK+EDD_PACKET)) { m = 1; printf("\nEnhanced Disk Drive support: "); yesno(subset=oreg.x.cx&EDD_SUBSET); printf("Drive locking and ejecting: "); yesno(oreg.x.cx&EDD_LOCK); printf("Device access using packet calls: "); yesno(oreg.x.cx&EDD_PACKET); printf("EDD extensions version%s (hex code %02xh)\n", oreg.h.ah==0x30 ? " 3.0" : oreg.h.ah==0x21 ? " 1.1" : "" ,oreg.h.ah); } if (m) { struct EDDparam { short size; /* size of this structure */ short flags; /* information flags */ long pcyls; /* number of physical cylinders */ long pheads; /* number of physical heads/cylinder */ long psects; /* number of physical sectors/track */ unsigned /* number of physical sectors on volume */ long sectors_lo, sectors_hi; /* this is 8 bytes long */ short sec_size; /* number of bytes per sector */ unsigned long params; /* EDD config params (valid only if EDD_SUBSET) */ } eddparam; pause(); m = !!(oreg.x.cx&EDD_SUBSET) && oreg.h.ah>=0x21; printf(SPACER "Int 13h Function 48h\t\t[EDD]\n" "EDD Get Drive Parameters (device %02xh)\n\n" "Call With:\n ", dev); eddparam.size = sizeof(eddparam); reg.x.si = &eddparam; /* DS:SI points to buffer */ reg.x.ax =0x48C6; segread(&sreg); print_sregs(&sreg); printf(" "); print_regs(®); int86x(0x13, ®, ®, &sreg); printf("\nReturns:\n "); print_sregs(&sreg); printf(" "); print_regs(®); print_carry(reg.x.cflag); #define fl eddparam.flags printf("\nDMA boundary errors handled transparently: "); yesno(fl&1); printf("Geometry supplied: "); yesno(fl&2); printf("Device is removable: "); yesno(fl&4); printf("Device supports write with verify: "); yesno(fl&8); if (fl&4) { printf("Device has change-line support: "); yesno(fl&16); printf("Device is lockable: "); yesno(fl&32); printf("No media present; geometry is set to maximum: "); yesno(fl&64); } printf("Disk geometry ("); if (fl&2) { printf("C:H:S) = %ld:%ld:%ld (", eddparam.pcyls, eddparam.pheads, eddparam.psects); } if (eddparam.sectors_hi == 0) decimal(eddparam.sectors_lo); else printf("0x%x%08x", eddparam.sectors_hi, eddparam.sectors_lo); printf(" sectors)\n"); #undef fl m=1; if (m) { static char *cfunc[] = { "Enable Prefetch", "Disable Prefetch", "Set Maximum PIO Mode", "Set PIO Mode 0", "Set Default PIO Mode", "Enable DMA Maximum Mode", "Disable DMA" }; m = 0; /* start with subfn 0 */ pause(); printf(SPACER "Int 13h Function 4Eh\t\t[EDD]\n" "Subfunction 0?h\n" "EDD Set Hardware Configuration (device %02xh)\n\n" "Call With:\n ", dev); reg.x.ax = 0x4E00; reg.h.dl = dev; print_regs(®); int86(0x13, ®, ®); printf("\nReturns:\n "); print_regs(®); print_carry(reg.x.cflag); printf("\n"); for (m=0; m 63) printf("BIOS BUG!!! sectors returned as zero; 64 assumed\n"); if (h > 255) printf("BIOS BUG!!! heads > 255; BIOS is not IBM compatible\n"); if (dev & 0x80) { if (dev == 0x80) num_hd = oreg.h.dl; do_edd(dev); } } } } return m; } static int do_rw(int tries) { int code; while (tries--) { int86x(0x13, ®, &oreg, &sreg); if (oreg.x.cflag == 0 && oreg.x.ax == 0x0001) return 0; code = oreg.h.ah; oreg.x.ax = 0; int86(0x13, &oreg, &oreg); } return code; } static void do_get_pt(int dev) { int m; char buf[SECTOR_SIZE]; printf("Get partition table (device = 0x%x): ", dev); segread(&sreg); sreg.es = sreg.ss; reg.x.ax = 0x0201; reg.x.bx = buf; reg.x.cx = 1; reg.x.dx = dev & 0xFF; m = do_rw(5); if (m) print_io_status(m); else printf(" okay"); printf("\n"); check_fs(); } static void do_vesa(void) { int i; char vesa[512]; pause(); printf(SPACER "Int 10h Function 4Fh\t\t[VESA]\n" "Subfunction 00h\n" "Check VESA Extensions Present\n\n" "Call With:\n "); reg.x.ax = 0x4F00; reg.x.bx = 0; segread(&sreg); sreg.es = sreg.ss; reg.x.di = &vesa[0]; print_sregs(&sreg); printf(" "); print_regs(®); int86x(0x10, ®, &oreg, &sreg); printf("\nReturns:\n "); print_sregs(&sreg); printf(" "); print_regs(&oreg); if (oreg.x.ax != 0x004F) { printf("\nVESA BIOS extensions not present\n"); return; } if (strncmp(vesa, "VESA", 4)) { printf("\nVESA signature not found\n"); return; } vesa[4] = 0; printf("\n\"%s\" BIOS extensions present\n", vesa); pause(); printf(SPACER "Int 10h Function 4Fh\t\t[VESA]\n" "Subfunction 01h\n" "Get VESA Mode Information 1\n\n" "Call With:\n "); reg.x.ax = 0x4F01; reg.x.cx = 0x101; segread(&sreg); sreg.es = sreg.ss; reg.x.di = &vesa[0]; print_sregs(&sreg); printf(" "); print_regs(®); int86x(0x10, ®, &oreg, &sreg); printf("\nReturns:\n "); print_sregs(&sreg); printf(" "); print_regs(&oreg); i = *(int*)vesa; /* get mode bits */ printf("\nMode bits: 0x%04x\n", i); printf("640x480x256 mode supported: "); yesno(!(0x19 & ~i)); pause(); printf(SPACER "Int 10h Function 4Fh\t\t[VESA]\n" "Subfunction 01h\n" "Get VESA Mode Information 3\n\n" "Call With:\n "); reg.x.ax = 0x4F01; reg.x.cx = 0x103; segread(&sreg); sreg.es = sreg.ss; reg.x.di = &vesa[0]; print_sregs(&sreg); printf(" "); print_regs(®); int86x(0x10, ®, &oreg, &sreg); printf("\nReturns:\n "); print_sregs(&sreg); printf(" "); print_regs(&oreg); i = *(int*)vesa; /* get mode bits */ printf("\nMode bits: 0x%04x\n", i); printf("800x600x256 mode supported: "); yesno(!(0x19 & ~i)); } void main(void) { int m, i, dev; set_fs(FS_REG); #if DEBUG>=1 printf("FS=%04x\n", get_fs()); pause(); #endif if (!is_msdos()) { /** atexit(pause); **/ video_fix(); /* for Dumb DELL computers */ } #if DEBUG>=1 && __MSDOS__==0 printf("Beginning of '___cstartup'\n"); print_regs(&__argr); printf("DS=%04x ES=%04x CS=%04x SS=%04x SP=%04x BP=%04x\n", __argseg.ds, __argseg.es, __argseg.cs, __argseg.ss, __argr.x.flags, __argr.x.cflag); segread(&sreg); printf("\nBeginning of '_main'\n"); check_fs(); print_sregs(&sreg); #endif check_fs(); banner(DISK_VERSION); check_fs(); v86test(); testDX(); #if DEBUG>=2 sizeit((long)40*2*9); putch('\n'); sizeit((long)80*2*15); putch('\n'); sizeit((long)80*2*18); putch('\n'); sizeit((long)80*2*36); putch('\n'); sizeit((long)1024*255*63); putch('\n'); sizeit((long)24000*512); putch('\n'); #endif get_equip_cfg(); get_conv_mem(); hma = 0; get_ext_mem(); if (hma>1024L*1024L) mov_ext_mem(); m = get_video_mode(); if (m) m = get_cfg_info(); if (m) m = enable_refresh(); if (m) m = get_comb_code(); if (m) do_vesa(); #if DEBUG>=3 printf("\n\nm=%x\n", m); #endif dev = 0; m = 1; for (i=BD_MAX_FLOPPY; i && m;) { m = do_disk(dev); ++dev; if (--i == 0 && (dev & 0x80)==0) { dev = 0x80; i = BD_MAX_HARD; } if ((dev & 0x7F) >= num_hd) m = 0; } pause(); printf(SPACER); for (dev = 0x80; dev <= last_good_disk; dev++) do_get_pt(dev); if (!is_msdos()) { printf("\n\nInitial SEQ reg 1: 0x%02x\n", video_1); } printf("The FS register was %smodified during the tests.\n", fs_mod ? "" : "NOT "); pause(); } lilo-24.0/diagnose/test5.c0000644000175000017500000001477111403520137014357 0ustar adjooadjoo/* test5.c */ /* Copyright (C) 2004 John Coffman. All rights reserved. Licensed under the terms contained in the file 'COPYING' in the LILO source directory. */ #include #include #include "../src/bdata.h" #define DISK_VERSION "3.0" #if __MSDOS__==0 #define putch bios_putc #define getch bios_getc #define printf cprintf #define CR 13 #else #include #define putch(c) fputc((c),stdout) #define getch getchar #define CR 10 #endif #define CTRL_C 03 #define SPACER "\f\n" #ifndef EDD_SUBSET #define EDD_SUBSET 4 #define EDD_LOCK 2 #define EDD_PACKET 1 #endif #ifndef SECTOR_SIZE #define SECTOR_SIZE 512 #endif #define CL_MAGIC_ADDR 0x20 #define CL_MAGIC 0xa33f #define CL_OFFSET 0x22 #define CL_LENGTH 256 typedef unsigned char byte; typedef unsigned short word; typedef unsigned long dword; extern union REGS __argr; extern struct SREGS __argseg; union REGS reg, oreg; struct SREGS sreg; int num_hd = BD_MAX_HARD; int errno; enum {RD=0, WR=1}; struct Buffer { int dirty, device; union { byte sector[SECTOR_SIZE]; word wsector[SECTOR_SIZE/2]; dword dsector[SECTOR_SIZE/4]; } x; } buffer; unsigned long linear(void *ptr) { segread(&sreg); return ((unsigned long)sreg.ds<<4) + (unsigned int)ptr; } #if __MSDOS__==0 static bios_putc0(int c) { union REGS reg; if (c=='\f') { reg.h.ah = 0x0F; int86(0x10, ®, ®); reg.h.ah = 0; int86(0x10, ®, ®); } else { reg.h.al = c; reg.h.ah = 14; reg.x.bx = 7; int86(0x10, ®, ®); } } void bios_putc(char c) { static int col; switch(c) { case '\t': do bios_putc(' '); while(col&7); break; case '\n': bios_putc0('\r'); /* fall into CR */ case '\f': case '\r': col=0; default: bios_putc0(c); if (c>=' ' && c<0177) col++; } } #endif static void sizeit(unsigned long sectors) { static char suf[] = "KMGT"; int fract; char *cp; /* print disk size in K,M,G,T */ sectors /= 2; cp = suf; if (sectors <= 999) { printf("%ld%c", sectors, *cp); return; } cp++; while (sectors > 999999) { sectors /= 1000; cp++; } if (sectors > 2999) { sectors *= 1024; sectors /= 1000; } sectors += 5; /* round decimal part */ sectors /= 10; fract = sectors % 100; sectors /= 100; printf("%ld.%02d%c", sectors, fract, *cp); } static void banner(char *version) { printf( "\n\n\n" ">>>> Disk Maintenance Tools <<<<\n\n\n" "Version %s, Copyright (C) 2004 John Coffman \n" "Portions Copyright (C) 1996-2001 Robert de Bath, used with permission\n" "Re-use and redistribution rights set forth in the file \"COPYING\".\n\n", version); } static int inb(int port) { #asm mov bx,sp mov dx,[bx+2] in al,dx xor ah,ah #endasm } static int outb(int port, int data) { #asm mov bx,sp mov dx,[bx+2] mov ax,[bx+4] out dx,al #endasm } static void yesno(int i) { printf("%s\n", i?"yes":"no"); } static void decimal(unsigned long value) { unsigned int v[4]; int i; for (i=0; i<4; i++) { v[i] = value % 1000; value /= 1000; } if (v[3]) printf("%d,%03d,%03d,%03d", v[3], v[2], v[1], v[0]); else if (v[2]) printf("%d,%03d,%03d", v[2], v[1], v[0]); else if (v[1]) printf("%d,%03d", v[1], v[0]); else printf("%d", v[0]); } static void print_regs(union REGS *reg) { printf("AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x\n", reg->x.ax, reg->x.bx, reg->x.cx, reg->x.dx, reg->x.si, reg->x.di); } static void print_sregs(struct SREGS *sreg) { printf("DS=%04x ES=%04x CS=%04x SS=%04x\n", sreg->ds, sreg->es, sreg->cs, sreg->ss); } static int is_msdos(void) { #if __MSDOS__ return 1; #else return (__argseg.es+0x10 == __argseg.cs); #endif } static void pause(void) { char ch; /* Must be standalone */ printf("\n\n\nHit to continue, <^C> to quit ..."); do { ch = getch(); if (ch==CTRL_C) exit(0); #if DEBUG>=1 if (ch != CR) printf(" %o", ch); #endif } while (ch != CR); printf("\n"); } static void video_fix(void) { /* dirty hack for DELL Dimension 4300 computers */ printf("\f\n"); } static void setup(int rval) { segread(&sreg); sreg.es = sreg.ds; /* as a general rule */ memset(®,rval,sizeof(reg)); memset(&oreg,rval,sizeof(oreg)); } static int peekw_es(int addr) { union { char ch[2]; int w; } tem; tem.ch[0] = __peek_es(addr); tem.ch[1] = __peek_es(addr+1); return tem.w; } static void get_cmdline(char *cp) { word addr; int ch; __set_es(__argseg.ds); if (peekw_es(CL_MAGIC_ADDR) == CL_MAGIC) { addr = peekw_es(CL_OFFSET); do { ch = __peek_es(addr++); } while (ch && ch != '='); do { *cp++ = ch = __peek_es(addr++); } while (ch); } else *cp = 0; } static int num_hard_disks(void) { setup(0); reg.h.ah = 8; reg.h.dl = 0x80; int86(0x13, ®, &oreg); return oreg.x.cflag ? 0 : (int)oreg.h.dl; } static int disk_rw0(int bios, int rw, void *buffer) { int err = 1; int errcnt = 5; int code; while (err && errcnt) { setup(0); reg.h.ah = 2 + (rw & !DEBUG); reg.h.al = 1; reg.x.cx = 1; /* sector=0 is sect=1, hd=0, cyl=0 */ reg.h.dh = 0; reg.h.dl = bios; reg.x.bx = (word)buffer; /* ES is set == DS */ int86x(0x13, ®, &oreg, &sreg); code = oreg.h.ah; if ((err = (oreg.x.cflag || oreg.h.ah))) { setup(0); reg.h.dl = bios; if (bios & 0x80) reg.h.ah = 0x0D; int86(0x13, ®, &oreg); --errcnt; } } /* while (err && errcnt) */ if (err) { printf("Disk error on 0x%02x, AH = 0x%02x\n", bios, code); exit(1); } return code; } void disk_data(int bios) { if (!disk_rw0(bios, RD, buffer.x.sector)) { printf(" %02x %08lx\n", bios, buffer.x.dsector[110]); } } void main(void) { int m, i, dev; char cp[CL_LENGTH]; if (!is_msdos()) { video_fix(); /* for Dumb DELL computers */ } #if DEBUG>=1 && __MSDOS__==0 printf("Beginning of '___cstartup'\n"); print_regs(&__argr); printf("DS=%04x ES=%04x CS=%04x SS=%04x SP=%04x BP=%04x\n", __argseg.ds, __argseg.es, __argseg.cs, __argseg.ss, __argr.x.flags, __argr.x.cflag); segread(&sreg); printf("\nBeginning of '_main'\n"); print_sregs(&sreg); #endif banner(DISK_VERSION); get_cmdline(cp); printf("Command line: '%s' time=%ld\n", cp, time(NULL)); num_hd = num_hard_disks(); printf("The BIOS reports %d hard disks.\n", num_hd); for (i=0; i/dev/null; then : else rm -f /tmp/rlso$pid exit 0 fi echo "Re-running LaTeX" done lilo-24.0/doc/t2a.pl0000644000175000017500000002750306352527037013160 0ustar adjooadjoo#!/usr/bin/perl # # Copyright 1994-1996 Werner Almesberger. # All rights reserved. # # See file COPYING for details. # #----------------------------------------------------------------------------- # # Known bugs: # # Usually doesn't check for prepended backslashes, e.g. things like # \\begin{verbatim} would be processed incorrectly. # # Tokenization should be done once at the beginning, not on the fly # with cleanup and check procedures at the end of each step. # #----------------------------------------------------------------------------- # $w = 75; # # default macros # $m{"\\\\ldots"} = "..."; # # read the file # print STDERR "[".length($t)."] Reading the file\n"; $/ = "\000"; $t = "\n".<>."\n"; # # universal markers # $N = "\000"; # non-character $X = "\007"; # generic marker $Y = "\010"; # another generic marker $Z = "\011"; # yet another generic marker $B = "\001"; # begin $E = "\002"; # end $BS = "\013"; # second begin $ES = "\014"; # second end $CO = "\003"; # curly open $CC = "\004"; # curly close # # commands to the output formatter # $SI = "\020"; # increase indentation by one $SO = "\021"; # decrease indentation by one $B1 = "\022"; # one blank line $B2 = "\023"; # two blank lines sub xlat { local ($l) = @_; $l =~ tr/~/ /; $l =~ s/\\([_~&%^\$\#\[\]|\-])/\1/g;# unescape special characters $l =~ s/\\,//g; # remove small spaces $l =~ s/\\backslash */$X/g; # \backslash ->\ if ($l =~ /\\([A-Za-z]+|.)/) { warn "unrecognized command $& ($l)"; $l = $`."\n!!! UNRECOGNIZED COMMAND: $&\n$'"; } $l =~ s/$X/\\/g; $l =~ tr/{}//d; # delete stray curly braces $l =~ s/$CO/{/g; # put escaped braces back $l =~ s/$CC/}/g; return $l; } # # load macros # print STDERR "[".length($t)."] Loading macros\n"; while ($t =~ /\n%%(def|cmd)([^\n]*)\n/) { $t = $`."\n".$'; $a = $1; $2 =~ /([^\\])=/ || die "= missing in $2"; if ($a eq "def") { $m{$`.$1} = $'; $c{$`.$1} = ""; } else { $m{$`.$1} = ""; $c{$`.$1} = $'; } } # # remove %%beginskip ... %%endskip pairs # print STDERR "[".length($t)."] Removing %%beginskip ... %%endskip pairs\n"; while ($t =~ /\n%%beginskip\s*\n/) { $t = $`.$B.$'; } while ($t =~ /\n%%endskip\s*\n/) { $t = $`.$E.$'; } while ($t =~ /$B[^$B$E]*$E/) { $t = $`."\n".$'; } $t !~ /[$B$E]/ || die "%%beginskip/%%endskip mismatch"; # # process macros # print STDERR "[".length($t)."] Processing macros (may take a while)\n"; while (1) { $none = 1; for (keys %m) { while ($t =~ /$_/) { $none = 0; if ($c{$_} eq "") { eval "\$t = \$`.\"$m{$_}\".\$';"; } else { eval "\$t = \$`.$c{$_}.\$';"; } die "syntax error: $@" if $@; } } last if $none; print STDERR "[".length($t)."] "." next pass\n"; # perfectionist's approach: # $l = 0; # for (keys %m) { # if ($t =~ /$_/) { # if (length($&) > $l) { # $i = $_; # $l = length($&); # } # } # } # last if !$l; # $t =~ /$i/ || die "internal error"; # eval "\$t = \$`.\"$m{$i}\".\$'"; # die "syntax error: $@" if $@; # print STDERR "[".length($t)."] "."$i\n"; } # # handle verbatim sections (we're not trying to be perfect here) # print STDERR "[".length($t)."] Handling verbatim sections\n"; while ($t =~ /\\begin{verbatim}([ \t]*\n)?/) { $t = $`."\n\n".$B.$'; } while ($t =~ /\\end{verbatim}([ \t]*\n)?/) { $t = $`.$E."\n\n".$'; } while ($t =~ /\\verb([^a-zA-Z \t\n])/ && $t =~ /\\verb$1([^$1]*)$1/) { $t = $`.$B.$1.$E.$'; } while ($t =~ /$B([^$B$E]*)$E/) { ($a,$b,$c) = ($`,$1,$'); die "no support for \\t yet, sorry" if $b =~ /\t/; $b =~ s/\\/\\backslash /g; $b =~ s/[~^_%#&{}\$\-]/\\$&/g; $b =~ s/[`']/\\$&~/g; $b =~ s/ /~/g; $b =~ s/\n\n\n/$B2/g; $b =~ s/\n\n/$B1/g; $b =~ s/\n/\\\\/g; $t = $a.$b.$c; } if ($t =~ /[$B$E]/) { if ($t =~ /..........[$B$E]........../) { print STDERR "$&\n"; } die "verbatim conflict"; } # # hide escaped curly braces # print STDERR "[".length($t)."] Hiding escaped curly braces\n"; $t =~ s/\\{/$CO/g; $t =~ s/\\}/$CC/g; # # discard comments and italic corrections # print STDERR "[".length($t)."] Discarding comments and italic corrections\n"; while ($t =~ s/([^\\])%[^\n]*\n/$1/g) {}; $t =~ s|\\/||g; # # no math mode # print STDERR "[".length($t)."] No math mode\n"; while ($t =~ s/([^\\])\$/$1/g) {}; # # remove tabs and massage blanks # print STDERR "[".length($t)."] Removing tabs and massaging blanks\n"; $t =~ s/\\ / /g; # \cmd\ blah $t =~ tr/ \t/ /s; # # various minor issues # print STDERR "[".length($t)."] Dealing with various minor issues\n"; $t =~ s/\\rightarrow\s*/->/g; $t =~ s/\\quad\s*/~/g; $t =~ s/\\qquad\s*/~~/g; $t =~ s/\\vert/|/g; $t =~ s/\\TeX/TeX/g; $t =~ s/\\LaTeX/LaTeX/g; $t =~ s/\\rm\s*//g; $t =~ s/\\hbox{/{/g; $t =~ s/\\protect//g; $t =~ s/\\newpage\s*//g; $t =~ tr/-/-/s; $t =~ s/\n\n+/$B1/g; while ($t =~ /\\cite{([^}]+)}/) { $t = $`."["; $after = $'; for (split(",",$1)) { if (defined $cite{$_}) { $t .= "$cite{$_},"; } else { $cite{$_} = ++$citation; $bibref[$citation] = $_; $t .= "$citation,"; die "unmatched ref $_" unless $after =~ /\\bibitem{$_}/; $after = $`."\\item[\[$citation\]] ".$'; } } $t =~ s/,$//; $t .= "]$after"; } $t =~ s/\\begin{thebibliography}{[^}]*}/\\section{References}\\begin{description}/; $t =~ s/\\end{thebibliography/\\end{description}/; # # handle footnotes # print STDERR "[".length($t)."] Handling footnotes\n"; $t =~ s/\\footnote{/\\footnotemark\\footnotetext{/g; $t =~ s/\\footnotemark/$X/g; $t =~ s/\\footnotetext{/$Y/g; while ($t =~ /$X([^$Y]*)$Y/) { ($a,$b,$c) = ($`,$',$1); $t =~ /^[^$Y]*$Y$B1/; $d = $'; for ($s = "*"; $d =~ /$Z/; $d = $`.$Y.$') { $s .= "*"; } $a = $a.$s.$c; while ($b =~ /^([^}]*){([^{}]*)}/) { $b = $`.$1.$B.$2.$E.$'; } $b =~ /^([^{}]*)}/ || die "{ } confusion"; ($b,$t) = ($1,$'); $b =~ s/$B/{/g; $b =~ s/$E/}/g; $d = "$B1$Z\\begin{description}\\item[$s] $b\\end{description}$B1"; if ($t =~ /$B1([^$Z][^$N]*)$/) { $t = $`.$d.$1; } else { $t = $t.$d; } $t = $a.$t; } $t =~ s/$Z//g; if ($t =~ /[$X$Y$Z$B$E]/) { if ($t =~ /..............[$X$Y$Z$B$E]/) { print STDERR "HEY $&\n"; } die "footnote confusion"; } # # process simple tables ... # print STDERR "[".length($t)."] Processing simple tables\n"; while ($t =~ /\\begin{tabular}/) { $t = $`.$B.$'; } while ($t =~ /\\end{tabular}/) { $t = $`.$E.$'; } while ($t =~ /$B\{([rlc|]+)\}([^$B$E]*)$E/) { ($a,$b,$c,$d) = ($`,$',$2,$1); $c =~ s/\\\\/&/g; $c =~ s/[\s\n]*\\hline[\s\n]*/$X&/g; ($e = $d) =~ tr/|//cd; @d = (); while ($d =~ /^(\|*)[a-z](\|*)/) { push(@d,$&); $d = $'; } @f = (); while ($c =~ /([^\\])&/) { push(@f,$`.$1); $c = $'; } @w = (); $d =~ tr/|//d; $i = 0; for (@f) { next if $_ eq $X; $f = $i % @d; $_ = &xlat($_); $_ =~ s/^[\s\n]*//g; $_ =~ s/[\s\n]*$//g; if ($w[$f] < length($_)) { $w[$f] = length($_); } $i++; } $l = @d+2*length($e)-1; for (@w) { $l += $_; } $a .= "$B1"; $i = 0; for (@f) { if ($_ eq $X) { $a .= ("-" x $l)."\\\\"; } else { $f = $i % @d; if ($d[$f] =~ /^\|/) { $a .= "| "; } $g = $w[$f]-length($_); if ($d[$f] =~ /l/) { $a .= $_.("~" x $g); } if ($d[$f] =~ /c/) { $a .= ("~" x int($g/2)).$_.("~" x ($g-int($g/2))); } if ($d[$f] =~ /r/) { $a .= ("~" x $g).$_; } $a .= " "; if ($d[$f] =~ /\|$/) { $a .= "| "; } if ($f == $#d) { $a .= "\\\\"; } $i++; } } $t = $a.$b.$B1; } if ($t =~ /[$B$E$X]/) { if ($t =~ /(.|\n)(.|\n)(.|\n)(.|\n)(.|\n)(.|\n)[$B$E$X](.|\n)(.|\n)(.|\n)(.|\n)(.|\n)(.|\n)/) { print STDERR "$&\n"; } die "\\begin/end{tabular} mismatch"; } # # process lists # print STDERR "[".length($t)."] Formatting lists\n"; while ($t =~ /\\begin{itemize}\s*/) { $t = $`.$B.$'; } while ($t =~ /\\end{itemize}\s*/) { $t = $`.$E.$'; } while ($t =~ /$B[^$B$E]*$E/) { ($a,$b,$c) = ($`,$&,$'); while ($b =~ /\\item\s*/) { $b = $`.$X.$'; } while ($b =~ /$X([^$X]*)([$X$E])/) { $b = $`."- ".$SI.$SI.$1.$SO.$SO."\\\\"."$2".$'; } $b =~ /$B([^$B$E]*)$E/; $t = $a.$SI.$SI.$B1.$1.$SO.$SO."$B1".$c; } $t !~ /[$B$E]/ || die "\\begin/\\end{itemize} mismatch"; while ($t =~ /\\begin{description}\s*/) { $t = $`.$B.$'; } while ($t =~ /\\end{description}\s*/) { $t = $`.$E.$'; } while ($t =~ /$B[^$B$E]*$E/) { ($a,$b,$c) = ($`,$&,$'); while ($b =~ /\\item\[/) { $b = $`.$X."[".$'; } while ($b =~ /$X\[/) { ($d,$e) = ($`,$'); while ($e =~ s/\[([^\[\]]*)\]/$BS$1$ES/g) {}; $e =~ /^([^\[\]]*)]\s*([^$X]*)([$X$E])/ || die "\item problem (1)"; $b = $d.$1."~~".$SI.$SI.$2.$SO.$SO."\\\\".$3.$'; $b =~ s/$BS/[/g; $b =~ s/$ES/]/g; } $b =~ /$B([^$B$E]*)$E/; $t = $a.$SI.$SI.$B1.$1.$SO.$SO.$B1.$c; } $t !~ /[$X]/ || die "\item problem (2)"; $t !~ /[$B$E]/ || die "\\begin/\\end{description} mismatch"; # # process figures # print STDERR "[".length($t)."] Removing figures\n"; while ($t =~ /\\begin{figure}\s*/) { $t = $`.$B.$'; } while ($t =~ /\\end{figure}\s*/) { $t = $`.$E.$'; } while ($t =~ /$B[^$B$E]*$E/) { ($a,$b,$c) = ($`,$&,$'); $t = $a."[ Figure"; if ($b =~ /\\label{([^}]*)}/) { $l{$1} = ++$figref; $t .= " $figref"; } if ($b =~ /\\caption{([^}]*)}/) { $t .= ": $1"; } $t .= " ]".$c; } # # process sections and labels # print STDERR "[".length($t)."] Processing sections and labels\n"; $t =~ s/\\begin{abstract}/\\section{Abstract}/g; $t =~ s/\\end{abstract}//g; $LB = "\005"; # they don't necessarily have to be unique $SC = "\006"; while ($t =~ /\\label{/) { $t = $`.$LB."{".$'; } while ($t =~ /\\((sub)*)section\*?{/) { $t = $`.$SC.$1."{".$'; } $l = ""; while (1) { if ($t =~ /^([^$LB$SC]*)$LB\{([^{}]*)\}/) { $l{$2} = '"'.$l.'"'; $t = $1.$'; } if ($t =~ /$SC((sub)*){/) { ($a,$b,$c) = ($`,$',$1); while ($b =~ /^([^}]*){([^{}]*)}/) { $b = $`.$1.$B.$2.$E.$'; } $b =~ /^([^{}]*)}\s*/ || die "{ } confusion"; ($b,$d) = ($1,$'); $b =~ s/$B/{/g; $b =~ s/$E/}/g; $l = $b; $b = &xlat($b); if (($u = ("=","-","- ","")[length($c)/3]) ne "") { $u = "\\\\".substr($u x length($b),0,length($b)); } $t = $a.$B2.$b.$u.$B1.$d; } else { last; } } # # handle references # print STDERR "[".length($t)."] Handling references\n"; $t =~ s/[Pp]age \\pageref({[^{}]*})/\\ref$1/g; $t =~ s/\\pageref{[^{}]*}/???/g; while ($t =~ /\\ref{([^{}]*)}/) { $t = $`.(defined($l{$1}) ? $l{$1} : "???").$'; } # # collapse whitespace # print STDERR "[".length($t)."] Collapsing whitespace\n"; $t =~ s/\\par\s*/\n\n/g; $t =~ s/ *(\n+) */$1/g; $t =~ tr/\n/ /; $t =~ tr/ \t/ /s; # again # # handle line breaks # print STDERR "[".length($t)."] Handling line breaks\n"; $t =~ tr/\n//d; $t =~ s/\\\\/\n/g; $t =~ s/\\par\s*/$B1/g; # # handle accents, umlauts, and double quotes # print STDERR "[".length($t)."] Handling accents, umlauts, double quotes ". "and hyphens\n"; $t =~ s/\\[`']([AEOUaeou])/$1/g; $t =~ s/\\([`'])~/$1/g; $t =~ s/\\"([AOUaou])/$1e/g; $t =~ s/``/"/g; $t =~ s/''/"/g; # # apply ultimate set of fixes to newlines # print STDERR "[".length($t)."] Applying ultimate set of fixes to newlines\n"; while ($t =~ s/([\n$B1$B2]+)([$SI$SO])/$2$1/g) {}; $t =~ s/([\n$B1$B2]*)\s+([\n$B1$B2]+)/$1$2/g; $t =~ s/\n+/\n/g; $t =~ s/\n?($B1)[\n$B1]*/\n\n/g; $t =~ s/\n*($B2)[\n$B2]*/\n\n\n/g; # # translate what's left # print STDERR "[".length($t)."] Final translation\n"; $t = &xlat($t); $t =~ s/^\s*//; $t =~ s/\s*$//; $t .= "\n"; # # okay, now format and print it # print STDERR "[".length($t)."] "."Formatting (may take a while)\n"; $l = ""; $m = 0; while ($t =~ /([$SI$SO\n]| +)/) { if ($` ne "" || substr($1,0,1) eq " ") { if (length($l)+length($`) > $w && $l ne "") { print $l."\n"; $l = ""; } if ($l eq "") { $l = " " x $m; } $l = $l.$`.(substr($1,0,1) eq " " ? $1 : ""); } $t = $'; if ($1 eq $SI) { $m++; } if ($1 eq $SO) { $m--; } if ($1 eq "\n") { print $l."\n"; $l = ""; # $t = s/^ *(\S.*)/\1/; } } print "$l\n" if $l ne ""; print STDERR "Done\n"; lilo-24.0/doc/tech.tex0000644000175000017500000003225311463646571013604 0ustar adjooadjoo% % Copyright 1992-1998 by Werner Almesberger. % All rights reserved. % % See file COPYING for details. % \documentclass[fullpage]{article} \usepackage{ae} \usepackage[bookmarks,% pdftitle={Linux Loader (LILO) technical overview},% pdfsubject={Booting on iA32 architecture},% pdfkeywords={lilo, boot},% pdfauthor={Werner Almesberger }]% {hyperref} \usepackage{ifpdf} \parindent=0pt \parskip=4pt \hyphenation{hexa-decimal} \def\key#1{$[$#1$]$} \def\LILO{LILO} \def\SetFigFont#1#2#3{\tt} \begin{document} \title{\LILO \\ \Large Generic boot loader for Linux \\ Version 21 \\ ~\\ \bf Technical overview} \author{Werner Almesberger \\ {\tt Werner.Almesberger@epfl.ch}} \date{December 4, 1998} \maketitle { \parskip=-4pt \setcounter{tocdepth}{1} \tableofcontents } ~\\ This document describes internals of \LILO\ and related parts of its environment (kernel, etc.). It is not necessary to read or understand this document in order to install or use \LILO. A general introduction and installation instructions can be found in the user's guide. {\bf This document has only been partially updated and does not entirely reflect the current ('98) status of Linux or of \LILO\ (version 21).} \section{Load sequence} \label{load} The boot sector is loaded by the ROM-BIOS at address 0x07C00. It moves itself to address 0x96A00, sets up the stack (growing downwards from 0x96A00 to 0x96800), loads the secondary boot loader at address 0x96C00 and transfers control to it. It displays an ``L'' after moving itself and an ``I'' before starting the secondary boot loader. If a read error occurs when loading the secondary boot loader, a two-digit hex code is displayed after the ``L''. This results in an endless stream of error codes if the problem is permanent. Displaying these error codes is disabled if the build-time option {\tt NO1STDIAG} is set. The secondary boot loader loads the descriptor table at 0x98800 and the sector containing the default command line at 0x98C00. If the default command line is enabled, its magic number is invalidated and the sector is written back to disk. This potentially dangerous operation can be disabled by defining {\tt LCF\_READONLY} when passing {\tt second.S} through {\sf cpp}. Next, the secondary boot loader checks for user input. If either the default is used or if the user has specified an alternate image, the options sector is loaded at 0x98C00 and the parameter line is constructed at 0x99000. If the resulting line contains the option \verb"lock", the command line as entered by the user (it is saved before the final line is constructed) is written to the disk as the new default command line. Also, if a fallback command line is set, it is copied to the default command line sector. If the user has supplied an initial RAM disk image, this file is loaded below the end of physical memory or 16 MB, whichever is lower. The start address is lowered to the next page boundary so that the memory area occupied by the initial RAM disk can later be easily returned to the system's free memory pool. The 16 MB limit exists because the BIOS functions used to transfer data in memory are only specified for an 24 bit address space. Next, the floppy boot sector of that image is loaded at 0x90000\footnote{The floppy boot sector is only used as a source of setup information.}, the setup part is loaded at 0x90200 and the kernel part is loaded at 0x10000, or, if the kernel has been compiled for being loaded ``high'' (i.e. with {\tt make bzImage}), it is loaded at 0x100000 instead. During the load operations, the sectors of the map file are loaded at 0x98600. If the loaded image is a kernel image, control is transferred to its setup code. If a different operating system is booted, things are a bit more difficult: the chain loader is loaded at 0x90200 and the boot sector of the other OS is loaded at 0x90400. The chain loader moves the partition table (loaded at 0x903BE as part of the chain loader) to 0x00600 and the boot sector to 0x07C00. After that, it passes control to the boot sector. Chain loaders that allow booting from a second drive (either floppy or hard disk) also install a small function to intercept BIOS calls and to swap the drive numbers at the top of available memory. The secondary boot loader displays an ``L'' after being started and an ``O'' after loading the descriptor table and the default command line. Before loading the descriptor table, it checks, whether it has been loaded at the correct location and displays a question mark if it hasn't. If the descriptor table has an incorrect checksum, a minus sign is displayed. $$ \begin{tabular}{l|c|l} \cline{2-2} \tt 0x00000 & & 1982 bytes \\ \cline{2-2} \tt 0x007BE & Partition table & 64 bytes \\ \cline{2-2} \tt 0x007FE & & 29 kB \\ \cline{2-2} \tt 0x07C00 & Boot load area & 512 bytes \\ \cline{2-2} \tt 0x07E00 & & 32.5 kB \\ \cline{2-2} \tt 0x10000 & & 448 kB \\ & & \\ & Kernel & \\ & & \\ & & \\ \cline{2-2} \tt 0x90000 & Floppy boot sector & 512 bytes \\ \cline{2-2} \tt 0x90200 & Setup (kernel) & 39.5 kB (2 kB used) \\ \cline{2-2} \tt 0x9A000 & Primary boot loader & 512 bytes \\ \cline{2-2} \tt 0x9A200 & Stack & 3.5 kB \\ \cline{2-2} \tt 0x9B000 & Secondary boot loader & 8 kB (3.5 kB used) \\ \cline{2-2} \tt 0x9D000 & Map load area & 512 bytes \\ \cline{2-2} \tt 0x9D200 & Descriptor table & 1 kB \\ \cline{2-2} \tt 0x9D600 & Default command line, etc. & 512 bytes \\ \cline{2-2} \tt 0x9D800 & Keyboard translation table & 512 bytes \\ \cline{2-2} \tt 0x9DA00 & Parameter line construction area & 1 kB \\ \cline{2-2} \tt 0x9DC00 & & 7.5 kB \\ & & \\ \cline{2-2} & Drive swapper & 1 kB \\ \cline{2-2} \multicolumn{3}{l}{\tt 0xA0000} \\ \end{tabular} $$ The area 0x90020-0x90023 is overlaid by a command-line descriptor while the secondary boot loader is running. \section{File references} This section describes the references among files involved in the boot procedures. $$ \input bootloader $$ The boot sector contains the primary boot loader, the address of the default command line sector, the address of both descriptor table sectors and the addresses of the sectors of the secondary boot loader. The generic boot sector is copied from {\tt boot.b}. The primary boot loader can store up to eight sector addresses of the secondary boot loader. $$ \input map $$ The map file consists of so-called sections and of special data sectors. Each section spans an integral number of disk sectors and contains addresses of sectors of other files. There are three exceptions: 1. If a ``hole'' is being covered or if the floppy boot sector of an unstripped kernel has been omitted, the address of the zero sector is used. This sector is part of the map file. 2. When booting a different operating system, the first sector is the merged chain loader that has been written to the map file before that section. 3. Each map section describing an image is followed by a sector containing the options line of that image. The last address slot of each map sector is either unused (if the map section ends in this sector) or contains the address of the next map sector in the section. The ifive sectors at the beginning of the map file are special: the first sector contains the default command line, the next two sectors contain the boot image descriptor table and the fourth sector is filled with zero bytes. This sector is mapped whenever a file contains a ``hole''. The fifth sector contains the keyboard translation table. $$ \input image $$ A kernel image consists simply of a sequence of sectors being loaded. The map section also contains a sector with a fallback command line and a sector with parameter line options. Optionally, a RAM disk image, specified by a second map section, can be loaded. $$ \input other $$ When booting another operating system, the chain loader ({\tt chain.b}) is merged with the patched partition table\footnote{If the partition table is omitted, that area is filled with zero bytes.} and written into the map file. The map section of this boot image starts after that sector and contains only the address of a dummy floppy boot sector (the zero sector, but its contents are irrelevant), the loader sector and the boot sector of the other operating system. Not that the map section also contains the fallback sector and a (useless) sector for options. \section{Configuration parameters} The boot sector of each kernel contains a set of configuration parameters that have to be available at boot time before the kernel can access file systems. These parameters can be set when the kernel is compiled and later be changed with programs like {\sf rdev}. \LILO\ can supersede the parameters (in memory) at boot time by placing the corresponding items on the parameter line passed to the kernel. The parameters are stored at the following (decimal) offsets: \begin{description} \item[497] the size of the setup code in sectors (512 bytes). Older kernels may put a zero at this place. \item[498-499] is a flag specifying whether the root file system should be mounted read-only (if non-zero) or read-write (if zero). \item[500-501] the size of the kernel, counted in paragraphs (16 bytes). \item[502-503] this parameter is currently unused. \item[504-505] the size of the RAM disk in kilobytes. No RAM disk is created if this parameter is set to zero. \item[506-507] the text mode the VGA is set to. \begin{description} \item[0xFFFD] the user is asked to specify the VGA mode at boot time. \item[0xFFFE] uses 80x50 (``extended'') mode. \item[0xFFFF] uses 80x25 (``normal'') mode. \end{description} Any other value selects the corresponding mode as displayed in the interactive VGA mode selection menu. This is the only option that is set by LILO by patching the boot sector instead of passing it on the parameter line. \item[508] the minor number of the device that should be mounted as root. \item[509] the major number of the device that should be mounted as root. \end{description} \section{Parameter line interface} The kernel supports processing of parameters that are provided by the boot loader. The parameter string is a NUL-terminated ASCII string that contains space-separated words or {\tt {\it variable\/}={\it value\/}} pairs. A description of how they are interpreted can be found in the section of the user's guide labeled ``The boot prompt''. The following descriptor has to be set up to pass a parameter string to the kernel: \begin{description} \item[0x90020] the magic number 0xA33F. \item[0x90022] the offset of the first byte of the parameter line relative to 0x90000. \end{description} The boot loader composes the parameter line from the command line, from the options sector and from some internally generated prefixes (typically \verb"auto" and \verb"BOOT_IMAGE="), as follows: $$ \input parameter $$ Example: \\ Command line: \verb"vmlinuz root=802"\\ Options sector: \verb"root=801 ro" yields \verb"BOOT_IMAGE=vmlinuz root=801 ro root=802" Because parameter line options can typically be overridden, the first \verb"root" option is ignored by the kernel. \section{External interface} \LILO\ is able to receive its command line from a program that is booted before it. This externally provided command line is only used if the user does not use the normal mechanism to invoke the boot prompt. The following register contents are expected: \begin{description} \item[\bf DL] contains the value 0xFE. \item[\bf ES:SI] points to the string ``LILO''. The string must be in upper case and no terminating character is needed. The string must not cross segment boundaries, i.e. {\bf SI} must be below 0xFFFD. \item[\bf ES:BX] points to a NUL-terminated string that is used as the command line. This string has a maximum length of 78 characters (not including the terminating NUL) and must not cross segment boundaries. \end{description} There are two values of the externally provided command line that have a special meaning: \begin{itemize} \item an empty string ({\bf ES:BX} points to a NUL byte) is interpreted as a request to enter the boot prompt and to accept keyboard input. \item a string that consists only of blanks is interpreted as a request to boot the default boot image. \end{itemize} \LILO\ can also obtain the default command line from the map file. It is only used if no externally provided command line is available. \section{Default command line in map file} The first sector of the map file is reserved for a default command line. Unless the user invokes the boot prompt by pressing a shift key or unless an externally provided command line is present, the command line in the map file is interpreted as if it had been typed on the keyboard. The first two bytes of the first sector of the map file have to contain the magic number {\tt DC\_MAGIC} (0xF4F2) in little-endian byte order. They are followed by a NUL-terminated string with a maximum length of 510 bytes, including the NUL. Note that the boot loader limits command lines to 78 characters after removing duplicate spaces. The command line is disabled by either clobbering the magic number or by using an empty string (i.e. only a NUL byte) as the command line. \end{document} lilo-24.0/doc/user.tex0000644000175000017500000044447111463646571013650 0ustar adjooadjoo% % Copyright 1992-1998 by Werner Almesberger. % Copyright 1999-2000 by John R. Coffman (version 21-3) % All rights reserved. % % See file COPYING for details. % %%def%:= %:\begin{verbatim} %:LILO - Generic Boot Loader for Linux ("LInux LOader") by Werner Almesberger %:=========================================================================== %: %: NOTE: This document is no longer maintained. However, it is %: still current. Changes to LILO for versions 21.2 and later are %: documented in detail in the 'man' pages for 'lilo' and 'lilo.conf'. %: Refer to them first, then to this document. %: %: %:Version 21-4 (release) -- John Coffman %: %:Minor changes suggested by Werner to show that this release is derived %:from the source code to his version 21. Added VERSION_MAJOR and %:VERSION_MINOR to replace VERSION. The file VERSION is replaced by %:'version.h'. %: %:The first and second stage loaders have been modified so that ONLY %:'lba32' will use EDD packet calls. 'linear' will now always ask the %:BIOS for the disk geometry, and then use C:H:S addressing. %: %: %:Version 21-2 -- John Coffman %: %:This version was created to allow booting on disks larger than 8.4Gb using %:the Enhanced BIOS call (int 0x13, AH=0x42) and the packet-call interface. %:These calls are supported on post-1998 systems, and through software BIOS %:extensions such as EZ-DRIVE(tm). %: %:My primary objective in making these changes to LILO, is not to break any- %:thing. Hence, the 32-bit direct addressing of sectors is supported by a %:new keyword in the 'lilo.conf' file: "lba32". This keyword is mutually %:exclusive with the keyword "linear". On the command line, these options %:are invoked with the new "-L" switch, or the old "-l" switch, respectively. %: %:Apologies to Werner Almesberger for not communicating these changes/addi- %:tions to him directly; but I have not been able to contact him by e-mail %:at the address he provided in the latest 'lilo.lsm' file. I do not want %:versions of LILO to get out-of-step. %: %:Disk sector addresses are conveyed from the Map Installer (lilo executable) %:to the boot loaders, first- and second-stages through a 5 byte structure: %: %: sector [1..63] plus 2 high bits of Cylinder %: cylinder [0..1023] low eight bits in this byte %: device [0..3] for floppies, [0x80..0x8F] for hard disks %: head [0..254] no, the max is 254, not 255 %: count [1...] number of sectors to transfer %: %:The first two bytes are normally loaded into the CX register, the second two %:bytes into the DX register, and the last byte into the AL register. This is %:the call used for the C:H:S addressing scheme of the original IBM-PC BIOS. %:LILO checks that the 64Kb DMA boundary is never crossed by a call, and that %:the count never exceeds the sector count of one track on the disk. %: %:When 'linear' is specified, a 24-bit, 0 based addressing scheme is employed. %:The low 8 bits are in 'sector'; the middle 8 bits in 'cylinder'; and the high %:8 bits are in 'head'. To flag this as a 'linear' address, the 'device' byte %:has bit 6 set (mask 0x40 or'ed in). The count field is a maximum of 128, %:since anything greater would cross a 64Kb DMA boundary. It is up to the %:loader code (second stage only), to check that no track boundary is crossed. %: %:The situation is more complicated with 'lba32' addressing. It is flagged with %:bit 5 of the 'device' byte being set (mask 0x20 or'ed in). The 32-bit address %:is spread over the 'sector', 'cylinder', 'head', and 'count' fields, from low %:byte to high byte, respectively. Whenever this full 32-bit address is %:specified explicitly, the actual sector count to transfer is implied to be %:one (1), and this fact is flagged in the 'device' byte by setting bit 5 %:(mask 0x10 or'ed in). When a multi-sector transfer is called for, the high %:8-bits of the address are NOT specified explicitly, but are assumed to be %:the same as the previous transfer, the 'count' of sectors to transfer will %:be in the range [2..127], and bit 5 (mask 0x10) of the 'device' byte will be %:clear. %: %:The first-stage loader uses single sector transfers only, so it uses a %:simplified disk read routine, always assumes a sector transfer count of 1, %:and always assumes that the full 32-bit address of the sector is specified %:when 'lba32' mode is detected in the 'device' byte. However, the second- %:stage loader is capable of multi-sector transfers when map-compaction has %:been used (-c switch, or 'compact' global option), so it uses the fully %:capable read routine to load the -initrd- image, and the -kernel- image. %: %:Both 'linear' and 'lba32' will use the Enhanced BIOS packet calls, if they %:are available. Otherwise, the disk address is converted to C:H:S, using the %:disk geometry returned by (int 0x13, AH=8). If cylinder overflow occurs -- %:i.e., cylinder > 1023, then error code '9f' is issued. %: %:The BIOS calls used to implement large disk booting conform to the Enhanced %:Disk Drive Specification, version 3.0, rev 0.8, dated March 12, 1998. This %:document is available on-line from Phoenix Technologies Ltd., at: %: %: http://www.phoenix.com/products/specs.html %: %:Known bugs: %: The chain loader, 'os2_d.b', still will not boot OS2 4.0 from a secondary %: partition on my "D:" drive. Boot Manager can, and I am still working on %: the problem. %:---------------------------------------------------------------------------- %: %: %:Version 21 %: %:Important: The file INCOMPAT contains vital (in)compatibility information %: for this release of LILO. Read it before proceeding. %: %:Installing boot loaders is inherently dangerous. Be sure to have some means %:to boot your system from a different media if you install LILO on your hard %:disk. %: %: %:There is also a LaTeX version of this document in the "doc" directory. %:It is much nicer to read than pure ASCII. %: %: %:Installation %:------------ %: %:Please read the file INCOMPAT for compatibility notes. %: %:The installation procedure is described in the section "Normal first-time %:installation". Please read "Booting basics" for the whole story. %: %:*** QUICK INSTALLATION *** %: %: If you want to install LILO on your hard disk and if you don't want %: to use all its features, you can use the quick installation script. %: Read QuickInst for details. %: %: %:\end{verbatim} %%beginskip \documentclass[fullpage]{article} \usepackage{ae} \usepackage[bookmarks,% pdftitle={Linux Loader (LILO) user manual},% pdfsubject={Booting on iA32 architecture},% pdfkeywords={lilo, boot},% pdfauthor={Werner Almesberger, John Coffman}]% {hyperref} \usepackage{ifpdf} \parindent=0pt \parskip=4pt \tolerance=9000 \hyphenation{hexa-decimal} % Okay, what follows is more TeX than LaTeX ... \def\hditem#1{\hbox to 1.2in{#1\hfil}} \def\boottwo#1{$$ \bf \begin{tabular}{|ll|} \hline \hditem{\rm Master Boot Record} & \hditem{\rm Operating system} \\ \hline #1 \\ \hline \end{tabular} $$} \def\bootthree#1{$$ \bf \begin{tabular}{|lll|} \hline \hditem{\rm Master Boot Record} & \hditem{\rm Boot sector} & \hditem{\rm Operating system} \\ \hline #1 \\ \hline \end{tabular} $$} \def\bootfour#1{$$ \bf \begin{tabular}{|llll|} \hline \hditem{\rm Master Boot Record} & \hbox to 1.1in{\rm Boot sector\hfil} & \hditem{\rm Operating systems} & \hbox to 0.4in{\hfil} \\ \hline #1 \\ \hline \end{tabular} $$} \def\sep{\rightarrowfill &} \def\emptys{&} \def\branch{\hfill$\longrightarrow$ &} \def\cont{---\,$\cdots$} \def\key#1{$[$#1$]$} \def\LILO{LILO} \def\meta#1{{\it #1\/}} % ... ... \def\path#1{{\tt #1}} % ... /foo/bar ... \def\raw#1{{\tt #1}} % ... raw output ... \def\craw#1{{\tt #1}} % ... raw output ... \def\name#1{{\sf #1}} % ... FooBar ... \def\emphasize#1{{\bf #1}} % ... _don't_ ... \def\unit#1{\hbox{\tt #1}} % ... \unit{-x foo} ... %%def\\key{([^{}]*)}=[$1] %%def\\LILO=LILO %%def\\meta{([^{}]*)}=<$1> %%def\\path{([^{}]*)}=$1 %%def\\raw{([^{}]*)}=~$1~ %%cmd\\craw{([^{}]*)}=((($x = $1) =~ tr/a-z/A-Z/), $x) %%def\\name{={ %%def\\emphasize{([^{}]*)}=\\_$1\\_ %%def\\underline{([^{}]*)}=$1 %%def\\begin{command}=\\raw{$SI$SI$SI$SI %%def\\end{command}=$SO$SO$SO$SO} %%def\\addtocounter{([^{}]*)}{([^{}]*)}=~ %%def\\hbox{([^{}]*)}=$1 %%def(\\unit{[^{} ]*) ([^{}]*})=$1~$2 %%def\\unit{([^{} ]*)}=$1 %%def{\$([^{}])\$}=$1 %%def%4= % ^^^^ % four invisible spaces here %%def%;= % ^^^^^^^^ % eight invisible spaces here \newenvironment{command}{\def\[{$\bigl[$}\def\]{$\bigr]$}\def\|{$\big\vert$}% \parindent=-2em\advance\leftskip by -\parindent\vskip -\parskip~\par \begingroup\tt\textfont0=\font}{% ~\endgroup\par\advance\hoffset by \parindent} \begin{document} \title{\LILO \\ \Large Generic boot loader for Linux \\ Version 21 \\ ~\\ \bf User's guide} \author{Werner Almesberger \\ {\tt Werner.Almesberger@epfl.ch}} \date{December 4, 1998} \maketitle { \parskip=-1pt \setcounter{tocdepth}{2} \tableofcontents } %%endskip ~\\ \LILO\ is a versatile boot loader for Linux. It does not depend on a specific file system, can boot Linux kernel images from floppy disks and from hard disks and can even act as a ``boot manager'' for other operating systems.\footnote{PC/MS-DOS, DR DOS, OS/2, Windows 95, Windows NT, 386BSD, SCO UNIX, Unixware, $\ldots$} One of up to sixteen different images can be selected at boot time. Various parameters, such as the root device, can be set independently for each kernel. \LILO\ can even be used as the master boot record. This document introduces the basics of disk organization and booting, continues with an overview of common boot techniques and finally describes installation and use of \LILO\ in greater detail. The troubleshooting section at the end describes diagnostic messages and contains suggestions for most problems that have been observed in the past. Please read at least the sections about installation and configuration if you're already using an older version of \LILO. This distribution is accompanied by a file named \path{INCOMPAT} that describes further incompatibilities to older versions. For the impatient: there is a quick-installation script to create a simple but quite usable installation. See section \ref{quickinst} for details. But wait $\ldots$ here are a few easy rules that will help you to avoid most problems people experience with \LILO: \begin{itemize} \item \emphasize{Don't panic.} If something doesn't work, try to find out what is wrong, try to verify your assumption and only then attempt to fix it. \item Read the documentation. Especially if what the system does doesn't correspond to what you think it should do. \item Make sure you have an emergency boot disk, that you know how to use it, and that it is always kept up to date. \item Run \path{/sbin/lilo} \emphasize{whenever} the kernel or any part of \LILO, including its configuration file, has changed. When in doubt, run it. You can't run \path{/sbin/lilo} too many times. \item If performing a destructive upgrade and/or erasing your Linux partitions, de-install \LILO\ \emphasize{before} that if using it as the MBR. \item Don't trust setup scripts. Always verify the \path{/etc/lilo.conf} they create before booting. \item If using a big disk, be prepared for inconveniences: you may have to use the \craw{linear} option. \end{itemize} \newpage \subsection*{System overview} \LILO\ is a collection of several programs and other files: \begin{description} \item[The map installer] is the program you run under Linux to put all files belonging to \LILO\ at the appropriate places and to record information about the location of data needed at boot time. This program normally resides in \path{/sbin/lilo}. It has to be run to refresh that information whenever any part of the system that \LILO\ knows about changes, e.g. after installing a new kernel. \item[Various files] contain data \LILO\ needs at boot time, e.g. the boot loader. Those files normally reside in \path{/boot}. The most important files are the boot loader (see below) and the map file (\path{/boot/map}), where the map installer records the location of the kernel(s).\footnote{\LILO\ does not know how to read a file system. Instead, the map installer asks the kernel for the physical location of files (e.g. the kernel image(s)) and records that information. This allows \LILO\ to work with most file systems that are supported by Linux.} Another important file is the configuration file, which is normally called \path{/etc/lilo.conf} \item[The boot loader] is the part of \LILO\ that is loaded by the BIOS and that loads kernels or the boot sectors of other operating systems. It also provides a simple command-line interface to interactively select the item to boot and to add boot options. \end{description} \LILO\ primarily accesses the following parts of the system: \begin{description} \item[The root file system partition] is important for two reasons: first, \LILO\ sometimes has to tell the kernel where to look for it. Second, it is frequently a convenient place for many other items \LILO\ uses, such as the boot sector, the \path{/boot} directory, and the kernels. \item[The boot sector] contains the first part of \LILO's boot loader. It loads the much larger second-stage loader. Both loaders are typically stored in the file \path{/boot/boot.b} \item[The kernel] is loaded and started by the boot loader. Kernels typically reside in the root directory or in \path{/boot}. \end{description} Note that many of the files \LILO\ needs at boot time have to be accessible with the BIOS. This creates certain restrictions, see section \ref{broken}. \newpage \section{Introduction} The following sections describe how PCs boot in general and what has to be known when booting Linux and using \LILO\ in particular. \subsection{Disk organization} \label{diskorg} When designing a boot concept, it is important to understand some of the subtleties of how PCs typically organize disks. The most simple case are floppy disks. They consist of a boot sector, some administrative data (FAT or super block, etc.) and the data area. Because that administrative data is irrelevant as far as booting is concerned, it is regarded as part of the data area for simplicity. %%beginskip $$ \begin{tabular}{|c|c|} \hline Boot sector & \hbox to 1.5in{\hfil} \\ \cline{1-1} \multicolumn{2}{|c|}{} \\ \multicolumn{2}{|c|}{Data area} \\ \multicolumn{2}{|c|}{} \\ \hline \end{tabular} $$ %%endskip %:\begin{verbatim} %; +---------------------------+ %; |Boot sector| | %; |-----------+ | %; | | %; | Data area | %; | | %; | | %; +---------------------------+ %:\end{verbatim} The entire disk appears as one device (e.g. \path{/dev/fd0}) on Linux. The MS-DOS boot sector has the following structure: %%beginskip $$ \begin{tabular}{r|c|} \cline{2-2} \tt 0x000 & Jump to the program code\\ \cline{2-2} \tt 0x003 & \\ & Disk parameters \\ & \\ \cline{2-2} \tt 0x02C/0x03E & \\ & Program code \\ & \\ & \\ \cline{2-2} \tt 0x1FE & Magic number (0xAA55)\\ \cline{2-2} \end{tabular} $$ %%endskip %:\begin{verbatim} %; +------------------------+ %; 0x000 |Jump to the program code| %; |------------------------| %; 0x003 | | %; | Disk parameters | %; | | %; |------------------------| %;0x02C/0x03E | | %; | Program code | %; | | %; | | %; |------------------------| %; 0x1FE | Magic number (0xAA55) | %; +------------------------+ %:\end{verbatim} \LILO\ uses a similar boot sector, but it does not contain the disk parameters part. This is no problem for Minix, Ext2 or similar file systems, because they don't look at the boot sector, but putting a \LILO\ boot sector on an MS-DOS file system would make it inaccessible for MS-DOS. Hard disks are organized in a more complex way than floppy disks. They contain several data areas called partitions. Up to four so-called primary partitions can exist on an MS-DOS hard disk. If more partitions are needed, one primary partition is used as an extended partition that contains several logical partitions. The first sector of each hard disk contains a partition table, and an extended partition and \emphasize{each} logical partition contains a partition table too. %%beginskip $$ \begin{tabular}{|l|l|l|} \hline \multicolumn{3}{|l|}{Partition table\hbox to 2in{\hfil\tt /dev/hda~}} \\ \cline{2-3} & \multicolumn{2}{l|}{Partition 1\hfill {\tt /dev/hda1}} \\ & \multicolumn{2}{l|}{} \\ \cline{2-3} & \multicolumn{2}{l|}{Partition 2\hfill {\tt /dev/hda2}} \\ & \multicolumn{2}{l|}{} \\ \hline \end{tabular} $$ %%endskip %:\begin{verbatim} %;+--------------------------------------------+ %;| Partition table /dev/hda | %;| +------------------------------------------| %;| | Partition 1 /dev/hda1 | %;| | | %;| |------------------------------------------| %;| | Partition 2 /dev/hda2 | %;| | | %;+--------------------------------------------+ %:\end{verbatim} The entire disk can be accessed as \path{/dev/hda}, \path{/dev/hdb}, \path{/dev/sda}, etc. The primary partitions are \path{/dev/hda1 $\ldots$ /dev/hda4}. %%beginskip $$ \begin{tabular}{|l|l|l|} \hline \multicolumn{3}{|l|}{Partition table\hbox to 2in{\hfil\tt /dev/hda~}} \\ \cline{2-3} & \multicolumn{2}{l|}{Partition 1\hfill {\tt /dev/hda1}} \\ & \multicolumn{2}{l|}{} \\ \cline{2-3} & \multicolumn{2}{l|}{Partition 2\hfill {\tt /dev/hda2}} \\ & \multicolumn{2}{l|}{} \\ \cline{2-3} & \multicolumn{2}{l|}{Extended partition\hfill {\tt /dev/hda3}} \\ \cline{3-3} & & Extended partition table \\ \cline{3-3} & & Partition 3\hfill {\tt /dev/hda5}\\ & & \\ \cline{3-3} & & Extended partition table \\ \cline{3-3} & & Partition 4\hfill {\tt /dev/hda6}\\ & & \\ \hline \end{tabular} $$ %%endskip %:\begin{verbatim} %;+--------------------------------------------+ %;| Partition table /dev/hda | %;| +------------------------------------------| %;| | Partition 1 /dev/hda1 | %;| | | %;| |------------------------------------------| %;| | Partition 2 /dev/hda2 | %;| | | %;| |------------------------------------------| %;| | Extended partition /dev/hda3 | %;| | +----------------------------------------| %;| | | Extended partition table | %;| | |----------------------------------------| %;| | | Partition 3 /dev/hda5 | %;| | | | %;| | |----------------------------------------| %;| | | Extended partition table | %;| | |----------------------------------------| %;| | | Partition 4 /dev/hda6 | %;| | | | %;+--------------------------------------------+ %:\end{verbatim} This hard disk has two primary partitions and an extended partition that contains two logical partitions. They are accessed as \path{/dev/hda5 $\ldots$} Note that the partition tables of logical partitions are not accessible as the first blocks of some devices, while the main partition table, all boot sectors and the partition tables of extended partitions are. Partition tables are stored in partition boot sectors. Normally, only the partition boot sector of the entire disk is used as a boot sector. It is also frequently called the master boot record (MBR). Its structure is as follows: %%beginskip $$ \begin{tabular}{r|c|} \cline{2-2} \tt 0x000 & \\ & Program code \\ & \\ & \\ \cline{2-2} \tt 0x1BE & Partition table \\ & \\ \cline{2-2} \tt 0x1FE & Magic number (0xAA55) \\ \cline{2-2} \end{tabular} $$ %%endskip %:\begin{verbatim} %; +------------------------+ %; 0x000 | | %; | Program code | %; | | %; | | %; |------------------------| %; 0x1BE | Partition table | %; | | %; |------------------------| %; 0x1FE | Magic number (0xAA55) | %; +------------------------+ %:\end{verbatim} The \LILO\ boot sector is designed to be usable as a partition boot sector. (I.e. there is room for the partition table.) Therefore, the \LILO\ boot sector can be stored at the following locations: \begin{itemize} \item boot sector of a Linux floppy disk. (\path{/dev/fd0}, $\ldots$) \item MBR of the first hard disk. (\path{/dev/hda}, \path{/dev/sda}, $\ldots$) \item boot sector of a primary Linux file system partition on the first hard disk. (\path{/dev/hda1}, $\ldots$) \item partition boot sector of an extended partition on the first hard disk. (\path{/dev/hda1}, $\ldots$)\footnote{Most FDISK-type programs don't believe in booting from an extended partition and refuse to activate it. \LILO\ is accompanied by a simple program (\name{activate}) that doesn't have this restriction. Linux \name{fdisk} also supports activating extended partitions.} \end{itemize} It \emphasize{can't} be stored at any of the following locations: \begin{itemize} \item boot sector of a non-Linux floppy disk or primary partition. \item a Linux swap partition. \item boot sector of a logical partition in an extended partition.% \footnote{\LILO\ can be forced to put the boot sector on such a partition by using the \raw{-b} option or the \craw{boot} variable. However, only few programs that operate as master boot records support booting from a logical partition.} \item on the second hard disk. (Unless for backup installations, if the current first disk will be removed or disabled, or if some other boot loader is used, that is capable of loading boot sectors from other drives.) \end{itemize} Although \LILO\ tries to detect attempts to put its boot sector at an invalid location, you should not rely on that. \subsection{Booting basics} When booting from a floppy disk, the first sector of the disk, the so-called boot sector, is loaded. That boot sector contains a small program that loads the respective operating system. MS-DOS boot sectors also contain a data area, where disk and file system parameters (cluster size, number of sectors, number of heads, etc.) are stored. When booting from a hard disk, the very first sector of that disk, the so-called master boot record (MBR) is loaded. This sector contains a loader program and the partition table of the disk. The loader program usually loads the boot sector, as if the system was booting from a floppy. Note that there is no functional difference between the MBR and the boot sector other than that the MBR contains the partition information but doesn't contain any file system-specific information (e.g. MS-DOS disk parameters). The first 446 (0x1BE) bytes of the MBR are used by the loader program. They are followed by the partition table, with a length of 64 (0x40) bytes. The last two bytes contain a magic number that is sometimes used to verify that a given sector really is a boot sector. There is a large number of possible boot configurations. The most common ones are described in the following sections. \subsubsection{MS-DOS alone} %%beginskip \bootthree{DOS-MBR \sep MS-DOS \sep COMMAND.COM} %%endskip %:\begin{verbatim} %;+-------------------------------------------------------+ %;| Master Boot Record Boot sector Operating system | %;|-------------------------------------------------------| %;| DOS-MBR ------------> MS-DOS ------> COMMAND.COM | %;+-------------------------------------------------------+ %:\end{verbatim} This is what usually happens when MS-DOS boots from a hard disk: the DOS-MBR determines the active partition and loads the MS-DOS boot sector. This boot sector loads MS-DOS and finally passes control to \path{COMMAND.COM}. (This is greatly simplified.) \subsubsection{LOADLIN} %%beginskip \bootfour{DOS-MBR \sep MS-DOS \sep COMMAND.COM \emptys \\ \emptys \branch LOADLIN \sep Linux} %%endskip %:\begin{verbatim} %4+------------------------------------------------------------+ %4| Master Boot Record Boot sector Operating system | %4|------------------------------------------------------------| %4| DOS-MBR ------------> MS-DOS ------> COMMAND.COM | %4| ---> LOADLIN ------> Linux | %4+------------------------------------------------------------+ %:\end{verbatim} A typical \name{LOADLIN} setup: everything happens like when booting MS-DOS, but in \path{CONFIG.SYS} or \path{AUTOEXEC.BAT}, LOADLIN is invoked. Typically, a program like \path{BOOT.SYS} is used to choose among configuration sections in \path{CONFIG.SYS} and \path{AUTOEXEC.BAT}. This approach has the pleasant property that no boot sectors have to be altered. Please refer to the documentation accompanying the LOADLIN package for installation instructions and further details. \subsubsection{\LILO\ started by DOS-MBR} %%beginskip \bootthree{DOS-MBR \sep LILO \sep Linux \\ \branch {\rm other OS} \emptys} %%endskip %:\begin{verbatim} %;+-------------------------------------------------------+ %;| Master Boot Record Boot sector Operating system | %;|-------------------------------------------------------| %;| DOS-MBR ------------> LILO --------> Linux | %;| ---> other OS | %;+-------------------------------------------------------+ %:\end{verbatim} This is a ``safe'' \LILO\ setup: \LILO\ is booted by the DOS-MBR. No other boot sectors have to be touched. If the other OS (or one of them, if there are several other operating systems being used) should be booted without using \LILO, the other partition has to be marked ``active'' with \name{fdisk} or \name{activate}. Installation: \begin{itemize} \item install \LILO\ with its boot sector on the Linux partition. \item use \name{fdisk} or \name{activate} to make that partition active. \item reboot. \end{itemize} Deinstallation: \begin{itemize} \item make a different partition active. \item install whatever should replace \LILO\ and/or Linux. \end{itemize} \subsubsection{Several alternate branches} %%beginskip \bootfour{DOS-MBR \sep MS-DOS \sep COMMAND.COM \emptys \\ \emptys \branch LOADLIN \sep Linux \\ \branch LILO \sep Linux \emptys \\ \emptys \branch MS-DOS \cont \emptys} %%endskip %:\begin{verbatim} %4+------------------------------------------------------------+ %4| Master Boot Record Boot sector Operating system | %4|------------------------------------------------------------| %4| DOS-MBR ------------> MS-DOS ------> COMMAND.COM | %4| ---> LOADLIN ------> Linux | %4| ---> LILO --------> Linux | %4| ---> MS-DOS --- ... | %4+------------------------------------------------------------+ %:\end{verbatim} An extended form of the above setup: the MBR is not changed and both branches can either boot Linux or MS-DOS. (\LILO\ could also boot other operating systems.) \subsubsection{\LILO\ started by \name{BOOTACTV}\protect\footnotemark} \footnotetext{Other, possibly better known boot switchers, e.g. \name{OS/2 BootManager} operate in a similar way. The installation procedures typically vary.} %%beginskip \bootthree{BOOTACTV \sep LILO \sep Linux \\ \branch {\rm other OS} \emptys} %%endskip %:\begin{verbatim} %;+-------------------------------------------------------+ %;| Master Boot Record Boot sector Operating system | %;|-------------------------------------------------------| %;| BOOTACTV -----------> LILO --------> Linux | %;| ---> other OS | %;+-------------------------------------------------------+ %:\end{verbatim} Here, the MBR is replaced by \name{BOOTACTV} (or any other interactive boot partition selector) and the choice between Linux and the other operating system(s) can be made at boot time. This approach should be used if \LILO\ fails to boot the other operating system(s).\footnote{% And the author would like to be notified if booting the other operating system(s) doesn't work with \LILO, but if it works with an other boot partition selector.} Installation: \begin{itemize} \item boot Linux. \item make a backup copy of your MBR on a floppy disk, e.g. \\ \verb"dd if=/dev/hda of=/fd/MBR bs=512 count=1" \item install \LILO\ with the boot sector on the Linux partition. \item install \name{BOOTACTV} as the MBR, e.g. \\ \verb"dd if=bootactv.bin of=/dev/hda bs=446 count=1" \item reboot. \end{itemize} Deinstallation: \begin{itemize} \item boot Linux. \item restore the old MBR, e.g. \\ \verb"dd if=/MBR of=/dev/hda bs=446 count=1" \\ or \verb"FDISK /MBR" under MS-DOS. \end{itemize} If replacing the MBR appears undesirable and if a second Linux partition exists (e.g. \path{/usr}, \emphasize{not} a swap partition), \name{BOOTACTV} can be merged with the partition table and stored as the ``boot sector'' of that partition. Then, the partition can be marked active to be booted by the DOS-MBR. Example: \begin{verbatim} # dd if=/dev/hda of=/dev/hda3 bs=512 count=1 # dd if=bootactv.bin of=/dev/hda3 bs=446 count=1 \end{verbatim} \emphasize{WARNING:} Whenever the disk is re-partitioned, the merged boot sector on that ``spare'' Linux partition has to be updated too. \subsubsection{\LILO\ alone} %%beginskip \boottwo{LILO \sep Linux \\ \branch {\rm other OS}} %%endskip %:\begin{verbatim} %; +----------------------------------------+ %; | Master Boot Record Operating system | %; |----------------------------------------| %; | LILO ---------------> Linux | %; | ---> other OS | %; +----------------------------------------+ %:\end{verbatim} \LILO\ can also take over the entire boot procedure. If installed as the MBR, \LILO\ is responsible for either booting Linux or any other OS. This approach has the disadvantage, that the old MBR is overwritten and has to be restored (either from a backup copy, with \verb"FDISK /MBR" on recent versions of MS-DOS or by overwriting it with something like \name{BOOTACTV}) if Linux should ever be removed from the system. You should verify that \LILO\ is able to boot your other operating system(s) before relying on this method. Installation: \begin{itemize} \item boot Linux. \item make a backup copy of your MBR on a floppy disk, e.g. \\ \verb"dd if=/dev/hda of=/fd/MBR bs=512 count=1" \item install \LILO\ with its boot sector as the MBR. \item reboot. \end{itemize} Deinstallation: \begin{itemize} \item boot Linux. \item restore the old MBR, e.g. \\ \verb"dd if=/fd/MBR of=/dev/hda bs=446 count=1" \end{itemize} If you've installed \LILO\ as the master boot record, you have to explicitly specify the boot sector (configuration variable \craw{boot=}$\ldots$) when updating the map. Otherwise, it will try to use the boot sector of your current root partition, which will usually work, but it will probably leave your system unbootable. \subsubsection{Names} The following names have been used to describe boot sectors or parts of operating systems: \begin{description} \item[``DOS-MBR''] is the original MS-DOS MBR. It scans the partition table for a partition that is marked ``active'' and loads the boot sector of that partition. Programs like MS-DOS' \name{FDISK}, Linux \name{fdisk} or \name{activate} (accompanies \LILO) can change the active marker in the partition table. \item[``MS-DOS''] denotes the MS-DOS boot sector that loads the other parts of the system (\path{IO.SYS}, etc.). \item[``COMMAND.COM''] is the standard command interpreter of MS-DOS. \item[``LOADLIN''] is a program that loads a Linux kernel image from an MS-DOS partition into memory and executes it. It is usually invoked from \path{CONFIG.SYS} and is used in combination with a \path{CONFIG.SYS} configuration switcher, like BOOT.SYS.\footnote{ \name{LOADLIN} is available for anonymous FTP from \\ \path{ftp://tsx-11.mit.edu/pub/linux/dos\_utils/lodlin\meta{n}.tar.gz} \\ \path{ftp://sunsite.unc.edu/pub/Linux/system/boot/dualboot/lodlin\meta{n}% .tgz} \\ \name{BOOT.SYS} is available for anonymous FTP from \\ \path{ftp://ftp.funet.fi/pub/Linux/tools/boot142.zip}} \item[``LILO''] can either load a Linux kernel or the boot sector of any other operating system. It has a first stage boot sector that loads the remaining parts of \LILO\ from various locations.\footnote{% \LILO\ can be found in \\ \path{ftp://tsx-11.mit.edu/pub/linux/packages/lilo/lilo-\meta{n}.tar.gz} \\ \path{ftp://sunsite.unc.edu/pub/Linux/system/boot/lilo/lilo-% \meta{n}.tar.gz} \\ \path{ftp://lrcftp.epfl.ch/pub/linux/local/lilo/lilo-\meta{n}.tar.gz}} \item[``BOOTACTV''] permits interactive selection of the partition from which the boot sector should be read. If no key is pressed within a given interval, the partition marked active is booted. \name{BOOTACTV} is included in the \name{pfdisk} package. There are also several similar programs, like PBOOT and OS-BS.\footnote{\name{pfdisk} is available for anonymous FTP from \\ \path{ftp://sunsite.unc.edu/pub/Linux/utils/disk-management/pfdisk.tar.Z} or \\ \path{ftp://ftp.funet.fi/pub/Linux/tools/pfdisk.tar.Z} \\ PBOOT can be found in \\ \path{ftp://ftp.funet.fi/pub/Linux/tools/pboot.zip}} \end{description} \subsection{Choosing the ``right'' boot concept} Although \LILO\ can be installed in many different ways, the choice is usually limited by the present setup and therefore, typically only a small number of configurations which fit naturally into an existing system remains. The following sections describe various possible cases. See also section \ref{broken}. The configuration file \path{/etc/lilo.conf} for the examples could look like this: \begin{verbatim} boot = /dev/hda2 compact image = /vmlinuz image = /vmlinuz.old other = /dev/hda1 table = /dev/hda label = msdos \end{verbatim} It installs a Linux kernel image (\path{/vmlinuz}), an alternate Linux kernel image (\path{/vmlinuz.old}) and a chain loader to boot MS-DOS from \path{/dev/hda1}. The option \craw{compact} on the second line instructs the map installer to optimize loading. In all examples, the names of the IDE-type hard disk devices (\path{/dev/hda$\ldots$}) are used. Everything applies to other disk types (e.g. SCSI disks; \path{/dev/sda$\ldots$}) too. \subsubsection{BIOS restrictions} \label{broken} Nowadays, an increasing number of systems is equipped with comparably large disks or even with multiple disks. At the time the disk interface of the standard PC BIOS has been designed (about 16 years ago), such configurations were apparently considered to be too unlikely to be worth supporting. The most common BIOS restrictions that affect \LILO\ are the limitation to two hard disks and the inability to access more than 1024 cylinders per disk. \LILO\ can detect both conditions, but in order to work around the underlying problems, manual intervention is necessary. The drive limit does not exist in every BIOS. Some modern motherboards and disk controllers are equipped with a BIOS that supports more (typically four) disk drives. When attempting to access the third, fourth, etc. drive, \LILO\ prints a warning message but continues. Unless the BIOS really supports more than two drives, the system will \emphasize{not} be able to boot in that case.\footnote{However, if only ``unimportant'' parts of the system are located on the ``high'' drives, some functionality may be available.} The cylinder limit is a very common problem with IDE disks. There, the number of cylinders may already exceed 1024 if the drive has a capacity of more than 504 MB. Many SCSI driver BIOSes present the disk geometry in a way that makes the limit occur near 1 GB. Modern disk controllers may even push the limit up to about 8 GB. All cylinders beyond the 1024th are inaccessible for the BIOS. \LILO\ detects this problem and aborts the installation (unless the \craw{linear} option is used, see section \ref{cfgglo}). Note that large partitions that only partially extend into the ``forbidden zone'' are still in jeopardy even if they appear to work at first, because the file system does not know about the restrictions and may allocate disk space from the area beyond the 1024th cylinder when installing new kernels. \LILO\ therefore prints a warning message but continues as long as no imminent danger exists. There are four approaches of how such problems can be solved: \begin{itemize} \item use of a different partition which is on an accessible disk and which does not exceed the 1024 cylinder limit. If there is only a DOS partition which fulfills all the criteria, that partition can be used to store the relevant files. (See section \ref{viados}.) \item rearranging partitions and disks. This is typically a destructive operation, so extra care should be taken to make good backups. \item if the system is running DOS or Windows 95, \name{LOADLIN} can be used instead of \LILO. \item if all else fails, installation of a more capable BIOS, a different controller or a different disk configuration. \end{itemize} \LILO\ depends on the BIOS to load the following items: \begin{itemize} \item \path{/boot/boot.b} \item \path{/boot/map} (created when running \path{/sbin/lilo}) \item all kernels \item the boot sectors of all other operating systems it boots \item the startup message, if one has been defined \end{itemize} Normally, this implies that the Linux root file system should be in the ``safe'' area. However, it is already sufficient to put all kernels into \path{/boot} and to either mount a ``good'' partition on \path{/boot} or to let \path{/boot} be a symbolic link pointing to or into such a partition. See also \path{/usr/src/linux/Documentation/ide.txt} (or \path{/usr/src/linux/drivers/block/README.ide} in older kernels) for a detailed description of problems with large disks. \subsubsection{One disk, Linux on a primary partition} If at least one primary partition of the first hard disk is used as a Linux file system (\path{/}, \path{/usr}, etc. but \emphasize{not} as a swap partition), the \LILO\ boot sector should be stored on that partition and it should be booted by the original master boot record or by a program like \name{BOOTACTV}. %%beginskip $$ \begin{tabular}{r|c|c|} \cline{2-3} & \multicolumn{2}{|l|}{MBR\hbox to 1.3in{\hfill\tt /dev/hda~}} \\ \cline{3-3} & & MS-DOS\hfill\tt /dev/hda1 \\ \cline{3-3} $\rightarrow$ & & Linux {\tt /}\hfill\tt /dev/hda2 \\ \cline{2-3} \end{tabular} $$ %%endskip %:\begin{verbatim} %; +--------------------------+ %; | MBR /dev/hda | %; | +------------------------| %; | | MS-DOS /dev/hda1 | %; | |------------------------| %;--> | | Linux / /dev/hda2 | %; +--------------------------+ %:\end{verbatim} In this example, the \craw{boot} variable could be omitted, because the boot sector is on the root partition. \subsubsection{One disk, Linux on a logical partition} If no primary partition is available for Linux, but at least one logical partition of an extended partition on the first hard disk contains a Linux file system, the \LILO\ boot sector should be stored in the partition sector of the extended partition and it should be booted by the original master boot record or by a program like \name{BOOTACTV}. %%beginskip $$ \begin{tabular}{r|c|c|c|} \cline{2-4} & \multicolumn{3}{|l|}{MBR\hbox to 1.3in{\hfill\tt /dev/hda~}} \\ \cline{3-4} & & \multicolumn{2}{|l|}{MS-DOS\hfill\tt /dev/hda1} \\ \cline{3-4} $\rightarrow$ & & \multicolumn{2}{|l|}{Extended\hfill\tt /dev/hda2} \\ \cline{4-4} & & & Linux\hfill\tt /dev/hda5 \\ \cline{4-4} & & & $\ldots$\hfill\tt /dev/hda6 \\ \cline{2-4} \end{tabular} $$ %%endskip %:\begin{verbatim} %; +--------------------------+ %; | MBR /dev/hda | %; | +------------------------| %; | | MS-DOS /dev/hda1 | %; | |------------------------| %;--> | | Extended /dev/hda2 | %; | | +----------------------| %; | | | Linux /dev/hda5 | %; | | |----------------------| %; | | | ... /dev/hda6 | %; +--------------------------+ %:\end{verbatim} Because many disk partitioning programs refuse to make an extended partition (in our example \path{/dev/hda2}) active, you might have to use \name{activate}, which comes with the \LILO\ distribution. OS/2 BootManager should be able to boot \LILO\ boot sectors from logical partitions. The installation on the extended partition itself is not necessary in this case. \subsubsection{Two disks, Linux (at least partially) on the first disk} This case is equivalent to the configurations where only one disk is in the system. The Linux boot sector resides on the first hard disk and the second disk is used later in the boot process. Only the location of the boot sector matters -- everything else (\path{/boot/boot.b}, \path{/boot/map}, the root file system, a swap partition, other Linux file systems, etc.) can be located anywhere on the second disk, provided that the constraints described in section \ref{broken} are met. \subsubsection{Two disks, Linux on second disk, first disk has an extended partition} If there is no Linux partition on the first disk, but there is an extended partition, the \LILO\ boot sector can be stored in the partition sector of the extended partition and it should be booted by the original master boot record or by a program like \name{BOOTACTV}. %%beginskip $$ \begin{tabular}{r|c|c|c|c|c|c|} \multicolumn{1}{r}{} & \multicolumn{3}{c}{\bf First disk} & \multicolumn{1}{r}{\qquad} & \multicolumn{2}{c}{\bf Second disk} \\ \cline{2-4}\cline{6-7} & \multicolumn{3}{|l|}{MBR\hbox to 1.3in{\hfill\tt /dev/hda~}} & & \multicolumn{2}{|l|}{MBR\hbox to 1.3in{\hfill\tt /dev/hdb~}} \\ \cline{3-4}\cline{7-7} & & \multicolumn{2}{|l|}{MS-DOS\hfill\tt /dev/hda1} & & & Linux\hfill\tt /dev/hdb1 \\ \cline{3-4}\cline{7-7} $\rightarrow$ & & \multicolumn{2}{|l|}{Extended\hfill\tt /dev/hda2} & & & $\ldots$\hfill\tt /dev/hdb2 \\ \cline{4-4} & & & $\ldots$\hfill\tt /dev/hda5 & & & \\ \cline{4-4} & & & $\ldots$\hfill\tt /dev/hda6 & & & \\ \cline{2-4}\cline{6-7} \end{tabular} $$ %%endskip %:\begin{verbatim} %4 FIRST DISK SECOND DISK %4 +--------------------------+ +--------------------------+ %4 | MBR /dev/hda | | MBR /dev/hdb | %4 | +------------------------| | +------------------------| %4 | | MS-DOS /dev/hda1 | | | Linux /dev/hdb1 | %4 | |------------------------| | |------------------------| %4--> | | Extended /dev/hda2 | | | ... /dev/hdb2 | %4 | | +----------------------| | | | %4 | | | ... /dev/hda5 | | | | %4 | | |----------------------| | | | %4 | | | ... /dev/hda6 | | | | %4 +--------------------------+ +--------------------------+ %:\end{verbatim} The program \name{activate}, that accompanies \LILO, may have to be used to set the active marker on an extended partition, because MS-DOS' \name{FDISK} and some older version of Linux \name{fdisk} refuse to do that. (Which is generally a good idea.) \subsubsection{Two disks, Linux on second disk, first disk has no extended partition} If there is neither a Linux partition nor an extended partition on the first disk, then there's only one place left, where a \LILO\ boot sector could be stored: the master boot record. In this configuration, \LILO\ is responsible for booting all other operating systems too. %%beginskip $$ \begin{tabular}{r|c|c|c|c|c|} \multicolumn{1}{r}{} & \multicolumn{2}{c}{\bf First disk} & \multicolumn{1}{r}{\qquad} & \multicolumn{2}{c}{\bf Second disk} \\ \cline{2-3}\cline{5-6} $\rightarrow$ & \multicolumn{2}{|l|}{MBR\hbox to 1.3in{ \hfill\tt /dev/hda~}} & & \multicolumn{2}{|l|}{MBR\hbox to 1.3in{\hfill\tt /dev/hdb~}} \\ \cline{3-3}\cline{6-6} & & MS-DOS\hfill\tt /dev/hda1 & & & Linux\hfill\tt /dev/hdb1 \\ \cline{3-3}\cline{6-6} & & $\ldots$\hfill\tt /dev/hda2 & & & $\ldots$\hfill\tt /dev/hdb2 \\ \cline{2-3}\cline{5-6} \end{tabular} $$ %%endskip %:\begin{verbatim} %4 FIRST DISK SECOND DISK %4 +--------------------------+ +--------------------------+ %4--> | MBR /dev/hda | | MBR /dev/hdb | %4 | +------------------------| | +------------------------| %4 | | MS-DOS /dev/hda1 | | | Linux /dev/hdb1 | %4 | |------------------------| | |------------------------| %4 | | ... /dev/hda2 | | | ... /dev/hdb2 | %4 +--------------------------+ +--------------------------+ %:\end{verbatim} You should back up your old MBR before installing \LILO\ and verify that \LILO\ is able to boot your other operating system(s) before relying on this approach. The line \verb"boot = /dev/hda2" in \path{/etc/lilo.conf} would have to be changed to \verb"boot = /dev/hda" in this example. \subsubsection{More than two disks} On systems with more than two disks, typically only the first two can be accessed. The configuration choices are therefore the same as with two disks. When attempting to access one of the extra disks, \LILO\ displays a warning message (\raw{Warning: BIOS drive 0x\meta{number} may not be accessible}) but does not abort. This is done in order to allow the lucky few whose BIOS (or controller-BIOS) does support more than two drives to make use of this feature. By all others, this warning should be considered a fatal error. Note that the two disks restriction is only imposed by the BIOS. Linux normally has no problems using all disks once it is booted. \subsubsection{\path{/boot} on a DOS partition} \label{viados} Recent kernels support all the functions \LILO\ needs to map files also on MS-DOS (or UMSDOS) file systems. Since DOS partitions tend to occupy exactly the places where BIOS restrictions (see section \ref{broken}) are invisible, they're an ideal location for \path{/boot} if the native Linux file systems can't be used because of BIOS problems. In order to accomplish this, the DOS partition is mounted read-write, a directory (e.g. \path{/dos/linux}) is created, all files from \path{/boot} are moved to that directory, \path{/boot} is replaced by a symbolic link to it, the kernels are also moved to the new directory, their new location is recorded in \path{/etc/lilo.conf}, and finally \path{/sbin/lilo} is run. From then on, new kernels must always be copied into that directory on the DOS partition before running \path{/sbin/lilo}, e.g. when recompiling a kernel, the standard procedure changes from \begin{verbatim} # make zlilo \end{verbatim} to \begin{verbatim} # make zImage # mv /dos/linux/vmlinuz /dos/linux/vmlinuz.old # mv arch/i386/boot/zImage /dos/linux/vmlinuz # /sbin/lilo \end{verbatim} \emphasize{WARNING:} De-fragmenting such a DOS partition is likely to make Linux or even the whole system unbootable. Therefore, the DOS partition should either not be de-fragmented, or a Linux boot disk should be prepared (and tested) to bring up Linux and to run \path{/sbin/lilo} after the de-fragmentation.\footnote{Setting the ``system'' attribute from DOS on the critical files (e.g. everything in \path{C:$\backslash$LINUX}) may help to protect them from being rearranged. However, the boot floppy should still be ready, just in case.} \newpage \section{The boot prompt} \label{cmdopt} Immediately after it's loaded, \LILO\ checks whether one of the following is happening: \begin{itemize} \item any of the \key{Shift}, \key{Control} or \key{Alt} keys is pressed. \item \key{CapsLock} or \key{ScrollLock} is set. \end{itemize} If this is the case, \LILO\ displays the \verb"boot:" prompt and waits for the name of a boot image (i.e. Linux kernel or other operating system). Otherwise, it boots the default boot image\footnote{% The default boot image is either the first boot image, the image specified with the \craw{default} variable, or the image that has been selected at the boot prompt.} or -- if a delay has been specified -- waits for one of the listed activities until that amount of time has passed. At the boot prompt, the name of the image to boot can be entered. Typing errors can be corrected with \key{BackSpace}, \key{Delete}, \key{Ctrl U} and \key{Ctrl X}. A list of known images can be obtained by pressing \key{?} or \key{Tab}. If \key{Enter} is pressed and no file name has been entered, the default image is booted. \subsection{Boot command-line options} \LILO\ is also able to pass command-line options to the kernel. Command-line options are words that follow the name of the boot image and that are separated by spaces. Example: \begin{verbatim} boot: linux single root=200 \end{verbatim} This document only gives an overview of boot options. Please consult Paul Gortmaker's BootPrompt-HOWTO for a more complete and more up to date list. You can get it from \path{ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/BootPrompt-HOWTO.gz} or from one of the many mirror sites. \subsubsection{Standard options} Recent kernels recognize a large number of options, among them are \raw{debug}, \raw{no387}, \raw{no-hlt}, \raw{ramdisk=\meta{size}}, \raw{reserve=\meta{base},\meta{size},$\ldots$}, \raw{root=\meta{device}}, \raw{ro}, and \raw{rw}. All current \name{init} programs also recognize the option \raw{single}. The options \raw{lock} and \raw{vga} are processed by the boot loader itself. Boot command-line options are always case-sensitive. \raw{single} boots the system in single-user mode. This bypasses most system initialization procedures and directly starts a root shell on the console. Multi-user mode can typically be entered by exiting the single-user shell or by rebooting. \raw{root=\meta{device}} changes the root device. This overrides settings that may have been made in the boot image and on the \LILO\ command line. \meta{device} is either the hexadecimal device number %%beginskip \footnote{% This is a list of device numbers of some frequently used devices: \\ \begin{tabular}{lllllll} \qquad & {\tt /dev/fd0} & 200\qquad & \tt /dev/hda1 & 301\qquad & /dev/sda1 & 801 \\ & {\tt /dev/fd1} & 201 & \tt /dev/hda2 & 302 & /dev/sda2 & 802 \\ & \multicolumn{2}{c}{$\cdots$} & \multicolumn{2}{c}{$\cdots$} & \multicolumn{2}{c}{$\cdots$} \\ & & & \tt /dev/hdb1 & 341 & /dev/sdb1 & 811 \\ & & & \tt /dev/hdb2 & 342 & /dev/sdb2 & 812 \\ & \multicolumn{2}{c}{} & \multicolumn{2}{c}{$\cdots$} & \multicolumn{2}{c}{$\cdots$} \\ \end{tabular}} %%endskip or the full path name of the device, e.g. \verb"/dev/hda3".% \footnote{The device names are hard-coded in the kernel. Therefore, only the ``standard'' names are supported and some less common devices may not be recognized. In those cases, only numbers can be used.} \raw{reserve=\meta{base},\meta{size},$\ldots$} reserves IO port regions. This can be used to prevent device drivers from auto-probing addresses where other devices are located, which get confused by the probing. \raw{ro} instructs the kernel to mount the root file system read-only. \raw{rw} mounts it read-write. If neither \raw{ro} nor \raw{rw} is specified, the setting from the boot image is used. \raw{no-hlt} avoids executing a \raw{HLT} instructions whenever the system is idle. \raw{HLT} normally significantly reduces power consumption and therefore also heat dissipation of the CPU, but may not work properly with some clone CPUs. \raw{no387} disables using the hardware FPU even if one is present. \raw{debug} enables more verbose console logging. Recent kernels also accept the options \raw{init=\meta{name}} and \raw{noinitrd}. \raw{init} specifies the name of the \name{init} program to execute. Therefore, if single mode cannot be entered because \name{init} is mis-configured, one may still be able to reach a shell using \verb"init=/bin/sh". \raw{noinitrd} disables automatic loading of the initial RAM disk. Instead, its content is then available on \path{/dev/initrd}. \raw{vga=\meta{mode}} alters the VGA mode set at startup. The values \raw{normal}, \raw{extended}, \raw{ask} or a decimal number are recognized. (See also page \pageref{vga}.) \raw{kbd=\meta{code},$\ldots$} preloads a sequence of keystrokes in the BIOS keyboard buffer. The keystrokes have to be entered as 16 bit hexadecimal numbers, with the upper byte containing the scan code and the lower byte containing the ASCII code. Note that most programs only use the ASCII code, so the scan code can frequently be omitted. Scan code tables can be found in many books on PC hardware. Note that scan codes depend on the keyboard layout. Finally, \raw{lock} stores the current command-line as the default command-line, so that \LILO\ boots the same image with the same options (including \raw{lock}) when invoked the next time. \subsubsection{Device-specific options} There is also a plethora of options to specify certain characteristics (e.g. IO and memory addresses) of devices. Some common ones are \raw{ether}, \raw{floppy}, \raw{hd}, \raw{bmouse}, and \raw{sound}. The usage of these options is \raw{\meta{option}=\meta{number},$\ldots$}. Please consult the corresponding FAQs and HOWTOs for details. For an overview of all available options, consult the file \path{init/main.c} in the kernel source tree. \subsubsection{Other options} Options of the type \raw{\meta{variable}=\meta{value}} which are neither standard options nor device-specific options, cause the respective variables to be set in the environment passed to \name{init}. The case of the variable name is preserved, i.e. it isn't automatically converted to upper case. Note that environment variables passed to \name{init} are typically available in system initialization scripts (e.g. \path{/etc/rc.local}), but they're not visible from ordinary login sessions, because the \name{login} program removes them from the user's environment. \subsubsection{Repeating options} The effect of repeating boot command-line options depends on the options.% \footnote{Options are frequently repeated when a string defined with \craw{append} or \craw{literal} is prepended to the parameters typed in by the user. Also, \LILO\ implicitly prepends the options \raw{ramdisk}, \raw{ro}, \raw{root}, or \raw{rw} when \craw{ramdisk}, \craw{read-only}, \craw{read-write}, or \craw{root}, respectively, are set in the configuration file. (\raw{lock} and \raw{vga} are handled by a different internal mechanism.)} There are three possible behaviours: Options that only enable or disable a certain functionality can be repeated any number of times. \raw{debug}, \raw{lock}, \raw{no-hlt}, and \raw{no387} fall into this category. Other options change a global setting whenever they appear, so only the value or presence of the last option matters. The antagonists \raw{ro} and \raw{rw} are such options. Also, \raw{ramdisk}, \raw{root}, and \raw{vga} work this way. Example: \raw{ro rw} would mount the root file system read-write. Finally, when \raw{reserve} and many device-specific options are repeated, each occurrence has its own meaning, e.g. \raw{hd=$\ldots$ hd=$\ldots$} would configure two hard disks, and \raw{reserve=0x300,8 reserve=0x5f0,16} would reserve the ranges 0x300 to 0x307 and 0x5f0 to 0x5ff (which is equivalent to writing \raw{reserve=0x300,8,0x5f0,16}). \subsubsection{Implicit options} \LILO\ always passes the string \raw{BOOT\_IMAGE=\meta{name}} to the kernel, where \meta{name} is the name by which the kernel is identified (e.g. the label). This variable can be used in \path{/etc/rc} to select a different behaviour, depending on the kernel. When booting automatically, i.e. without human intervention, the word \raw{auto} is also passed on the command line. This can be used by \name{init} to suppress interactive prompts in the boot phase. \subsection{Boot image selection} \label{bootsel} The details of selecting the boot image are somewhat complicated. The following tables illustrate them. First, if neither \craw{prompt} is set nor a shift key is being pressed: $$ \begin{tabular}{cc|cl} Externally & Command & Auto- & Booted image \\ provided & line in & matic & \\ cmd. line\footnotemark & map file\footnotemark & boot\footnotemark & \\ \hline No & No & Yes & Default image \\ Yes & --- & Yes & Specified by external \\ & & & command line \\ No & Yes & Yes & Specified by command line \\ & & & in map file \\ \end{tabular} \addtocounter{footnote}{-2} \footnotetext{Externally provided command lines could be used to add front-ends to \LILO. They would pass the respective command string to LILO, which would then interpret it like keyboard input. This feature is currently not used.} \addtocounter{footnote}{1} \footnotetext{This command line is set by invoking the map installer with the \raw{-R} option, by using the boot command-line option \raw{lock}, or if a fallback command line is set (with \craw{fallback}).} \addtocounter{footnote}{1} \footnotetext{I.e. the keyword \raw{auto} is added.} $$ If \craw{prompt} is not set and a shift key is being pressed: $$ \begin{tabular}{cccc|cl} Input & Empty & Extern. & Cmd.l. & Auto- & Booted image \\ timeout & cmd.l. & cmd.l. & in map & matic & \\ & & & file & boot & \\ \hline No & No & --- & --- & No & Specified by the user \\ No & Yes & --- & --- & No & Default image \\ Yes & n/a & --- & --- & Yes & Default image \\ \end{tabular} $$ Finally, if the configuration variable \craw{prompt} is set: $$ \begin{tabular}{cccc|cl} Input & Empty & Extern. & Cmd.l. & Auto- & Booted image \\ timeout & cmd.l. & cmd.l. & in map & matic & \\ & & & file & boot & \\ \hline No & No & No & No & No & Specified by the user \\ No & Yes & No & No & No & Default image \\ Yes & n/a & No & No & Yes & Default image \\ n/a & n/a & Yes & --- & Yes & Specified by external \\ & & & & & command line \\ n/a & n/a & No & Yes & Yes & Specified by command \\ & & & & & line in map file \\ \end{tabular} $$ Note that \LILO\ pauses for the amount of time specified in \craw{delay} when at the end of a default command line. The automatic boot can then be interrupted by pressing a modifier key (\key{Shift}, \key{Ctrl}, etc.). The default image is the first image in the map file or the image specified with the \craw{default} variable. However, after an unsuccessful boot attempt, the respective image becomes the default image. \newpage \section{Map installer} The map installer program \path{/sbin/lilo} updates the boot sector and creates the map file. If the map installer detects an error, it terminates immediately and does not touch the boot sector and the map file. Whenever the map installer updates a boot sector, the original boot sector is copied to \path{/boot/boot.\meta{number}}, where \meta{number} is the hexadecimal device number. If such a file already exists, no backup copy is made. Similarly, a file \raw{/boot/part.\meta{number}} is created if \LILO\ modifies the partition table. (See page \pageref{fix-table}.) \subsection{Command-line options} The \LILO\ map installer can be invoked in the following ways: %%beginskip \def\seealso{See also sections \ref{corropt} and \ref{cfgglo}.} %%def\\seealso=See also sections \\ref{corropt} and \\ref{cfgglo}. %%endskip \subsubsection{Show current installation} \label{invshow} The currently mapped files are listed. With \raw{-v}, also many parameters are shown. \begin{command} /sbin/lilo \unit{\[ -C \meta{config\_file} \]} \unit{-q} \unit{\[ -m \meta{map\_file} \]} \unit{\[ -v $\ldots$ \]} \end{command} \begin{description} \item[\raw{-C \meta{config\_file}}]~\\ Specifies the configuration file that is used by the map installer (see section \ref{config}). If \raw{-C} is omitted, \path{/etc/lilo.conf} is used. \item[\raw{-m \meta{map\_file}}]~\\ Specifies an alternate map file. \seealso \item[\raw{-q}]~ \\ Lists the currently mapped files. \item[\raw{-v $\ldots$}]~\\ Increase verbosity. \seealso \end{description} \subsubsection{Create or update map} \label{creupd} A new map is created for the images described in the configuration file \path{/etc/lilo.conf} and they are registered in the boot sector. \begin{command} /sbin/lilo \unit{\[ -C \meta{config\_file} \]} \unit{\[ -b \meta{boot\_device} \]} \unit{\[ -c \]} \unit{\[ -l \]} \unit{\[ -i \meta{boot\_sector} \]} \unit{\[ -f \meta{disk\_tab} \]} \unit{\[ -m \meta{map\_file} \]} \unit{\[ -d \meta{delay\/} \]} \unit{\[ -v $\ldots$ \]} \unit{\[ -t \]} \unit{\[ -s \meta{save\_file} \|} \unit{-S \meta{save\_file} \]} \unit{\[ -P fix \|} \unit{-P ignore \]} \unit{\[ -r \meta{root\_dir} \]} \end{command} \begin{description} \item[\raw{-b \meta{boot\_device}}]~\\ Specifies the boot device. \seealso \item[\raw{-c}]~\\ Enables map compaction. \seealso \item[\raw{-C \meta{config\_file}}]~\\ Specifies an alternate configuration file. See also section \ref{invshow}. \item[\raw{-d \meta{delay}}]~\\ Sets the delay before \LILO\ boots the default image. Note that the delay is specified in \emphasize{tenths} of a second. \seealso \item[\raw{-D \meta{name}}]~\\ Specifies the default image. \seealso \item[\raw{-f \meta{disk\_tab}}]~\\ Specifies a disk parameter table file. \seealso \item[\raw{-i \meta{boot\_sector}}]~\\ Specifies an alternate boot file. \seealso \item[\raw{-L}]~\\ Enables lba32 sector addresses. \seealso \item[\raw{-l}]~\\ Enables linear sector addresses. \seealso \item[\raw{-m \meta{map\_file}}]~\\ Specifies an alternate map file. \seealso \item[\raw{-P \meta{mode}}]~\\ Specifies how invalid partition table entries should be handled. \seealso \item[\raw{-r \meta{root\_directory}}]~ \\ Chroots to the specified directory before doing anything else. This is useful when running the map installer while the normal root file system is mounted somewhere else, e.g. when recovering from an installation failure with a recovery disk. The \raw{-r} option is implied if the environment variable \raw{ROOT} is set.\footnote{E.g. if your root partition is mounted on \path{/mnt}, you can update the map by simply running \raw{ROOT=/mnt /mnt/sbin/lilo}} The current directory is changed to the new root directory, so using relative paths may not work. \item[\raw{-s \meta{save\_file}}]~\\ Specifies an alternate boot sector save file. \seealso \item[\raw{-S \meta{save\_file}}]~\\ Like \raw{-s}, but overwrites old save files. \item[\raw{-t}]~ \\ Test only. This performs the entire installation procedure except replacing the map file, writing the modified boot sector and fixing partition tables. This can be used in conjunction with the \raw{-v} option to verify that \LILO\ will use sane values. \item[\raw{-v $\ldots$}]~\\ Increase verbosity. \seealso \end{description} \subsubsection{Change default command line} \label{invcmd} Changes \LILO's default command line. See also section \ref{bootsel}. \begin{command} /sbin/lilo \unit{\[ -C \meta{config\_file} \]} \unit{\[ -m \meta{map\_file} \]} \unit{-R \[ \meta{word} $\ldots$ \]} \end{command} \begin{description} \item[\raw{-C \meta{config\_file}}]~\\ Specifies an alternate configuration file. See also section \ref{invshow}. \item[\raw{-m \meta{map\_file}}]~\\ Specifies an alternate map file. \seealso \item[\raw{-R \meta{word $\ldots$}}]~ \\ Stores the specified words in the map file. The boot loader uses those words as the default command line when booting the next time. That command line is removed from the map file by the boot loader by overwriting the sector immediately after reading it. The first word has to be the name of a boot image. If \raw{-R} is not followed by any words, the current default command line in the map file is erased.\footnote{% \raw{-R} is typically used in reboot scripts, e.g. \\ %%beginskip \tt %%endskip \#!/bin/sh \\ cd / \\ /sbin/lilo -R "\$*" \&\& reboot} If the command line isn't valid, the map installer issues an error message and returns a non-zero exit code. \end{description} \subsubsection{Kernel name translation} Determines the path of the kernel. \begin{command} /sbin/lilo \unit{\[ -C \meta{config\_file} \]} \unit{-I \meta{name}} \unit{\[ \meta{options} \]} \end{command} \begin{description} \item[\raw{-C \meta{config\_file}}]~\\ Specifies an alternate configuration file. See also section \ref{invshow}. \item[\raw{-I \meta{name} {$[$} \meta{options} {$]$}}]~ \\ Translates the specified label name to the path of the corresponding kernel image and prints that path on standard output. This can be used to synchronize files that depend on the kernel (e.g. the \name{ps} database). The image name can be obtained from the environment variable \raw{BOOT\_IMAGE}. An error message is issued and a non-zero exit code is returned if no matching label name can be found. The existence of the image file is verified if the option character \raw{v} is added. \end{description} \subsubsection{De-installation} Restores the boot sector that was used before the installation of \LILO. Note that this option only works properly if \LILO's directories (e.g. \path{/boot}) have not been touched since the first installation. See also section \ref{deinst}. \begin{command} /sbin/lilo \unit{\[ -C \meta{config\_file} \]} \unit{\[ -s \meta{save\_file} \]} \unit{-u \| -U} \unit{\[ \meta{boot\_device} \]} \end{command} \begin{description} \item[\raw{-C \meta{config\_file}}]~\\ Specifies an alternate configuration file. See also section \ref{invshow}. \item[\raw{-s \meta{save\_file}}]~\\ Specifies an alternate boot sector save file. \seealso \item[\raw{-u {$[$} \meta{device\_name} {$]$}}]~ \\ Restores the backup copy of the specified boot sector. If no device is specified, the value of the \verb"boot" variable is used. If this one is also unavailable, \LILO\ uses the current root device. The name of the backup copy is derived from the device name. The \verb"-s" option or the \verb"backup" variable can be used to override this. \LILO\ validates the backup copy by checking a time stamp. \item[\raw{-U {$[$} \meta{device\_name} {$]$}}]~ \\ Like \verb"-u", but does not check the time stamp. \end{description} \subsubsection{Print version number} \begin{command} /sbin/lilo -V \end{command} \begin{description} \item[\raw{-V}]~ \\ Print the version number and exit. \end{description} \subsubsection{Options corresponding to configuration variables} \label{corropt} There are also many command-line options that correspond to configuration variables. See section \ref{cfgglo} for a description. $$ \begin{tabular}{l|l} Command-line option & Configuration variable \\ \hline \raw{-b \meta{boot\_device}} & \raw{boot=\meta{boot\_device}} \\ \raw{-c} & \raw{compact} \\ \raw{-d \meta{tsecs}} & \raw{delay=\meta{tsecs}} \\ \raw{-D \meta{name}} & \raw{default=\meta{name}} \\ \raw{-i \meta{boot\_sector}} & \raw{install=\meta{boot\_sector}} \\ \raw{-L} & \raw{lba32} \\ \raw{-l} & \raw{linear} \\ \raw{-m \meta{map\_file}} & \raw{map=\meta{map\_file}} \\ \raw{-P fix} & \raw{fix-table} \\ \raw{-P ignore} & \raw{ignore-table} \\ \raw{-s \meta{backup\_file}} & \raw{backup=\meta{backup\_file}} \\ \raw{-S \meta{backup\_file}} & \raw{force-backup=\meta{backup\_file}} \\ \raw{-v $\ldots$} & \raw{verbose=\meta{level}} \\ \end{tabular} $$ \subsection{Configuration} \label{config} The configuration information is stored in the file \path{/etc/lilo.conf} and consists of variable assignments. \subsubsection{Syntax} \label{syntax} The following syntax rules apply: \begin{itemize} \item flag variables consist of a single word and are followed by whitespace or the end of the file. \item string variables consist of the variable name, optional whitespace, an equal sign, optional whitespace, the value and required whitespace, or the end of the file. \item a non-empty sequence of blanks, tabs, newlines and comments counts as whitespace. \item variable names are case-insensitive. Values are usually case-sensitive, but there are a few exceptions. (See below.) \item tabs and newlines are special characters and may not be part of a variable name or a value. The use of other control characters and non-ASCII characters is discouraged. \item blanks and equal signs may only be part of a variable name or a value if they are escaped by a backslash or if the value is embedded in double quotes. An equal sign may not be the only character in a name or value. \item an escaped tab is converted to an escaped blank. An escaped newline is removed from the input stream. An escaped backslash (i.e. two backslashes) is converted to a backslash. Inside quoted strings, only double quotes, backslashes, dollar signs, and newlines can be escaped. \item quoted strings can be continued over several lines by ending each incomplete line with a backslash. A single space is inserted in the string for the line end and all spaces or tabs that follow immediately on the next line. \item environment variables can be used by specifying them in the form \verb"$"\meta{name} or \verb"${"\meta{name}\verb"}". Dollar signs can be escaped. \item comments begin with a number sign and end with the next newline. All characters (including backslashes) until the newline are ignored. \end{itemize} Example: \begin{verbatim} boot = $FD install = menu map = $MNT/map compact read-only append = "nfsroot=/home/linux-install/root \ nfsaddrs=128.178.156.28:128.178.156.24::255.255.255.0:lrcinst" image = $MNT/zImage \end{verbatim} \subsubsection{Global options} \label{cfgglo} \path{/etc/lilo.conf} begins with a possibly empty global options section. Many global options can also be set from the command line, but storing permanent options in the configuration file is more convenient. The following global options are recognized: \begin{description} \item[\craw{backup=}\meta{backup\_file}] Copy the original boot sector to \meta{backup\_file} (which may also be a device, e.g. \path{/dev/null}) instead of \path{/boot/boot.\meta{number}} \item[\craw{boot=}\meta{boot\_device}] Sets the name of the device (e.g. a hard disk partition) that contains the boot sector. If \craw{boot} is omitted, the boot sector is read from (and possibly written to) the device that is currently mounted as root. \item[\craw{change-rules}] Defines partition type numbers. See section \ref{ptcr} for details. \item[\craw{compact}] Tries to merge read requests for adjacent sectors into a single read request. This drastically reduces load time and keeps the map smaller. Using \craw{compact} is especially recommended when booting from a floppy disk. \craw{compact} may conflict with \craw{linear} or \craw{lba32}, see section \ref{othpro}. \item[\craw{default=}\meta{name}] Uses the specified image as the default boot image. If \craw{default} is omitted, the image appearing first in the configuration file is used. \item[\craw{delay=}\meta{tsecs}] Specifies the number of \emphasize{tenths} of a second \LILO\ should wait before booting the first image. This is useful on systems that immediately boot from the hard disk after enabling the keyboard. \LILO\ doesn't wait if \craw{delay} is omitted or if \craw{delay} is set to zero. \item[\craw{disk=}\meta{device\_name}] Defines non-standard parameters for the specified disk. See section \ref{diskgeo} for details. \item[\craw{fix-table}]\label{fix-table}Allows \LILO\ to adjust 3D addresses in partition tables. Each partition entry contains a 3D (sector/head/cylinder) and a linear 32-bit address of the first and the last sector of the partition. If a partition is not track-aligned and if certain other operating systems (e.g. PC/MS-DOS or OS/2) are using the same disk, they may change the 3D address. \LILO\ can store its boot sector only on partitions where both address types correspond. \LILO\ re-adjusts incorrect 3D start addresses if \craw{fix-table} is set. \emphasize{WARNING:} This does not guarantee that other operating systems may not attempt to reset the address later. It is also possible that this change has other, unexpected side-effects. The correct fix is to re-partition the drive with a program that does align partitions to tracks. Also, with some disks (e.g. some large EIDE disks with address translation enabled), under some circumstances, it may even be unavoidable to have conflicting partition table entries. \item[\craw{force-backup=}\meta{backup\_file}] Like \craw{backup}, but overwrite an old backup copy if it exists. \craw{backup=}\meta{backup\_file} is ignored if \craw{force-backup} appears in the same configuration file. \item[\craw{ignore-table}] Tells LILO to ignore corrupt partition tables and to put the boot sector even on partitions that appear to be unsuitable for that. \item[\craw{install=}\meta{boot\_sector}] Install the specified file as the new boot sector. If \craw{install} is omitted, \path{install=text} is used as the default. \item[\craw{keytable=}\meta{table\_file}] Re-map the keyboard as specified in this file. See section \ref{keytab} for details. \item[\craw{lba32}] Generate 32-bit Logical Block Addresses instead of sector/head/cylinder addresses. If the BIOS supports packet addressing, then packet calls will be used to access the disk. This allows booting from any partition on disks with more than 1024 cylinders. If the BIOS does not support packet addressing, then \craw{lba32} addresses are translated to C:H:S, just as for \craw{linear}. All floppy disk references are retained in C:H:S form. Use of \craw{lba32} is recommended on all post-1998 systems. \craw{lba32} may conflict with \craw{compact}, see section \ref{othpro}. \item[\craw{linear}] Generate linear sector addresses instead of sector/head/cylinder addresses. Linear addresses are translated at run time and do not depend on disk geometry. Note that boot disks may not be portable if \craw{linear} is used, because the BIOS service to determine the disk geometry does not work reliably for floppy disks. When using \craw{linear} with large disks, \path{/sbin/lilo} may generate references to inaccessible disk areas (see section \ref{broken}), because 3D sector addresses are not known before boot time. \craw{linear} may conflict with \craw{compact}, see section \ref{othpro}. \item[\craw{map=}\meta{map\_file}] Specifies the location of the map file. If \craw{map} is omitted, a file \path{/boot/map} is used. \item[\craw{message=}\meta{message\_file}] Specifies a file containing a message that is displayed before the boot prompt. No message is displayed while waiting for a modifier key (\key{Shift}, etc.) after printing ``LILO ''. In the message, the \raw{FF} character (\hbox{\key{Ctrl L}}) clears the local screen. The size of the message file is limited to 65535 bytes. The map file has to be rebuilt if the message file is changed or moved. \item[\craw{nowarn}] Disables warnings about possible future dangers. \item[\craw{prompt}] Forces entering the boot prompt without expecting any prior key-presses. Unattended reboots are impossible if \craw{prompt} is set and \craw{timeout} isn't. \item[\craw{serial=}\meta{parameters}] Enables control from a serial line. The specified serial port is initialized and \LILO\ is accepting input from it and from the PC's keyboard. Sending a break on the serial line corresponds to pressing a shift key on the console in order to get \LILO's attention. All boot images should be password-protected if the serial access is less secure than access to the console, e.g. if the line is connected to a modem. The parameter string has the following syntax: \\ \raw{\meta{port},\meta{bps}\,\meta{parity}\,\meta{bits}} \\ The components \meta{bps}, \meta{parity} and \meta{bits} can be omitted. If a component is omitted, all following components have to be omitted too. Additionally, the comma has to be omitted if only the port number is specified. \begin{description} \item[\meta{port}] the number of the serial port, zero-based. 0 corresponds to \path{COM1} alias \path{/dev/ttyS0}, etc. All four ports can be used (if present). \item[\meta{bps}] the baud rate of the serial port. The following baud rates are supported: 110, 300, 1200, 2400, 4800, 9600, 19200, and 38400 bps. Default is 2400 bps. \item[\meta{parity}] the parity used on the serial line. \LILO\ ignores input parity and strips the 8th bit. The following (upper or lower case) characters are used to describe the parity: \raw{n} for no parity, \raw{e} for even parity and \raw{o} for odd parity. \item[\meta{bits}] the number of bits in a character. Only 7 and 8 bits are supported. Default is 8 if parity is ``none'', 7 if parity is ``even'' or ``odd''. \end{description} If \craw{serial} is set, the value of \craw{delay} is automatically raised to 20. Example: \verb"serial=0,2400n8" initializes \path{COM1} with the default parameters. \item[\craw{timeout=}\meta{tsecs}] Sets a timeout (in tenths of a second) for keyboard input. If no key is pressed for the specified time, the first image is automatically booted. Similarly, password input is aborted if the user is idle for too long. The default timeout is infinite. \item[\craw{verbose=}\meta{level}] Turns on lots of progress reporting. Higher numbers give more verbose output. If \raw{-v} is additionally specified on the command line, \meta{level} is increased accordingly. The following verbosity levels exist: \begin{description} \item[$<$0] only warnings and errors are shown \item[0] prints one line for each added or skipped image \item[1] mentions names of important files and devices and why they are accessed. Also displays informational messages for exceptional but harmless conditions and prints the version number. \item[2] displays statistics and processing of temporary files and devices \item[3] displays disk geometry information and partition table change rules \item[4] lists sector mappings as they are written into the map file (i.e. after compaction, in a format suitable to pass it to the BIOS) \item[5] lists the mapping of each sector (i.e. before compaction, raw) \end{description} When using the \raw{-q} option, the levels have a slightly different meaning: \begin{description} \item[0] displays only image names \item[1] also displays all global and per-image settings \item[2] displays the address of the first map sector \end{description} \end{description} Additionally, the kernel configuration parameters \craw{append}, \craw{initrd}, \craw{ramdisk}, \craw{read-only}, \craw{read-write}, \craw{root} and \craw{vga}, and the general per-image options \craw{fallback}, \craw{lock}, \craw{optional}, \craw{password}, \craw{restricted}, and \craw{single-key} can be set in the global options section. They are used as defaults if they aren't specified in the configuration sections of the respective images. See below for a description. The plethora of options may be intimidating at first, but in ``normal'' configurations, hardly any options but \craw{boot}, \craw{compact}, \craw{delay}, \craw{root}, and \craw{vga} are used. \subsubsection{General per-image options} \label{cfggen} The following options can be specified for all images, independent of their type: \begin{description} \item[\craw{alias=}\meta{name}] Specifies a second name for the current entry. \item[\craw{fallback=}\meta{command\_line}] Specifies a string that is stored as the default command line if the current image is booted. This is useful when experimenting with kernels which may crash before allowing interaction with the system. If using the \craw{fallback} option, the next reboot (e.g. triggered by a manual reset or by a watchdog timer) will load a different (supposedly stable) kernel. The command line by the fallback mechanism is cleared by removing or changing the default command line with the \raw{-R} option, see \ref{invcmd}. \item[\craw{label=}\meta{name}] By default, \LILO\ uses the main file name (without its path) of each image specification to identify that image. A different name can be used by setting the variable \craw{label}. \item[\craw{lock}] Enables automatic recording of boot command lines as the defaults for the following boots. This way, \LILO\ ``locks'' on a choice until it is manually overridden. \item[\craw{optional}] Omit this image if its main file is not available at map creation time. This is useful to specify test kernels that are not always present. \item[\craw{password=}\meta{password}] Ask the user for a password when trying to load this image. Because the configuration file contains unencrypted passwords when using this option, it should only be readable for the super-user. Passwords are always case-sensitive. \item[\craw{restricted}] Relaxes the password protection by requiring a password only if parameters are specified on the command line (e.g. \verb"single"). \craw{restricted} can only be used together with \craw{password}. \item[\craw{single-key}] Enables booting the image by hitting a single key, without the need to press \key{Enter} afterwards. \craw{single-key} requires that either the image's label or its alias (or both) is a single character. Furthermore, no other image label or alias may start with that character, e.g. an entry specifying a label \raw{linux} and an alias \raw{l} is not allowed with \craw{single-key}. Note that you can't specify command-line parameters for an entry for which only \craw{single-key}ed names exist. \end{description} All general per-image options, with the exception of \craw{label} and \craw{alias}, can also be set in the global options section as defaults for all images. Example: \begin{verbatim} password = Geheim single-key image = /vmlinuz label = linux alias = 1 restricted other = /dev/hda1 label = dos alias = 2 \end{verbatim} \subsubsection{Per-image options for kernels} \label{cfgkern} Each (kernel or non-kernel) image description begins with a special variable (see section \ref{bootimg}) which is followed by optional variables. The following variables can be used for all image descriptions that describe a Linux kernel: \begin{description} \item[\craw{append=}\meta{string}] Appends the options specified in {\meta{string}} to the parameter line passed to the kernel. This is typically used to specify parameters of hardware that can't be entirely auto-detected, e.g.\\ \verb'append = "aha152x=0x140,11"' \item[\craw{initrd=}\meta{name}] Specifies the file that will be loaded at boot time as the initial RAM disk. \item[\craw{literal=}\meta{string}] like \craw{append}, but removes all other options (e.g. setting of the root device). Because vital options can be removed unintentionally with \craw{literal}, this option cannot be set in the global options section. \item[\craw{ramdisk=}\meta{size}] Specifies the size of the optional RAM disk. A value of zero indicates that no RAM disk should be created. If this variable is omitted, the RAM disk size configured into the boot image is used. \item[\craw{read-only}] Specifies that the root file system should be mounted read-only. Typically, the system startup procedure re-mounts the root file system read-write later (e.g. after fsck'ing it). \item[\craw{read-write}] specifies that the root file system should be mounted read-write. \item[\craw{root=}\meta{root\_device}] Specifies the device that should be mounted as root. If the special name \craw{current} is used, the root device is set to the device on which the root file system is currently mounted. If the root has been changed with \raw{-r}, the respective device is used. If the variable \craw{root} is omitted, the root device setting contained in the kernel image is used. It can be changed with the \name{rdev} program. \item[\craw{vga=}\meta{mode}]\label{vga} Specifies the VGA text mode that should be selected when booting. The following values are recognized (case is ignored): \begin{description} \item[\craw{normal}] select normal 80x25 text mode. \item[\craw{extended}] select 80x50 text mode. The word \craw{extended} can be abbreviated to \craw{ext}. \item[\craw{ask}] stop and ask for user input (at boot time). \item[\meta{number}] use the corresponding text mode. A list of available modes can be obtained by booting with \raw{vga=ask} and pressing \key{Enter}. \end{description} If this variable is omitted, the VGA mode setting contained in the kernel image is used. \name{rdev} supports manipulation of the VGA text mode setting in the kernel image. \end{description} All kernel per-image options but \craw{literal} can also be set in the global options section as defaults for all kernels. If one of \craw{ramdisk}, \craw{read-only}, \craw{read-write}, \craw{root}, or \craw{vga} is omitted in the configuration file and the corresponding value in the kernel image is changed, \LILO\ or the kernel will use the new value. It is perfectly valid to use different settings for the same image, because \LILO\ stores them in the image descriptors and not in the images themselves. Example: \begin{verbatim} image = /vmlinuz label = lin-hd root = /dev/hda2 image = /vmlinuz label = lin-fd root = /dev/fd0 \end{verbatim} \subsection{Boot image types} \label{bootimg} \LILO\ can boot the following types of images: \begin{itemize} \item kernel images from a file. \item kernel images from a block device. (E.g. a floppy disk.) \item the boot sector of some other operating system. \end{itemize} The image type is determined by the name of the initial variable of the configuration section. The image files can reside on any media that is accessible at boot time. There's no need to put them on the root device, although this certainly doesn't hurt. \subsubsection{Booting kernel images from a file} The image is specified as follows: \craw{image=}\meta{name} Example: \begin{verbatim} image = /linux \end{verbatim} See sections \ref{cfggen} and \ref{cfgkern} for the options that can be added in a kernel image section. \subsubsection{Booting kernel images from a device} The range of sectors that should be mapped has to be specified. Either a range (\raw{\meta{start}-\meta{end}}) or a start and a distance (\raw{\meta{start}+\meta{number}}) have to be specified. \meta{start} and \meta{end} are zero-based. If only the start is specified, only that sector is mapped. The image is specified as follows: \craw{image=}\meta{device\_name}\quad Additionally, the \craw{range} variable must be set. Example: \begin{verbatim} image = /dev/fd0 range = 1+512 \end{verbatim} All kernel options can also be used when booting the kernel from a device. \subsubsection{Booting a foreign operating system} \label{bootfor} \LILO\ can even boot other operating systems, i.e. MS-DOS. To boot an other operating system, the name of a loader program, the device or file that contains the boot sector and the device that contains the partition table have to be specified. The boot sector is merged with the partition table and stored in the map file. Currently, the loaders \path{chain.b} and \path{os2\_d.b} exist. \path{chain.b} simply starts the specified boot sector.\footnote{The boot sector is loaded by \LILO's secondary boot loader before control is passed to the code of \path{chain.b}.} \path{os2\_d.b} it a variant of \path{chain.b} that can boot OS/2 from the second hard disk. The \craw{map-drive} option has to be used with \path{os2\_d.b} to actually swap the drives. The image is specified as follows: \craw{other=}\meta{device\_name} or \craw{other=}\meta{file\_name} In addition to the options listen in section \ref{cfggen}, the following variables are recognized: \begin{description} \item[\craw{change}] Change the partition table according to the rules specified in this \craw{change} section. This option is intended for booting systems which find their partitions by examining the partition table. See section \ref{ptch} for details. \item[\craw{loader=}\meta{chain\_loader}] Specifies the chain loader that should be used. If it is omitted, \path{/boot/chain.b} is used. \item[\craw{map-drive=}\meta{bios\_device\_code}] Instructs \path{chain.b} to installs a resident driver that re-maps the floppy or hard disk drives. This way, one can boot any operating system from a hard disk different from the first one, as long as that operating system uses \emphasize{only} the BIOS to access that hard disk.\footnote{So you should be very suspicious if the operating system requires any specific configuration or even drivers to use the disk it is booted from. Since there is a general trend to use optimized drivers to fully exploit the hardware capabilities (e.g. non-blocking disk access), booting systems from the second disk may become increasingly difficult.} This is known to work for PC/MS-DOS. \craw{map-drive} is followed by the variable \craw{to=}\meta{bios\_device\_code} which specifies the drive that should effectively be accessed instead of the original one. The list of mappings is only searched until the first match is found. It is therefore possible to ``swap'' drives, see the second example below. \item[\craw{table=}\meta{device}] Specifies the device that contains the partition table. \LILO\ does not pass partition information to the booted operating system if this variable is omitted. (Some operating systems have other means to determine from which partition they have been booted. E.g. MS-DOS usually stores the geometry of the boot disk or partition in its boot sector.) Note that \path{/sbin/lilo} must be re-run if a partition table mapped referenced with \craw{table} is modified. \item[\craw{unsafe}] Do not access the boot sector at map creation time. This disables some sanity checks, including a partition table check. If the boot sector is on a fixed-format floppy disk device, using \craw{unsafe} avoids the need to put a readable disk into the drive when running the map installer. \craw{unsafe} and \craw{table} are mutually incompatible. \end{description} None of these options can be set in the global options section. Examples: \begin{verbatim} other = /dev/hda2 label = dos table = /dev/hda \end{verbatim} \begin{verbatim} other = /dev/hdb2 label = os2 loader = /boot/os2_d.b map-drive = 0x80 to = 0x81 map-drive = 0x81 to = 0x80 \end{verbatim} \subsection{Disk geometry} \label{diskgeo} For floppies and most hard disks, \LILO\ can obtain the disk geometry information from the kernel. Unfortunately, there are some exotic disks or adapters which may either not supply this information or which may even return incorrect information. If no geometry information is available, \LILO\ reports either the error \\ \raw{geo\_query\_dev HDIO\_GETGEO (dev 0x\meta{number})} \\ or \\ \raw{Device 0x\meta{number}: Got bad geometry \meta{sec}/\meta{hd}/% \meta{cyl}} If incorrect information is returned, booting may fail in several ways, typically with a partial ``LILO'' banner message. In this document, that is called a ``geometry mismatch''. The next step should be to attempt setting the \craw{lba32} or \craw{linear} configuration variable or the \raw{-L} or \raw{-l} command-line option. If this doesn't help, the entire disk geometry has to be specified explicitly. Note that \craw{linear} doesn't always work with floppy disks. Another common use of disk sections is if an (E)IDE and a SCSI drive are used in the same system and the BIOS is configured to use the SCSI drive as the first drive. (Normally, the (E)IDE drive would be the first drive and the SCSI drive would be the second one.) Since \LILO\ doesn't know how the BIOS is configured, it needs to be told explicitly about this arrangement. (See the second example below.) \subsubsection{Obtaining the geometry} The disk geometry parameters can be obtained by booting MS-DOS and running the program \path{DPARAM.COM} with the hexadecimal BIOS code of the drive as its argument, e.g. \verb"dparam 0x80" for the first hard disk. It displays the number of sectors per track, the number of heads per cylinder and the number of cylinders. All three numbers are one-based. Alternatively, the geometry may also be determined by reading the information presented by the ``setup'' section of the ROM-BIOS or by using certain disk utilities under operating systems accessing the disk through the BIOS. \subsubsection{Specifying the geometry} \label{diskspec} Disk geometry parameters are specified in the options section of the configuration file. Each disk parameter section begins with \craw{disk=}\meta{disk\_device}, similar to the way how boot images are specified. It is suggested to group disk parameter sections together, preferably at the beginning or the end of the options section. For each disk, the following variables can be specified: \begin{description} \item[\craw{bios=}\meta{bios\_device\_code}] Is the number the BIOS uses to refer to that device. Normally, it's \raw{0x80} for the first hard disk and \raw{0x81} for the second hard disk. Note that hexadecimal numbers have to begin with ``0x''. If \craw{bios} is omitted, \LILO\ tries to ``guess'' that number. \item[\craw{sectors=}\meta{sectors}] and \item[\craw{heads=}\meta{heads}] specify the number of sectors per track and the number of heads, i.e. the number of tracks per cylinder. Both parameters have to be either specified together or they have to be entirely omitted. If omitted, \LILO\ tries to obtain that geometry information from the kernel. \item[\craw{cylinders=}\meta{cylinders}] Specifies the number of cylinders. This value is only used for sanity checks. If \craw{cylinders} is omitted, \LILO\ uses the information obtained from the kernel if geometry information had to be requested in order to determine some other parameter. Otherwise,\footnote{I.e. if the BIOS device code, the number of sectors, the number of heads and the partition start are specified. Note that the number of cylinders may appear to vary if \craw{cylinders} is absent and only some of the partition starts are specified.} it just assumes the number of cylinders to be 1024, which is the cylinder limit imposed by the BIOS. \item[\craw{inaccessible}] Marks the device as inaccessible (for the BIOS). This is useful if some disks on the system can't be read by the BIOS, although \LILO\ ``thinks'' they can. If one accidentally tries to use files located on such disks for booting, the map installer won't notice and the system becomes unbootable. The most likely use of \craw{inaccessible} is to prevent repetition after experiencing such a situation once. No other variables may be specified if a device is configured as \craw{inaccessible}. \end{description} Additionally, partition subsections can be added with \craw{partition=}\meta{partition\_device}. Each partition section can contain only one variable: \begin{description} \item[\craw{start=}\meta{partition\_offset}] Specifies the zero-based number of the start sector of that partition. The whole disk always has a partition offset of zero. The partition offset is only necessary when using devices for which the kernel does not provide that information, e.g. CD-ROMs. \end{description} Examples: \begin{verbatim} disk = /dev/sda bios = 0x80 sectors = 32 heads = 64 cylinders = 632 partition = /dev/sda1 start = 2048 partition = /dev/sda2 start = 204800 partition = /dev/sda3 start = 500000 partition = /dev/sda4 start = 900000 \end{verbatim} \begin{verbatim} disk = /dev/sda bios = 0x80 disk = /dev/hda bios = 0x81 \end{verbatim} \subsection{Partition table manipulation} \label{ptman} Some non-Linux operating systems obtain information about their partitions (e.g. their equivalent of the root file system) from the partition table. If more than one such operating system is installed on a PC, they may have conflicting interpretations of the content of the partition table. Those problems can be avoided by changing the partition table, depending on which operating system is being booted. Partition table changes are specified in a \craw{change} section in the configuration file section describing the foreign operating system. Note that \craw{change} sections are only accepted if the build-time option \raw{REWRITE\_TABLE} is set. The \craw{change} section contains subsections for each partition whose table entry needs to be modified. Partitions are specified with \craw{partition=}\meta{device\_name} Changes are applied in the sequence in which they appear in the configuration file. Configurations containing changes that are redundant either by repeating a previous change or by changing its result further are invalid and refused by the map installer. Internally, all changes are expressed as rules which specify the location (disk and offset in the partition table), the value this location must contain before the change, and the value that has to be stored. As a safety measure, the rule is ignored if the previous value is found to be different. \subsubsection{Partition activation} This option is intended for booting systems which determine their boot partition by examining the active flag in the partition table. The flag is enabled with \craw{activate} and disabled with \craw{deactivate}. Note that only the current partition is affected. \LILO\ does not automatically change the active flags of other partitions and it also allows more than one partition to be active at the same time. Example: \begin{verbatim} other = /dev/sda4 label = sco change partition = /dev/sda4 activate partition = /dev/sda3 deactivate \end{verbatim} \subsubsection{Partition type change rules} \label{ptcr} Partition type changes are normally a transition between two possible values, e.g. a typical convention is to set the lowest bit in the upper nibble of the partition type (i.e. 0x10) in order to ``hide'', and to clear it to ``unhide'' a partition. \LILO\ performs these changes based on a set of rules. Each rule defines the name of a partition type, its normal value, and the value when hidden. Those rules are defined in the options section of the configuration file. The section defining them begins with \craw{change-rules}. The following options and variables can appear in the section: \begin{description} \item[\craw{reset}] Removes all previously defined rules. This is needed if a user doesn't wish to use the pre-defined rules (see below). \item[\craw{type=}\meta{name}] Adds a rule for the type with the specified name. Type names are case-insensitive. The values are defined with \craw{normal=}\meta{byte} and \craw{hidden=}\meta{byte}. Values can be specified as decimal or as hexadecimal numbers with a leading \raw{0x}. If only one of the values is present, the other value is assumed to be the same number, but with the most significant bit inverted. \end{description} \LILO\ pre-defines rules for the three partition types of DOS partitions. The following example removes the pre-defined rules and creates them again: \begin{verbatim} change-rules reset type = DOS12 normal = 0x01 hidden = 0x11 type = DOS16_small normal = 4 # hidden is 0x14 type = DOS16_big hidden = 0x16 \end{verbatim} \subsubsection{Partition type changes} \label{ptch} Partition type changes are specified in the partition section as \craw{set=}\meta{name}\craw{\_}\meta{state}, where \meta{name} is the name of the partition type, and \meta{state} is its state, i.e. \craw{normal} or \craw{hidden}. Example: \begin{verbatim} other = /dev/sda3 label = dos change partition = /dev/sda2 set = dos16_big_normal partition = /dev/sda3 activate set = DOS16_big_normal \end{verbatim} Only one \craw{set} variable is allowed per partition section. In the rare event that more than one \craw{set} variable is needed, further partition sections can be used. \subsection{Keyboard translation} \label{keytab} The PC keyboard emits so-called scan codes, which are basically key numbers. The BIOS then translates those scan codes to the character codes of the characters printed on the key-caps. By default, the BIOS normally assumes that the keyboard has a US layout. Once an operating system is loaded, this operating system can use a different mapping. At boot time, \LILO\ only has access to the basic services provided by the BIOS and therefore receives the character codes for an US keyboard. It provides a simple mechanism to re-map the character codes to what is appropriate for the actual layout.\footnote{The current mechanism isn't perfect, because it sits on top of the scan code to character code translation performed by the BIOS. This means that key combinations that don't produce any useful character on the US keyboard will be ignored by \LILO. The advantage of this approach is its simplicity.} \subsubsection{Compiling keyboard translation tables} \LILO\ obtains layout information from the keyboard translation tables Linux uses for the text console. They are usually stored in \path{/usr/lib/kbd/keytables}. \LILO\ comes with a program \name{keytab-lilo.pl} that reads those tables and generates a table suitable for use by the map installer. \name{keytab-lilo.pl} invokes the program \name{loadkeys} to print the tables in a format that is easy to parse.\footnote{On some systems, only root can execute \name{loadkeys}. It is then necessary to run \name{keytab-lilo.pl} as root too.} \name{keytab-lilo.pl} is used as follows: \begin{command} keytab-lilo.pl \unit{\[ -p \meta{old\_code}=\meta{new\_code} \] $\ldots$} \unit{\[\meta{path}\]\meta{default\_layout}\[.\meta{extension}\] \]} \\ \unit{\[\meta{path}\]\meta{kbd\_layout}\[.\meta{extension}\] \]} \end{command} \begin{description} \item[\raw{-p \meta{old\_code}=\meta{new\_code}}]~\\ Specifies corrections (``patches'') to the mapping obtained from the translation table files. E.g. if pressing the upper case ``A'' should yield an at sign, \verb"-p 65=64" would be used. The \raw{-p} option can be repeated any number of times. The codes can also be given as hexadecimal or as octal numbers if they are prefixed with \verb"0x" or \verb"0", respectively. \item[\meta{path}] The directory in which the file resides. The default path is \path{/usr/lib/kbd/keytables}. \item[\meta{extension}] Usually the trailing \path{.map}, which is automatically added if the file name doesn't contain dots. \item[\meta{default\_layout}] Is the layout which specifies the translation by the BIOS. If none is specified, \path{us} is assumed. \item[\meta{kbd\_layout}] Is the actual layout of the keyboard. \end{description} \name{keytab-lilo.pl} writes the resulting translation table as a binary string to standard output. Such tables can be stored anywhere with any name, but the suggested naming convention is \path{/boot/\meta{kbd}.ktl} (``\underline{K}eyboard \underline{T}able for \underline{L}ilo''), where \meta{kbd} is the name of the keyboard layout. Example: \begin{verbatim} keytab-lilo.pl de >/boot/de.ktl \end{verbatim} \subsubsection{Using keyboard translation tables} The keyboard translation table file is specified with the global configuration option \raw{keytable=\meta{table\_file}}. The complete name of the file has to be given. Example: \begin{verbatim} keytable = /boot/de.klt \end{verbatim} \newpage \section{Installation and updates} \subsection{Installation} This section describes the installation of \LILO. See section \ref{deinst} for how to uninstall \LILO. \subsubsection{Compatibility} The kernel header files have to be in \path{/usr/include/linux} and the kernel usually has to be configured by running \raw{make config} before \LILO\ can be compiled. \path{/bin/sh} has to be a real Bourne shell. \name{bash} is sufficiently compatible, but some \name{ksh} clones may cause problems. A file named \path{INCOMPAT} is included in the distribution. It describes incompatibilities to older versions of \LILO\ and may also contain further compatibility notes. \subsubsection{Quick installation} \label{quickinst} If you want to install \LILO\ on your hard disk and if you don't want to use all its features, you can use the quick installation script. Read \path{QuickInst} for details. \name{QuickInst} can only be used for first-time installations or to entirely replace an existing installation, \emphasize{not} to update or modify an existing installation of \LILO. Be sure you've extracted \LILO\ into a directory that doesn't contain any files of other \LILO\ installations. \subsubsection{Files} Some of the files contained in \path{lilo-21.tar.gz}: \begin{description} \item[\path{lilo/README}]~\\ This documentation in plain ASCII format. Some sections containing complex tables are only included in the \LaTeX\ version in \path{doc/user.tex} \item[\path{lilo/INCOMPAT}]~\\ List of incompatibilities to previous versions of \LILO. \item[\path{lilo/CHANGES}]~\\ Change history. \item[\path{lilo/VERSION}]~\\ The version number of the respective release. \item[\path{lilo/QuickInst}]~\\ Quick installation script. \item[\path{lilo/lilo-\meta{version}.lsm}]~\\ The LSM (``\underline{L}inux \underline{S}oftware \underline{M}ap'') entry of the respective \LILO\ release. \item[\path{lilo/Makefile}]~\\ Makefile to generate everything else. \item[\path{lilo/*.c}, \path{lilo/*.h}]~\\ LILO map installer C source and common header files. \item[\path{lilo/*.S}]~\\ LILO boot loader assembler source. \item[\path{lilo/activate.c}]~\\ C source of a simple boot partition setter. \item[\path{lilo/dparam.s}]~\\ Assembler source of a disk parameter dumper. \item[\path{lilo/mkdist}]~\\ Shell script used to create the current \LILO\ distribution. \item[\path{lilo/keytab-lilo.pl}]~\\ Perl script to generate keyboard translation tables. \item[\path{lilo/doc/README}]~\\ Description of how to generate the documentation. \item[\path{lilo/doc/Makefile}]~\\ Makefile used to convert the \LaTeX\ source into either DVI output or the plain ASCII README file. \item[\path{lilo/doc/user.tex}]~\\ \LaTeX\ source of \LILO's user's guide (this document). \item[\path{lilo/doc/tech.tex}]~\\ \LaTeX\ source of \LILO's technical overview. \item[\path{lilo/doc/*.fig}]~\\ Various \name{xfig} pictures used in the technical overview. \item[\path{lilo/doc/fullpage.sty}]~\\ Style file to save a few square miles of forest. \item[\path{lilo/doc/rlatex}]~\\ Shell script that invokes \LaTeX\ repeatedly until all references have settled. \item[\path{lilo/doc/t2a.pl}]~\\ \name{Perl} script to convert the \LaTeX\ source of the user's guide to plain ASCII. \end{description} Files created after \raw{make} in \path{lilo/} (among others): \begin{description} \item[\path{lilo/boot.b}]~\\ Combined boot sector. \raw{make install} puts this file into \path{/boot} \item[\path{lilo/chain.b}]~\\ Generic chain loader. \raw{make install} puts this file into \path{/boot} \item[\path{lilo/os2\_d.b}]~\\ Chain loader to load \name{OS/2} from the second hard disk. \raw{make install} puts this file into \path{/boot} \item[\path{lilo/lilo}]~\\ \LILO\ (map) installer. \raw{make install} puts this file into \path{/sbin} \item[\path{lilo/activate}]~\\ Simple boot partition setter. \item[\path{lilo/dparam.com}]~\\ MS-DOS executable of the disk parameter dumper. \end{description} \subsubsection{Normal first-time installation} \label{install} First, you have to install the \LILO\ files: \begin{itemize} \item extract all files from \path{lilo-\meta{version}.tar.gz} in a new directory.\footnote{E.g. \path{/usr/src/lilo}} \item configure the \path{Makefile} (see section \ref{cfgmf}) \item run\quad\raw{make}\quad to compile and assemble all parts. \item run\quad\raw{make install}\quad to copy all \LILO\ files to the directories where they're installed. \path{/sbin} should now contain the file \path{lilo}, \path{/usr/sbin} should contain \path{keytab-lilo.pl}, and \path{/boot} should contain \path{boot.b}, \path{chain.b}, and \path{os2\_d.b}. \end{itemize} If you want to use \LILO\ on a non-standard disk, you might have to determine the parameters of your disk(s) and specify them in the configuration file. See section \ref{diskgeo} for details. If you're using such a non-standard system, the next step is to test \LILO\ with the boot sector on a floppy disk: \begin{itemize} \item insert a blank (but low-level formatted) floppy disk into \path{/dev/fd0}. \item run \raw{echo image=\meta{kernel\_image}}\verb" |"\\ \raw{/sbin/lilo -C - -b /dev/fd0 -v -v -v} \\ If you've already installed \LILO\ on your system, you might not want to overwrite your old map file. Use the \raw{-m} option to specify an alternate map file name. \item reboot. \LILO\ should now load its boot loaders from the floppy disk and then continue loading the kernel from the hard disk. \end{itemize} Now, you have to decide, which boot concept you want to use. Let's assume you have a Linux partition on \path{/dev/hda2} and you want to install your \LILO\ boot sector there. The DOS-MBR loads the \LILO\ boot sector. \begin{itemize} \item get a working boot disk, e.g. an install or recovery disk. Verify that you can boot with this setup and that you can mount your Linux partition(s) with it. \item if the boot sector you want to overwrite with \LILO\ is of any value (e.g. it's the MBR or if it contains a boot loader you might want to use if you encounter problems with \LILO), you should mount your boot disk and make a backup copy of your boot sector to a file on that floppy, e.g. \verb"dd if=/dev/hda of=/fd/boot_sector bs=512 count=1" \item create the configuration file \path{/etc/lilo.conf}, e.g. \\ \meta{global settings} \\ \meta{image specification} \\ \verb" "\meta{per-image options} \\ $\ldots$ \\ Be sure to use absolute paths for all files. Relative paths may cause unexpected behaviour when using the \raw{-r} option. \item now, you can check what \LILO\ would do if you were about to install it on your hard disk: \\ \verb"/sbin/lilo -v -v -v -t" \item if you need some additional boot utility (i.e. \name{BOOTACTV}), you should install that now \item run \path{/sbin/lilo} to install \LILO\ on your hard disk \item if you have to change the active partition, use \name{fdisk} or \name{activate} to do that \item reboot \end{itemize} \subsubsection{Build-time configuration} \label{cfgmf} Certain build-time parameters can be configured. They can either be edited in the top-level \path{Makefile} or they can be stored in a file \path{/etc/lilo.defines}. Settings in the \path{Makefile} are ignored if that file exists. The following items can be configured: \begin{description} \item[\raw{BEEP}] Enables beeping after displaying ``LILO''. This is useful on machines which don't beep at the right time when booting and when working over a serial console. This option is disabled by default. \item[\raw{IGNORECASE}] Makes image name matching case-insensitive, i.e. ``linux'' and ``Linux'' are identical. This option is enabled by default. Note that password matching is always case-sensitive. \item[\raw{LARGE\_EDBA}] Loads \LILO\ at a lower address in order to leave more space for the EBDA (Extended BIOS Data Area). This is necessary on some recent MP systems. Note that enabling \raw{LARGE\_EDBA} reduces the maximum size of ``small'' images (e.g. ``Image'' or ``zImage''). \item[\raw{NO1STDIAG}] Do not generate diagnostics on read errors in the first stage boot loader. This avoids possibly irritating error codes if the disk controller has transient read problems. This option is disabled by default. \item[\raw{NODRAIN}] The boot loader empties the keyboard buffer when starting, because it may contain garbage on some systems. Draining the keyboard buffer can be disabled by setting the \raw{NODRAIN} option. \raw{NODRAIN} is disabled by default. \item[\raw{NOINSTDEF}] If the option \craw{install} is omitted, don't install a new boot sector, but try to modify the old boot sector instead. This option is disabled by default. \item[\raw{ONE\_SHOT}] Disables the command-line timeout (configuration variable \craw{timeout}) if any key is pressed. This way, very short timeouts can be used if \craw{prompt} is set. \raw{ONE\_SHOT} is disabled by default. \item[\raw{READONLY}] Disallows overwriting the default command line sector of the map file. This way, command lines set with \raw{-R} stay in effect until they are explicitly removed. \raw{READONLY} also disables \craw{lock}, \craw{fallback}, and everything enabled by \raw{REWRITE\_TABLE}. This option is disabled by default. \item[\raw{REWRITE\_TABLE}] Enables rewriting the partition table at boot time. This may be necessary to boot certain operating systems who expect the active flag to be set on their partition or who need changes in partition types. See also section \ref{ptman}. This option is \emphasize{dangerous} and it is disabled by default. \item[\raw{USE\_TMPDIR}] Use the directory indicated in the \raw{TMPDIR} environment variable when creating temporary device files. If \raw{TMPDIR} is not set or if \LILO\ is compiled without \raw{USE\_TMPDIR}, temporary device files are created in \path{/tmp}.\footnote{Note that, while honoring \raw{TMPDIR} is the ``right'' thing to do, the fact that \LILO\ has to create temporary device files at all may indicate that the operating environment is not completely set up, so \raw{TMPDIR} may point to an invalid location.} This option is disabled by default. \item[\raw{VARSETUP}] Enables the use of variable-size setup segments. This option is enabled by default and is only provided to fall back to fixed-size setup segments in the unlikely case of problems when using prehistoric kernels. \item[\raw{XL\_SECS=\meta{sectors}}] Enable support for extra large (non-standard) floppy disks. The number of sectors is set in the BIOS disk parameter table to the specified value. Note that this hack may yield incorrect behaviour on some systems. This option is disabled by default. \end{description} \path{/etc/lilo.defines} should be used if one wishes to make permanent configuration changes. The usual installation procedures don't touch that file. Example: \begin{verbatim} -DIGNORECASE -DONE_SHOT \end{verbatim} After changing the build-time configuration, \LILO\ has to be recompiled with the following commands: \begin{verbatim} make distclean make \end{verbatim} \subsubsection{Floppy disk installation} In some cases\footnote{E.g. if no hard disk is accessible through the BIOS.}, it may be desirable to install \LILO\ on a floppy disk in a way that it can boot a kernel without accessing the hard disk. The basic procedure is quite straightforward (see also section \ref{broken}): \begin{itemize} \item a file system has to be created on the file system \item the kernel and \path{boot.b} have to be copied to the floppy disk \item \path{/sbin/lilo} has to be run to create the map file \end{itemize} This can be as easy as \begin{verbatim} /sbin/mke2fs /dev/fd0 [ -d /fd ] || mkdir /fd mount /dev/fd0 /fd cp /boot/boot.b /fd cp /zImage /fd echo image=/fd/zImage label=linux | /sbin/lilo -C - -b /dev/fd0 -i /fd/boot.b -c -m /fd/map umount /fd \end{verbatim} The command line of \path{/sbin/lilo} is a little tricky. \raw{-C -} takes the configuration from standard input (naturally, one could also write the configuration into a file), \raw{-b /dev/fd0} specifies that the boot sector is written to the floppy disk, \raw{-i /fd/boot.b} takes the first and second stage loaders from the floppy, \raw{-c} speeds up the load process, and \raw{-m /fd/map} puts the map file on the floppy too. \subsection{Updates} \LILO\ is affected by updates of kernels, the whole system and (trivially) of \LILO\ itself. Typically, only \path{/sbin/lilo} has to be run after any of those updates and everything will be well again (at least as far as \LILO\ is concerned). \subsubsection{\LILO\ update} \label{liloupd} Before updating to a new version of \LILO, you should read at least the file \path{INCOMPAT} which describes incompatibilities with previous releases. After that, the initial steps are the same as for a first time installation: extract all files, configure the \path{Makefile}, run \raw{make} to build the executables and run \raw{make install} to install the files. The old versions of \path{boot.b}, \path{chain.b}, etc. are automatically renamed to \path{boot.old}, \path{chain.old}, etc. This is done to ensure that you can boot even if the installation procedure does not finish. \path{boot.old}, \path{chain.old}, etc. can be deleted after the map file is rebuilt. Because the locations of \path{boot.b}, \path{chain.b}, etc. have changed and because the map file format may be different too, you have to update the boot sector and the map file. Run \path{/sbin/lilo} to do this. \subsubsection{Kernel update} \label{kernupd} Whenever any of the kernel files that are accessed by \LILO\ is moved or overwritten, the map has to be re-built.\footnote{It is advisable to keep a second, stable, kernel image that can be booted if you forget to update the map after a change to your usual kernel image.} Run \path{/sbin/lilo} to do this. The kernel has a make target ``zlilo'' that copies the kernel to \path{/vmlinuz} and runs \path{/sbin/lilo}. \subsubsection{System upgrade} Normally, system upgrades (i.e. installation or removal of packages, possibly replacement of a large part of the installed binaries) do not affect \LILO. Of course, if a new kernel is installed in the process, the normal kernel update procedure has to be followed (see section \ref{kernupd}). Also, if kernels are removed or added, it may be necessary to update the configuration file. If \LILO\ is updated by this system upgrade, \path{/sbin/lilo} should be run before booting the upgraded system. It is generally a good idea not to rely on the upgrade procedure to perform this essential step automatically. However, system upgrades which involve removal and re-creation of entire partitions (e.g. \path{/}, \path{/usr}, etc.) are different. First, they should be avoided, because they bear a high risk of losing other critical files, e.g. the \path{/etc/XF86Config} you've spent the last week fiddling with. If an upgrade really has to be performed in such a brute-force way, this is equal with total removal of \LILO, followed by a new installation. Therefore, the procedures described in the sections \ref{deinst} and \ref{liloupd} have to be performed. If you've forgotten to make a backup copy of \path{/etc/lilo.conf} before the destructive upgrade, you might also have to go through section \ref{install} again. \subsection{\LILO\ de-installation} \label{deinst} In order to stop \LILO\ from being invoked when the system boots, its boot sector has to be either removed or disabled. All other files belonging to \LILO\ can be deleted \emphasize{after} removing the boot sector, if desired.% \footnote{Backup copies of old boot sectors may be needed when removing the boot sector. They are stored in \path{/boot}.} Again, \emphasize{when removing Linux, \LILO\ must be de-installed before (!) its files (\path{/boot}, etc.) are deleted.} This is especially important if \LILO\ is operating as the MBR. LILO 14 (and newer) can be de-installed with \verb"lilo -u". If LILO 14 or newer is currently installed, but the first version of LILO installed was older than 14, \verb"lilo -U" may work. When using \verb"-U", the warning at the end of this section applies. If \LILO's boot sector has been installed on a primary partition and is booted by the ``standard'' MBR or some partition switcher program, it can be disabled by making a different partition active. MS-DOS' FDISK, Linux \name{fdisk} or \LILO's \name{activate} can do that. If \LILO's boot sector is the master boot record (MBR) of a disk, it has to be replaced with a different MBR, typically MS-DOS' ``standard'' MBR. When using MS-DOS 5.0 or above, the MS-DOS MBR can be restored with \verb"FDISK /MBR". This only alters the boot loader code, not the partition table. \LILO\ automatically makes backup copies when it overwrites boot sectors. They are named \path{/boot/boot.\meta{nnnn}}, with \meta{nnnn} corresponding to the device number, e.g. \raw{0300} is \path{/dev/hda}, \raw{0800} is \path{/dev/sda}, etc. Those backups can be used to restore the old MBR if no easier method is available. The commands are \\ \raw{dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1} or \\ \raw{dd if=/boot/boot.0800 of=/dev/sda bs=446 count=1} \\ respectively. \emphasize{WARNING:} Some Linux distributions install \path{boot.\meta{nnnn}} files from the system where the distribution was created. Using those files may yield unpredictable results. Therefore, the file creation date should be carefully checked. \subsection{Installation of other operating systems} \label{instoth} Some other operating systems (e.g. MS-DOS 6.0) appear to modify the MBR in their install procedures. It is therefore possible that \LILO\ will stop to work after such an installation and Linux has to be booted from floppy disk. The original state can be restored by either re-running \path{/sbin/lilo } (if \LILO\ is installed as the MBR) or by making \LILO's partition active (if it's installed on a primary partition). It is generally a good idea to install \LILO\ after the other operating systems have been installed. E.g. OS/2 is said to cause trouble when attempting to add it to an existing Linux system. (However, booting from floppy and running \path{/sbin/lilo} should get around most interferences.) Typically, the new operating system then has to be added to \LILO's configuration (and \path{/sbin/lilo} has to be re-run) in order to boot it. See also section \ref{othpro} for a list of known problems with some other operating systems. \newpage \section{Troubleshooting} All parts of \LILO\ display some messages that can be used to diagnose problems. \subsection{Map installer warnings and errors} Most messages of the map installer (\path{/sbin/lilo}) should be self-explanatory. Some messages that indicate common errors are listed below. They are grouped into fatal errors and warnings (non-fatal errors). \subsubsection{Fatal errors} \begin{description} \item[\raw{Boot sector of \meta{device\_name} doesn't have a boot % signature}] \item[\raw{Boot sector of \meta{device\_name} doesn't have a LILO % signature}]~\\ The sector from which \LILO\ should be uninstalled doesn't appear to be a \LILO\ boot sector. \item[\raw{Can't put the boot sector on logical partition \meta{number}}]~\\ An attempt has been made to put \LILO's boot sector on the current root file system partition which is on a logical partition. This usually doesn't have the desired effect, because common MBRs can only boot primary partitions. This check can be bypassed by explicitly specifying the boot partition with the \raw{-b} option or by setting the configuration variable \craw{boot}. \item[\raw{Checksum error}]~\\ The descriptor table of the map file has an invalid checksum. Refresh the map file \emphasize{immediately} ! \item[\raw{Device 0x\meta{number}: Configured as inaccessible.}]~\\ There is a \craw{disk} section entry indicating that the device is inaccessible from the BIOS. You should check carefully that all files \LILO\ tries to access when booting are on the right device. \item[\raw{Device 0x\meta{number}: Got bad geometry \meta{sec}/\meta{hd}/% \meta{cyl}}]~\\ The device driver for your SCSI controller does not support geometry detection. You have to specify the geometry explicitly (see section \ref{diskgeo}). \item[\raw{Device 0x\meta{number}: Invalid partition table, entry % \meta{number}}]~\\ The 3D and linear addresses of the first sector of the specified partition don't correspond. This is typically caused by partitioning a disk with a program that doesn't align partitions to tracks and later using PC/MS-DOS or OS/2 on that disk. \LILO\ can attempt to correct the problem, see page \pageref{fix-table}. \item[\raw{Device 0x\meta{number}: Partition type 0x\meta{number} does not seem suitable for a LILO boot sector}]~\\ The location where the \LILO\ boot sector should be placed does not seem to be suitable for that. (See also also section \ref{diskorg}). You should either adjust the partition type to reflect the actual use or put the boot sector on a different partition. This consistency check only yields a warning (i.e. \LILO\ continues) if the option \craw{ignore-table} is set. \item[\raw{\meta{device\_name} is not a valid partition device}]~\\ The specified device is either not a device at all, a whole disk, or a partition on a different disk than the one in whose section its entry appears. \item[\raw{\meta{device\_name} is not a whole disk device}]~\\ Only the geometry of whole disks (e.g. \path{/dev/hda}, \path{/dev/sdb}, etc.) can be redefined when using \craw{disk} sections. \item[\raw{DISKTAB and DISK are mutually exclusive}]~\\ You cannot use a \path{disktab} file and disk geometry definitions in the configuration file at the same time. Maybe \path{/etc/disktab} was accidentally used, because that's the default for backward-compatibility. You should delete \path{/etc/disktab} after completing the transition to \craw{disk} sections. \item[\raw{Duplicate entry in partition table}]~\\ A partition table entry appears twice. The partition table has to be fixed with \name{fdisk}. \item[\raw{Duplicate geometry definition for \meta{device\_name}}]~\\ A disk or partition geometry definition entry for the same device appears twice in the configuration file. Note that you mustn't write a partition section for the whole disk --- its start sector is always the first sector of the disk. \item[\raw{First sector of \meta{device} doesn't have a valid boot % signature}]~\\ The first sector of the specified device does not appear to be a valid boot sector. You might have confused the device name.\footnote{Because different partition programs may display the partitions in a different order, it is possible that what you think is your first partition isn't \path{/dev/hda1}, etc. A good method to verify the content of a partition is to try to mount it.} \item[\raw{geo\_comp\_addr: Cylinder \meta{number} beyond end of media % (\meta{number})}]~\\ A file block appears to be located beyond the last cylinder of the disk. This probably indicates an error in the disk geometry specification (see section \ref{diskgeo}) or a file system corruption. \item[\raw{geo\_comp\_addr: Cylinder number is too big (\meta{number} $>$ 1023)}]~\\ Blocks of a file are located beyond the 1024th cylinder of a hard disk. \LILO\ can't access such files, because the BIOS limits cylinder numbers to the range 0$\ldots$1023. Try moving the file to a different place, preferably a partition that is entirely within the first 1024 cylinders of the disk. \item[\raw{Hole found in map file (\meta{location})}]~\\ The map installer is confused about the disk organization. Please report this error. \item[\raw{\meta{item} doesn't have a valid LILO signature}]~\\ The specified item has been located, but is not part of \LILO. \item[\raw{\meta{item} has an invalid stage code (\meta{number})}]~\\ The specified item has probably been corrupted. Try re-building \LILO. \item[\raw{\meta{item} is version \meta{number}. Expecting version% \meta{number}.}]~\\ The specified entity is either too old or too new. Make sure all parts of \LILO\ (map installer, boot loaders and chain loaders) are from the same distribution. \footnote{The expected version number may be different from the version number of the \LILO\ package, because file version numbers are only increased when the file formats change.} \item[\raw{Kernel \meta{name} is too big}]~\\ The kernel image (without the setup code) is bigger than 512 kbytes (or 448 kbytes, if built with \raw{LARGE\_EDBA}). \LILO\ would overwrite itself when trying to load such a kernel. This limitation only applies to old kernels which are loaded below 0x10000 (e.g. ``Image'' or ``zImage''). Try building the kernel with ``bzImage''. If this is undesirable for some reason, try removing some unused drivers and compiling the kernel again. This error may also occur if the kernel image is damaged or if it contains trailing ``junk'', e.g. as the result of copying an entire boot floppy to the hard disk. \item[\raw{LOCK and FALLBACK are mutually exclusive}]~\\ Since \craw{lock} and \craw{fallback} both change the default command line, they can't be reasonably used together. \item[\raw{Map \meta{path} is not a regular file.}]~\\ This is probably the result of an attempt to omit writing a map file, e.g. with \raw{-m /dev/null}. The \raw{-t} option should be used to accomplish this. \item[\raw{Must specify SECTORS and HEADS together}]~\\ It is assumed that disks with a ``strange'' number of sectors will also have a ``strange'' number of heads. Therefore, it's all or nothing. \item[\raw{No geometry variables allowed if INACCESSIBLE}]~\\ If a device is configured as \craw{inaccessible} (see section \ref{diskspec}), its \craw{disk} section must not contain any geometry variables. \item[\raw{No image \meta{image} is defined}]~\\ The command line specified either with the \raw{-R} option or with \craw{fallback} does not contain the name of a valid image. Note that optional images which have not been included in the map file are not considered as valid. \item[\raw{Partition entry not found}]~\\ The partition from which an other operating system should be booted isn't listed in the specified partition table. This either means that an incorrect partition table has been specified or that you're trying to boot from a logical partition. The latter usually doesn't work. You can bypass this check by omitting the partition table specification (e.g. omitting the variable \craw{table}). \item[\raw{Single-key clash: "\meta{name}" vs. "\meta{name}"}]~\\ The specified image labels or aliases conflict because one of them is a single character and has the \craw{single-key} option set, and the other name begins with that character. \item[\raw{Sorry, don't know how to handle device \meta{number}}]~\\ \LILO\ uses files that are located on a device for which there is no easy way to determine the disk geometry. Such devices have to be explicitly described, see section \ref{diskgeo}. \item[\raw{This LILO is compiled READONLY and doesn't support $\ldots$}]~\\ If \LILO\ is not allowed to write to the disk at boot time (see section \ref{cfgmf}), options like \craw{lock} and \craw{fallback} are unavailable. \item[\raw{This LILO is compiled without REWRITE\_TABLE and doesn't support $\ldots$}]~\\ If \LILO\ is not allowed to rewrite partition tables at boot time (see section \ref{ptman}), options like \craw{activate} and \craw{set} (in a \craw{change} section) are unavailable. You may also get this error if \LILO\ is compiled with \raw{READONLY} enabled. \item[\raw{Timestamp in boot sector of \meta{device} differs from date of % \meta{file}}]~\\ The backup copy of the boot sector does not appear to be an ancestor of the current boot sector. If you are absolutely sure that the boot sector is indeed correct, you can bypass this check by using \raw{-U} instead of \raw{-u}. \item[\raw{Trying to map files from unnamed device 0x\meta{number} (NFS ?)}]~\\ This is probably the same problem as described below, only with the root file system residing on NFS. \item[\raw{Trying to map files from your RAM disk. Please check -r option or ROOT environment variable.}]~\\ Most likely, you or some installation script is trying to invoke \LILO\ in a way that some of the files is has to access reside on the RAM disk. Normally, the \raw{ROOT} environment variable should be set to the mount point of the effective root device if installing \LILO\ with a different root directory. See also sections \ref{creupd} and \ref{install}. \item[\raw{VGA mode presetting is not supported by your kernel.}]~\\ Your kernel sources appear to be very old ('93 ?). \LILO\ may work on your system if you remove the \craw{vga} option. \item[\raw{write \meta{item}: \meta{error\_reason}}]~\\ The disk is probably full or mounted read-only. \end{description} \subsubsection{Warnings} \label{warnings} Messages labeled with ``Warning'' can be turned off with the \craw{nowarn} option. \begin{description} \item[\raw{FIGETBSZ \meta{file\_name}: \meta{ error\_reason}}]~\\ The map installer is unable to determine the block size of a file system. It assumes a block size of two sectors (1kB). \item[\raw{Ignoring entry '\meta{variable\_name}'}]~\\ The command-line option corresponding to the specified variable is set. Therefore, the configuration file entry is ignored. \item[\raw{Setting DELAY to 20 (2 seconds)}]~\\ Because accidentally booting the wrong kernel or operating system may be very inconvenient on systems that are not run from a local display, the minimum delay is two seconds if the \craw{serial} variable is set. \item[\raw{(temp) \meta{item}: \meta{error\_reason}}]~\\ Deleting a temporary file has failed for the specified reason. \item[\raw{Warning: BIOS drive 0x\meta{number} may not be accessible}]~\\ Because most BIOS versions only support two floppies and two hard disks, files located on additional disks may be inaccessible. This warning indicates that some kernels or even the whole system may be unbootable. \item[\raw{Warning: COMPACT may conflict with LINEAR on some systems}]~\\ Please see section \ref{othpro} for a description of this problem. \item[\raw{Warning: \meta{config\_file} should be owned by root}]~\\ In order to prevent users from compromising system integrity, the configuration file should be owned by root and write access for all other users should be disabled. \item[\raw{Warning: \meta{config\_file} should be readable only for root if using PASSWORD}]~\\ Users should not be allowed to read the configuration file when using the \craw{password} option, because then, it contains unencrypted passwords. \item[\raw{Warning: \meta{config\_file} should be writable only for root}]~\\ See ``\raw{Warning: \meta{config\_file} should be owned by root}''. \item[\raw{Warning: device 0x\meta{number} exceeds 1024 cylinder limit}]~\\ A disk or partition exceeds the 1024 cylinder limit imposed by the BIOS. This may result in a fatal error in the current installation run or in later installation runs. See ``\raw{geo\_comp\_addr: Cylinder number is too big (\meta{number} $>$ 1023)}'' for details. \item[\raw{Warning: \meta{device} is not on the first disk}]~\\ The specified partition is probably not on the first disk. \LILO's boot sector can only be booted from the first disk unless some special boot manager is used. \item[\raw{WARNING: The system is unbootable !}]~\\ One of the last installation steps has failed. This warning is typically followed by a fatal error describing the problem. \end{description} \subsection{Boot loader messages} The boot loader generates three types of messages: progress and error messages while it is loading, messages indicating disk access errors, and error messages in response to invalid command-line input. Since messages of the latter type are usually self-explanatory, only the two other categories are explained. \subsubsection{\LILO\ start message} When \LILO\ loads itself, it displays the word ``LILO''. Each letter is printed before or after performing some specific action. If \LILO\ fails at some point, the letters printed so far can be used to identify the problem. This is described in more detail in the technical overview. Note that some hex digits may be inserted after the first ``L'' if a transient disk problem occurs. Unless LILO stops at that point, generating an endless stream of error codes, such hex digits do not indicate a severe problem. \begin{description} \item[\rm (\meta{nothing})] No part of \LILO\ has been loaded. \LILO\ either isn't installed or the partition on which its boot sector is located isn't active. \item[\raw{L \meta{error} $\ldots$}] The first stage boot loader has been loaded and started, but it can't load the second stage boot loader. The two-digit error codes indicate the type of problem. (See also section \ref{bioserr}.) This condition usually indicates a media failure or a geometry mismatch (e.g. bad disk parameters, see section \ref{diskgeo}). \item[\raw{LI}] The first stage boot loader was able to load the second stage boot loader, but has failed to execute it. This can either be caused by a geometry mismatch or by moving \path{/boot/boot.b} without running the map installer. \item[\raw{LIL}] The second stage boot loader has been started, but it can't load the descriptor table from the map file. This is typically caused by a media failure or by a geometry mismatch. \item[\raw{LIL?}] The second stage boot loader has been loaded at an incorrect address. This is typically caused by a subtle geometry mismatch or by moving \path{/boot/boot.b} without running the map installer. \item[\raw{LIL-}] The descriptor table is corrupt. This can either be caused by a geometry mismatch or by moving \path{/boot/map} without running the map installer. \item[\raw{LILO}] All parts of \LILO\ have been successfully loaded. \end{description} \subsubsection{Disk error codes} \label{bioserr} If the BIOS signals an error when \LILO\ is trying to load a boot image, the respective error code is displayed. The following BIOS error codes are known: \begin{description} \item[\raw{0x00}] ``Internal error''. This code is generated by the sector read routine of the \LILO\ boot loader whenever an internal inconsistency is detected. This might be caused by corrupt files. Try re-building the map file. Another possible cause for this error are attempts to access cylinders beyond 1024 while using the \craw{linear} option. See section \ref{broken} for more details and for how to solve the problem. \item[\raw{0x01}] ``Illegal command''. This shouldn't happen, but if it does, it may indicate an attempt to access a disk which is not supported by the BIOS. See also ``Warning: BIOS drive 0x\meta{number} may not be accessible'' in section \ref{warnings}. \item[\raw{0x02}] ``Address mark not found''. This usually indicates a media problem. Try again several times. \item[\raw{0x03}] ``Write-protected disk''. This should only occur on write operations. \item[\raw{0x04}] ``Sector not found''. This typically indicates a geometry mismatch. If you're booting a raw-written disk image, verify whether it was created for disks with the same geometry as the one you're using. If you're booting from a SCSI disk or a large IDE disk, you should check, whether \LILO\ has obtained correct geometry data from the kernel or whether the geometry definition corresponds to the real disk geometry. (See section \ref{diskgeo}.) Removing \craw{compact} may help too. So may adding \craw{lba32} or \craw{linear}. \item[\raw{0x06}] ``Change line active''. This should be a transient error. Try booting a second time. \item[\raw{0x07}] ``Invalid initialization''. The BIOS failed to properly initialize the disk controller. You should control the BIOS setup parameters. A warm boot might help too. \item[\raw{0x08}] ``DMA overrun''. This shouldn't happen. Try booting again. \item[\raw{0x09}] ``DMA attempt across 64k boundary''. This shouldn't happen, but may inicate a disk geometry mis-match. Try omitting the \craw{compact} option. You may need to specify the disk geometry yourself. \item[\raw{0x0C}] ``Invalid media''. This shouldn't happen and might be caused by a media error. Try booting again. \item[\raw{0x10}] ``CRC error''. A media error has been detected. Try booting several times, running the map installer a second time (to put the map file at some other physical location or to write ``good data'' over the bad spot), mapping out the bad sectors/tracks and, if all else fails, replacing the media. \item[\raw{0x11}] ``ECC correction successful''. A read error occurred, but was corrected. \LILO\ does not recognize this condition and aborts the load process anyway. A second load attempt should succeed. \item[\raw{0x20}] ``Controller error''. This shouldn't happen. \item[\raw{0x40}] ``Seek failure''. This might be a media problem. Try booting again. \item[\raw{0x80}] ``Disk timeout''. The disk or the drive isn't ready. Either the media is bad or the disk isn't spinning. If you're booting from a floppy, you might not have closed the drive door. Otherwise, trying to boot again might help. \item[\raw{0xBB}] ``BIOS error''. This shouldn't happen. Try booting again. If the problem persists, removing the \craw{compact} option or adding/removing \craw{linear} or \craw{lba32} might help. \end{description} If the error occurred during a write operation, the error code (two hex digits) is prefixed with a ``W''. Although write errors don't affect the boot process, they might indicate a severe problem, because they usually imply that \LILO\ has tried to write to an invalid location. If spurious write errors occur on a system, it might be a good idea to configure \LILO\ to run read-only (see section \ref{cfgmf}). Generally, invalid geometry and attempts to use more than two disks without a very modern BIOS may yield misleading error codes. Please check carefully if \path{/sbin/lilo} doesn't emit any warnings. Then try using the \craw{linear} or \craw{lba32} option (see section \ref{cfgglo}). \subsection{Other problems} \label{othpro} This section contains a collection of less common problems that have been observed. See also section \ref{instoth} for general remarks on using \LILO\ with other operating systems. Some of the problems are obscure and so are the work-arounds. \begin{itemize} \item If \LILO\ doesn't go away even if you erase its files, format your Linux partition, etc., you've probably installed \LILO\ as your MBR and you've forgotten to deinstall it before deleting its files. See section \ref{deinst} for what you can do now. \item For yet unknown reasons, \LILO\ may fail on some systems with AMI BIOS if the ``Hard Disk Type 47 RAM area'' is set to ``0:300'' instead of ``DOS 1K''. \item Some disk controller BIOSes perform disk geometry/address translations that are incompatible with the way the device's geometry is seen from Linux, i.e. without going through the BIOS. Particularly, large IDE disks and some PCI SCSI controllers appear to have this problem. In such cases, either the translated geometry has to be specified in a \craw{disk} section or the sector address translation can be deferred by using the \craw{linear} option. In a setup where floppies are not normally used for booting, the \craw{linear} approach should be preferred, because this avoids the risk of specifying incorrect numbers. \item OS/2 is said to be bootable from a logical partition with \LILO\ acting as the primary boot selector if \LILO\ is installed on the MBR, the OS/2 BootManager is on an active primary partition and \LILO\ boots BootManager. Putting \LILO\ on an extended partition instead is said to crash the OS/2 FDISK in this scenario. Note that booting \LILO\ from BootManager (so BootManager is the primary selector) or booting OS/2 directly from a primary partition (without BootManager) should generally work. See also section \ref{instoth}. \item Windows NT is reported to be bootable with \LILO\ when \LILO\ acts as the MBR and the Windows NT boot loader is on the DOS partition. However, NT's disk manager complains about LILO's MBR when trying to edit the partition table. \item Some PC UNIX systems (SCO and Unixware have been reported to exhibit this problem) depend on their partition being active. See section \ref{ptman} for how this can be accomplished. \item Future Domain TMC-1680 adapters with the BIOS versions 3.4 and 3.5 assign BIOS device numbers in the wrong order, e.g. on a two-disk system, \path{/dev/sda} becomes \raw{0x81} and \path{/dev/sdb} becomes \raw{0x80}. This can be fixed with the following \craw{disk} section:\\ \verb"disk=/dev/sda bios=0x81 disk=/dev/sdb bios=0x80"\\ Note that this is only valid for a two-disk system. In three-disk systems, \path{/dev/sdc} would become \raw{0x80}, etc. Also, single-disk systems don't have this problem (and the ``fix'' would break them). \item Some BIOSes don't properly recognize disks with an unusual partition table (e.g. without any partition marked active) and refuse to boot from them. This can also affect the second hard disk and the problem may only occur if the system is booted in a particular way (e.g. only after a cold boot). \item On some systems, using \craw{linear} and \craw{compact} or \craw{lba32} and \craw{compact} together leads to a boot failure. The exact circumstances under which this happens are still unknown. \end{itemize} %%beginskip \end{document} %%endskip lilo-24.0/doc/README0000644000175000017500000000261412154430426013001 0ustar adjooadjooPrinting the documentation ========================== You need the following programs to generate a printable file from the LaTeX and FIG sources: - LaTeX - fig2dev from the transfig package (optional) The LaTeX translations of the FIG files are already included in the distribution, so you can print the documentation without fig2dev. WARNING: 'make distclean' removes those pre-built LaTeX files. You can also omit all drawings by typing make dummies . The drawings are only necessary when processing the technical overview document. To run LaTeX just type make -f Makefile.old LaTeX issues many "Overfull \hbox" warnings. They can be safely ignored. LaTeX will be run repeatedly until it stops issuing the message LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. At the end you should get the very old documentation in user.pdf and tech.pdf. Generating user.README ====================== Use the simple tool t2a.pl for converting to ASCII formatted (old) user documentation: perl t2a.pl user.README Online documentation ==================== The (old) documentation can also be found in the web: http://lilo.alioth.debian.org/olddoc/html/user_21-5.html http://lilo.alioth.debian.org/olddoc/pdf/user_21-5.pdf http://lilo.alioth.debian.org/olddoc/html/tech_21-5.html http://lilo.alioth.debian.org/olddoc/pdf/tech_21-5.pdf -- Joachim Wiedorn (2011) lilo-24.0/doc/html/0000755000175000017500000000000012154425774013074 5ustar adjooadjoolilo-24.0/doc/html/user_21-52.html0000644000175000017500000000212311521302503015441 0ustar adjooadjoo

2PC/MS-DOS, DR DOS, OS/2, Windows 95, Windows NT, 386BSD, SCO UNIX, Unixware,

lilo-24.0/doc/html/user_21-53.html0000644000175000017500000000253711521302503015453 0ustar adjooadjoo

3LILO does not know how to read a file system. Instead, the map installer asks the kernel for the physical location of files (e.g. the kernel image(s)) and records that information. This allows LILO to work with most file systems that are supported by Linux.

lilo-24.0/doc/html/user_21-54.html0000644000175000017500000000266111521302503015452 0ustar adjooadjoo

4Most FDISK-type programs don’t believe in booting from an extended partition and refuse to activate it. LILO is accompanied by a simple program (activate) that doesn’t have this restriction. Linux fdisk also supports activating extended partitions.

lilo-24.0/doc/html/user_21-55.html0000644000175000017500000000254211521302503015451 0ustar adjooadjoo

5LILO can be forced to put the boot sector on such a partition by using the -b option or the boot variable. However, only few programs that operate as master boot records support booting from a logical partition.

lilo-24.0/doc/html/user_21-56.html0000644000175000017500000000226711521302503015456 0ustar adjooadjoo

6Other, possibly better known boot switchers, e.g. OS/2 BootManager operate in a similar way. The installation procedures typically vary.

lilo-24.0/doc/html/user_21-57.html0000644000175000017500000000224611521302503015454 0ustar adjooadjoo

7And the author would like to be notified if booting the other operating system(s) doesn’t work with LILO, but if it works with an other boot partition selector.

lilo-24.0/doc/html/user_21-58.html0000644000175000017500000000316611521302503015457 0ustar adjooadjoo

8LOADLIN is available for anonymous FTP from
ftp://tsx-11.mit.edu/pub/linux/dos_utils/lodlinn.tar.gz
ftp://sunsite.unc.edu/pub/Linux/system/boot/dualboot/lodlinn.tgz
BOOT.SYS is available for anonymous FTP from
ftp://ftp.funet.fi/pub/Linux/tools/boot142.zip

lilo-24.0/doc/html/user_21-59.html0000644000175000017500000000301711521302503015453 0ustar adjooadjoo

9LILO can be found in
ftp://tsx-11.mit.edu/pub/linux/packages/lilo/lilo-n.tar.gz
ftp://sunsite.unc.edu/pub/Linux/system/boot/lilo/lilo-n.tar.gz
ftp://lrcftp.epfl.ch/pub/linux/local/lilo/lilo-n.tar.gz

lilo-24.0/doc/html/user_21-510.html0000644000175000017500000000271211521302503015524 0ustar adjooadjoo

10pfdisk is available for anonymous FTP from
ftp://sunsite.unc.edu/pub/Linux/utils/disk-management/pfdisk.tar.Z or
ftp://ftp.funet.fi/pub/Linux/tools/pfdisk.tar.Z
PBOOT can be found in
ftp://ftp.funet.fi/pub/Linux/tools/pboot.zip

lilo-24.0/doc/html/user_21-511.html0000644000175000017500000000222611521302503015525 0ustar adjooadjoo

11However, if only “unimportant” parts of the system are located on the “high” drives, some functionality may be available.

lilo-24.0/doc/html/user_21-512.html0000644000175000017500000000251611521302503015530 0ustar adjooadjoo

12Setting the “system” attribute from DOS on the critical files (e.g. everything in C:\LINUX) may help to protect them from being rearranged. However, the boot floppy should still be ready, just in case.

lilo-24.0/doc/html/user_21-513.html0000644000175000017500000000233411521302503015527 0ustar adjooadjoo

13The default boot image is either the first boot image, the image specified with the default variable, or the image that has been selected at the boot prompt.

lilo-24.0/doc/html/user_21-514.html0000644000175000017500000001361712154344441015550 0ustar adjooadjoo

14This is a list of device numbers of some frequently used devices:

/dev/fd0200/dev/hda1301/dev/sda1801
/dev/fd1201/dev/hda2302/dev/sda2802
/dev/hdb1341/dev/sdb1811
/dev/hdb2342/dev/sdb2812
lilo-24.0/doc/html/user_21-515.html0000644000175000017500000000232111521302503015525 0ustar adjooadjoo

15The device names are hard-coded in the kernel. Therefore, only the “standard” names are supported and some less common devices may not be recognized. In those cases, only numbers can be used.

lilo-24.0/doc/html/user_21-516.html0000644000175000017500000000413111521302503015527 0ustar adjooadjoo

16Options are frequently repeated when a string defined with append or literal is prepended to the parameters typed in by the user. Also, LILO implicitly prepends the options ramdisk, ro, root, or rw when ramdisk, read-only, read-write, or root, respectively, are set in the configuration file. (lock and vga are handled by a different internal mechanism.)

lilo-24.0/doc/html/user_21-517.html0000644000175000017500000000224711521302503015536 0ustar adjooadjoo

20E.g. if your root partition is mounted on /mnt, you can update the map by simply running ROOT=/mnt /mnt/sbin/lilo

lilo-24.0/doc/html/user_21-518.html0000644000175000017500000000246611521302503015542 0ustar adjooadjoo

21-R is typically used in reboot scripts, e.g.
#!/bin/sh
cd /
/sbin/lilo -R "$*" && reboot

lilo-24.0/doc/html/user_21-519.html0000644000175000017500000000222011521302503015527 0ustar adjooadjoo

22The boot sector is loaded by LILO’s secondary boot loader before control is passed to the code of chain.b.

lilo-24.0/doc/html/user_21-520.html0000644000175000017500000000263011521302503015524 0ustar adjooadjoo

23So you should be very suspicious if the operating system requires any specific configuration or even drivers to use the disk it is booted from. Since there is a general trend to use optimized drivers to fully exploit the hardware capabilities (e.g. non-blocking disk access), booting systems from the second disk may become increasingly difficult.

lilo-24.0/doc/html/user_21-521.html0000644000175000017500000000250711521302503015530 0ustar adjooadjoo

24I.e. if the BIOS device code, the number of sectors, the number of heads and the partition start are specified. Note that the number of cylinders may appear to vary if cylinders is absent and only some of the partition starts are specified.

lilo-24.0/doc/html/user_21-522.html0000644000175000017500000000253111521302503015526 0ustar adjooadjoo

25The current mechanism isn’t perfect, because it sits on top of the scan code to character code translation performed by the BIOS. This means that key combinations that don’t produce any useful character on the US keyboard will be ignored by LILO. The advantage of this approach is its simplicity.

lilo-24.0/doc/html/user_21-523.html0000644000175000017500000000230111521302503015522 0ustar adjooadjoo

26On some systems, only root can execute loadkeys. It is then necessary to run keytab-lilo.pl as root too.

lilo-24.0/doc/html/user_21-524.html0000644000175000017500000000201711521302503015527 0ustar adjooadjoo

27E.g. /usr/src/lilo

lilo-24.0/doc/html/user_21-525.html0000644000175000017500000000265411521302503015537 0ustar adjooadjoo

28Note that, while honoring TMPDIR is the “right” thing to do, the fact that LILO has to create temporary device files at all may indicate that the operating environment is not completely set up, so TMPDIR may point to an invalid location.

lilo-24.0/doc/html/user_21-526.html0000644000175000017500000000203311521302503015527 0ustar adjooadjoo

29E.g. if no hard disk is accessible through the BIOS.

lilo-24.0/doc/html/user_21-527.html0000644000175000017500000000223211521302503015531 0ustar adjooadjoo

30It is advisable to keep a second, stable, kernel image that can be booted if you forget to update the map after a change to your usual kernel image.

lilo-24.0/doc/html/user_21-528.html0000644000175000017500000000221011521302503015526 0ustar adjooadjoo

31Backup copies of old boot sectors may be needed when removing the boot sector. They are stored in /boot.

lilo-24.0/doc/html/user_21-529.html0000644000175000017500000000251511521302503015537 0ustar adjooadjoo

32Because different partition programs may display the partitions in a different order, it is possible that what you think is your first partition isn’t /dev/hda1, etc. A good method to verify the content of a partition is to try to mount it.

lilo-24.0/doc/html/user_21-530.html0000644000175000017500000000231411521302503015524 0ustar adjooadjoo

33The expected version number may be different from the version number of the LILO package, because file version numbers are only increased when the file formats change.

lilo-24.0/doc/html/user_21-5.css0000644000175000017500000001672212154343167015233 0ustar adjooadjoo /* start css.sty */ description { margin-top: 1em; } dt.description { margin-top: 1em; } dd.description { margin-top: 0.5em; } .cmex-10{font-size:90%;} .cmr-10{font-size:90%;} .cmr-10x-x-109{} .cmr-17{font-size:154%;} .cmr-12x-x-120{font-size:130%;} .cmbx-12x-x-120{font-size:130%; font-weight: bold;} .cmbx-12x-x-120{ font-weight: bold;} .cmr-12{font-size:109%;} .cmr-8{font-size:72%;} .cmr-6{font-size:54%;} .cmti-12{font-size:109%; font-style: italic;} .cmtt-10x-x-109{font-family: monospace;} .cmtt-10x-x-109{font-family: monospace;} .cmss-10x-x-109{ font-family: sans-serif;} .cmss-10x-x-109{ font-family: sans-serif;} .cmbx-10x-x-109{ font-weight: bold;} .cmbx-10x-x-109{ font-weight: bold;} .cmr-9{font-size:81%;} .cmmi-9{font-size:81%;font-style: italic;} .cmsy-9{font-size:81%;} .cmmi-10x-x-109{font-style: italic;} .cmsy-10x-x-109{} .cmss-9{font-size:81%; font-family: sans-serif;} .cmss-9{ font-family: sans-serif;} .cmtt-9{font-size:81%;font-family: monospace;} .cmtt-9{font-family: monospace;} .cmti-9{font-size:81%; font-style: italic;} .cmti-10x-x-109{ font-style: italic;} .tctt-0900{font-size:81%;font-family: monospace;} p.noindent { text-indent: 0em } td p.noindent { text-indent: 0em; margin-top:0em; } p.nopar { text-indent: 0em; } p.indent{ text-indent: 1.5em } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} li p.indent { text-indent: 0em } li p:first-child{ margin-top:0em; } li p:last-child, li div:last-child { margin-bottom:0.5em; } li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } .enumerate1 {list-style-type:decimal;} .enumerate2 {list-style-type:lower-alpha;} .enumerate3 {list-style-type:lower-roman;} .enumerate4 {list-style-type:upper-alpha;} div.newtheorem { margin-bottom: 2em; margin-top: 2em;} .obeylines-h,.obeylines-v {white-space: nowrap; } div.obeylines-v p { margin-top:0; margin-bottom:0; } .overline{ text-decoration:overline; } .overline img{ border-top: 1px solid black; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; } .fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.fbox {display:table} div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.minipage{width:100%;} div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;} div.center div {text-align: left;} div.flushright, div.flushright div.flushright {text-align: right;} div.flushright div {text-align: left;} div.flushleft {text-align: left;} .underline{ text-decoration:underline; } .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } .framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } .framebox-c {text-align:center;} .framebox-l {text-align:left;} .framebox-r {text-align:right;} span.thank-mark{ vertical-align: super } span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; } div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; } table.tabular td p{margin-top:0em;} table.tabular {margin-left: auto; margin-right: auto;} td p:first-child{ margin-top:0em; } td p:last-child{ margin-bottom:0em; } div.td00{ margin-left:0pt; margin-right:0pt; } div.td01{ margin-left:0pt; margin-right:5pt; } div.td10{ margin-left:5pt; margin-right:0pt; } div.td11{ margin-left:5pt; margin-right:5pt; } table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } td.td00{ padding-left:0pt; padding-right:0pt; } td.td01{ padding-left:0pt; padding-right:5pt; } td.td10{ padding-left:5pt; padding-right:0pt; } td.td11{ padding-left:5pt; padding-right:5pt; } table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } .hline hr, .cline hr{ height : 1px; margin:0px; } .tabbing-right {text-align:right;} span.TEX {letter-spacing: -0.125em; } span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} a span.TEX span.E {text-decoration: none; } span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;} span.LATEX span.TEX{ position:relative; left: -0.4em; } div.float, div.figure {margin-left: auto; margin-right: auto;} div.float img {text-align:center;} div.figure img {text-align:center;} .marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} .marginpar p{margin-top:0.4em; margin-bottom:0.4em;} table.equation {width:100%;} .equation td{text-align:center; } td.equation { margin-top:1em; margin-bottom:1em; } td.equation-label { width:5%; text-align:center; } td.eqnarray4 { width:5%; white-space: normal; } td.eqnarray2 { width:5%; } table.eqnarray-star, table.eqnarray {width:100%;} div.eqnarray{text-align:center;} div.array {text-align:center;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} span.pmatrix img{vertical-align:middle;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} span.bar-css {text-decoration:overline;} img.cdots{vertical-align:middle;} .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;} .index-item, .index-subitem, .index-subsubitem {display:block} div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;} div.caption span.id{font-weight: bold; white-space: nowrap; } h1.partHead{text-align: center} p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;} .subparagraphHead, .likesubparagraphHead { font-weight: bold;} .quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;} .verse{white-space:nowrap; margin-left:2em} div.maketitle {text-align:center;} h2.titleHead{text-align:center;} div.maketitle{ margin-bottom: 2em; } div.author, div.date {text-align:center;} div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } div.author{white-space: nowrap;} .quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; } .abstract p {margin-left:5%; margin-right:5%;} div.abstract {width:100%;} .figure img.graphics {margin-left:10%;} .caption span.id{font-weight: bold;} .wrapfig-r, .wrapfig-ri, .wrapfig-ir, .wrapfig-ro, .wrapfig-or {float:right; text-align:left; margin-left:auto; margin-top:0.5em;} .wrapfig-l, .wrapfig-li, .wrapfig-il, .wrapfig-lo, .wrapfig-ol {float:left; text-align:left; margin-right:auto; margin-top:0.5em;} .wrapfig-r .caption td.content, .wrapfig-ri .caption td.content, .wrapfig-ir .caption td.content, .wrapfig-ro .caption td.content, .wrapfig-or .caption td.content, .wrapfig-l .caption td.content, .wrapfig-li .caption td.content, .wrapfig-il .caption td.content, .wrapfig-lo .caption td.content, .wrapfig-ol .caption td.content {white-space: normal; } .wrapfig-r .caption, .wrapfig-ri .caption, .wrapfig-ir .caption, .wrapfig-ro .caption, .wrapfig-or .caption, .wrapfig-l .caption, .wrapfig-li .caption, .wrapfig-il .caption, .wrapfig-lo .caption, .wrapfig-ol .caption {width:30%; } /* end css.sty */ lilo-24.0/doc/html/tech_21-50x.png0000644000175000017500000003563711521302637015444 0ustar adjooadjoo‰PNG  IHDR¹ÂEoG3PLTEÿÿÿñ€L tRNSfïTDÝ"Í2™»«‰v†–n0 IDATxí]‹º²*Ô,íêéýŸö¬Û,Ô´´ßØù}{“€°†QTEñævÿCÛ›Mµ±Ãï³gMsòššqÞga­ëñÂþyê,4ÿÜÚ÷ °–­u+oý¨Û²-9¼Ý.Ò¶?žõÇŠÿËÝŽk÷ ûÏB= @ã%äúñîoGaîJ wlŠâFˆKúMdÕhÌ2eÎ(]®qö‡º9ì»ò°ÿ,´#MWB¶¿¬Wf®¹Sx&†Ž¼ÓÍ‘ö¯ÅÿÀ\ÊäÛÍt$Öö\µmØZö JÈ6 ° sG´ÔvÇk]´'ºÞNĤµeÊÜùºp»Ôbν(ï÷ò|¿Ÿ°ÿ,„DeX…¹½0·+ŠÓ}wC·u°k«¼”Ý«ÃáT´»²ºùVØœ«ÑÛV‘ýÞv:ðñê¬Íž.tì? Qk€QÙ†Va®–Þ’coÇ»¶ß#%_{—½ôg ÝK¾æê]SÔ‡¢$šËe˜£©—>PaÊØ®y‚ž ¢² ¬Â\qk‹úB§þ¹¡>‹Sèü§+J6aŠé£.”N|Ÿ²T‡öô.qzE*ûÊucÿY(ÖÑ¿ ¢² ¬Ê\QUûÛµ8qè×$Aœ2UQäíÜ1w;Vw—åån·Ã7ëHWrÅÅìÏ®ûÏB«2@ó†ßqh€U™ãëæB÷2yEàgJzL)ì†ç×½'p>Ú¯ˆ1AJM^\ß~KØšfGµÕǺmñC¡˜ðǯ9zwkˆ‹šù ·¢ðt: Ä7&ÝçèŸà›A¬n1®$³Ä2Ÿ°.¨P öS5ƒF¯™2nÉæº9Dd+|0¸oÁŒ‰øB˜+•K·L Z¢±"e,U˜£œ…¹ÅÕ K£Z¥<0 î›Aj‹™«”K›¤£íþ¸>Q3 3 æVP3, k•òÀœN>Ü7ƒDs§;ö+×Ü¢¬bˆ:YÍ@̉l5Ãz,9dŽ}0t¾¸bn/3?;ȼí4ã©Ý“Õ üh³”tÍ­ fxjç2„̉@¾ĸòl}‘\s'öj³ê†Þ’*W3Ð5'>ä>×™¢ébóü`5 ê›AÑ––¦Ð¦O(žÝ]u›ªfîs4w¸´šaUˆKÞ1g>xV×æÆ¥·d ˜»*KÕÝSÎT5CÄÜâj†öåÌÁƒùfPKùÙRºH¹æš;Ôlëá 7nš ¤ÛØ€oU3PºœDö&Ž·Î¥t(ëÁ[°d0×È;1ß \Çþr¨êî´1¨3¬~ᢀfáb7Y\^XóB3~Âä…5/4?æÆ[à[Só:KóB3~Nå…õÏ(è8±_–ššñÆÏ ëИ@}¼ÙH„õk\4LBó¬Õ&) H kØïG6ÇZ¶u£4¨³CW7ðǶ>H±ºMP/ ¢XÅ@c”‡û…§í‘¡æw48üµPFŒú®õò´à®¾Võô£+ $±3×+NY\aC½ì»O†ŠÆân4Á‹|-¿£Áñ¯…:¾Þ«ðs˜¿©êÛþs ¦pÄ+0Ô bœOÃT·K…jAŠ öEÅ 'סGü tÎù—d®Wй8ØsÞøÂÔ ›2×Ùï-óós©o.U :óºo!j_’9Q˜ë¸`0¯ \3‡Txa¨oeeÓbÔy…~à”9að¡cm©RíÄ͇:ú±&`HÍ@éò 4NtäCˆã "^ ;€|’Jãð» %6±ðÂ@®ÓØêD¤øu€SD¾fWt”ce-%÷=4¹œÏ­0“”‰Ç•&(]|2ÄÌu+PàxGƒˆ×B¹Ï±®6“)k^„4…@õºk¾!JWOšD¾fWtT„õ,w]gÎÝ?øçâ †í€Ë†¥V˜€IAï©ð ¶6Ë©F>„8>BƒÈù¡>¡®ÆÌy¬yaà匬C§îš à”‘ómz8±ò…Ænwºkî“+LÀ®!5|2È u ȇЎw4(ïµP™#€\*äz!3§ßÒó}±pá]sˆTïöᑯÙ¬'ö¥OvÍ}t… Ø4¤f€O~+(ÙcB²…4(îÅP˜c\/ ¾´Pb±î…—‚¢Ûšl©wê”Á#_4,<̱r/ÈwX\sP7pŒœ\ŸqÑ@oÖdÉ£šAU ú&ηdÍ×…læBo¡À\/°Oõ­%^¨&xZXxa¨Ïô˜oV±_sÊ€œbí{ÿœ¹†œqòŠ­8áê.þk\48š÷å+Žž‰Uß6‹l&šÍâ˜bجÛwÑ0Í”ÖÙrž9Xñª¾]„fâRÚ/·é°cŽõ•Ê’«ØrU8ÐOøiz¿^5ƒúúõ–LŒ3Ç×—*«;C§p`æ>á§ÁÕ û3?ìºjjyB!_ ȇ²òæht7ëÿÀJ+*Ñl8éŠNÅ((žzËõý4@¥®45ƒ0GbäChMÖ”%X–}x±‹öt:ÑŶ§¿Ná@‰ülI*úÇÑkùiP•šÁÞÄÉÍ×…dm‘9bªå%S\ÅÀ:0(¸Q¾ÂOßdŽÙùúíÇÜ·RøcîÇÜö[ ¯³4/4ãgO^Xj†q¶·›š×y8ÞÎyaÍ Í¹ñøÖÔð,­mrGº-íÖO ¤ cuEtéPÄ…Úþ!šoedªÝ!Ö«­¯*!»’-í[±ÄâD@³ùñC¡Á ÑLmoÍ`=sòG OÐÆC–²­)d uB±ß©«}Ä…f_€Æbò ¬¥­#®á‘|Üó´o1së¤"ÌÏAÍ@‘òi8â‡B9˜þh•mØa­jeÎÂÓ}w ¦ÃW2H wêU3P¤0‡ø¡ôth“oèXëJ¥é£q|}É×ÜêBiâNÐùû\Úæ:_ ȇPrÒ?GƒˆŒCÇJ“nrÍ!<7Ey·…>!d6FoH;¢f ð×[œ}`®¡ž‘™C(+p°+Þ>"dš\`jcîA½€|åà¿yÍÑìíåÐÖ+y¬”'ryBY_È uÔ `ñCáfŽ¡ßì}ŽÃšI ß Ö2Hë«JÁÕ 'Cæwåà¿yŸ£ÎòÈ u„Í­õ1”¯Yp}¿ò˜÷ÿ¼°æ…füÌË k^h~Ì·À·¦æu–æ…füœÊ k^h~Ì·À·¦æu–æ…füœÊ k^h~Ì·À·¦æu–æ…füœÊ k^h~Ì·À·¦æu–æ…füœÊ k^h~Ì·À·¦æu–æ…füœÊ k^h~Ì·À·¦æu–æ…füœÊ k^h~Ì·À·¦æu–æ…füœÊ k^h~Ì·À·¦æu–æ…füœÊ k^h~Ì·ÀœTZ¬áH þú°³ïÓÆâÉ‹Dçu–®FýóFĸ3óEHê-d}¬½Õ®¹>aÎŒ€ï5GÒHZëFN.b}4ÌÜsâôKÛÉf¿”q}¬/™õâAë£!æd‘g2°9W·S±?ÞÊKµ?ž«êLîc4òÇÜ\?À\ÛÒ ñ¼Õ´¬BM?iñr_Tä 9x䯷œIݘ»Ôµ>XÊ:A´´ƒ>ŒTäù‡ü òÇÜö˜£û\uçÅnǪâîRÝü0UÄ"Ìm’¹â®µðà1‡ÈsÛd®–wvµ³'¯1âÍ®¹Â"ÌmŒ9C©î÷=œKrF¸¿§Ë®mΫ‘´K½êºÛú÷ôuíKÏ MŒ-ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË k^hR®âý¼°æ…&f*ÝË ëý/m)•_½Ÿ×y8NE^X?‰¦&'‰ÿr›„õ_9¹&¡y,ít¦$ÚÛqWL_"‚|n?ôÉÇZ¶uCNi+Å«{}»]ÌGã',w;ò@î[}Þ™×d‹GzêŽÆ ˜øC\äÑNaŸ§I{ò=ñlù$¹§Àþ(ÇÚÞï»=åÙßxý’¢ 3ªF#>¹Tí6íus`3l»\ëšO Ä…–ÝÑàø©¡2WÕ3ÜÕ?4 êzr->IF)OCÇÚ6'Ë|eæš#]W: y{0r©Úµøàÿ‘XÛ³—dÝȧuQœÈµ<â‡BËïhlr ÌQLwãûÐ(VÙù:Zë“äÑc£DÇÚ-|!ÌÕ;"òlm˜¹Xí‘)´#Lä<þ~/Ï÷û©aó(ñC!Êq4ˆ˜2sÒâùVñc¼–å¹ô°:NEën~ËKYݨg¯57ÂêrlÑ%µUue¯Áìb½¨Åy°%ÛAºLÅT#ã|޵-+«Q˜“\»¶ÌH˜nµ›Ej^\ê«{|yŜʛ=_ðÇs]_ï â‡BÔçh15¼_Zí`˜9ö¢Ýu²øÀ¡ò;ƒÆïÂ’Jë… 7ÂÒ¯9Z€¢(iy]‘‚hoîu¡ÉžY–©˜je”ϱ² ~Äå·ßÙƒ/Œ„éR»Y¤æEe¾¾£ÌTê­\A´íÚ{ø¡5:DL ùš“®ˆ9yHá«]`¶G ê‡p9YjyDn„F W\ÚQÅ×ñTí(`*™Ø.³Ý(nîa=K9Î-€¡›ÖF˜é¾Ï‰ys«ÈÞ’¯¾RØéC½¥BÌݸjZMB`R‹#,n甹j‡Ü戠û‹OÐ ›Öe~ý‰Á™ã í&¥ƒ¹3ˆ{0]kÇlÞRÛ‘:#^(…^¬.\}K—ß•ÎRÄ…V¿£™k>¡ÐQ|Íqý½×=l[/D9¤èš³Ü9ÞzTèV©—•\sz˜õ¿RÅûÌxÅ}ò0æZj9é=ÝH:Õt1‰yôo‘mh~9©uÍMBÏ-÷Ùˆ ­òE˜«å&D—¼Aï(‹ââ÷0K½ì‘¡p¯æÜHUañ ºÏñÂ|jÐJL„©å*ÞgNº.÷¹ª=NvÇÓeñ.5]j7‹ÌŠ%£…ϳ¡Ê§¡cåÞ;Qp%ÚŽf3RŠ's‹M5Ù&¦“I.~̉#Ò–PùOŽ«-MüÐ.ò!´MZüýšgdd´ÛŽkð7Ö„ñG2$»mTÊÊ}'p¬Ô&Å®•É¿âl–v ‡Ð8öÑõ‚Mï?¤9‡ æÔ –Sf}xRÎâyj’N°ûZ~G3TÓ´øúθ'¿æt$^p~¾zI<0>™¹Brû±ïüˆ°Ò5Wqæ’¢ÄO+᣾£KcúÅIÎèÄ»L…(ÌÏ ©tþä^#B´@„‘/„×ûµdŽtÚ_5ûã¥h®w7X±'9Ë©qN÷ËIó«Fs• X›v@®¹âòHý öñ!!Vî‰÷œôÄ +(§'3/Ô©ê¬Å«é\–‹FšЋXžq£J„9¥sÞÃj®…zJÏ×å—”Ƽø¿=ÐÂÓr««É6¸ä¦çSE'}pâªÆ‘g_uùE£PÑT“P3(s2ªÿ¢QñasMË··šû£³Årw¡ ú¡ÆÑŸK¤Œ±MM§Nü 0sôyMûsY jî~ûÔ œçï!ÇóÖ¡Ñý7þ×í}/‘2 aŽ'éÐ-ÑÙÍ•”çŠBÏ/§5ÏÓˆTæüéï ÓôÐkÍsš7zàg=lªp =5Ž~Hxbm˜l®têÄã1§1Ë3¸*%€@½_¯šó²ùŠ!ô/Dƒ¸B0žo7LûË„ª™¯¨Ø.Ú€F÷^þßÈ«½Ôq Bq¢s•àô>''Õ°—6a®È4Ë1‡Heîê¬/[gkÃ]ó¬ ÎH~óC:_Ùªp fœ1×Üñ੦Gâ…ñÓ 'ò ‚RÊY  Tµ0¤f¨uH™ÕC* Ñ½—ÿÓ¨D{»7&D0¹$‰M¯šÈA‹¯¹áö—CUv¥æW #Úæ|¿Õ): êT^6*=бîIÍÀdCÎ"î%¡pàƒ`œ¡èÇœ ¦‡â‡Áœ…BOåôlyçîePކ [k³)rß=«!f$l¤É0=i¬³L¶l P  6) sû9Ï2à‚‚Þ À:Ëôak—µša-âϨ߮ùîØ}ôË1=m ¬3L6lPK 6q(wü¡ô.~zÎ_‹`] %ÊXêÙr¨±6¿s›AôS3l†Š™†äuŽƒÏ ë‡Ñ¼åùÀ~Ç L„õ- «^!aš¨^}==wC—éo\S<@JUJ;¢H#gí;ÖN¹ ÃY¡<áƒ$bu BÌ7CA³c¼!= ´£ÑÝIÿe0¯ÄGžô¡Ç¤£$“ŽrõåïÞñ0l™æÒ9É4vƾc…ra›¾h$Mæ ¡^HCCìhf´€0WwSü3f®»pu¸ò±Ð™Û´o|“/!¡vHÃw™k0Å_Ÿ0{õØØ1ƒÌ.>ÀœÛ%_>öË,O`˜µÈÌ·¥jšÉ¼Ý¨Bz¢ò—¯9¥U BC“ý¦C8U7ÁÝWïh2œh…æù€ìöÏÀÌ!ÙŠ¢}Õ„â@˜:ÖN¹€¯y‚:€ÙŸ÷Í@OûŠ& u"ïðà«p "&„;šqⳂg,hºž[Zt<Èw¿C©:M†“)Xæ{ø‹PžÝá%C›\¢QÏ¿:-y‚©QÇÊóFª\pæ:yã“…0[ û¤onC¾1@½†€äh1!$Á›nú,!Ì^¹¬yžîTµ"«²G sr ‡H;}’D“®Mþ y¨<¶¢D¼A s°’ÍŒ©A„u³¾ôÚzÞÒ™“Ç aŽ{8nfާ“ù·ÝÔBÿ ÂéàjaœG[Q¢a!æ s¼]Ž’è̱ýÛõÍÀ]%wKP/¤¡at4£˜ãÄîšëeîÄ:Òê¹Ð?ƒ_sÜ'ñ5g¡É¤¾æ,Eù5G'oï1(¶è›tM?/@½†Ú/8?anOÌ‘”±ôö ü3%tBÁÕBuÀ 6sˆö¢X–È:€Hü`&~–ò=z³¾èe³9ÝY@‘ª°¯€Ídüâ–Ar»¡rÂíNc+çIªn»Q ?ØàžUâÍaçŸ!rö`E± 0Ñ„â”99t¬P.ü|3ç‡3g¾äØi>æT35/T –_¦Zd2NÕ òÍ0j­;nèSü æØZþú‘7ÌXÉŽcR›nÀU’ý'LшÿšáS¾FA™ãS¸BA’ Æb £Ç/”èוçs³²caŒ0×ùdXÈ€¨ë~ôÍ5ƒdþ„o†ÈªtG7©Ó¦ÆÿIDATØôi P ‹|4|dë˜Sß R)Ý‚ŸûdXÃ2`ÑbÍ¢¥n³°¼°æ…füŒÉ k^h~Ì·À·¦æu–æ…füœÊ ëOÍ0ÎövSW:Ÿ|ŒÿÎgôOŠiêÙXƒ²‘b§&‘áK8ÍÈÔvlý³ñ'|èéé¸à÷¾ów¬5yÄ`)*X›`±éóp¡Õ?'~ãnP|ñ#= õpG“6QϾOm÷¤ÅQÏ>éæ“þ ÚMÃ$ùždw+Xë~ çÁem‚å¦ÏÅð÷М8;päÏΞ†ÉÑ„ûwSÛýéAì³æfΡñWy}Û³¢ûޱ8Ç*ßxaJÕmѱÊÎq8Ä[nú\ W_šgæx"éi˜¢AlI>µý<ë³æõÖJ‹êfÍWeŽÜT²G_ÙÜa.Y›@rÌš>¾PÕ‹Yž‡9qfŽÖ¿@zÚá³¾Ÿ‹×$à/£¸Ë±ñ}±|Œ?ò?u…ºV.Fh³æl3·ðwþ~Íî;vÓ«1§“òÂ\7îkÌš>Ÿ°PÕ;8'~æû\·žò!„ÝŽca¼&õ³ÊãÛbòI!cŠ©ïžïüõ›Ôñý™9¢ÞüοÃz;ŠO^ÁJÌé¤|ÿÚs§ÏåŒ#u e f8Õ×­¾08'Î×}!Šô4AÄŒ†ÁšâÅžæ´ù~ÄÒm±|<ö¿N±’u8¡Í½² Ô‹Ytv^M@äÃW^aàVȇ÷mŽõÜn‡SxóIy¹æzÖ&˜7}nÌ,T ÕzoH»ñœ83GçÚKbߟÓ[bjÛ>³·•#üc|3ã}ç¯èOÅyÑá,:1÷êwþ`îĤñ¯lCóàúÞ0{úÜšN«û–z›Ðàþðì_ð§sâÂ=–`Î< Ín ±Ý±SÛvªÛÊrÈ5Ç7¦»®^BÍ‹©ožgæ-üο»æìK~/„<˜œˆZ±( —3®5¶³:HÖŠOê,•¢“òúléóàâÌmþô93GÍÁ(†*0“†æÄ¥·äéçCà ¢‡ÐÛ |jÛ>³×9m|Œ¯Tœ}ŒïSßhßà;¿Ïá`„Á‡þÔˆõ¢ÞüÎXÕw½ÐGxÙ>™”æ’µ æOŸOY¨ÀZ¹N\ÞÄü¥é¡4VØXàSÛú™=/óÈ÷aûFß?òÇÇø#ßùÓk°=[â„þ¡ÿßù;ÖæF TTLÊ÷¯MðÂôùê ˜áŽfŒ³EÒÐT‹öR!3±.´6Adê X3ÑDfÌØ¡¾ûë˜[hm‚¨•–X¨à³Ìmâƒù¹gé"kDÄ-²PÁg™‹ìÿW;s™‹¿YÂj<-QÖl4KTúÊÈ k^hÆO‰¼°þÔ ãlo7uçáëò„™Í: ë;B‹™ö¼—}š§Uðk¬fºÜ|¡HËz¦|Hó¿±ïX»¯ú7¸^Oò¨ÊTÅ€}mGóF‹ð¡7YqžTx$²wÃhcšøl6Íÿú¾cÅWýÛ\¯€›š×ZPÍ0ÚdåEžx+›AèÉËC±}Û¿`nÓë°zÙSö­ý<ìkÔq¥ ì_œÛâzÌc>. aûbÌwšÊ:Õr͹æ9Ì9̸1љ㇩í®WÀÌÉ uV,îy_Í0Ú>ÄÜíJU1sP(sxÚäkŽ{Oºæò)‘*°w­|b"˜ ¾êßâzÄ\ÃÝåÔ £íC5îôDÁ<¹ú@˜’‰y:–˜”'pÑÝQò¬ ’ ­|b"˜“©BÖbTÄÞeN§“ü²nš……Ê/ø„Sýà¾a‘fàÂbµƒÙúÕ Ñ›8U½€šaÐ"íz§É,º«µGCÁ7üüœv¶”Qy‚ËL2¢F*ŸœäÌýÖ+xÖf²–˳LŸKwæ¦U)çû´¬ÿ"×L4óLübæ6!¿mí5™Û_TÂ8jÀç`Ý„üb´mæ -è óššñÓ'/¬y¡ùSÌý%9Ã8±_–ºÝknyYÁv±¾rÒ¼‹Fåøç+¾Ý°ábs(É=Ñðß0¤‚è9äYT€UU |ÊïñÍð¬¼wÓcu}§±ÛÑ÷a>†²úzú Ƹи'N|Åð Ð b ¦‘hg*É;è›a¤¤E’às…a½·¤¦X}½}gãÆ©Ûàõ%€98\hsæ0^)增Bt¾ªu°žàUËm“¹ožNµ¹‚õ×+°·íQÄõ)èM;ÿ 0ÚÂ8-úYæß ‰uKïB¥ðà›™ã/údÀ÷^#BØœ‡ˆšso6B[Uô“ºnØY›Ð˃ýQµ æÁ]:ˆvëL–3€ÿfÎ žiYš=ÀêsáÔwøfH^zjºÈš=÷+Çs]_I"Ì‘žƒ·U×+0æŽ4‰CÎ÷kúŸÎ™’|6¨ëuÍÀͯs>•ÎÚ¹°AÓÅLætQw$4ÝB‡BÚ ¹^ÿ7È\¯o†×ë™v¤2׳^AÀܺëtל)Ô-¹n0 œi„ 6 Êô ší(*&‘¤ onCÌÙ‚ ¤óÍðfeOz¿Ø7ƒ0'Ó‡+¯W`ÌÑ} qK€©p½]9sD¨PâÂÜΩ2ý‚ìQv:?mñ ÌaÁ²î¡P)¤¾˜9Ö¬¾^fí”]>ÜC_KsÝ`®œ9"”(¡.“/#ÅÌU®tP)\—!ô¹¿˜ðÍ0·ôÙù¡VH×+ æDͰúzÂ\-ïsª@°9uÝ2ÇdQ>¦Â… !s’àúáVïsrSܳÖî­m¹^ß oU5éàq5ÃÚëDc(ª@hÛŠ‡(ÔuÃþÈb’2ÐemÃ¥¥ËÒ¼1hº•èÌTÑ»ü¤†yÈäÌÚݱµaÐ7ÃÃá‹p4ëÛ¥·±õë¬áƒXmX.áƒh~Ì-G•ô9æþ½¶ásX¥h °¼Ð €´è¼°æ…æÇÜx |kj^gé_3dÆÜÖ. =5LbnyÅJ-<†&zËFýe›.! =r¼º§)t¾b´nÇú%¾šë0h€p'‡ ÒÑôb–‘­&T*4äâ6´—aÅH‰Ð[ؤHÿÞŸ 4n2½bÇú¾jR¥´4GÕBkGGÓÛ®Mî÷Й̴Ëö“òššñ³'/¬y¡ùSÌýÔ ãto6õwÍm–š'†9søˆ€ÇÑßÛÖp«‹¦©; + Gø¬#”ŠÿvyRëðn¬N ï1â•&h„_Gô¡– ‘¡•’?&¼õ¿¬òç$· õô(ù$éÅbµ"Çú+MмŒ,Bk5GCù¸mtÒŸ‘´Àsó ä‹[RØHÒÄʬ±×{=^evbïeKÔ 2¨ÎS;ÏcêôÅ›¸žA>„Vk€F,oî<~?q‹¥~‡KKxÂÓaðü`IÒ‹ÅZÖAæ6´ÒDÑÞnt1A‚ æDlD]ÔÝ÷ ÔÇ‚JÌ/‚Ê,7—KÌ »UÐ(¤ "k…îùAx¢rp5„™aÒ“H¥¥UrÄ컇hå3çZy(Àžµ$õ* ¤Âd:§Êå:sÄÕ‹ Råç•5Ø5'õZ}p»à×\¿Êæ÷T~.f JD*ÚkxÍmu¥ î*YyBÓwÍuZnAß ™³ë‹Z“ÙkQƒÌ!ƒd3/ rQžLÖ š–“ë£v€Êø¤HÕÚÝL1êôHÍ3ÀÜVWš¸Q(Ž›ÏÔ ¸æ\X à{!sæÛQï;´ Ä s–Y[ϼ(@!×'_—tnU•c‡žXv@Åk]ô?=TËu3Õ •6xäæ6¹ÒIè›ÓýNôAÅ€0AcÒŽ5ÉA¿AÝ*˜¶!ð[Ð-Áâ–#¸ Á…\x¿ç•5D‡B=?à‘1p±*‡Øh««VpÅÁ·<¿•&´A¾æÐ[~ÍÆæ…f'§ä…5/4?æÆ[à[Só:KóB3~Nå…5/4йŸšaœîͦþ®¹ÍRóİ?ÉÜ9˜÷ïü4ÐPÍ™§JhÄïv¿´íêʆXð¨f¨÷˕Ƒ¡Rú'™;È-B¿µƒŸiŽï2WWÑlÔŠ[¢N(.׺¾Ð©Csß MOÑˆí©¸ÑD7ò!4“þ$sgr! ÷³Ÿj{æÂuV`0Q'ÈlOÂq<•³¿ùâP½æ›a{ÿa‘8Kk¾Úàä“’bWÌܺÊÌ» ­4¡3©ûù¢û9‡!Öê¼ÎOA'æ>¦lPføÑ~5ÏÍð†|56·±< êæjÜÐ fû'Ùˆ¹)” v(ßyRª oTw-{¹gk.UÌܨšAÏøÀÜ-R¸©ŸB^ž?§lz¿+ºnºâí<:œ”ÙÓ‹+MäEcÀŸêºñ}Î]®—ŸT6¸:a]%¯MÏë_EO(´ƒ|ÍðÅätXY}¦[à§"¨·déŠ)ø óâ£9ÿ_ 5­(Á..èy¶e…9‘Õè„â·‚’ž1‘¡Ò¡YܲÍØaÝ+süfÀïÞê§~ð³%/i¦Úˆ¥+nªN ÊŠœ(o‘Ý¿j8Ó˦ KøMœûÍ×…jR‡fE7Rt‡•_—hã^~x9Täͳ´1vî¹Ý­C³]—²,/¬y¡ç8/¬y¡ù17Þßšš×Yššñs*/¬y¡ù17Þßšš×Yššñs*/¬y¡ù17Þßšš×Yššñs*/¬y¡ù17Þßšš×Yššñs*/¬y¡ù17Þßšš×Yššñs*/¬y¡ù17Þßšš×Yššñs*/¬y¡ù17Þßšš×Yššñs*/¬y¡ù17Þßšš×Yú—\3dÆÜ·^@/Øýcî±ÑTˆ¾êGó’þÖš5,0·‰•&Þày« ù$¾9àãOúð$ú¶ð­²—:رnc¥‰7a9š7ËQgìÄu»[€5ôãŒ?áaÁÆ Ð¼UªÂîüP¼·&Ä[¦ `dn] ƒ¦½ yáèîcîpµ*x©‰ê@Ÿ¶”bë>Hn]Rbwlnô]a»«l1ˆý‘VK @éö3/ì,`ÑUöâ¯kÌÜÇü1¼hxïašÞô©‘ƯÞÔ-!KT¾—UÒ°¬‹–¾‡–EÇ»e-øƒ[òÛ"®Ñ)ÄbÝSMÌ`™û˜?†AÓ^HмptwHwÍ™|q Á‹RSLÊQŸ;mI rLP_nEUX BÖ# Å <´ƒ"Ÿù]}¯ü °FÌ}ÎÃ+V Ê2)ޘ㕤øck]n‚ÝíSÖ}‚tI r8PÑÒ%”ˆÅ „1Zœ!ÒÒ&Ùð,S€5dî“þž™8#=@3ã¨Ç¬ÊÜž} Ì5;ZiÀ×¢à£lI "¨¤0ªn! ¿Öx­¾ö°x¬tfL€5dî“þfZ<–=@3–íiš0WËû\À\qdÂ¥&lI Zõ…niäzǃÐûÛÞîst7ÔÅ"ì„ÿÈÜ_µÞè )BWšhxP¤þõ–ÞB›ýá+GØJÜU^è©ñCáfýðrVš¸‘“}î<¬,|ÿLm¨® •&(lNw^ÜBã‡Ãí"ú–ýA7IfN¡‚IEND®B`‚lilo-24.0/doc/html/tech_21-51x.png0000644000175000017500000001527711521302637015443 0ustar adjooadjoo‰PNG  IHDR$¨ØUh}~PLTEÿÿÿßd‰¤)tRNS«™± ßÑû2»"¡0×@v‹ïDÅùN‰fñÍ᥷ÉýTÁP`µåÝ›‚`ÂÇIDATxí‹¶«6’†çôdlO&Ž=éݯÕiz2ßÿ»tÝJBþ 6^ÉÙ $þÒG•À2’ªj«Ÿ'î³UDUõ„™ŽSš½J8ÓqJ;¤Ù Œ8!îúâ”FT», ÎtœR¹q¦ã”FT», ÎtœR¹q¦ã”FT», ÎtœR¹q¦ã”FT», oúñëùu¿.Öù÷ÆÚ£ÍãC>»‰Ì¯ÄXOrÂôúY“—ËýRß=Ë/)HôòèÝ„R¼ÀzR¦+HÕõf¬½øˆ!AjÂdSÂþ›P²³­pû’0]CjÈ•Ú{ûUO§{u»µ_Uuë.U{m%¤öÑÜÇ\Bi…`,“þüWÂt éð¨Ž'âtnóÒñú|ó(ª¾òš™º;K@¤ãˆkžPQúÛ²üùû3Õé¦<éB¡vìÈÆVÐi©:\äfÕépûºÓ±üg£? Hò9颞“n_mK ÷£­›öÖžnU}hÛ¦9S[~¬ÎMû¾ w+®?îúâ”ò^=:G-œé8¥Ñòâyz÷¤$(l;¤$#l;¤$$l;¤$l;¤¤?ÿßÄÝspJ¦nÓþÖ&ØvOâAŒöGŽRß Q†‰A@ÝLœŠŸ>QÉ?ÝÂûæî/e¦šþ²¯»K÷PNUZ˜Šwz+Ø&{RE_pÅGtÜÒNµ)Hv°Í É»þî– 9Á6@¢ÎꩾÝo—cu{\¨#ä|»ÓW`{ÛtpËÃÄàøukU¸ O:ŠpsHvŠ»˜¶É ¶Ò™ºÕ—3u°UZþŒ$:i; ñ“’Ù6Ü"éV‰2ÕIõXªCºSÜ¡´!Hn°õÔ¯k_ôCˆ b:gÔ™fo»ܲŒIüÄDý½ªS|£¼`+ƒäup§ ©NñBò‚­‡$C§=>¨Zº«Ÿü¡ò<Éîà¦Ã²L7ÜÝ„Ïi¿ÓâÛ„ä[©’½ØÕíÒ~éþÓñÖ5çöJ¿HZÛºƒÛ$Qnj¸Ñ¿-úºéÿópHtŠ;Œ¦>¶º'[p/¶Ò‚ªúÔ[i¸Ûÿ XàLÇ)•,Iˆ806)hµ‰0ÎtœR‰ãøyÃV{‡ä3ŠÛîI¥X°í\HÑ`Û!9âÁ¶Cr Ńm‡dCb‚m‡dAâ‚m‡dAâ‚m‡4@bƒ á>ƒ=kÜâƒm÷$s½ÚÔo=¸oT8%Sñ‚¿)?Ú=Iƒäm‘w}qJ¤³&í’f”¶Ý“$¦t°í¤L°íˆQ.ØvH)l;¤Á–‚$àŒ¢%¢zÌg¥ù`KAªÎr ò˜úʳRHù`Û!eïlUõã?×WxRä.zÓër ¹‘÷´’•PJ–[ô`>ØêŸÿóGÂtn‘w¸®òÍ“Ø{ZÉú$”’å=ùáßÑ;žžÏŸSßÝ$õV–| G½Ãu&H[ô=-çüþÎ!åé§'ÅSÂt’y‡‹^¤÷˜ôàe¿ŸPâ -|$Ûj×ÍOôŠdÂtÒð—s{O+Y¥„R²Ü‚³­vÝÔ=ñ¦Ëç$óV–xŸË RnºÇ‰‚P½ö5¾ ¼ÒøsÌ›3lf N¹é-½øOƒ¹‹í-W*–(, 6Ã(áIœ¢| ¤ ?«ƒ” ¶žÑ *z¾¥p+ý¬ R.Ø~ü¥ég:NiÜåËÛ¿üèσ3§ÔW.µ‘ 6›Ñ+á–’N[¤L°9Œ>R:Ø\FŸ )lu3´G"6pA€SJļ>”¶áÞ¯³ãLÇ)å!%¿üŒBO*zœ7ÆÎ±"HIG …Ì0?»~fÛŠR4ØÆÝûu“€»çà”¼Ö.öãð¤˜#•1úH‘V»ÑûCŠ´Ú¥ŒÞR$ØŠ½=¤0ØÊ½;¤ ØêŸBlÞÝ0ÜÅݘqJC-ƒ`£GHæ÷þ¡P¸…3§4ÔÒ÷š’Çìá,ïn~°½Èȵô&Þ“ü`[?# ÏšËíÛá!yÁö­ßÐÆNIÕÍ ¶ Œ€× Éýò?…’ñ]Ð_ב&1z_HN«=ÑÛBrZ퉌@¾—q‚mgçoÛ–!ïnv°mᲿÒ@Hv°ÍÁg:NÉžïoFÀ»’l³0zGHV°ÍÃè! w¶™!õ-øÂC°méÞ¿0ïôC°íŒ<4ýîðÖÿΨ‡âm|“uÝ•&q««¯®£Ñn‡gÓ]_˜aŠêyèíYý(k: J¾/·êr®ZšM°¡%“åº õö¬Œò×—F½?ª;­z{xØæe4R}½UõÚ!™`›™ÑhHb óM@:Uõ«á†[‘è…Ÿ²·´²A@íô“íúrí]wnN]÷jÃÕ²ìzaÓ[Ý,,”µ­¡i'^ý,l»6ú.²°P¶þë…¤ïlâûÚ7C:<¯/Ýÿ%üEm×Á&¿Ó.*”õ£iµ]›úÞ¿¨Ð4ÙÒKÚ®‚Mßû—ÊÖrb†mWÁfžšˆ _|IÛÅ“‘aôÝ wžD"Ç’lF;$ö"ô~êp` ™v`QO²ížÄ\'›Ñ)Éa´CŠCªœïý‹Æ5cÀ\É0ÛaBs‘±Î³&dUn®M˜í0¡¹ÈXçÙ²*7צ²–ºÜïM¬{35{uê˜oàö!Uµ\¦ñ*f÷t?©Ù«SÇܳÐÞÛ@zÈ©cú¥f¯N£“Ô?ýqiofÞÂwt¾Rü¨™ªÍ_5{µÀ¦§­V 6Ê©®ƒ™­ºbç7ú-Æ„ð[@jo-ÍÛÏTmf¬³WËš¶ZMx-~Ë¢©®ý™­uNëÏ×ó÷·‚$4Ç7M‰^Q nþöÔ´ÕjÂk=Õµ8fò13Ë6—³˜,œ>oáIÒý9TZÃ"ªUQÓV«HÎÌÖ†û8ëùç§·Ô<ª#M_uçþ¯˜½ZÖ[M[­&¼–Ó_Ë©®™­]>ÖÞùðÏËö!Éç¤ËAÌ¢®fªîÿÊÙ«E}íI®õ²þÌÖó|è[pÿÐö¼Àæ'nEái§ @ñM\½d©‘Ðf1- É¡$…6ŠiQH6%-´ILËB²(õB¿è'+×¾ÙÛ¾¡}»d mΛ,ÛçÆtÏ£½/9BÃäØ>3¦‹|V×¾ä m “gû¼˜Ô#€¢mS`ûœ˜TÀ©ˆ‹mSÄö1©€“”¢BÁµ}>Lú™›"ŽÚÄcû\˜tÀ‘/±Bð&Ööé˜Î¢·M\u~Ú_äÜ“¯Ó‚*ùœdØ<ûÇJ—Ü[9¦%!IW2÷ì+#VÞC°$$åJ:àH(åK«Æ´($éJ• 8!”¦´Þþ¦E!)WR'…2”jújä7ºŠ _’r%pJ(Ci¼3-k·s¥ž CR®TýB÷9]«¥±˜Þ ’r%ñ´dj•¥4“9sÍ—ÙYÜ“´+QãÝ×*Oi ¦þtË€±Ïº<$íJ篡V#(å1 §³ë³ÈöòŒ+Ù¿àŽ¡”Ä…»—ZWy%jîPH–é mÊopâÚ:ÿ8J)oz3H¿h0ý’Õó½×"Ûd¿ù¾$Ó*é¯'ÅH_b¿Ò½$}ƒs.÷=Îr«¨7½¤Þ•œ€+ k›è=¢¯û¥E¯3/4ZÜ‹6REçIg6®ä\ ¥SÊrý¾µžà&Þ¶›òIIM9¯WÖÜØœ;\¶çÄ=‰÷@²\AêFÞ\™È^J*’ýÕ¤Þ•Ü€+ò%¯ OY.!¯ÇÛãÒvÇÓ½ms¾Ý·Û­¥‹&µ]CÓ™KÈÕ.%Å•y%ÝØqþÙ-=ú§ŠYMxÊòúyoï4WE¯Á¶ô#ýÑÈWŠ«ŽBïIs—‰×†Å1A-Ûd¥¤ÜêLÛã\©Ð—,oJY^ù‘ïMKHJLÅõ ç{+Ѩwª¯ÕÙ Y`k˜’b ½rÀ¸’×v¶KBY{SÊò$¤š^-ܤÍg–û¤¤re‹Ž÷®äµÝ/PR˜R–'!µy‡‹|¿šjpìV©Vê­ì¶K¢yS’xN’1t{Ð@ãét>>NÇ[לÛëW]7r€ˆ]¯¾q)/Ó¼»–+17Ê—â–³tÓ<@Ò]Ý=$õ#]´áKÍKÅ;›Ý*17†RÜrnz.3¥U]÷d$¨»ºe¸un4eZ $ûÇÜáÆ< 0¨ÿZ6Ü—Vtsë)Eú©D¨¿û¨uW7íQÃ݈ÙjÚ¶6ßîuK¹yæÞ³]‰ ¸¼/-J ¬íV‰ ¸,% å@©’ãJì·­ÌS%Ðr ÔÉi•ähëØ°™¦´(5ÔÞî  Ô×| h9PÊ‚äºÛx'Û% å@)’Ó*EûrUîDÄ-JÙ å@)’çJ‰€c"h9PʃäµJ‰€‹SZ”ò ù®”¸(%Ø4òMÇí{®” ¸% å@©¿Ý@S¡´(@ò])p!% å@©’ß*E_èKùßP€–¥úêöE®äûÐr TÏfØðZ¥dÛMo%ÿ÷Pú¶ç÷Bò])ÙvWÕ¯6% å@)Û Ì¶ïJɶۥ´(eÀØ}WÊœíK@ËR6œ~Ûw¥LÀY”€–¥z0ö†×ìå~1cF–¥l6öïJ¹€ëŸ€–¥0öVÐ*åÎPZ”²ÑXÛ+eîpª¯²¦c²ÎµÐæ÷C \)päKô Ðr w™WÊœXì«Z”â …®” ¸ã•DZ”â ùÔèx“„%oÿó;Ðr TXURîJTð¯@ËR,¤Ð•òm÷õ°®”o»?ìîF¤‚\êÇJM@)>ܼ÷•dFó-´(ÅV—„“'gh9P*©.8 å@©¤h9P* )Òvgh9P* )|¢ÌÜဖ¥Ò"®”~¤Z”Ê@ЏR2à€–¥2b®”êZ”ÊAЏ?Zàó¾»i|á³RêÇàåJå<)ö¬DÏâ\1 å@)®¶CzÌ•ØÆh9Pj€ÁmÅZ%öi h9PŠCc¥Ç\‰ 8 å@) ·üè-22´(Å‘±Ó£®ZZ”²apÛÑV)p@ËR'=êJÑ€Z”r`p;qWŠÐr ÇÅMºR,à€–¥\Ü^Ü•"´(ÅañÒã®Ðr ”ƒÛe\)x=h9PŠ£â§t% å@)·w¥ íZ”â éqWòÛn å@©—À¸’×v-JqLÂô¸+y´(ÂàR¢~wÐr ‡$’θ’pz ²(­6K¶^)±ó[“˜VÉ 8àåJ•`g\ɾÃ-J•@â\É 8 å@©H±Ÿseùá& å@©"Hœ+ ´(U‰u¥ßþKŸh9Pª çJÕßô,¶@ËReXW2Ï@ËR…XWÒÍÐr T!$Þ•ÔsÀËsËKx¦N‘òN5÷.ëJ*àâ–/´Yt±ǼÌòN^è«Pžr~—yìÖßtãNtÚ;[°×Ì,/ÑçSq)/Ó7í2d¸¨å燰5ïIï‰o•(àîQHUwjÏ­6!׎‘ßi:ò»XG-ªLÍòãVŽK‰Ë±‚ß*ýõ™‰ÖêC÷¤õHÕÚbjûÃŬ.!U¾Ufy‰‚…•W ‰u¥£èAŠ]E±&RÝ4zí¹HB¿º- U6+',¬•ŠÉKëJÇGÒQ>Žwbùú$!,¬¼nH¬+QE-?ÒjÉý£ÖŽ‘Õš%'´'™å% VŽJ}‹×DEYW¢»›þç”;Þï÷ËA,$ÖŽ0ÿÊ•'Ì¢Êfy‰‚…•W)áJOÑþÌ÷I-¬¼vH¼+Íiyfaå9¥æ»¬Ö™Ø§ç9-Ï,¬<§”Uµù6YWZ”zçJ@ËR/Bâ\ h9PêEHÜ h9PêUHLgÐr Ô«WZ”zR¼UZ”zRÜ•¢–¿ÇŠÊ/‘ŠºRR5,Áé(mkEeÇôÑ;±g¥8¤èš‘ÕÖVT ÆÎs¥H[[QÙ®ûøíˆ+1ÞcEåñd¬œWb ½ÇŠÊVÕ 6CWb ‰~¡7XQ¹Í5t¥BHºs++*5/Ù \‰¤Âmû+*—°éó®Ä@z—•ûŠmø®‡Ttʱ™RcMbòù@ËRLåG'{®´(5š“Ñk•€–¥˜ºOv] h9Pj< &§ëJ@ËRLÕ ’WZ”* Ádu\ h9PŠ©yI²íJ@ËR%4˜¼¶+-J1/J¶\ h9Pªˆ“Ùr% å@)¦ÞeɃ+}ü\ÜàJÀË ”âk^r¤w% å@©|Þ¾3h9PНxÑãJ@ËRE(øÌ¦UZ”âë]vD»Ðr T >÷¯—Ç€–¥øjùc‡”'¦\ xyRùÚÍñ‡È´(5A>Ÿt% å@©|åGçøƒr-JFÏ(\ h9P*_÷ñ9þØ!åaýú÷O[â5Ï$ÈqùG|xiq–„m†[Ý0•gaœd›h)ÏÝ“‚k&ü¼¼@©°¢“R€–¥&! -J…õœ”´(5 IXh9P*¬ç¤ å@©IHÂÂ@ËRa='¥-JMBZ” ë9)h9Pj’°0Ðr TXÏI)@ËR“„…–¥ÂzNJZ”š„$, ´(ÖsR Ðr Ô$$aa å@©°ž“R€–¥&! -J…õœ”´(5 IXh9P*¬ç¤ å@©IHÂÂ@ËRa='¥-JMBZ” ë9)h9Pj’°0Ðr TXÏI)@ËR“„…–¥ÂzNJZ”š„$, ´(ÖsR Ðr Ô$$aa å@©°ž“R€–¥&! -J…õœ”¢Gs#þL²s/¼Ø ìv;ÀN`'°Ø ìvÃóæ¥È]{@&K¬Ø»¦5QHW{éÅx–w«Wsê®4¹{}êÄåêÏ¥{vXÖT}t³ûi¡àêÑŠÿÎä>úOåz’ÊòpL•iÉäêv’kÝîúOåA’YLOüËBVÍUY>Ž©ssªªS[uwnúOÕÅ´4·@¥³˜ø÷pzS5Ï}WUóÚTý½'œ~¦Sæ„8·¥u£‹ÖÕ ®ŸÚapèÜk@p"Äöt4£¡Êë©€«/Àzº]"TÞ®5a8cÐïTÖž8W(Ø#@7ëÖP°Z-oÝi'G‡þ~ó÷3w}ý`éÛ¡ŸûÇ\µ·¾†ºÆXÕCÿR?8¹ÄKI™ö\ªë,³âœ±“NSÞÒÜœ¥üxƒÑâ¬%&ííY蔆ï55ܽ¾ÞðÀ¯ï9Õ´7ã’"ÿ»8ð… ƒï<ÍÍXÍK_Æõ<Á¨ã†y̦d¨oìæÞð†íqPç$çÒÁ©a€¹55 5ÕÒÒ#š+0;æ1£æ ËT;ŽþL’ç-ƒcž:xÂÀJy°\`XqÃþ˜MeB|üñ׌ó…8Á˜}†cÆù#qÐ ¤Ø¸ª*h;fC2•Y÷þ†-·­·ãü§¢¹š›¾áaö1ÎëP÷wxfsÂvÌæ(È ý`À!‡oøWïI8Î[ý]ÂD\ütúõŒײ+Î5¾8·òÆL\ûü¼}D·ü¼]ë8…¹•·2â”7å Ð~ ý@ûAYPÞ¾”7Ô–O5p ºäû­¦¹Imé<ß '¢ñ€ÔÜ`ÅÓqR-·'¢ñÜIÐðuœ×qŒjCúˆÑxjÀYæ@Çy'k< eHcçkR6^ÎÛÞž]ãÁ9_ÇIÁ pèï‡UÔ{x^fX— Y(p¡=‰*zÐ\a (‘D Ú”ØNéKÁ$Ç 8(¨01(;^Á‘!˜\Šs…­=¯ò¶sq%¤¼]akÏ«¼í\\ )oWØÚóotPÌÚ&#Q{\$1ˆÒû³s~%¤¼]akÏ«¼í\\ )oWØÚóþ*¼‰L9;-ÙP’7kƈUà™tNÝ‚{é$Ž5åì9÷kÒÉùm¹T —ÅϜߖóFqØ”CÊM=Í3ºlÑ܃*ÏjL:·~ºµ•ñÛî–ŸÕææê·Ï›rŒrÓ…x"à Ø;Aü0¾Ñ…PCÐË–L4¹·ê·@ ‡Í2Æ3Þ0„Qˆ,ø3 -°ž!¶ü`œÉ½U¿NqÈN¨n9Ã]“{«~ ÄpØ”c”t· ƨ&£­=–7ˆØ,?˜hroÕoÎfÊ!妇ˆ+ž°Û¢InÔÜC?0~[cù¡D›{«ŸQN<ù¤†¤‡Iß8º&5—¶'ä%w®89†âéÊ[œ—\¬ò–c(ž®¼ÅyÉÅ*o9†âéÊ[œ—\¬ò–c(ž¼}æÐu®ñ‰Õ~!(‘¬¼%ˆÉD+o‚ÉÊ[‚˜LôÊÛýÑLÓSjýÀ–dÕËh{`\ÕàÊ8é‘W/£8 ÕÏ+zG^½Œâ@3\®g,g$VÚåˆi¥IcG#9ó ^b6ÿHàÖ¬å õHÖ&¡´‘&MJu g†ê¥gqbmdËéwv9"1Ò¤5­œ‰8®ª(Å!Ö&¶œ8Fš4v´ÇS/…8ÄZ{cËâðrD¨ÁH“FÔ$‰“äLO½”á´Ï¡inw#Z÷-é‘v9"Và ™Ö”F»8ê¥ ç˜ëõ˜x?x½Þ°Å ‘+o2žÂ\Ê[Ȉì\y“ñæRÞBFdçÊ›Œ§0—ò2";ÿ oª'Ên‰—ëƒ÷ÇÃýªmO³¿8o¸¥ÑÙ‘´³%x³k غÐ?ðüÙ‘²³%p@wsND¶ÉùiRö”3œŒ1$4¨§FÙ rúu€ý ;ò!¡€ÀzÝýjîSTÐý/ÝžyzÒ¦–VäÁ¬P]†šë=lC ÈÙcÊ… p§¯¦;^8ïu¯jèkt rVsì6SÍv¶F¤qwÏd‘4)\*àðÄ×pÚ;*;H@Œ¸õãÆ›Õ{x "â° rD{ÌßO½<›ÖJ8 ý‹°¤é´ý”]‚Èï1%Æ9f¤^‹–Å%Ús(ÜŒØ Ê)ÎD½àëqÊLIi{Çg@yóù°g¹ñ<ú=šda('£Ï͞Μî|FîOluJìA7#}Cz™cG'?Éb+r3^Ç¡I;cök¶<†Vq;Cy¶ñÛÛ@ Ò¢šŒãþÞ«8eäÛŽç€czŸ½$ \0£äî×|°ŠŽ3pW€ 8<Ð{@q˜ú”‘ Ü“‘ŒåNiÀ9Ý‹ãmióGp ˆ1Žó lq¬U|Üz3fä<ü„¼ÙÞ¹¢èsN²Ð@ìýhçcš¹ÃJ0#ïЙñœöt&빇Å r¼ç4ÂÛ{*jQœ€á©ò&$*Ȧ¼„O?È›ê–Â{âfûàýqa¿,¬í)£öåm¼á{f:–¼E®Àáö4wΧ”7³—Ù8‡;Ñ»¿MήàÔ õ„u¹¿MÂ4÷ü î6Î;ÑÛ­æ·‰[a",Çi’ýðaÛYÐJ¿u»Ñr …1ÂAYŽ–¿fß_ÃXWp¨ ãØ_)øÛ„ë:û,Ʊ¿RèGÌ€Mâ ¾ˆ²%-r¥-öWJî½2| BÎ^ü©8eÔ)oÊ2ðûÕáð»kí¡¡ÚÝ£"‡é8Ò¡ÚƒÏá$LÝ8|{o¢ñ*œäp¦nVy*çåàU3çG'aê&ÝÐZ¿q„Å7·œ9œ„©ûí8fx>˜º‡­ßoiOÂÔM{Tøo¢9¥­¤_ŸW˜HÍÝŸD±ËÑŠs™2* ¼)oÈÀìª'tíØ X¸^Dy»Î–PÞ”7íe}@ySÞ˜7}&ýÝbœ–ô Þæòw‹qðµ¸Óf¥áb‡Ï”ïš3æx«ñ5²(™ãUœj}ÀKJ`ÃY¶ ;¼]éÙ¥äÚoYŸà v—íÂΩ¿›±s88Ó‚Û]¶Ïo+„œú»¥8#ͺ¬Öím–í ZÊÇÁšÀ̲ý@Ø9õw‹Û3Mð6!`ϘÀìÿÞ+†·íJ¹ÎØgîþÄÊ”Ä)N kúÜ[Æšò¦¼þWß;u³({·òõöH“7½¼ˆ#–½‚ÓBKðùArâ`;:1\H Ž!KÚÓZÀ¡ƒÎ¶Ð8¾B¦nNáºñÀʶP¬ÍþåŽø•]á­¹ýö»_Z~&ÃÁÙĺù]ðw’Bá OñßÉ 8íÏçŸ×z×-ßž¿þþçù´KQå¥1yjIþ ,˜ÇÉT LV!QA6å- DxúySÿNþù@ý;ñŽžë×êß)ã-^êzlîþ\¯1^Bqâ¼äb•·Cñtå-ÎK.VyË1OWÞâ¼äb•·Cñtå-ÎK.öòFÊß—ÿ é'Žx>A[‘~]razJXËëeµK½áþd=Bˆ*Á™×fZ—©YGØ6É\ª· ,ç’âà:çfàjóª],æ-ËywÄ8qì+}±˜w¼ +%0&u´SѶŠûtH÷b$÷Çűk¾ÐºC¯9Ûò»æ‹p`i›È#„xWÛóሜö*uW¸×çã²Ù}8m·qkÎÇUqNÛmÜk+¹¬™t´¿Wç´«×rÓyu^&“µ•\·`ðÝ7Ap:1ÑÖÅ¢%ñ¹åêqI3MûûÕXv(0Ñv·ÎJ®™Ým’·­ó#|m·qk­ä’¸ÛôѶë²Cà]´a¤ýµódÿfq÷>´üEgè Õsí¶É—oÇÒÞœÜ×{‹ªM¾úÂsþ¹m0Šy¯LWÒ«]*Û/_͇µã¶™¶‰åÔýuŽ_ w˕ږ¿ƒuÏJÌé-Ü-Wj[h#ŒÛœþ—ÂÝ2¹¶õP÷ÜÂh%—2“/f7\3Ì–EÉœ¹£´å„\'»¿²0Gfâ„0nÛ ¹ î/³0ylŦä~gÊb%—1“,µ1AÙ°)¹i›g%¢s—Èî4³Í‚0ž±Ñ¶ùÄЂöÀ±õî_ Â61vÁ¹#°1pÖ'Ø”Æmµ’$ýI¹ŒÚ´Hvã•RøË–þŠF§­ÙæTfËÔ{_+I 7ž©CØr¼’xq⣱ú¦8›Rýƒ©ÖTnx#PßË-x¶iÍÂl¢•ÀµOÓ/DnÛ¯“ê•ÍÀ›7Z©»î £÷í—âº)×¥tv¥<ɨféRû,¯9IÑoûuRŒçì|´û)ÕIú…˜”À_¼ÏrE»9â>ɨ¦Nö©}–ÜF¼ ý®ûì}lIܧ£Ý§öih;óV°Ô<9ç-pŸf¦5ulHíÓÐvç-ôqJŠ›XÓçl¹=¤öiú…2nÌ)ù¯ÖQ:m™Úçéfư’ú£móóŒª7™Úçé†6ÆJ’ê¿ÿpžQu´ÇÔ>O¿0.‘ŒI2]€4[¾ŸËI¦^Ÿ¦_(ãFX‰ ’wí‡Doþ ÓÐF͸QV#;Ϩ 3SjŸ¨_î¯ÂŒûG™%öç3Ñž\ûTY€¹N"fÜâ<Ði‹å·<ÜJ³ÔÞЯ-}uœýÂD]K­ZõM¬"›} ïÔÏ<ÿº…ðC«”åd‡]ç¨æ©íf ÙPêì†$ò2iÓ*ºUdkù½^±ôà¸üàbXˆ¥­lJ]kóÔ>mÔ¬ó°æv"hiÂD[Ií3ÑFÍJ0/7í|VÙWŠ1·aA<‘‡Cq·¨,äöíiÿ.¿+·•Ô>mLÞâ¬ÄÆ hó\¸ö°héHE,òØ÷‹Êf¥k9j?5µ]Ñ #óÙµèÛEå-æ”XG%œD¬ï]” ¬ ;å¶x;P÷ÅýâàYöt,µnU‚ÕÔvEûà]ÔuÓF7ê”Ø´ú«d’ÂB¥2¯Ç«d[ Åí¼[Òt1eצ7µ‹Y­=ZiØs¡´è›Ve%6­voƒßò~ñéŽvï$C±pX`–•…bÛæ´JíSå6ê2‰ºy·0«ÈŠ _úhªæ^Á’±µø—d° ¯û¡X,½Þ|÷|ekO‹Ò:µÏEå +Ô&ž•¶ÆÖB«Òª«Öè­]ÐÖC(¡Œc%-mé…6¥Ù›Cöhº¶­FÉþªZGÌJ0Z¶¾âÙ”V©}.'Á|0I_¤l ð$1‘¥å„ä,ý‡…ÊmÄuÒÂ`Ô ³aQZ§ö9²`8Â$ Ö}1µ0µÂl˜•4©}2ÚnŽ‚‘û:if†ñÔŠYI“Ú'£š” ¾Åcf0q ³eTÒ¥vÒæò­Ç0êæVŒýšWÁ·ó%€ÒšënÞ6*éR;iÿc³±¢±_óvpÆí´”Ö\wó¶II—Ú° Ë*Gb0¦~)ufmí:)(-ExëŽII“Úâk\Û>üÜÐ9S¿”¦Æí:)(-ExëŽAI—ÚÉ0Do·ÔÃ)áŒÛe%8-Kgч JšÔ†‹û9V˜ GÛuƒc`0Ó µ©WÒ¦6ü^•>:T_æíà”\1´¨ÍI §5ÅoßÒ+麗ÂÅF½]Ý\§„4n‡•à´Ì}ÅÑ*­ßüƒ&þ]|ŠoØ3©ÄJZž#ÕµJšÔNïâ# mt€^¬›@*a¾ÛßDj­;I.Ñ)é\ûûïEÓºh²$ªV)DrcµP·é”4©ÝÜÁGÎHÛuç2 Þz9Õ1°BÛ|P£¤IíÞGÎHÛŠq¢b½NjL5ƒni”4©ÝûÈi#g%Ö)·†APÆSck%MjÃïÃö5ÖÑSKa·ÐJHã¶½ÐZÞC\+­S[Ì´ûÇ:Z ýŒVûfïÍJÐZv ÄÑ•’&µÅ¯÷U´<ü­dKÚy¯,g­5ooÓöJiÚ⦇Ç*ZþŒV·嬠µ¼G¹TZ§öä#g¼J·çp ,Vb_+øºY³þ®S{ò Ý=Dø´5Ûœ ÃlÍúeÞDÒ¶ÌJ–gÖò=²PZ§öÌGΙÛ‹Pà¬óH^0Å;_oí?,“Ñ¡$%´që­„¤µq<}µAiùæŸúÖ_òí•h/E\e?+±j¥YÙ”êÒ bÄ’]šJöÔþZþСµ_šÖ·Ñ”_4|!Ц%V ¯œÞg#éVØ+ÄнÒÒµÕKdú'Ù´­_tm[ ¢’WrÛ´î}ËbU:ùx¸—Q—¡Ëç^i‘Ú‹KäW_ËZ¶~ɘ0ÏD%ìû€Ú»w‹V:üÂwöJªç­)! ›ç£,ê; ¯J± cõ̱*LQV•ë¤wJ‹Ô^\"¿ývhé×fƒ¨„ž•讓­zø»®bÄÂ:Õf "·ažBØË3MÄ:GðCàü)©+ë;¥Ej«>2š6´méWÈc+D%ô¬D7å¶hÉܾÁZFÝêŠÃÚi‚v&2–ö+=š¤þx.8Žƒ7„Ò"µU™L"-ý[ ³AUr½†Ç^i^6­{ïQ/ :£]kh°Þd¾õ!”ÔS²ð‘|4mˆ´õË*C>HUB·ÆJlZÅKü‰h)LC: Pï–óêVHÖRƒÜÁS¬PZ¤¶ê#õìb|fÚš”5Œ{}^l´NÙ¯Ú°¾¥€S<¸JÞ!—ó&«aÆ{]½EžWª+hôAIMmµÆ"Ñ­ýÒ´¾½ˆª„7îõyAjuN²}D¢f»Hí^5ÑOì$èp4ë•pÒVS[Å»\ÔÙ/¿èj“•ЗÉõ¬§Ucø¬U][õÕ´»W‚¯¶>ŽÀ¬µµAÌ*›jzÁ!²–Òe§U´©\]PûE„ˆÅ÷jVÂ8ªùœ£™¿×äåÛ#ãÈû5j"7ê_‘IòÓâ–qT3¢JfË·´•10öKÑÅìüŒ êbÔq2:‰òË:ÊryìúyfÚ+Û3Ó_x<Û¨²™’r…\] OO{ÐÌzµhÝŒ­–÷±tF[y});“ W¿¶¼ºñ—Éå¢u\£ÊfN¢øˆ²s Úøû›åú—L´a®=*)>¢5m€>FO'`§­ JãV'´¶ŒæÚRI±½iŸ6Á¸ÕûIÉ` B|q)•æÖ¡Wš“ÑJá.;”(Æ­œ™ ZÆ,n#%ÅGæäÕfyú%4·(áß*QßšÚ¢¥rAìuïôJJ6›L{#DO4![h+V²EKÓe{Q÷I¯4Ïf£iCk,ýêz½EI±ûØ•7õ·h9š_îßüë”æ>¢¤ù²G¿zÍ-JãžÏJ¶h-ɸöû7ÿ„’¸¶ýà(G¿¶Ó¦Ì¸çVÂ0ªá›Biþ¥?…üê„1ôkÐܤ„þ‚šú·ª›´Vl¬}j 'VÏ|]Ÿ¡_>´)É=»ÚT½kw×½9`Ë|D`Ø¿_ò oSš!” ™žg—ÔmZ¦†uåCj¿ù%Ò6­ìß/Ù×mJ3„²!Óóì2¹MËÔ°¦\¦vÒÎ}d¾­©t~Ú”YÉô:ضLí¤ûÈ|û’´)Æ=½ö¦=¦vÒNKt%Óþ{÷k:Å•¦„š2lMV²QËÐîºxLíÙûۉ˴¡™½û5õt£Ò”°SS¦­ñÌØÁ ¾nV×§iC”®_ÚB] ½ÌÄÉ\N1îñÌl<³æ^¨GÆÔnšIÉiÚÐÆ­6~o«á©ÑJ¶jáF=º6¤ó¨ä6íw£=Þ¼ pøˆQcjC:K%„i_‚öh&’ƒd€¨BS[Ü× JÓ¾mŠqK+Ù•¶<¥á^©.g_™²œ¿]û¥ènV"·´’ÍZJõ;ãŸývoýuJÈÌ_ ú†ƒ–n%€]¯®ëìðã[µ(îwJ˜éH×4G¿(cÐÄRr{HnŽQõˆ…j:rÚã=‹æL¬Šúk*íá­?PÂMG®B›2)>zߟ¶´jø»B6ì߯UúQ (“’á ûJZu«ýž¶iˆû÷ˤŒ/'w÷JØ}TãG-Þ´aÀ»÷ ÕIx©&É×gÕäíü/AŒ#øhoW"wò'ÚÒG’ù;®©åy;K£ÚCÛ•hÆýÛ/»¿bGIn´QÑ¢µ‘…J$ãVâ¡…Íä#yMS¢E#ºb ñP"ÑVâ¡eìÿt`ô˜iÓ”hÑ“"}ËC‰fÜûBd@Ëè#"Çi£¢Eû¥„{(ÑŒ¬ÄCKé³ngòñ•¿=•têeT+Ù•|sµÃ¾«Záë€PûÛß³0èì›EICd×"Jr?àÃé];Ó7ÞßDr(1 F• ÜN´‡wþh´iÑ*Úž—iV‹]Óº¶!Z^+iJ´è Ý«x)Ñf%¿xi=¶mÈ97M‰mÓwóS¢7ül|ç6*Z´‹¨í¸ŸŸ÷§=}\C-ÚFÓuÌO‰dÜ{ßsHÓ†!ÓFE‹vµ÷S¢·Ÿ–mÝ1iÚ°³³’³+;Œ{_£iGÚÝÉÞ•ödÚïK›dÜ{Òž™öûÒ&÷ž´ÕuçvUê^§ÇüG1n>4%Z´gO%Ò×=µä)Ñ¢ ÝX…ú*ÅÜ^!µøÒ¦ÜMújY†±8DS¢E/¤H»¾J”I‰¯~`4%Z4¾ëH_%ʤÄWkÝ{S M‰mÒÄ”{+ŒÛ[ 3 .†O Ý¥0ãæcÀ§"º‚qó1àSBs H0n>|Ja â[Á7>%<§0‘‘vޏVðÆ4ãŠÒršƒ*á00Eá;ƒ¢¼ÝJñ럦G0%“Àqå–S;„ätf%-4ƒ(©?Ëúë€þ \9-‘ø+É–Î÷ŒMnOÕ6÷˜sñTš7uºmìí¤§S«P<”Ô†N¸‡•Ø—`²¬ä$œÚ^Ywô„¤Bt ;+!gxÖ©Õq•ÔêçÞC7‰ÁàX§V‘”ÔªçßC7šj–gÂV²5rÖcHãv0þræ—|ãœO»@8”\ÕÏ}iÜvõG +kÜn¿l3…]I ½àθ­ ò¶ýÕ}“ˆdcUB¶qÞ0oÚ?ÿæpHûG`xoÚ8ã¶0(’´n?þ‰ j ±(™ª\¨gÜ| ø”9I(+ácÀ§tmÜ×ùð)A·Ö<>¥Ch£¦| ø”¡š”ð1 )Ñ¢}øRBMJi!†KS¢E#ä!¡”0“’PZÆÁŒhJ´èQdÃF(%Œq‡Òr“¦D‹v«›#B)aŒ;”–y4òM‰-5¶<‡RÂw(-÷8iJ´h·º9"˜¸ƒi™‡3áSrveŸ€H{®úVÆÍ—q|Jz»—"Œ›ŸÒî\ n+ác@S¢E†*§äþ:`8-×ÐhJ´h—¶íx@%grÔ² ŽÑ”hÑiëá€JÎÛÉ€ZÖ1} ÚÎYI¤€sVP+æ¶óœ³Òvœº“vw¤òĹŒ;ÒIÛeÜ‘vHÚ.㎴#mêì܇XÐ|swP-ë iJ´h«°ã`P%‡qղދ¦D‹¶ ;†U²¿UVË60š-Ú¦ë:TÉñuÀ ZÖÑ”hÑVaÇÁ°J1·í¸ÃÒ¶ßM†ÕRÇ•f󟔤)Ñ¢U]Ú^X%û¤$¬ÖrœÅŒ7M‰½Ô¥ì‡U²OJÂj­G9ñ¦)Ѣ׺ø’ÀJV㬥¤äMS¢EkdÑE•¬ÆXK;Æž7M‰­•EV²w`-Ãoš-Ú ‹*¬d5îÀZÆñM‰m”E­d3îÐZæáµ³ù‰9Jaì—” ô|Ú‰¼^b†u]Ú6ãæž7o¿0çc3nîQays÷ Ëg±þQáxó÷ Ábù:à£ÂðÖ.¦+ S†ãˆŒ2'wßY–ÿg}uó>" fôÚ´ÞNzµ¼µòoóÁ+Ó¶ÍJ¶òò­gÏï+Ó¶ÍJ|©m¯oã}eÚ®o•l'æWÓÌûÒ´ÏgÜÃi2ñ¾4í3·•÷¥iŸÓ¸-¼/Mû¬Æ=ð^Ï#íÍ.O¿ùê·J»×¦}bã(­ð¾6íS·Â»_¨÷Ú´OnÜ3Þ·nyÍkÓv|PñÌ#w¾þ¦m+èÀµi_#·ó Þ¬/Oû´w“‹WRYæÿö»o¯žÛ矔̰W§}…IÉŒ÷Å}eÜuÖö n?>Êá'fô›b‘ÿW¸eº‘«ÓFwz{‰áÙ}µó) +ì©q6'®NeÜió‚ AR•hÚàiÝ¿:m”q§MþiWUWÏ[SÞúä-ʪ‚¢¦l²4©²¦,šç£,ê; ¯Ê*¯!:oÑ„çãê´QÆ6)üèJ•t¹Ý‰¸±Ÿ×VÏŽ^7eRCâ7·<ç–wIž'…x5<ÓDœ­‡¸?ñ{|ÚÉ#—´‹²$^äáQšª¹WÊU3\%ó¼jà|Àõ±é®’ðñhà*y‡¬Ï›¬è÷ºz=¼iëòN’X¾h; “Øö8v}ÚˆäÖ‹´uTÜe¨ÛÉe3xòlÿý7Èm̬d(…7 ™• Xìô´7÷þl× ï@{“q¯Q0”¼íë÷;оŽq¿íëw¤Í`×£Ä[оŒq¿íË÷[оŒq¿í«|ðêßÞ®?î÷¸Ç Õ¡o‘ÛÉUî&߃öU&%ïAû*“’÷ }•Iɛоˆq¿ í‹÷›Ð¾ˆq¿ í‹w¤Íy»ó.´¯aÜ,+]õ"»&ÑEŒ{WŒ_å­F$;Jmü:àŽ=zë¦crsžÞ‹ÜNr"ÙQë³’°6g%¬¸£qsâŽÆÍI;7'íhÜœ´/ò> +’ÅâerG¸«¦£q¯ìX{G¸ë¦£•¬™ìVr™¯îF€µá‹å6¬wCŸ<^óŸ¾]«Ÿò`øU®RÔÝ«ÝM-¬Ñ-ae©X¥{„_åÊ,Š:rµI‰ í€Ý­¥‚<{ÐÕ&%@»V«êµËW½Æ5¬úu®dn‹U®úCEUŠq¿>,|•ßšÛ°(/ñ‹wÑVe·šî°¨•Xÿ¡é×°ê×¹šr[`ïÁó hXë£[­fæ¥}1ã.ZX¥Öƒ%mºE­úÅ®VXçg(’¹Ýa%OX—¦_«ÚOXÛ¦¯ÏKûbÆÝ]%ÂKúE­TÚ}ê˜hËõ± ÍŸcý­´­+{NÓ¢Eó3î~Nòë³õ‹Z)´‡"m¹>Vž7Àj^àÀî:Vö»°lïRÆÝÏ·‹g /ÉnQ+X¢¦šÖ°êŠ`q«~ձʕ\ÞªùÈÆõ±¯ç¬§_k‰¹ïXÙó=h#YXÃxa¤7êJ…rÏ~½OãʞôÇHûbÆm‰:(nFaú‡Šƒä žr½O¹Ö¤,fErÚc¤}1ãÇ¿}˜mÀIH¹‚§\RÒ–å¯XýpXÔH;~~ƒÁ.©ÎhëVö”Ó#íø6 †¶\ÁS: P×­ì9M{L^jRbÄîåý žãzŸ†•=‡eAÇiѺ[»›\€³Ä{ÊO7)ñ9;Þ´?ߤd;îë}FãÞŽŸ^37ÙöѸ·³£×ŒÆMgæQ#·&·>båx;Iæg%^øˆ•㬄Ì/<·?ZíhÜ4^~ÑѸýøÑjGã¦ñòŒŽÆí T=Ò&áò ŽÆí T=7 —op´_‚„úñë€Xþ¡1·ýâ[ˆw“xVþ‘qRâÏßBœ”àYˆŒÆ"º‰hÜhT¿ý!@#± $úWd` Aà›Ä6þ&–Fˆ&Ѹ™@w2Ѹ9i'Ѹ9qÿ>7#î¿þýΨöÉ¥²¶}}rœÃ¶Ãâoœ¢ŸV+mþ´c?`àüû¢ŸQò¬¿,ø.¿/©æT?*Ž) ßY³@¥GÝ£1 ¶>§)Ñ¢ç:Ôm>%Xã”Ú¹Íñ4%ZôæNAE>%N-Ú¨hÑ‘ö’-z©EÙçS:cn?ºï\ð1àSÚ™¶ÏÄ‚’ž^±oC[¡€Õ½mMŠV$6íð)íœÛÊè±£ŠN¢`Û¸ƒ¥Ý7O‹ÞØ¥®ŸÒs;ÒöÉY—–C´h©±å™O)æ6'N-ZÑ¢·ä´¬Ã§isàÔ¢å-Zæé–g>¥H›“§-‡hÑ[rZÖáSŠ´9 pjÑrˆ-ótË3ŸR¤ÍI€S‹–C´è-9-ëð)EÚœ8µh9D‹–yºå™O)Òæ$À©EË!Zô–œ–uø”"mNœZ´¢EË<Ýò̧isàÔ¢å-zKNË:|J‘6'N-ZÑ¢ežnyæSŠ´9 pjÑrˆ½%§e>¥H›“§-‡hÑ2O·<ó)EÚœ8µh9D‹Þ’Ó²ŸR¤ÍI€S‹–C´h™§[žù”"mNœZ´¢EoÉiY‡O)Òæ$À©EË!Z´ÌÓ-Ï|J‘6'N-ZÑ¢·ä´¬Ã§˜vQZ<¦Š-ÉmyæS H»(o·²° —6*Z´EÖyˆO)mÈéÌJZ ™6*Z´©%€O‰Ê@×iWNË:´QÑ¢¥Æ–g>%oÚÕ6÷˜ž6*Zô\‡ºÍ§äEÛéÔê¸i£¢E«J´=>¥Í´QN­Žš6*Z´ªDÛãSÚÝCôO·¥),J] ¶ B× ¦7únë*ÛËÐýò $ÙÁ;°N­öŒ¤DœÁ¨J´=Z¿hm/£ÑZ¼CÕB+uÕhѪmOÉéÛÃB¿üãç|Ú5FÚ¨hÑ.mÛq>%íú#M„}ü²Í<”AÒFE‹V„ˆ;|JÚyÛþê¾IDŽŽ6*Z4² Ú0>%+íŸÿ ×ñp¿ôD-Z‹Yȧd¥]$iÝ”È>»Ãh£¢E»ÕÍ|JVÚæn:B-zS‡†J|Bã}ÏIDATJ‘6'N-ZÑ¢cn/ ÐøÑ¢—Z”}>¥˜Ûœ8µh9D‹¦äò2–O)Òæ$À©EË!Zô2_)û|J‘6'N-ZÑ¢)¹¼ŒåSŠ´9 pjqæÐ2ϲÏÇ€Oé,l×ýàcÀ§´åYJøð)…íº| hJ´èõ¸ð%|Jç½Jò1àSŠ´9 pjÑrˆ÷u$ŸR¤ÍI€S‹–C´èuÆâKø”ÎKOëJ‘|g–Oé¼üùð)EÚœžiGÚ"ø^ß4%Z´O6ó)EÚœ8µh9D‹Ž¹½$@ãG‹^jQöù”bnsàÔ¢å-š’ËËX>¥}i§Êúœ£Z=Ëþ® šf6Ì]•f:gÞÜ—Á|É}•ÎÌxêÛÎ lJ“Љ·v¦]LÖ½³Ò‰O]Û›ÁdÝ{+Mc:ïÖî FëÞ]é¼ÇžíÏ@Z÷þJã N»±?iÝû+òØ1ƒu3(£:ëƒÞº9”ÎJYö‹…AgÝ,JrX'}faÐY7‹ÒI)Ënõ‹[±ü/%ãóÎÒŸwˆÍÏ L·”óÒ¸½ñ–r§öc³ yK©ÆÈ[ʚͪ¢u«ï^\Ú™˜GC8l&ù_€ˆz«‡Óºù®]|J+ @»~Õi—Ûé«èØÍh`Ï$ë~–e¢]Ói'.ëæcÀ§¤£¼ K…“û½åâ$`ß8P¯N’ÀÑþƒ„®…× çÇÛðбÿ<>¥%íúñl’²Jš;Ì·ÓGS5÷ R¹j†«džW")áúØtWIø¿x4p•¼CÖçMVô{]½v”¬Ýºùð)-ik÷;'Ññ*´[7>%®hÛ­›Ÿ†vÞ€‰#ÇÄ/’‘ùTpÍK|ÚŽuWó’U|,ð"`Ÿ—x5+¯Øç%«ðXàGÀhÝ|3>%?T!j›¬›ŸR^žm¬›Ÿ’'©Õ ÖÍÇ€O).ß6ôÖÍÇ€OÉ—TúZëæcÀ§„–w#:ëæcÀ§ä *H:ëæcÀ§–#ëæcÀ§ä*L ë/ò1àS Ã*@+«ìæcÀ§€S &–>|JP…hf11ácÀ§S 6>|JHiFµn>|JA0…jD±n>|J¡@…ignÝ| ø”ÂP ÕÊܺùð)…â¨~êWº»ÓÖls* ³5ê~¦_ÿ%GË—q|Jrl§yþü!>¥ÓP–)~7lñ1àS’ƒ<Ïó¿ëæcÀ§tÊcO~èÿ®ŸÒ8Æmô79| ø”NyêJw“ÃÇ€Oi≶à&§9í/1žˆS ®üð?‘v –Îfê¶-ø^ß|JΑP~´%>¥C`"Dú_>|Jˆò| ø”ŽA‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11| ø”Ž!‰QåcÀ§„÷11ýâ\,ÿ3À¨ D‘@$ D‘@$ D‘@$ D‘@$ D‘@$ Dg"Ðd険s¦¾ÔY›Õc‡^%lŠŸ®è6ºâú™÷Ï·6ËóÛ[ßD!T’äñQÎ?!hl ·ºÈOþ_ÑÎ8U° €bcxä=í$EÛÿŒHÖ¾˜Þ^"ªÈî2Z<ßöÔ@ÖŸyÀçÝVh …v2$sóê~p!m^"Ù«rE{iO, [Ó¤zæMKú×÷2iž²IU5*´›W—ôMÒóM›\üÀŒvU 8‰h (« Ú·gÿc3ÙOºÙå¶`ö¨z²7‘Û1˜†Øžh7UÖÙukÿ‹£à:Mú'k`…páÛP+ƒ¡~VvÞåñÑåvGôÙ‘vQ6ØŸhCZ‹œ¦yYvÏ´I dF»Kõvýñ³“,{ÊŸŒŠ¸ûܪ3Úµ@œ¾ŠŽ´B;{ bÂ*‘Å@»~Õé”ÛsÚER‰ð,¯»J¢â§¬hƒÏ6³0ò[Þmvº9IÞ&®]‚€QíäÞ<^%;'WNh@$6´‘5üÓcîtóíúy¯«×.Ž÷")M·‘>šª¹WP&¦Iš·yš¤÷¼¬ïÂ*ÊgY?àòWVIsçÛUWɾ¥6¸?в…3ø¿-k—^IEND®B`‚lilo-24.0/doc/html/tech_21-54x.png0000644000175000017500000001436012154347141015440 0ustar adjooadjoo‰PNG  IHDRñ\r¹OÆbKGDÿ‡Ì¿ pHYs  šœtIMEÝ ¡Š ŠIDATxÚíOŒ#yy†Ÿž]+¢PÓˆ ˆÀ)”ÕìÜ8 mù˜=yèSà„œ²R·æ„І”H9äàÙK”(Rw.H9¹FŠЬ}c9D.!E"‡h»;$]뺺ÚnÛÝn·í®*?ÏÆ]]Uí¯ªÞz¿ßÿ¤ Œ*ÕŽWY¤ÊßÈï³þ˜î©‘*£ÄE”¸ˆ(qQâ"•$ ¦Iƒ&í¿Ò\xë$!ý™g”Êaz‘¿OÀZö¹Aoê÷ÁŒ£fo½Lû–·F]äÖt9"Í>±;%Ê„ÓGÍÞj¢.R¸$=špî„ѧMƒ!!½,%hÒ¦CƒN¾õ|¿ÝÜÝ#Ä«úz/{‡DnE 8ûùj@BÂO½,%ïrsÙÖ„CòØ'"zì‘R§É3%.r÷¤ÀîØÏ{yÒÞŽ&^§Ôò=Îx‘çgÇG³»PIÝD]d휒ðhìçˆÎœWÁq&ÛäÊ´¿GÂQ.{%.rç´ˆ³ÏMRžÎÙ¯C“ÆÄë`šˆ)°4LÔEŠ‘ª?à1¯rL ¨gRII©G¤<$ä”cz<Í·ìsLÂ.!0 aŸ§ôhg{% ¼ÈUÇvñòŸFV¯ÐY?/“‰ºÈfxÈ[YÙ½7Q=·fv¼ò%ñ»£*ý÷ig5éµ¹¥uó?u£ò*›¨‹Hޝ6FDWîq’wɸÝy¤ ØhVmZ×Vì<ºÔÓjÙóˆ..#fÈaÖ—ªÅ“¬Áæì7½Ì¹; ée6:ŒèŽí9ÍCN½,²F7øYÊ6Ð¥ÔfÛjLŽiîå øäž—éf#¡ú+lÓݾê¶óBÑÅtÓ[Ê“lüF\’fclk}úc2—xcÆñ—Ï͘ò@‰/FËø|:ˆé-+ÉD½ŠL>,§cÛûtyÀksŽ;õÒ­•7óOçÓALo±,.×ò,{p¦»IîrL¼ºà™ºùàŠ³2ýY‰¼ã%ž ¢O‡M:ÙËu|R‡‹©!Ô¨Ó¤–O1½ålÚˆˆ6!³¦‹õLÜ' érV‰vB“!#ú@›†ô2¤F!#NR›ÚNÆ^zôWÏòt¢ëd}Æ1ÏÆÒöûS.WqBj¤S“:LN qõ;S–Òä)—§‹0Q)@MÈÕ“:„ l±,.R0YŸ%êÒ+&u8óúÚ[ó„<\Ð÷¯ÅD]äöìPç5¸4©ÃÅÔÐ!æ˜ÁØ$—· 8 MÊC‘^š."õBWGšùûÄkê¶²’˜LÔEDô;]|.ý¼§¿×X q£â5u–ÜÖD½ÐOމúö`WU‘ ûKQ<\×ÅE¯ çýÎEÖì/Åñðêºøì©²:MkáŠûûë⢇oìÏ22yÝnæë(ñíâ1O¼ ±|g–7‹ˆXõp™¾NñÒ£âÏÆ€CBJ<ä ûÝ"òdâ.4Øåxj«X/y9¼¸eñ0ŸÚa9.ÊÜ—Ç·óR8œ³â5Mµáxq=\&h³º±ñ—ÇŸf¥ð³Qågìsš•݇&êb9|Ýtè¬h¡ß”uÒk—¢8›lkmXݦ‡Ë¹(á`?>=n<ÈþÎø°Ð‹âkZX×Ãå~Óåï òrÁ¨dÿ”xU<ü.%5»[%%¾Ãˆ=è;J¼BÜÕÝlÃĪ0OjG~×JS\¿Ë]ð»V掽×&èJÜ慎W‚v!;)%®‡› +qÑÃMÐgbï¶*û–}ÚÎô­îÁ¦‹ëá&èJÜïZÂG»íEš¾è”¸®ƒ+q¿kénëÒ·¸Ší*Ù„ÄŒˆiÒ¤³tª7œ; uM‰ëá¡mAežlFùãѦ»Ô9£9Xp‹ 蕸n‚¾r‰ÃÉœÅ[–£«ÄõpôÍr]»xB‹„ñv‰H:@Dì’P#攘GÄtyFDÌ[ôØåœ^Z'¢FJH€(?rÏ²Ûæöpgq¹¡‹wè3¹bCœùz¨eÓ»Ÿ•ÚωiŒ•ƒÎ׈²õÎ×…¨eçƒ>ÁÄ‘º¸n‚¾Qß%erņ„ç¤$<Ù¬Ó­\°p4qüi– Œ¯ÿ­|¶ê”&Og)zøMôö绩Ä#¾Œ¯ØPã>užó`é[!ëc[çK7AŸÃ½k.Û[1¹bC‹€„Rà(—kã O!_â|ˆ‹ó…z·~kÞ C2s™rñ}à1CöR˜X±¡F“‡@:¶=""$%ÉÖy8Ê{‰¨óZV?['"å€6)yD:v¤èá7©Åtø;ôù¬³ +¾e#Ù&¿kU÷m+Û@v˲¸èá–¿uñ9Dôé­´rM¿ÚÃÛ[­ d”¿ºX´=)« º‰úzøöÔ¥› ëâz¸ º\¸x¹D¾ãMÛb·[߸¢‡¯.Aw xá¨)ò¼J«ßþ† º"×ë]þ¶]‘ëá-Û@¦ÈõpËߢÈõðr&è¢ÈõptQäz¸ º(r=Ü]y‘¤PE§3AWäRa7AWäRÙ’¸ º"—J{¸ +r©¬‡ëà•ãÓŠ\ϱŠM'— {¸UlŠ\*ëá&èŠ\*ìá&èŠ\*ìá&è[Âø±aë<Ü}«ø’"ß27AWäRa7AWäRYøž º"—«$Ò.õ·ïð%o¢"—jz¸%ð; Xkšý+ÊùìØ–j.q´üŠ.e^õÄ•Èd†“WSâËGUV·‰LfˆK‡·Itñe£*®‡Ÿ•¿MÐE‰ß"ªâ–Ã-‹_ATEõpËߢÄWU1=Ü2Qâ+Šªˆn‚^B¬Q‡ˆ¤`5ÃE¬K·›ÆÅC:ŒˆiÒ$æä’ó„ôiýš ½ † í·Š¨Šæá&èR°D½Æ(IH4åGí‰ÿã¥oHâE‚^bîU<¾A ;g<æY¡ôˆVi—Y²,^ñøB !r0g¿D<ä §piïˆ:/Ø%Éöíð*O8ÚŠrx@l6%^TšÀc>@=Rê4çøãHy΃K{×è°yªÐ_s¥Ócžæ~™ý[‰•gœæþ³GÄ1»sK”gñ€éÄÞì- fçÊ‹@Ê€dõÝEñp«Ø”x¡ is9'@ƒˆuN ©S'ÌÿH‰h°ÏkS{§´ˆiÐàWDìScH¼¶Î¥Eðð€ O‡l‚íêÀZ„~é¶‹_[Twß§ÍQd¢Ä×Õ]{¸TE‰¯5ª»õpôŠâH³¢p·uéŽ"]|ÍQ݇¿a‚.J|ÝQÝÕØ2§Y%¾‘¨îÆÃ-[— —Ã-‹.¾¡¨6ïá6‰ßXT›o7A%¾Á¨6íáö`%¾Á¨6ëá&è¢Ä7Õ&=Ü} ±FýnÙd]º5袋o<ªMy¸ º..•öp§Y]ü¢ÚŒ‡ëà¢Äï$ªÍÔ¥[Å&JüŽ¢Ú„‡ÛnY¼T"ߩȶ3gÍ¥cW2]ü£Z·‡› KI\¼š¬».Ý6pÑÅï4ªuz¸5è¢Ä qt‘ K|]"´]”xÊáë‰ÊiE‰‚x Q9Í¢ÌÁõÍ{ø:Êß.,ºxa<|Õ‰ºåoQâòðx¥QÙ@&J¼p¾º¨l Ëâ…+‡¯®Äl6ÑÅ é᫈Ê]”x=¼½¢¨LÐE‰ØÃo•5è¢Ä éáñ ¢2A%^x¿MTMt¹÷¼òðÛ×¥txË>l¢‹Ý׋Ê*6Y ÛÅËáá¶‹.^¿iTV±‰ŸCmc}õïã[De‚.J|nr»i\WË==OÛè1Ø.J|& ¢1mÒ y¥\ÎHóÆ«s#_4*tQâWÐÍ…2ÌåÛ 7WNçÂŽ–ðþæRœ5×ê"Q™ ËJ¨j»xÈ‹\êG¤Ùç#vç8ù›ù§d‰ºïdnm÷²uém"Z¶‹.~•DÎ$6Êö3O}:4hfNÙ O—&5Bz™ŸG4‰hfû·iÐÈrƒM"¢±¼¿.*§Y%¾@é8ÌÜ|4!—v¾d`;r?Û¿™ïÑjyJß'Ú™¸»D@œ½6š×HüoøÆ £ršE1Q_³$7vǶîåIûi–b‡3›ÖZùri&äc©÷!]úÄ|g"!Ÿ–ë»|ý†Å‹˜&è¢Ä¯xýŸðhl{teíw¸ðÙïs<¿ôB™ä1O,‹_µè-¢\ºMRžNønÄ€4—è…Ÿæ%ø£pgp<ÃÃoRÑÐ!É¿›ÈʨjõïgÒLyÀc^å˜PKÙ#ê¼–•ÅcŽRŽp@›”‡<"%dŸcv ïÐd@ÀaþèÝÊÃ]¶–åÛÅ;Wþ6^¢ƒËU+˜råxá¨ìÁ&J| jW g•¯Í8×Õ‹ &tÈD‰/E4W<}z+“VsFÉ:^(*{°‰/å·Ž¯îÈ]¤¼¿ÎÃÏÖ7A)©Äãk“ï‘Ó,ʦpzÆÕ{øuíá8Í¢HY]ü:éTpIeÑÅ·ÆÃß¹ÒŸÏ:©ŠHI]ü*¿¨bÓÅEJ)ñ«êÒÇÛÀ•¸H)Å0ßÃ'ÛÀ•¸H Å0ÏçÛÀ•¸H ÅðC>}M‚®Äeã¸àѪø4ð“ º ‰TÂŧ=|þ4‹º¸HÉÄði~8£üT ø!¢Ä§<üºA¢J\,‹—¸nù[ä.>þoÖÖbm;KЯÛO)QJ{Q_t%.R1D4ù!HÌMfqQâ"%C“¿æ{Œø—Ìâ¢ÄEJ"†v^ºþ¯Ìã¢Äec8^üvüð `À?Í\MDJíwÿοñ—7ž‡M)…þq©i•¸H¥Å ÄŲ¸ˆ(qQâ"J\D”¸ˆ”“nžø!ÿLÊ)Ç ¼ ²ÍTµÑìÛY·W—õJò<~é…u³Sx¿Û©àU?‹ªË ŽhñO}ÅD½zQw}­›°‹¯vTÊ\”xå£R沬n+ÇÀǼ ¢‹W9*\”xå£Ræ¢Ä @ãŠÕÄo•2%žÓ¤ID“ˆþ•ÒÒ¼â·á5GOÒ¿Áœ«Ë¼¸”¹l½Ä†D¹ F„\7›ytó¶o ªÞš%®Ìe”{J—„$ûœ.ÔG,)Y„)Ôˆy‡¸’ýüD‰_éáõ±Ÿ9à£4€}e¾ 9Bbº<#"ætl¯i·¯‘’0¸tÙ§GÀn^*ß嘇<áÕì¼1{k¹È–%êa–š_Nµ»™ÃGÙj@'+ƒŸ'â—÷šLÔkôòòvpé5†eñ0Û·Aˆé•%ê·;F¤Ô.žBî¤ã¼È]`ˆcv§Êà“{MÒÊGq§4y:qŽÆ¥Þûœf¯‰a&|8òÁ%~{NIx4VºŽx+KÕÇ“ùuÒ[­TrÝ9ŽKW—-¢ÜX%Úµ)CÄ€Ø[ }/ÕGyaàèÒ9ŽòÂApi߆“èâ«öñ<¦ž¥ÈÏ€:°K HاÁ)=ZÄÙoØçxl¯4ôÙÑh“òG¤Oœ#¥E›§<æ€-b^ !©®.²(®†Rí+!&ê"¢ÄED‰‹(qQâ"¢ÄeÕ¼ï%%^e~æ%*b»xµ¯„èâ"¢ÄEd.>\^âý,ß^âƒìðQ~ʇù?cü.¿àCìð³¬dnê. ಅňêÞc4&Ú^b‡—yŸ—€_ò>¿æ~ÅK¼Äÿñ>¿öÑ%^ž¨>Â{üò’Äá£ìÓûÀûÜËï×Hõ2ñ~~I¶#v²–ðQþJ™œKý®úQ}Š-«(nQ⥌ê÷ù-î)qQâUêã 6\*qQâ%Œê÷øà‚ŠJ\–âåR‰|§"ÛÎùê›ç>ܰ©ì#ü9ÿé…%^Þ»QvpÄ^61Q/ȉ.&ï˜xæ è"J¼ìp…¢RÞ¢Ä+•ò%^Ù¨”·¬8q,º¶cî¶s¾Ë÷yÆ©/Õ-{Îuñ J|ú¡ûßäo½âFµZl4Û´“ìŒM½8KÏØá[Kù÷/ñ›wêü"¾}¯ˆªX¥o]\—úú}€'z°(ñªñ|¯ò?Ê[LÔ«ÕŸð]þªMc&꺸ܒ?~›¯èÞ"Õ{û~„oò×…ŽJoÍ’<á[J‰‹·f)y7Œ)q£’ Ýšévo%nTR‘[3»[‹7*©À­™ßkM‰ÕÆp¤ÙºhÃÜ1cEŽjÛÆö‰oߥ=¼œQéââ­©tT^ñŠáR "J\D”¸T‘˜mš4éÒ^ð¨Ú’­æ·,nT›þn£¼êð„ægÚkuÇY×ÅeE¤§DDÀFvd‹§c{OŸ¯y”¸¬›Î VH Ç>ŸfÓP>à8{e<½ö8Qâ²"º´˜I®Î8ÌÒn9šñói–nûr@ÂéÄÞ ŽrA7ÆŽ»|>¹C±áªg"dŸ6œ°Ç._ãˆIyÈa^Ý6þs˜CcÕmm`@¥ÛgUläÕmgŸ/Ž?_DÌ11É–>G•Çê¶ÍÐcĈ. ¯¸xkªÕE¢îoM¥£òŠW «ÛD”¸ˆ(qQâ"¢ÄED‰‹ˆQâ^%."J\DŠGñ'vªb×CG=‰W "&ê"¢ÄE”¸ˆ(qQâ"¢ÄED‰‹ˆ%.¢ÄED‰‹Hé°¸L2ò9‘¹„ÄŒhŽmérBsu²oÆùJÙÉ¿%"k' ÃpLŠ1½5üsaG+yˆ¬²7šõ€0—øp áÍüS©Œ”—Jýí?D”}º™Äïóyþ!sÜ!_%"º<àC|‘&ßçÝ1×Ä}j´H€_ä3|•·x—ˆ_ä„×x]îsÂgø{^¡DDܧÁÿòDt øŸãÙ·‘&Ñ N€hæ‰úˆÐÉ’ì˜v&üþØÑ1M ÌŽlÐɳí±s@›6PËÿFŸhgÒîfg)/—>‚Sš<½´uˆcvóÒói–j‡ÔH³m‡<'%á °Ïi&Ñ! ´fþ½Vö[H³¿û"áˆ(ñ5ð„. oM¸{:i^>ïåpŸˆ:Ïy“än=M˜ [¤TT¡ú sá "¤ÀÐsØóíç~p@ æivƒ£¼¯‘ûÿÅËâbÏ# ):e®n yÊëó6ïÒ'¥ÁWx•†¤¼ÎˆOòS¾ÌsRê|’w ù#þx¬º-ä¯ò#Þæ?x›Ÿ#™øü.)-F ø -öøo“Òà|•¯ó6!ù$?âó4ù(}N|¤D6Ol§1Q)%}zyùZd«øe´M„Áé ©IEND®B`‚lilo-24.0/doc/html/tech_21-55x.png0000644000175000017500000001506311521302637015440 0ustar adjooadjoo‰PNG  IHDR|9=N &?PLTEÿÿÿÅÞtRNS‰v™"»fT«0Á§D2ïÝÍN^?þIDATxí]¶« ŽUkEß›Ñ[§ÿÿ­“¶Ö‚"D+9q­{®…$°wvQQlQ\`{ʶÍÀòIJ OZTÄáh;#¦H*ˆÝˆ™%G 6.GLqLP{3KŽmT<Ž˜¢ˆ w"f–89ܘ€1Åð@ïCÌ,q8z¼9bŠ ábf‰ÃxHŽ˜ö³p„1³ÄáŽ@¼;&GL»I8ĘYâp‡@Þ”#¦½cOÌ,q¸c0ïŒÊÓN 2'f–8ÜA ÷…åˆiGY3Kî(Ô»ârÄ´‹€ÃŒ]Ìå³âZt…‹‹t/Ž˜®Á®“ÙúÙEöÎ.2ÖUÜ8bº·NfE|óä8)šÈ~$NfQ|ýX)ÕÖ}sƒÈ}¯Jü¯©nêV¨F•ž¡Ñ.²kWqãˆéÜ:™Õ#_ÕE[Åtö¬‹[SÿàS] ÷¢ :7g8§e>…1]ƒ}'³F| ¼VÅXEÝ(Ða âû¢la „J׿ ç2̨Œ#¦4ú½¾aÌ.Å×ÁxW™Ap,ŠÒ3êaËÎp;»´eN}«©þ LS[§þ_–MÓ71ó£vFÔc7'³Kñ)8ß*T0 h †D׿ ç2 'B‡Žƒ‡^dz´“é5K»G«Ÿ1â»'zÏÙh³zžoïCÿhkõ¯ìºVõêÞíc¼c{¥Rž&]áœÝ €^èÑ8|‡ßÎCgWƒ19½/[x7°¨Ý™øRðíaVA»›gÌ3G݈/|›ph8çT"­M÷Ä5LbôÕð1½á˜ê0EèPöÊvñË?Üë U+Ó ØÔ׬ðÔ_T  G]‹À¿hycŸè¼©æÖjl›Yú /£úg6¶PLa.V=¼Ž·5Ì^cW̧7æûvªCõE']oñ飭Z›q¢ßÅ,Ìüù.smðÐpÐÍÈß¾/ì%ž#À%N!KS¹u(ỿúU2 B19ù½láôõÇ“oè$LfàÜ4½1ß7SS5r÷%>ã¹6 âä˜ÙÐpÐßâ[bŸè,QZö‹‹äMå–Úáßè›,ŸsŠiî“Á¾=ñé»+znm&¾iªÃ­‰oeÄI1³Áá¡·ãß@äþYZÞS@3ñ ñÁÙN ãâÖŒi+еêÍ% ýr`'Ó#ß{ªCŒú°ûx_íÚà˜¹6 âÄNÌlp8èKñ½±OtN‡]!Î-iÆa"[0¦8W«†!¯iðØÐW NççÓó};Õ15\p´8y5Üïü«ßUþi'xbfÃÃ%Cÿ?;)4›2tÂtx¯à‚£¨[wé>h®€ÆÕkwÃX8&'ÃRèe€˜YâpÞn‡UèÃn˜éŠÕµ0­t4»*bf‰Ã%Ò)âK$ð`wbµ‡KßÃñ8-‚ö¾&<× AÌ,q¸KðÄÓ%ˆ¥~ …c¢8bñ]ƒÍ^ˆø6)Š4 f–8\$(Z7Ž˜hŠæböu§Þ,ÝøxÄá}óÞÙ¢+œÓ0£BŽ˜®A¿“Y{ã}º-ª?Â,Xͱõà‚3Ü5F÷‚#¦h2HÌÚ›¥véÆtïï8o=¸à GÚáóƒqÄt>‹®ÌZñ-žgÐâÛxpÁÎÕnFe1]ƒ~'³V|‹çP|ï›÷îî;ùM³)åˆé付žRX<Ï€«9f7ïýw…sfTÈÓ5è'f–8Ü%8âˆéÄÊŽí4ˆø¶9г f–8\&b/Ž˜ˆ)Š GÌ,q¸HP´n1Ñ2˜Yâp±¨Hý8b"%(:1³Äá¢aQ:rÄDÉO|¬íßû Q_¼¾H<¯€שɯ•k‹¨‰ü¸J/‡·åˆüتïê#/òc*¿Ä'òñý”ý~Jÿ1ç1ò!v‘ß1 øaÔ|ÄWÿ‘+ß*倦sŸŒ~à—!óŸÈï—Z!o;7ñ‰üÈ%ð»€ù‰Oä÷;µ·œ£øD~Ä"øU¸<Å'òû•^HÛÍU|2ñB*ƒßËW|2úýF1„­æ,>‘¡~*oñ‰ü~¡²6sŸÈL çÊ_|"¿óUCÔ"ñ‰üˆÄpvⓉ—³uCÒñÉèG"‡sƒðŸÈï\å´ÆI|"?Aœ‚—øD~gj'¹-nâù%Kâ¼üÄ'ò;O=‰-q_ÑÝä/‰º8Å¥ødð;E;É0ŸÈ/Y'`+>‘ß êIl‚±øD~‰Ú8ܵøD~‡ë'©æâCùýWÞ²‘$‘ãœÙ‹ä'ï:N?I‘ÿ€øyÅU’Jrþ#âù¤Ÿ¤°F|"¿$âü‡Ä'ò;DA Aÿ”øD~ J9Àõ‰O{ ¡èN|2úEk…ÜñŠOäG®¢È€R|"¿Hµ»ýQñ‰üˆuîÏŠOä¥R§?,>‘©’"‚ýiñÉÄK„b]þ¸ødô#ÔÒîP^|"¿Ýš!sñ•òÀ™žvñiºD~»TCd,â³DŠüˆµ#ŒˆïE–ÈïEÅI;"¾Ñòƒ¾32NØñ},£ßñ-ù-9ð£ˆï‹\‘ß%ˆøÄŠü¤P$âs’*òsÒB\(âó*òóCX,âó’)/^jˆ*D|+DÊè·BA•ˆo•D‘ß*=‰•"¾ E~%T‹ø6ÉùmRi â Nä@R„‰ˆ/ˆ4‘_M;D|„ÉÄK Q;ÌD|ÁdÉèLU ¡ˆ/(4ùí +ÀTÄ@ÒÛDä÷æ"}OÄ·“C‘ßNÂVÌE|+丫D~n^ö—Šøös&ç~œ¹\D|.V6Ëdâe“¢_I.9øºXÙW&âÛÇ×ÌZä7##jWÄE›vênÿSÅ{ÿyϲ| } *¨E~ñìÝžÏ[¼·xÂM-¿N¨ØÏ@ý|Öû½ÄcÎÊïÖÌKd?Œ»œó…µfUÿïóÙ¯H“FÄçäe_!œ½<‡}.¹X2Ù„0¨E58E9ù{NÎßЉ5Ę.qòLŒ©(¢F9ù3OÎßЉ5‚)€ì(’¢œü!çoèÄÁ@vIQNþ·ó7tb` ;Ф('gˆÃù:±F0ER”“¿3Äáü X#˜ÈŽ")ÊÉßâpþ†N¬LdG‘åäï q8C'Ö¦²£HŠròw†8œ¿¡kSÙQ$E9ù;CÎßЉ5‚)€ìO’†òY6ÛQ|:™VÐ5ò¤+\@×/m"˜Ò³ ©{âÓcÿÔºçÂÉ×ÚuÝÑ]ë ç6ͦT0¤jA’ßcã!Ð…“iFÄ7§ÛIÑÜ Ã}rL‹€Z|õ¿¡+õ(T£J×s´ §·øÐMµuß zû^•øÇÕÍ ,œáLÐlÿ ¦€Ô-Hêžj*x†¢¹ ÷¢Ù|o 'c G¾ª-ŠVn<@³ð3>„û>Õ…78;Ã}·šU‰` Hׂ¤nzò½Ù”- ^®5@ 'ÓŒ˜·pÆ8‚~ëFkߨûc³3\@߯l"˜²³ éS|zÔkdž³mádê–âë`¼«Ì 8ê‘ô#Äüƒ3ÜÜ Ãý30¹Ï‰Ž#‹Ó"à‡ø†q]ø.œ Ü¥øHöV) ‚aÐ œáB9ª¦ÑÃóüyKܬ¯» 0 í‚Ën¦²l𾉙¦Ó0âw|®ícê˜\”|—}|MÖõãV­ô¥R¡ÚuïCÿhkõ¯ìºVõ ¢´ñäøbA—>ûðÝÇÕ8/-¸°éfäëýÞÕóW¨“—mÌN0¦î˃ê¨ew«X<À¬ÃµÒPc %,*à'¢èn®ñóÕÅ=á^Nv§†CzQùíL|óý¥ƒý`âñ +Æt7WtQôsñu+ u0¦ ¾€QTÀ=NšUT Ûî+ÊãGõ®PcÛÔvvGïwh†[(Õ[ßôÕPôãM57knLl9ÎáERßãüPòŠ©³ë"èü¬'f¶Ê1seŠ {CÙ+{ØÅSkÄòª{O‘M1IP‡b &/*à.'Ȫó’ùÝÅ]áÞnf¯»=ž#aõÒj;»£÷!#5œ´Þ`T„­ÆÃ3Ø•x„‚ÑòebËõ\”Ã1põ‹¢ƒü Å4¼Ž·Sç³Uó}‹Ív¡3ñék;[÷žÖšbÒ Å@1‰ åäïRJ8<±ëZ¼¶Aٗ͘²0v+q<ƒ™œBšf 1aS9ž6ÁÑðotN«Oa‚ÿÅ4|0`{h{¢g«æû›-ÒоÄg@¼§È¦˜4¨C1‘“ô¸)á}Î#\S ÓìÖŧM¦ôØœÂÁ¯Ôg‘x#>c²ç|}·èÉR|¶…øôD–Mÿà7ì6Åœ‰/u0¦©ù­ÿ£F9ù{’nÀÁ ÿ¿ú¬ gwp³¡MæZg@IÁÌãtšL¦r›SöÞÃ¥¿Ë›5Á˜ÌÕ.ë=YŠï=s¥‡h í1»Ú‰ï=­5ŤAŒi“k0ÊÉߣ”pCÓÀ½cLݪzšÝÁýá~Çaì5WÔW ¯}Ê[¯&sc¢Ë§9¢ªêÕꕹÅgM8&òx›N=ÁÙªù¾Å65\p´új p ˆå]÷‚MŠ:Ó'ÞOQ£œ¼]ˆ»âö‡[­Ñ U šJbŠ;EƒšSTÀ('?Äáü A MV›Ð•gbÚî jrLQ£œü‡ó7„³,ÓÄìšA݉˜¶{K„šSTÀ('?GÄáü X#˜È~‘T© Ú^NAÖ›FÄá6Û;Ã@0°<‘ÔÀT‘½µí59m[Y‡ jóh#ÁÀðDR  ¡õåéÔ‡€îfc"˜ReIêïmUýàþüX4ðh˜¾5í½ËîböuWÛ,Ýø¸'þ¾Ñíì‘+œÓ0£BÁ¬‰$¼Ç A¸‹ÓtvÅ…÷.ûäôßÞÕžnœêp,‡É÷î‡×g¸Wmž;‚) oI“øà‘c¼ Woxï²ONñí ªéæþôVs¼ot8¼>8ýjóÜLy›Hz‰¯náé skÚ{—}rúˆoÕ¶¸Ž·(ß7º?^œá^µy¼M$½Ä×wx²H¯ÞðÞeŸœ>â[ñ-n€£øÞ7º?^œá^µy¼Y’p\ý»ux±QÁO¦é;òÞ»ì.f§»Ú‹àx|~ßÕ%W8—]Ne‚) [Q$E9ù;CÎßЉ5‚)€ì(’¢œü!çoèÄÁ@vIQNþ·ó7tb` ;Ф('gˆÃù:±F0ER”“¿3Äáü X#˜ÈŽ")ÊÉßâpþ†N¬LdG‘åäï q8C'Ö¦²Ã~ëR¬„` @Obâc@ }>j¤ühZßÑK|Ý3ú…ùžˆR, 2P=᮵lÂÀ/hïO’Waü¢ïÒfö È9_ö)Ì€ˆ/ßÜeßs_ö)Ì€ˆ/ßÜeßs_ö)Ì€ˆ/ßÜeßs_ö)Ì€ˆ/ßÜeßs_ö)Ì€ˆ/ßÜeßs_Z ñöàýëøúò mí¥{¯º°Ÿ, jïÒF"¾Äôè_¢/þ¾°þcŒË†ßuA?Y¸tÏð³ˆ/1iF|ׯ̬‡[ûÁµºõ¨¹ÖŠø3§ÅWËßoa|ÌöUk~±Ð¼ßÑü£~9#¾®ßÿ›y룮ӥ?YØÃA]JÛ„Ë篈/1WݳQM§kögádjÚÿ~##žÚ—3jCݸ}ë£>qÔ¥ø†©éåŽÿôÏD%vò¢î"¾Äļ~‰Þþ !¾ÜÌÿFF˜}9£6ÔÛ·>ñ¡»~5®ñøã×7_bV'ñMoaDMMûöy³72‚ÀûrÆ·øì[±Îü$ÏL|ø[’ß]L„yˆ»ˆ/‘ÖI|Ó[QSÓþL|öŒP«Þ»¶iûÖG¬û_UÁOw3ÝD|i‰Åy>ýK—ö-ŒðZÇ~îXõêÞO/hœ½‘€Ñ¼œQš¶í[±N—~üdaûï\×ÙˆøÒÄw´·Â£ø-pñèÎPÇñQ3JO«¨@Ž›ˆïâY­”Rrؽx’¤{ù1 #_~9cÓc›TæDÄ—_ÎØôXÄÇ&•ùñå—36=ñ±Ie~@D|'äLáÝ[Ù¾ñ}Qr@Á¨oÿ£VËØPÏ.KûE÷Ë2DŸE|g¤ 4¶÷* Û¨.Àg_Ûûq«E…ýèpq^»TÄwF~¬ø¾Vi臒D|gd%û6úñ¦šœÒ™%f9†ùk–mÀã½2‡]³‚£oúÊ…MAU*|КkF@|·Q™½¬ÿÌŒzÍ‘Iù³VÂA³‡gͳÃü5k5j\%dÏùðAùúŽŸíˆ~rÞ®Ö°K;twÊÈóÅŸF"¾Ä¬1q×GHPžYÂa–c˜¿f­ªf.¾²„Ï­=Í3⃰ZÃ.íд”%üýT¢[@¹½D|LÔ“ÊÏ.Û0Ë1Ì_³Vc!¾a)¾A/B]ÍÖG–Õƒé|±Ç$>c$âKÌw{صË6Ìr ó׬ÕЇ݇9É¡*TUñ°s.X0‰Ï.íд” Åª˜/ö°â³E">&êI„QÞzvÙ†YŽaeôp%Ñ}­V›YÁQ)³êÆX±1ô00æØì›g9[ì1-1Eè’ØíK¸ËGbôa71Æ_uñ%f^ÄO ˆ/ž;ô„µŽ,Ž€i,Dz‹ø"‰·tD|éJ„HD|‘ĉ[:"¾t%B$"¾HâÄ-_:‡!’_$qâ–΀ˆ/C‰É€ˆ/’8qKg@ėΡDˆd@ÄIœ¸¥3 âKçP"D2 â‹$NÜÒñ¥s("ñE'né ˆøÒ9”‘ ˆø"‰·tD|éJ„HD|‘ĉ[:"¾t%B$"¾HâÄ-_:‡!’_$qâ–΀ˆ/C‰É€ˆ/’8qKg@ėΡDˆd@ÄIœ¸¥3 âKçP"D2 â‹$NÜÒñ¥s("ñE'né ˆøÒ9”‘ ˆø"‰·tD|éJ„HD|‘ĉ[:"¾t%B$"¾Hâøº=9n|ÓÅ Çñˆ#&^ª³h8&Š#&_& ˆø$Q?c@Ä÷3ê÷5Ì1Q1íËj&ÖÅS&rÚ×Mމâˆi_V3±æ˜(Ž˜2‘Ó¾nrLGLû²š‰5ÇDqÄ”‰œöu“c¢8bÚ—ÕL¬9&Š#¦Lä´¯›ÅÓ¾¬fbÍ1Q1e"§}Ýä˜(Ž˜öe5kމâˆ)9íë&ÇDqÄ„YíÊF5ÕG~køôh>Š6? Ï5¶¤D UÓ(dcŽ'€“v’0¥4|¬o÷@ÞÔ}ÖJ‡ºë»YÉö®öÙ6;Ã")QÈCSÂWröÝ à#À$ z¦¤–u¾Ó°³±¯ÚvŒOhìv)‰ªGl ¸˜ã™ï{ú`âñ +NÁÖÂ/¬ºg¯›-E?ÞTsë 5¶M=ÜA}ÓW”WJµp júÞ(Õî©F•]Ñ—ª©µÏÌþñ ,¶Í¤D=îª.,Eß+<㡚V&jB)Kä# SbÛǹÏA¯^ ßø¾ú7ùªª¨ñ4vEÊkû¢™š1Ñì P­n5èìViŸÉ¾¼ê¸oFNJTw{<²áàYëÿ_|¨ØÔPÊ6{½n„i=ôk§‘ïÄ–(-K8НÄq®­p·hU1üa ÃÍì•-Œ *6LÐd¯ãèÒŸüIIâëZ€¤W7 à›} ÁBEPPC(Kd"SbÓGºßo:úHž‰opˆ¯†#¬>%‚+A܃¶·ø†ŒÙçõØ)‰ôqG¸¦ðZ ¿x¸;ëâ[§l½Ë›µ)˜6ƒÿΠ~ ß a§Ã.ˆP!ÙJÍ&F>öÌ0göÈQ¡ð° æè3Ùg<ò ÿ <ѽUòa¡‚Å‹š`ÊÐ)ac*>=χßo üÖ+¸à(êVÁÇÆ·J•}úG[WU¯Ì¹œÝƒK ¥/8à/úXû~¼›‹˜²S\S54MSMt­ê`yó¡ë¾jÂ)K¾)˜›>ÉýÇ#Ê3uegb¢Êþ8g1¹¯W»­ÏLÔY”‰i7áp¸4Ó.Á~ãÄDFÙ‰˜~˜9MsLGL ¤ö c¢8búÎƒŽ‰âˆ‰Ô¾!pLGLß™cPÂ1Q11Ú7މâˆé;s J8&Š#&Rû†À1Q1}gŽA ÇDqÄÄ@jß8&Š#¦ïÌ1(á˜(Ž˜HíÇDqÄô9%Å©}Cà˜(Ž˜¾3Ç „c¢8bb µoÅÓwæ”pLGL ¤ö ã/ž²ßÿY\±r2MÿIEND®B`‚lilo-24.0/doc/html/user_21-50x.png0000644000175000017500000000151311521302503015451 0ustar adjooadjoo‰PNG  IHDRMY1¼*0PLTEÿÿÿ/Ý {tRNS2‰»v"ïfT«™ÍÝD. ɽ»IDAThí™1hQÇÿIß]Ó»E·V)vÌPÁÁ!”€²Méz@K¬%¤Rƒ‚=‡’€“[(BK§*\„ ÉR‚`q(ô@Ü}ßůsG.Må¼ûß;^Þ÷¿ß}ï¸û‚äÏ3ß\¸ðµùÞ×Ü#d"rcnþf_¦ý‚ëkÒß$.ØØpN`Ÿy¢·âí&’B7{£‰Þn¸&ꎕhðQWw{»ášx }¶äµµ}‚’}êä«–¾½¬Ý¾ƒOÒæûbEžÓÄγ70œXššhÈ`¢#^=Ð[†UpÊ@<y>L6&­"â.5Ï„vpYìáÝ:L”!R( (-„mblï*ôïÔ<(þˆ~¨Mß•qˈ¦PÏ=‚‰ñÖŠ¤@M4*€†ñ¥°N&4ɤ€a˜(¤7Ø5-%3ÚÑ*m|1,3·&ô6æC7AOÌ}Ä·3^Ü$Ë–_ªèoW1–E¾”6?¦%•0“¦ïo quôg€F)Ìê?&áóån$Hðm¤ú~½dpžK™P$˜«Ê E‚ °ªœP$˜«Ê E‚ °ªœ8ï$.~ËìZ|Ñ 9±ˆøa7¸=òÓÒÿ‡Ä"pÔÞ1³Ÿgd™ÏÐþø@–þ–±õüŠïå„„ß ýçxe‚)Š`U9¡H0V•Š`U9¡H0V•Š`‘œðùçlÃÝ_G•c—êä+IEND®B`‚lilo-24.0/doc/html/user_21-510x.png0000644000175000017500000000361611521302504015541 0ustar adjooadjoo‰PNG  IHDR;báî"@•QÄÚòtl¦kN@ž|_K-ÇëE“Ót+“÷¼»8ïÇηƒC@˜Þc±Oƒ¶m‚GÌ«£ÓÞR¤ÉUÈ ÷4~EqÕõ–B^zжN[ïÒ ² ŒÖöŒãâ]4càÁ4ôÞ÷PÛôèÞOdYEß—¥Q^ÔFÂB×äÞZv¨Œ¸ë£²Xž; ý¶S–f¯›êà¹]5£Ì¤u¤ÝhÁ‡Á¤+ ¤>v¡îINlE¹'kC£ò‚ŠÉ¨à±ãwñY:ï¢_Êc×òÐGÁm3ñ} 0ž]Þ„…f87G vXá\.žW¬¢=ETï<îùÅ5àA²ƒC£lÞ:9šYšLˆ·pwÉ õiȪˆ{Ú4¦¢'ic@A¥ 2ut(±eÌÓÖ¸xW¢‚±wþetÅwEþÕGâ£cI¾JÙ¡¢æ Àq¬ôðŒ³m€(û¦ey¹3*ª”¦¡uÁ¤ë5#ŒDœµ£&Q7&TÔ °Ï0Ä–äÖxöŽw ŽÈ$í¤´,@ñ]éžP©„Iˆ"¬({Tôˆ¥I.6˜QôŸhÿ-ù†g÷¨`ùóLR¬@ëƒC¢(ŒÜïEœcµÜ“0ÞÄJ:ëÚær¬”Æ“wѯ¸‚d€…íB)®ð‹Ï#Tk#9ƒ nÖ7¡Âk £ÔˆïÉ.ÔÓV0Ѻ³qÄ´ t¼Kè|êǨ`-˜$N[Èd’„h[YA)°›z´/•Æ“wb¦Œ•ì´Dß?Qµ‘=¦a‰!*϶Õp‹6Û|U,€y²1­ aQg£}P$D&ïB’‡ºžÏ[ÛZ>[DZº‹w0üjÚÙã?gzŒÀ…0P’|§i]kÅH²c¹„6+ˆUý´?¼‚Î;5ÑF7(‘KK꬚_‡ …4"K=¼ƒý:T¦6žsiŒO¯ÎbÉÇûzzþ|­üüXym<×ô¾Q©áTîrD |â¯Áö¿l»WPmÚ TðL68~–™è—Zë|1¬Yz¡­°|5÷x΋¼ æ#,þZëçÃsfŸõÊ–_âŸi=}ÿ*/0†§-Ø1£òa¯O»y•óŒá‹ŽNÅ3h)šPÙpu~ P ¿ÿû*™Ë/µï[f M|Í;(§ÌöKÅQÁ{-*üD©Gœ7ų-×abe ß³·“öÕ“dõdÃ=*˜>8»à,šñAèóJÊçy¬¹¶§<îýew¾•/çk†nTjxݨܨÔ¨µÝ±r£RC ÖvÇÊ•‰3jΣmeNñõÚY[~-~ r¢ù‡Ç ?À~ð¥¹`N)¿•²©®(?~7ö^–)k®eÇ?#ÿ60ߌÊ#†RÆó£R0§%Þ¨æWÄʆr›ˆéǘ¹I¢dÜJæt #r¯)ß+ªÎPrâØ•¸£xÐÈŽL)˜kç–9uKHœá»Ø|7*U†’èÖDLItÜ&QÒÀ÷Ì)òœªÌÄË }%*‘×+Ù£I—C¹¦Wò>+\Ü6‰’GZ0§†ù_J­¼ |%*5w« åš^I™›‰¡~s¬\<š«ÔݨԼQ¹Q©!Pk»c¥ŽÊZzL, ÿY >î C¶IEND®B`‚lilo-24.0/doc/html/user_21-511x.png0000644000175000017500000000264411521302504015542 0ustar adjooadjoo‰PNG  IHDRÐ:3UÊ£0PLTEÿÿÿ/Ý {tRNS2‰»"™ÍfvT«Dïݤ„ŸIDATX í—MlEÇÿkï&ñGbSÁU%¡‘C|@@E ‹Zµ*(Ä'¤B"´‡š"ÒK->D‹ÔbUM.`”CED‹¡R_ —¥RAT ªª |'M á#æ½çÝõz¼ö¦´9‘9Ìì{óæývfvç¿ TJ¬´v¥XÁ1·q“¯«rW«…•PÕ–îªÜbl¸JܵáêX§©í?pwFISk¶+.Õ–îZz’П¾Ax ­iœUÒÔš“@ðšË=\f«ÊW½-eêË„O2×ô~Ü•ÃëR_$ïp¥‡ì;Årù”ý/ƒ§,ñ§€ÌJÏ«@‚Ü®¤d¯”^Äm2£H‚A<³»œ±8¶¯Œ p9(/e@vç¡„øŽ®dí@=Jˆ,¾žØ—DëÞcy;´^K±sÚ2ºÌIÁ½Ù=ùÅ7·Gy¦‘—ihFÚWvh½vÑ-Ý"úð®³@7†Å|lòµžç»¢‡á^ºKvh6\@Ë †u:Tм#²i†Ù‡¿ÊóÇ#½@O,Ðg ú¹Àv7gNa – #4–Ù ß%ÓyH<@m¾ Ò—ô°n§ôn7‘{.Ì{tú‹I°M öóƈ=¨´q!™ â“¡+c¼±»FíXï–wa×S¹Ðåç€çeW‚¥‡J9ö^™*X£jAÞéê{íLv„j[þÙŸvä³@õ»½—n-Ý}µJàÝÿýÚÉÍ)ãú@ªt«¶Ü“»¤õÎÌ'Ç›½¿ûâ@ôž—â0†G_‘ÁV¥J·jKX}KÀÎîC?èŒÕác4‹C)ß(A @-[€wSÆ B&…Òa>è Ðgö'dp¹ò‘rã{ kzM@óÐL %P,ÝœÚ⸵ÌÚGʧË_7@1SÛ“ÂÔGIÎG ¶\,D ‘¿^uqXºJù¸7E:¡B¿-X æDƒŠx«Ôá"ùI¹?(:%Œ·ó”Vf4@€`Øó7yìâ'åþ ÌæC)=ަ®o/X{”Zž¶)`éfÙ®/å«ug ”A¨ƒÒòS—¤oW´›»ã¯”û‚Bhè"½72è=ê„ñzMz¹œâ+å~ mjs'vŒÿ”’Z'CxèÍ8véÎ;ù j$åí¥ß9¸ÁSWÉÕðª ôª¶Õ}ã …SÏ\Õ[_¿÷ÒýϤ<«.“*ݪ-ñÞKW¤>­gÄîW³BãΪ¢J·jKp}éE¼^•’È êj,åÛÿ‘~ 5)K¹âó‘ò9C$Ö“ÁUV‡gdÜÂFI àªÓ¹².K¹¾„¶rß.ƒjAúÙè {¿H<^<µØ¿U‚œß_‹ã'åÙ*P“Üq-ã8“|"œ0ŠÆwÉÌš[]ü¤_r¼•ÛøÀeE±Ò0t  Âv¢5/«ò“r~ÓÔô —xJ53j!иjäxœ‘ÚUùJù¦,G[¹£.£2£ Ò‹xì ‡Ð‡ªRü¤<*²A]3£ÏË -."ÓË“ÖfŽü…7ú+?—ÀÊý^-ˆN†îemÛ;ÛNìß<4±|,Ñû#EÊ;å¢ùü•_¡Ú¤p Ä7ëÖÒ‰K­ÚT ŠGµ­ngµØvŒ¢Õ{'÷:èzWµzéÖBÂíœÿŠBtTGºEIEND®B`‚lilo-24.0/doc/html/user_21-512x.png0000644000175000017500000000370211521302504015537 0ustar adjooadjoo‰PNG  IHDRÐ`ž@á20PLTEÿÿÿ/Ý {tRNS2‰»"™ÍfvT«Dïݤ„Ÿ2IDAThí™_lUÆ¿mgÚÝí¶]QC` ˆ%ö¡}0"Qp XäAº1) …FlËCH4ðB# Ü"ÅX!KªDD1´þI ˆ`„ ŒbêŸØ–© õž»3wgîÎÌíJ‰v’ÎïÜsÏoîÙùf·@v+½‹[”;Å8»j»ÄØAQ)UÖ¼ÛU›‹I×YÇSMº¾{¦j[ópJ*“++¤¬yw.5 h/ß!:ŒÒv•ÊäÊc@áMGøXá)WÌ}Y2Ô)Dw7 t$î¨áu¨ ±hK¶‡é\9bÒõÏ€6'-þ'ÙžGµ,ì(ÊôØ@íC¸ŸÏ¨¤–@k<«;‚åq,¸½—» FO¦ÀôÌ µ<¶ívÚNô¸Fí Í@ß\•@iëö^;Õ¯e¹}¡TǰL×ô>Îcͱ{”è4zùŒBgÙŒBçíT¿öbI¶tC¨Çr\.Õhá1àc{”¨ô»æÐÒ]°S}Ú¨‰pZ4öPAñÂZ0Í®Q ÅP÷¿ÿh¤¨à t’@¿øìpqÑ$æb"»ÛÁ4xì‚!nP*4i#š¯Ù%½Ûi,Ü¥ktÚ+ f Šéú:{P.hê`¢;²ž U)ý'±¨ÓÎõné*,ú£§;ry5°–_•ÂÑ'F»)vèviÊy—óÚ•ì Y[ñ;ÙE;R,·÷ÒÝ Gwžƒ ö;£ãs,jS9!òÉÖ-k~¦¢v(TÃ|¦pÐXº{³°Ïïª8›ýjzKçk|°µ“­[Ö<Í„‚a .‰GÑÈ@ì«ýJe¬G¡¡Ÿ³¼QXùTž Ϻ’úD –Êæ§;ÔÀN>8³SX¹~…§6qÐBKe òöân ¬iE÷e|¯°òÓ™·› P¹Z–DÏñÕc ²îòPb–üõºƒCÖhåûyr¨¤2I"òû *®­'P?öŒV:H*+Wƒbgb }o/+Ëg´‚ M`Ùß,bo*+Wƒp©7’Ôâ(ªúþ¬ujÒ¦§l Ⱥɶý­|  ê4¥©deé®K°wWT‹YÒÊ• *â tŽ}n8HgŸ£™ÐÆsûp‰Miå*P¨gV v .ìÜñ)+j=¢ÍoƱxKu¯àðª +¯½AÉw]¶Và‘)õÊÚê¾sÄñ“ ¿•Qƽ—îeå‰Ì"鎵’­[Ö<Õ{éúY_¨mÝŽ«l¶ê“kó³!ÈÖ-kžêb>‡Hœ’ÂŽ¢š™K±`+_p«‰rƒAzšrŠhgm …•÷éÜb-Ð缎 ÒÒ±…Ág´Ê‚Pã ¶rmåt¬ÚSx-T„è†g¾ùjN'êöÅ¿l}'­Ïî2µÖéx¾clåi¨ˆ 6ÈÌhîI`y¼[¡ŸÓÍè5Í,‹GÍFc9~Äá,HeåøÚQ[ß!lP{‰P(œÄêhRï?Œ¹ Řx0 RY¹Æ¾¦Ó$ŠVÒö“chÇJ¬?8=Z«÷ïb ªƒû¦$ ¥•OKg@´G¬’öò5RÚ4¶FõìÝ€hFùkBvF*+ñ ÙµKˆc‹ìŒb•í<ö‡Ù̛e‰˜qÛùÚ©¬|[œßÖ$Þãã\3 Õ°'ûW´Ú ßBÝæô½êš»nhÍXÚ±·‰`;Å·òkìm°4«6¿élaÍÈ®¤hM©_ÖV·˜i!øímeŒS#jO€ò]Ñà¥Ï_Üg&¨öÍ άwì*%D~ ÙºeÍÏLÔ&%„Ä>¸ðÏöÞÉÖ-k>JÔ&%„D–tP¿Ïlåm£ü£¨ME„Èù0(¬°ò㙡¢6I!r@ú=<½Î׬L[9òiGc/l­ÕzÈÜ{-D¦Q|+Ï„ý8œXÂö+¸¹»@ +ÿèò‡”.VË%ä¥Ó⃈Ìݵ)¬|FË®Ú.!ƒÂ Aú#swnJ+w½eFŠéÉ ˆÕƒÌݹ)¬\z¯S€¾°@“qdîÎMeåõ”.&áα'CõHhÞÛóv¶Í*ê8ÒIæNÉö¦°rsò­&JUƒì‚~­)uÈÚê¾sÄñ“ ¿•QÆK7Ž_ϧ"¨ÎÛÛ™à},;ª¬ù(Q›”ùdG•õ¸‚Vë¹èš„Kä5#…Ã6VîqÕv‰¼@ ‡=g]µ]"/Âa‡¨²ãú»D^ `‡ÕÇì°ü„vÁ«Ý³Ã0¨Ká°zÿ˜VR8,®ŽÔÅÎ:ÅþñâT9ì¦çoA™"ÞO†*  °ÆsS9lÁxÝ ¦„—µÕ-&AZˆ¼no«’¢µ'@Š•Êéþ–n[.ÕÿY›ÿÁK=1+IEND®B`‚lilo-24.0/doc/html/user_21-513x.png0000644000175000017500000000665511521302504015552 0ustar adjooadjoo‰PNG  IHDR˜pÑu{=0PLTEÿÿÿ/Ý {tRNSD»ÝÍfT"‰2v¯«i{ IDATxí\ ŒÅ~>ÿìÚ>ߨDQSQ P=+åO …kZ¥@(¶€¤•ÒrnE¢¡:KéXþ¨„Þ5¤¥¡$ç ªBKɶ JBQJKÏ !ˆ¦€ú#@!÷›;rî›™}ã݉½cŸ¸ ¯`ß¾73ïÛoÞìÞ~Þ€Ú¶“KóæŽÁޏÚ{Ǥ††ŽiR»zûö?‘¯ÔØ-e£#ìàF¾gG l©4ôA·E~c„'í`ocdb èÍSr§E¾ fÛŽ°ƒ`“Ȳ_‰qº}„X"Ø ™ÎäevÇA™Œ‘aá&‘ùz8ϲñM” %ó$„r"·{OƒYo™eFd(}ãÈ?3›6÷Ü9v&Ë}óy»'1Þ´Ét]à>º¼ŽÒ¨ÆþÝqc÷ž‚ñònËWZ}g`c÷KÝÙ'‘ƒ#¾±t]©+tNKvk:xtíÞè±+ó Lbp%Ì‹FÕ2ºKcYOh2 ûÆQè:+|8@ ©ld"„ÈÁ‘Ø@ÍY«uL¥ÊÉ2Bã?´ï,¾£ÐÁÈô]q*ô®´ª ­)n^?4Ð7]3ßgá¹w DG@W22ˆ<´¸¦|žRép2x3y¼”• ¾%ÈD‡F¡÷’¤çxMc ?±ãÛ>Ô‹ó¾Ã‚î|—ddrpì)MªšñÖl“‰ä¾2‰¡K•¹ßè÷þlº†,U»´ãZ*`EX —WÉ(•aÈÁÃ]ŪYjm(“ áâС66ð£âš¹ü¹ÞÜFw¦[gúóþ$ü.° þçï1¦UF`»frp*:1Swòм DRóOO¯~Ù‚W_g-·¼¶g웩ù×xÃwÙå½”&°|áÇÁØó¦e<÷fÜØÿïHêÂãyŻٛ›SÝ7ösD>eüÛ¥"U˶f 5­¨4¥ã· àñƒ(•ƒÙN§ÓäcÊM¶Ééy:Wn—S;ZFéªú¼™r“UÆèÜÒAõ]eçQ<îþÉ£Û7ä"¯\±ÙRÒãFä Mª/¢D‚Ûº1`««ú¼™0ª sÀŸ 4 íiد¤9Æí( ùt9ÜQâÚ+/aX/hs>źmBX^Ì5„ad`‚‘é˗ϳâQ æ¨_.<À::c*™z1Ì)L¸eú›øÑ>Ûr§™%=6ã'“ã«î7`‹óÄ7€žL½á‚8È _™ôü‚W¦#ÁÈ\Q•…ÝpÌîó-¸gGºŽ†ð£<ºP¦Y¶^ŒÎ<¬[ á¡b¸tRÉô7¤<¶!u6÷m × ƒdž]õrÚ÷^§®Ul´üÖV+|yG!h…3€~x¤-Íb±tWžFÐŒ0ÏgAälÌ€eðc`þ`üLŒ?¬bpßšq^™È3X™È.êZŶÇá}¸Ì:sæ°‘ô#ÿ8„‹1‹Å:䵤©ž_.³)è‡5p [`m?Í7a8É´ŸÄ˜ã à ¶ÌþZ……W|O¼¿T†Ë× ˆY,f>7TL}¡$ °Ïħ|/èã5³ÅÐv¤ís©D&ü_›Ì«ŒÌ¥tÖUì"€•Ðfuf!Û· ÏȰXû£å ›®#üa昢ÛÓ€>#Ãc[ àQ+rX102sÍ*,D8²E­Õ‡×Lh'Üö)`>#Ãbkó_®R™ú0àAÄZb×Ì`~2Ë}$Ãcƒykæ¡·²ÅhŠ=l´ŒÞÓá6œm]fêêix|<¿JºGN³XhèÒ1êªLðf¹mü`1:t%ÀB`~[é#¥"‹ýö’³T î 5ÖbýJ'Õ§fÊM–â5Ù¤ÒKõífWn—£ŒoÔ¥ÜdÍWi¼+·Ë©Ô»å&Û@ªªC]¹]NÕ!3k Üdg–Å{”+·ËñWw+å&[w‚¸rKçxH[ûdÞ %†k˜†:»Pn²p1!“Qx©¾+÷ ɨ2Yõ]n‡Íš-m}Û> <ç¯cð´%wãë²íKr¼¿ØE”9V}Ñ‹H啉 .ÆLç9’U;ܪ4¨>o–¹™'~zBڶ匧± ŸkneÃì±èl¸)ǺÛ[GÁS6Gмå&+–Yg—Ú‰¼ŒF6?äÂp;œŒ¶7<ŠHÆ·æà£Ë”±¢9Þ_ì4²yM‚w#dd¹ªjd³1Ï…áv8!m׿á~lD2ø“ÀÕxô1ã0Dr¼¿ØyËfßß¼‘ [&cü’wø"_¥}8Ñê²yŽøÕEæf)¤ÃÉiÛ1ýÖÄÈ\ (ŠáU8øŸ, Ѧ‘Í¡ïH¹É–ɘû}Ÿ^µ×·Ð<J}÷qJë²ټ܅áv!Ÿ. `##³5ÀAˆ^öï.v:Ù¬%ËaEöVܯ…5y†UaÓÉf=!má[øJVTÆ`$æâ{,ç'4:Ù¬#c •H„‘‰,¨@„…t²YO†KÛï¼xÕßòâšYˆyŸ5óà|2ÙS6ëÈ‘#Âþ…—*“ éd³ž —¶·<†HÆ· ú²™2-ˆ:VƒN6ëÈD%™~0Wf*² èd³–Œ¶ësøw…“Yƒg°&c> m9‰©•Í:2´É܇MEÍ]2±ó@+›udli{û²-ñòÀ—–ýÌmý«Œ¤“Í‘R©ÀzÓ]Œ,¿›áÀ–#‘s¿xÜ[Ú·mžùTºœº|¤“Í[KG|  ¨œÊóH•ɪOƒ)7Yqk¦VM*íªo7ËÜ̗ΰ2¸ .å&[™ñenÖ_:-2ÞÓGE¶Uïù*¯,×2kÉfïi£åEv6,3Ã>å¬ãÔ3Žcv¨ú¼™H­“Œ*“Uß…ávØÝì×ãÛ·Lò°cgÎκd9¨ÊdÕ=‰Ù:Él-ãñ#ÕçA™›yÒá·f|¹û{Þ'Í÷bw«0¦ƒŒ·l6»ŸåC(7Ù:ÉxËæuoˆÌírˆŒøüšwägPŒ·lö[·$œ¹% ǰ³jF6/0ö;0NåéÜ@ްp¬ÈÅ®oÙÜŸÅWD¸Qn²õUÆ[6›“€ïº$Ưø©º& +§n:}ùâ´¹÷n&máK†;nÈ?ZäøÎ[6ã•Ú2Ùœq‘‰1bröĬ>‘c~‚Eüii —¶óa…ñ4¾†Í‡Êdt²|¼/MÙú*£“ÍpŠãü×  ° ¸×bd®Ãÿè¥-R¸7ØW®€H™ŒN6Ãú¸3÷ÌÈèd³‰¯ŸY1b/±íü,wX·a¶Ã»YbFfãªò(k±÷†­ºû'™Ùù3K&«>#28‹ìÍrõ·Íf¾‡S&…ï,B2™k°ÉðÊ$ØÛqGeiÞ6Ïá…iŒL@#›}¼0„ÑÁ¸S&sX볡DÚŸõåØõøIÁûý¹`’ÀN6Ÿœ¹Ý•Y ÂïŽ,ÊVÅêdóçòü¢·sgq=€O‡®M¬¿ÎɘÏ/0i{óÒ…;–dŒçWs™ÊédóÚR‰}‘$'Ê…ñ={ûÇ{{›=Þ6ø`œÃ.vî,Oæâ!íίôP}j¦ÜdÅuI­+×ÝOõí°ÌÍ|é Û­M4”›l]dj<™›õ—N‹Œ÷ôÑD‘mUÆ{¾Ê+«â2kæWÛö‰¼{•iâµC$Ⱦóˬ62¥úªÏ›‰ÙYJF•ɪ/¨ ²³”Œ·lŽ•ø›7yqÎr2ý9÷wÍî´;Ò'Te¼eó FÆ[6ŸXd4²¹ãªé,[ht­7€vï´ÃwÝœ8qÈèdsS~aÓ¡ßdÕYWéÐK²^y4²¹¿)¿›y@¹Mž? I‡Hp»šK[@SiÓÉæöÌ-E6Žr“}—®!m™Â­´éds$Քߚ+A“ÅZ¤ãªÌ1c\U&«>u¦ÜdߥÊÐé4f‰ÙÍ|ʉbý¤SÇ2Óä—Í”›l«2rj*ȉbÍÒ¡Ê4ó­³ FåóšQTæf£¥CdÈÎ(µ{å&;[—YÆ}Ú ú¼™H¥dT™¬ú‚*‘ ;KÉxËføÁÛ¼RD‚ì,%ã-›¿D“¬6D‚ì,%£‘ÍE3}‘ñ–Í9FåD©ŒF6÷ßó’Íý/¼‡d3~yÝ„ÄRÕíåÍŹ®å¦–'löçf™ÆdsðSÍøHWÑ^Ce“ÍøpÈ:«.k©zmd/™Û XÏ2Se²ê‘•Ô¡ Væž)™ZπȶÈhfNNT«2š™r6Ó¬‘=þˬ™2YÉ%o^J¼©îÿ-2Ï­]~BIEND®B`‚lilo-24.0/doc/html/user_21-514x.png0000644000175000017500000000532611521302504015545 0ustar adjooadjoo‰PNG  IHDR˜Jt”_ö0PLTEÿÿÿ/Ý {tRNSD»ÝÍfT"‰2v¯«i{ FIDAThíZmlG~Ͼ»ÝÛó¯ R…òUiiQ[l…Т¦¤& ’È€¤@ïH¢þ A>)| JsJƒ@´’R-DõB J•BR*HU>¹VP1IÇÚ*ñwì8ÄËûÎììíNîvnÏ6â‡Wò¾ûÌÇóÌ33»Þ×k€úŽë­µk¦àDJn}b–F®©’›úãÞÑß–ªµ@:âV!>A»Ù™®qd²Ðí¦`ø…}›µ s‹3“HC®$ÈÝØÑWhºB‘%2.|‰ãùFû µxá"Í´ö@¸ä°».*f´</‘™¯ÄJÄÆ¾äx)´`±f^€h‘s{ÏB ¯ÀË—ÈÌvÍÈîžø[þà¡Î'¦n&î¯ß18‹…±ƒCh¦í=ÞaBIkÒmt0¥ •µsƒfÈzè‰2@mðl{áÈ  rd"4• D]¥qfnÙþläêÞ3Ði¯Ì <‹…» Œf^­Ò«î"­Ýš*4wFgÃáñæ´vÚn‰Íw@¦`ÌDQ92‘è©›µVÃLö‡ÌÌ%-:ýûɺ I2ÓµùÈí2ku­«\` §«fÚÊz©Ëı·õÄ'¸@[ÆÈ *G.m©‹Ï·Q&û6f&Ï[i¾2‘ËÜL|`r÷tøöWTƺÓ'Þyð9œ÷&´—ÚÌøÀB2CÊ‘©TuTã£Ù6c¿8ŸH +ó”–Kå~¼PKÍ&-¸—ʸ"´c+ƒf¤•!åÈ|ÛHM–z+*f"#ðÞè¥&êøn~Ï<ÍÅ\ñÙmôh-Cw©¹~>ÿnîÔ€V† `Ý3¤™‹Ï4*"ú]?°6FæîUÓÙÈÖs&œƒjy}hê«™»?qáÍн›r‹YšðŽïm袩½r1¥þ£ÇÈܹsºD|š]<”¹ëÉ©Ÿ òªéoX#bT+qeVf`eªÍ@«µ|Ǹ\> Ë[Ý`‰¯·ˆKLÏè<ÜP¿Z^j*cV-¸E”ú¨`Tj cF<=‰×íßzòxoÑxmó!S¢¹ÎâU2æ¥Â‹5 _’•1«.€Y>ð{ˆÎBKF%šk`²Œæ³•âd™'×î²Êæ‚A5à@“û-æÏ¡›fxäêUÌ|Ì„è¯È Ì™®ReœU¯º‹ ×úuc=ÔÐ]&› ª¡Ï!á0±òñAv5lGl37¸À¶NÛŒv‰™)²ºÚ§^¬r¼Ôf‚jÄÒ(â2ƒ¸¶™Ÿ³±rgÙ9ø)[™dšÌlfU>§yÐÛ×™ð£è›h»0±›&YYdàN§ŸØi´–`ßÔˆ ŒÄ¬ë,÷fÒ¬¬7s«±5*°…^‡<š9ý๴œùxJ4­ãÐlö›±MÉrÄŒåql¢)Ke‰l[Iô’ÌÓÏzã (^€íð] Ü—º™•õ¥ž•4´7¨À6³RleŒ—qeŒS¢iØ’‚·à6k-êãZG3úOAl$aR@ø!™ ¦/@¨·Ùtø Ãafe‡ YÌw+$ÎÒ±®€š¶™–ëÈ9>n¢möG1œq'ÀgpàÝ–5›ö Žõ$L*Ó_¨e&˜F´"eÖñíÂßJb¼g†© c2kÍž°PaÛLì_¶™ódfC ¢ø>€]Ðd¶ Ç &3TÖr¬ò`V&˜F8ø‡™Û`tˆÏb2ÃÊC8eÅÖH2ÈiÌs3ú2³FԚ]xÏDOÂþa2Ce{K_0E'¯™`pYÖGéžÙ ú £VÖW’ï™Ï2M&øÌåÂH p +ÑLè$¬ÆW—9í$Ä‹¬=?u#¨¼Pâ7£¢'ÓÜ“fÍ„ ]f8ïY‘6kk=^ÀÌðÔvo žÂJ4ƒØŠWïÓæÁ(²öüäŸ6‡þœfÍ„ +f´Ÿ±_óU;ÇÒXZ;m^Íÿêâp…˜ž>'>IUdf`R çaìŸ*‡"mަYCÁ-bÅŒ>úèƒgBõ±h替K ZOlU¤Í;<^ÀÍðÔöY«+ÉÌFÌ Æ ~ïeÖœŸTi³Ò 쀅Gñ¼ö”H«Ê¡J›Õfxj _ÃO²|e42±¿c¹ÿ…F•6«Ìhhc!3Æú*F¨H•6«Í°ÔöÛ¯~äO%~ÏlDÞÓz Ü_â1MöM›Uf"hƒŒÐœ­n&ªJ›ÕfXjûÀs¨€fB§ «ÆœnBܵTi³ÊLÜ1Ó ú®|U7aUÚ¬4ÃSÛÇ‹ø{…™Ùƒ¿gÒ°'¯¿MEGS™6«Ì¼Ý6ó$þÓT\?å»/”i³ÊŒÚ>¶ýpªòðùíýès¯(©ÒfòÊÔZ<ÅDdO3|8|Ÿýs·{í{‰û»Ž®Õ_ÌV¨+Wª´¹ßºêÖ`=B*ß+9M–±è,¸EäfQ«ˆR½Œíj‡›°Æ¥ÎK·ˆÌÔ©ïpS{¬˜ñŸ>1Q"®¬Œÿ|Uv–g›­¤ÍþÓ&¶—ˆÿ¯Û,/Ù1«&D hFN“eìÑð‚@O39M–1£vösƒfú9‹s–±wü„òO›õöÓ¡Æ4_›÷ý§ì¿Zÿ´¹Ù|$íænÌŒ"m^¯º5èºÁ•ñO›» ø‰ÈÅݘÿ´YŸüÖå¿[0ØÍéŸ6ãºfis~©Ì¨Òfu¸'ª±•Q¥Í°Ê­A×m3UÚ §ÜÜ™Q¥Í:~~vß‚<Ti³ñ¢v&ª!3QUÚ|$ïÖ kG0Ð=sŸâkój¶0wCfTisˆ-Œ£q­™¨ ð¿C•6G^†¿PaBD>a\@¥¡üÚüéR¢àÒ`ãõÅ:àgp ~‡*mÞkYôI5Ìp•†êk³†/ÆE—é9‚A¶™œ&˘»¸=&*U±Cj c»Úá&ì€q©ó@Á-b «WÞá¦X1ã?b¢D\Yÿùªì,¶Í–#]œö@–óÁ­ÿß—Qâ¿ÌIEND®B`‚lilo-24.0/doc/html/user_21-51x.png0000644000175000017500000000606311521302503015457 0ustar adjooadjoo‰PNG  IHDR%¬ϧà0PLTEÿÿÿ/Ý {tRNSfïTDÝ"Í2™»«‰vJÖ”w £IDATxí\lGþÖ»·ç;ûÎç:ËÁi"Bª.5–J]'GÚ«QÉUEˆêT)%D¤^…ˆ øPZPøQNT© ¥òYn+¤6äjù#q…þ¨P/Ji¨ŠÉE6­„}!4iÃñÞìíýXïlìpwÑŽ473ïÍì|÷ÍÜzüöíæ™Ú õNùy"Úæ=b¾®!Lº…ý*1ÎüǺ‚s©;ËåRÿo, &寍èÅ¥•I`®Ò#tÕ«©K¬úœË]VOLw~y“èÅ¥•Ià‚)m]5ÜfÕç\ÎÓ#×ãÒÊ$(az¥`Μ4Kà…:aÒóhS ]…'¨ä:gžÓ¤ýÐÿšöƒÞ‰Ç§0øJ/[ÿcýøRª¨/Âm½HÚÚǵwGw¬Îáç]]wPõö£8ÐÇ;Àª7ûòµ Äá3šÊp¹»˜ LèÇ0ú;cM %‰{I£L—ç¨F›éæÄ.}¥§F'|ÑÅJlÓX©<ªÞãG¾Ôh‚U[ÐWìÉð?š LM„IäY˜n!\M9cbꆟ¿%a" AÝ+ád7” Fõ¼G7ðøé<ëi$a‡Æ*Rì+öwÁd®ÕÁ¥•i†ÒÚ ž˜+éfÒ´· _0XÚÓû¦h¨=]e0l åÐì§iÍ‘à/êï$±¯ØßöÐwÑžO‰’ëœ)ñ~ \Tz誣Å+—xŠvyRYCߟÓ„“] FÑÞÂèÑó1 }V žÌþn˜îüÆ l{ .­LSLC­i<‰µ¦$ø¶¡f"[á,Õú¡ÂzjÐ~ŠuAÂ?¦f´-±0ùRÚ×Yµ‹aöwäÜ z *éžifº¦øÝu¼;Ö¾{ðoœüƒòâ­QÒàpÔ?>Í•–ÓÖŒ´³¸»cB{4‡‘¥9Ìüó®îÿÌÔns$ýî~µH¨¶w̤Íþn˜øâɼT)hí\RùŽ®e±Ï¥£¥Ê[•9—ÿ¦p-‰+OTL–¹L¤Œ”´§Vÿ­T—Wj‚I~ù«Ò\'˜ê}ô-\'<]Õ™Ï žìçÌ' GùÊ÷‚ùL8‡¾.˜ìçÌ/áùÇd?g~Ô©þÔòéÕ¹ ÷ne»™VÙ˜úP•MÕOO2ZNƒŒ©ƒ÷úÖÓì‹—M«³uî’¼»ÚA+ùÛ2«ç5ˆ©Ò´: ¯» ~<¹Ïë¦õ0¹±SÖy<•¹p«y<¹±SÖy<•¹p«y<¹±SÖy<•¹p«y<¹±SÖy<•¹p«y<¹±SÖy<•¹p«]'<-œÏCTÆî\ÿ甿²\¶v™¢1Ï€nXnB§ÒäS@ß¿È7­BøÉ‡‰™Bá_ܱC‰³ïCC0=ý~ _~¹,\ødŒªÁãwŸxꦑË;>$ÛOÅX¥¯¹Ä¾ÒTSž*f¹›6MEs^Õza: üv^@*:× S¸ci¬bšyUë…i^ l=L6B$M' 16±Ç“IÓãIBŒMìñd#DÒôx’c{<Ù‘4=ž$ÄØÄO6B$M' 16±Ç“IÓãIBŒMìñd#DÒôx’c{<Ù‘4=ž$ÄØÄO6B$M' 16±Ç“IÓãIBŒM|<-œ¿¯ {¹)÷/(÷)ÕôD©Ê•XU«º¡•šWÁ“96p2C±/Ö•~gUªÊÁteSá8=É 2Hω”·¿àLÊbrÁdÅ8Ã/èi\¡°”2³x F’ÅËÎÏãè±bEÚŽÖTkÊ ç¨Ô)Jp¸°Bd¤M»AJ“ãLÿ"ð‚¹)r·¥Î&å0°&)m*ª1 KeÒÔt'©T^"L»ÍŒ/˜ WLVŒ³u¯2&%6-AÃJ˜:+1é?³®He9Ên5¦$=‹UãfÇ×9Fjh£0•œÑÌœä<ÑÃnã,E!C 0¥FxD S›x0É¡8DîúWÙ¥<()ºnE”]åÅh1ªELMS,Q-Ë…ûAÏñƒÿ›rwœ¹ÆRމžŠXºÉ”0i“8YHWajͪá$8”‡Èíg—Ò÷%vQ½"Êî¡bTZ©œÀ¤o 3ƳÔù`~ÚœŒñå)¹b1Φ™BSJ–G”x¢°ª„‰B9ˆ¹ýìÒ@jŽ‘Ë˜JQv;3ªáˆLØ—£À© eCZã fDE©Î)oŸ¼vãÌä)Ŕ٩„ +b„‰C9pˆÜ~ªsb÷Ð gM—éß”gå[y›ZîúŠ6­u=–iBè2?Ü:ºJºvU¡¥„XxÓnIãy  ø6f­ëÄ(=M¶°Öòw/ôn/¯ŒƒEp4˜Y¶[7Ýi^òc5½ZëÌ*<-%$…/RòH€H€¾Ÿ€/ü?­‹óC%ž±Ö'·æ¯Î„ß±ÖU?êtv-?ð÷„ÆZ%µÖõ˜ü0 5½‘¬uO`Bb~’ Àwk-#Ëö4õµëÛîTâÔP´Užõ§ªéÚþT´m#×·m%vÒ­u{¹äYi#ÖµÇÊN!}]µ æ®]LÞVˆšÁ± ºjÚrk&¼.³«L…÷øA0œGh£{)7ŠL'TÓ³üŠiýsVgDN…H¾ªj– þëÔT¿‘ Àñ°ôê¬v±†é ÛÈØº¾YÓÍ%kú¬Åt¶Œ6/xÃØºÇŒô°2T…€!y¶,“á%쫊¹öYvʼnÙA ˆ¶Ý²Öå'jÔ˜%W³PÊ6¢«üè8Ë€<¤ Ÿ³:ƒÃT¸VU´ zU¨)êj»TÆ ÀÛdl K –_dÄj¶¯‘'çÜ×’µ8³˜·e+σµÎ®H!yVB[C Œfä b2XºùAl©¡Î·¬5fl*|f­c)+ºø)[碳k>guž®Uõê«Þ®ªà”Ôv©Œ!  · ø¢+1º…®µÒqfuj1ë »¦§‚Y,0öžYëªØ´Öá¹u[W:÷ŒGÍAŒYkëA*v°”ß [ÖzÀ{X¥þòLc/åt½Â¯›³Çµ Qø4kíuž®ÖzMÕ®Ï*üº  V äI  8†€[kž¡=ɬ6l_ßÏšYëüªClÌŒÃ|Éæ[™X^ aMxcÃO[§V/˜Z±Ö3Á°ÖóáíbMx)%êT¸ˆ¹¦±Xx9Úf­1ï¯b¤ Ÿ³:Ï U•±ôLÕ§tx¾]$cH€H€Hàf­{ŒšK<œ…%„}‚’'º½<š•2ܲö°Ö=lÜd­³n{¹½oÝçxþ Y% p1jõf3Áb/˜*Ç#óf6Xž­gùˆñs-3óªq,%dºýTk-ÔCÚðiBg…‹Î©ÞQUƒ2Ômiª•ÕlAc)e3ø^f'IãÅÏ(A6CI ‡šíªªØöe¼ž°bÎ@m–Ê  øqb±¿>ÌÆÖ__Ü3%ÈdDúhý™ÁnfÜ"֥ͭuH í²¼-ÅÃu­u Ü·ï^çȳ$@$@¿š€;ºFkUb²ë¶“Ín­aÉÕZW§sÏy8|ºÒÑZC6¬µ‹ñì!ëav^RkJ±Ö¦ÃgÖZ5[—³$@$@$ð« ıµXkøêØΰˆ³±µXrœñ¡¶<óO0Ènju ó…ÈýÖ:ÇH¹z[Û”½Ž­£d~!  ‡€=·†Ñk]ãÁpVÊ®ì4=†ÙÆSm}¦ ~ñÃgƒìÖ:ˆ±ì!r¿µîa­{L¬Ë ̈ y¢®¿1žUéH€H€HàwhºF–j÷§ —aÁv#‹Ì™Ï»+Ö‰X>'{„CMõøˆhD þÊ¡«ÚÅhÎYάt&<ЍÆó€™ð¶¯dUxW¶AÑ åH€H€HàŸ#`‹´>¶Z©µþX%© |-Zë¯åKé$@$@$ð6Õo ùB[!\Š&  CÐZ‚‘BH€H€Hà ÐZ!\Š& ø· ä²p\ßô:°ž*´Çþ߉Ìç­µæÆêu® Oðñ+ À&Мa­‡ñz½Úë^‡ P¡5¦¿ž¶Öš;ÇKâ²õ üÓžóŠ!Žºz$=t…š­±ÅIê°z²ÖõÍ$·lìÒ…=ÈÿéfbåH€H€þ0¡“EcèáK3ëRëéQbÚÔS¯}ôðÍÙgZ@ˆV¡Íx’-OCˆÖî2ùõÏh­Ó‰ôõ¤a­ õ?’‰Jì×v´O¦&  O$ߘáÆÃà>=òî¬aë*¼•NC«1Î]H'^?àâ ÌÎŒÅc×Z˜‹Å+Yâ|£?›FžƒKè»KUÉ3r[Ï„–ð¢miôßÄZÃýH%Q5žxËcsÿl»S ©ªR]´å†N‰L~%  ßAK¯‡±†·ê:ƒ+ë,»ÂȉÇIu_=UAŒ©þIº  Xµ=Eo}›‹m$+&¹åݪ‹›b[ËY¿+4±Ö’½ƒªêÕæ:|~øNç[ŒxžH€H€há:ƒåkaÕ·4̰ê|n‹£µ¶tjpOÉDõF1©Ø,oËVŒ®ZÕRl®LÖú®ÐÄZË7Ò꺴ž­å‘:>M®Èd   Š@0šbƒµÖs[ÖÚÒU'ÌS?±¶, GÔY­µþLÊÄZߺ°ÖÈ.+É¡ó>i­ÿ©žÉÊ L‚ÑLÍêݱµYëô}«IØí·TlŽa<~ôÛck1¿[aa­el-£s[û§ÈMŸtoIây  ømäuÙo³Âxnu`ü5˜ ïe —‰2—gÅÈö(¤b{XëÆÕŸ[cú]B2¶¾+4±ÖbñܺÖçÕUüý^ï[•á?$@$@$ð‘ê¢Ä«Íyw-‡b¬êjõå¬Q~ÑWÏÖ<äˆ"V¾xšg’®äÆ©×s®Ë{õìGè!?$ˬ¼ÃÞZ¾Y»çûÌ^Å~uúð&(à|³½ƒ~þZëº `2Ù·=?MÓœ§=Ñïyÿî/pMŠ¿çÂÕn¸y\j(E¦ω ©¦¬ª‚K±÷?ƒÒQÆÓ¾ËcŽlŒ§I’aäL­M SNM¿L—c)¯O೩ÃlZÕ4²o í©ÄÚÎò\…êÆ˜_Bú…›¹DÁg3Ñz„ÖínÛI×<Ÿ°úó¦:w³­—žõÚ©âk¢ÖÎIþз}f=Gï§Wc÷£[Š êXÜkɹ,oyœÚú®%.Õˆ‰o±Ä(|YͶ®Äš -:•·ãû£öž‰º_ÇYÒ_x02ü.ó>¦ÖZ]Žõºçœìînáî ¦€¥–¿§‚¯¯—¦1ÌâÙ§¾$YE…}«÷]é(ãüìÐ-æ¸3Úó4SÒª_s`³-aÊ©$nšÀÚHnψz3ªS8 Œèó]>ßFN~‰çAƒ¨‚O÷ƒ™0Íz·ítlÝŸ°­Â²:w³ÍJY=”·zÏ–øÐ·}f#‡'\Ýn)&¨ƒ:JMî4ƒä\–·-ðæõ³;%òz©VžçœÔ_)ɬõ€ÉäöToŒ­•š—“6¼·g•l‡?Wm‰GoÁhT­¢ª–êç·ü´ #¢uÖ¾cÉ­kL0‘*Üù­“¸†–{í_·ÖZ”4{Tc­‘Ÿì@c=hQT¼–ãÚ…«Û;z‚S%©;éPÏæêhŠÅ/¡àØê¿(ù¶Û{Y‚$£]\%Ì.G×3Ü•BkΤ<å›'ðkD_ñZ§¦ ±KÛòô‹>£ ñÏ ­ž5U¢ý#Þ[üž`Z´”t|{ï©c¨ë¿ýYŒøu– òϱa¿àkî©?%õ—ð“úé«ÞCº.*~ô΃:-‰ö,ÛÜužëGŽìæŸÃZËʽґk·ì®מ¤: ±v~µ&Ö);å‹ÄnŠLžˆä'.¾P¢^ùiV“œÜÄLúP÷n®×.ìI->Üb¼¢vά§Ê¹Ux#»ÜK0]³¹‚‚)áa‚MBw¹`VT̬õ¤þmIn ÛÔZ·îàÝ~b©<ý'5o¡vIc¡Ë·xF7,î¼K<ÎǪ¨ª¥ú‰É…39VS Ôp´5¦ûohqϪ]$h8é¿ø–VGš<ª±ÖÈsk½Ù¤uôoQT¼–ãÚim¡—wô¤ïOR¬ËKts+O’203%ã_ ë輇ÈÝ.´PrL…XåEB¨›ÕÄõÔËUÊð&ÖœIyµQ¾F‰µ–ÿBE ¿ÙLÆkbQ°¦í¤ýCSo‘_ð†R‹^ko¹Ú  š·÷ž:Šÿ~(K Ȳúxk½_ðªµnuqmäVÛØÆ,â`$ü”½ ºöçƒÔ‰Âf­eìÚêïÿsmL‰`\/ëãâ;e¬{½öÐñ1×ç£"G.2™ —t™*ßÅ"±O¯šÂ5%n uÕÊ"à£Â~ÁëÖ:‡!µ†¢•éìÒÖeÞÑÒ­µü±<ùùRÂÆáA/ž+žº ÁÔZ·Ý)l¦3œ;D¡3mÞꔎ%×nÑàW«§ÜO‹ŠB‡aŸ¦õ™˜kvúÎŒíÞÇHy_ƒ%ìÆ)ãU>>ƒÜ}-––Ç‹Úð5‡÷ëø5e~¨TÂê¢ÖZ}Ig®÷ ^·ÖYq•M(kxåÆ\\êž whºµ†Yöß#rØ‚ÀpEòlÀ“‹3ð+Ü‚¨;å~TT•®D`wÿ¨¶¹QfÖX7±'ŽiÔc¤l¨øC§_Á©ëZä6ñtø rwµ˜Ï˜>ƲÂÓ´ÞIx·Žïþ}yÅ<_*´«.»òWD¨Æ~ÁÖºE”®Õ9å-†É°¥÷Â4¶ö…€ÜųêöåªÖº†µ®õ¹µ®>þ~Áw­µ¼Kœõƒl]9­^UT­u­ï[[µÖòF6—jd)I˜Gãÿ´Ö!y^òrQ«%ò$ À?Dà¿R›ø4jÍa°Ö\=0‡•öÝ‚òÎ\º´0‚^7Q{„¯^·Ö²9™ØT¨‡5‹xéàþÂõÙ^f–º”Ø6¤jû «Â lW<–8¡]éck¶’l(Æ ¯šàu̼Ç«ìIb¢Ž@s¤Œ°¦ýH™‡Ëú@%ïyêý@uoø 5½×/UûˆJ7fI«pØÍ5Êï)Xk¸5(¿¦ý´ ·º—gžÉ˜¤uùðïëÖúg•î¥ás,3ûÌ0{éd¬º¬^€½*Á ó#ŸÌ¡æÁOoŽCüÍgH•ÃɛԉŸÝ©"·©ìLL!Ê„Á{qȼ<–óþnmH’~FuÒx|%êéûNžë…#íYÖ…Ø@vqzóPdmóD¶{…!zªéf/GhÃ,ê.…S¢·ê~Ûkíõ¼^©Ðn3nQž`É;(1hEŽ©ï}ÑQï%`Ü»d&¼í1èÔ›Úš´ÕkfG{òšYïdžy&cv°¦ñ‡žûDkmƒï.½|?‰öTÂäi6<ŸâäÛoçm4¹áK¤ÿ"ÑÎ3óÉl‰ñ¯ìü„…û±ž\ýÇD%UÍ\QÂcU$S<ÑrBwxK2-W’$©£ºSM“XýK”£ûNž—Ž´gYr'‹ˆC•µÉ™î†è©¦„Óð)7 ç°Sǽ«B견ûì”è-û'–¾ù%T*t†›„[”#¬:<ýÒ¬’üt‘7=-8ÿèn©DP3¹!;?$k]çºÍt¸Ÿ-…ß4¥&Xé„ËŒ~º×2zÑ«‡óÌ3³ƒ¥Ô>þDk÷0õ¯ÌO£—6õ#°7ñ¡CϬõ­OæXç¥]XÇ„á‹'JšsEŸ€AÌíç¬*ÓA½¼ö–Ǹr*Ô Ç·ŸS‰'¦¼J?+ýdqnžõVôž3&kQ@*àQak¥É˜Ë &—'ÓãÕ¦SòMþVZbåT*öþ÷P©©¤ûéCìëæ±ç-è®ïe‹:Ç>dË"Pºeè"އP_®º£Z},¤ß6¥&x¾Ç…îµ»qz=Õ,ñì`‘þ“?ÒZ'0l݇g[‰ÇågOnuÕñªËZw¤ë¾i¥ZkÖúÖ'stÆ‹mü¡ ¦Oq‹UMݰˆŠ‰\ùUŸÌ3O¾ê˜Ø½‹•ë^„Õ{tH ¼ÕÁ­VÍG§º¢L<›¿j‡k¯˜«ßǾ›¡ÑPWÄ&^6 ó ƨ‚Vl*QÅãß,;ŠNž±¯#^·_äæY³º{á¤B*GÊ‹ qš2IޝhS••‚‹ñN4é™:4vuÒš†jlš%Ê/WÖÝËR³s}§gD¡Ûš ©‹Ö]Dš«gù¦§ìP¬©üyKØI»¬½$½Qxå’!‰½aFÙpkÜKöŠZ’;hm]Uê:^Å(ƒ>‹ž[ëîŠíá=ÊHPù>OUZü'77ïíáü¬)cŸŸŒáŽáSì±ó¡c§×Œµ0¦RJìZ¡GÈä·_ zš.eïÛvkqVv*0¨øK>ÿºµ–ÅIž ØIDATIè×NPiüçxñ憟—X4CÒ”IŸX»CÌÝÌßܼ…ñ« ×Vx¨äˆ^öñRö¾m·¿î^ºc%>áË_·Ö]Ι7ãàïýŧQÌQ­vDüJ´1‹ÝŸÑ9‚ß^½çÈmC÷kC*ëÐ}2ÃŽú[–Cîv(¥˜Í‘¯pM ‰\¼ÇxÊ8×cWŠærϽ©½}k¤¤K=Ë =øç6¿Þ*IÊ•L³9¡Þ‹ßÀé1”‘7 L¤«k®ˆ…œT,ªk7|7¬¦‚ëK$øØÚÒB…èäYd¸&VŠfu1Rb¢¦¤ q`¬­š$7& šy¥D‹ñŠMzÚi•n%Îk*9ïµÖâIèÀÜJ8ŸÃ,¼DUT"¥äO‚Õ\¿Ê©™çgo ;é•vïÓÈ`'æ½ ?MùêÒ}Z© €±~#: "RN€LÝH'ý§^ÓFÓjؾ»`\µ´Öt_ñÒ¨F©jòª¡BøÏÖ:½¾¤¸¤)“¨•;DèIÇN»WláÔZ‡ dÞɦ¾‹Çe¼t~!®ý¢ÔZǧMÓÒÐý5x/Çã[Spš»¼5Mnuí1 Þ©ÌtL~{¥£ª_ì¹µ~ì“9:ãÆÈ5µc«´%šßW¡Æ¬ƒ‹‰9AF»•š„Ié (Λ™Â-1XkÍ©$É&™frB½‹*fÇæJ:µÖÁañ.kü\G)Kkm "ÅCÓÄKIhå5%mÌhˆ ÉZ[­Œ›É{1ùÇvãd?Ê"—£Ò­ÄYÈ¢÷ƒYkÔ˜ˆp.„¢‘ŠŽµf­½æšPª8wÄn-a'½Òî}ì„ËöÎ2·ÖAÚò’О!a4M('@¦nd™c¯‡Œ´ÑT NÀHËHJ(œð!£í«G9©jàØÚÛàë?¢µžnZhҔɥ·r‡>È“Ž^3¡ñ§±uqOœšK/å©o'ÖZÕJ>F‚m<µßÇOØIzÅZ¿  fÊfÛÅf'Þz¸›n481t>^O\¹=NÑ2‚ÛdÚï5ÒÂs´:ÆÕÛåt—ÂëåQ‰—_ò'A;ô>™£3Þh­MS¿{š0Käâ#¡†ÜÈ$µ†[Ͻ©ˆIiI'1©­µûç§Å×­ɤbÞïÅžRΫ7ãpl¾mfÛÔ ‹!QEuí†o•–»2TðŠi‰Á{°”°´ÖÖ ã ¢ÃãÀ@øHå‚Zž6f4ı@©m’ܸ™,éȉCgÕ×Û!’q9*ÝJ 5Mk!:lI.VÈfÂñ† úй®Å·I%Z³XÃH[ 8_ýŽSsÏÏîÇÜNþG¯k/Mn¦^u€li‘H92u#La"Ä^zXÚWõ®ÙŸ° RªhpüCgÂCT§¤T&›l=É[kÏ^' 77À¶Þ>a×z’GI+wˆÐ’Ž-ÂÝ!´ðiPw¸ø]&oyû¢Ý?v2ïÛ–ÙeXÙAà³ÂÞÌÀc¾+ÖõWÓ²CÁ¿mÅcÖFu™2›§Û¢OiÄ=—aû0D ¸™ò•­J±Æ‚ƒ‹Ú'·ºØ¯Wýöª#]w+j?ôÉ~•º¿ewá+ÂÕ•­;Od®o7|2ßxNE$J«ËÜÄ#°-DÒª¹îàTW•™Ì©6Š÷âè›x~lÓ‘©§^sEüBnæ/;Ñ(¬…²ŠÉ-ŸÕ’ÍD Ѷéìn‘UY“VH$ͨˆ‘_kÊ$¹sYê|òˆZ;2AŽ©e`d ÖŠMµð†\ûÀÛIãUî6q•†•ÅxíGܞ܋²–h:J½­ ªÝóškcáùÙZÂÓè!Ò~ªÈ˗ĦÏäYó¤@",te„Ð륻+hwy¨4ä(À•¹Ã ŒNݾ-JÖã]ðê¯ÊÄmÈS¼¥|†wØûÖÛz{Äž6åÝ;DèvÇ´Ží׌*æ-Ü\¯'y›¯µ…áÑîï¡oÛç2ö_„(µåªÀÏ€«Öz¯‚6ùTnZk©§dÌ[¤a§µ~lÑuËÚ´„ŸùþŽËZtõÏÉ„ë ½T­cU8  /Uj!ãÕß,ûUïæ{|uß;ésZ›ñŒø ŸÛ¡Oø‘¸=oü­ôV­u¶SÁZ~äs[ãù“Õ|U%ªC ^]-§™ðï²¶xÇsq¥{ßô”íiêk?^'ÙÝÕ²÷§ªéZ<în[<Ù«--6#ǤÅk&òh´o¸¬}<Û´²ò0 5ÿiµ‘î™Óü®J9R…ÕÞ:ùb¥Þ*sÊü1ýdRéÝor9<Ôÿ ¨Ã!ý¼ÀŸ½˜Õ¿¸Ê¶¸ò¤ÞeíÕ—tÕGZHüºµÆ} –—qÄÔ¾z½`ÍÕ,ƒñ°+ XQ[c0ÄÀ8 5aA6øœHHYCˆ<5hdlN6Š­Åâ@ _ð>¯ÈúkjÅO  ßM e5‘Ú¨SÞ^Êü ß•í<#… À µþB¸M$@$@‡ µ>#… Àøk6/ûÂZR4 üf?n­q£)¡W›]Ø/ÅÎñ_   M™ßˆF}]Jy²8¶vc   ˜øñ±µy¦¥è“cÞ4<"  'ðYÖºÎá„H€H€H`Fàk 2‡]W꟤?-œ{äm¿Ó³ƒ¬‡Cï!œ“ ðíaØ,’Åïõì oËvJ †:Yž[ëŸåVŸ×'®ÿrïdÝI€H€ŒÀ!Öº„}E¨`na¥µ¹“µÆÙxP`n\¬µÓ|·ÖÚ"«S‹isZkEËH€H€þ4C¬µŽ­ñú•m[§Ú-³´s Âa¹{?·1¶¶ÜòB ÀQï[Ëóç~¨ñ„:+1zN ôì ‡µîG¼Uíæü‚™òæf&’¿b­±£÷^A µx¸Ü²%Ù€MÄÕíÇ”F|gZh޶Öê—SeËvãÜ-€æ' ÀóÊR?×G[ëv”±5öéÞV­õ^AµxÌÌÊMk-±bëyŠo±Ö²%9 ì'PfŒ^·ÖÙ ã×íùèU=W­õ^AµþLÈç¶x*®Îñ+B‡Ïó)úï²ÖZþ¤¿‘ À3Ê,{µÖ5æ÷ô:ÛZ¤ …:†.Ûö<··Ê­[뽂Îã¹AIýéÜ4ò 8h¯˜…Î]Öw—ª’Õ®[]ÁŸÇ4Þ5mÕfíμʫ@°Ì™#³í¶-Ú¼­0y0;€ζÂ/?‰Œ©lŒ­µ|ËË·"ø/ l€E­.j­ÕÇäq溸V2ÅŽ'Èõ%“5]bCï†ukíT^ÆVT=\_Ú Aã;Œµ:Í”±5Ó®›ÄÀ8Õ4_×Ãà"Qx@à™¢_†+ê$Of—ÆSëIȜɖ™pý“ìSù¡d~’ À1Ï— 3á² öl#ÙþÓõ(¢ÕöòöRæŒu¶Qö~Au‰é‚F–§•§¨<φ}kéÖ:ꆘ|²Ö’O¢®yæ#묵ÌQ‹èZÔ•Õl³ƒ¼-[‰ð“ú# ÊŽÖÚ²{ùHÍ@$@$@w ˆIíǶµEÒõ¸õÀ÷®ÕH]l^ZÌ Ãîu#LÔý°a­³]‚YÝßÕf­af]Øm ‰µNc¢Eù²ªˆÖÚ3ë:rA$B&k `ýÕá)4c”­µålL1þK$@$@›têû|ÅØZÌÙck3²:ÅP²Ïa¤º¥Ë]ký¬ A+Tºµ–±5L#‚å‡alí12¬ŽÕ¬µÀ¨¯m˜ðÌѦµÎ1‡ïƒ=ß[›µvÍD;  ¸G@ ž.Ã6ÁÊtHœ‰Ô~¨d:<Þ*᮵~VР¯Zã¥k5­”kèäÞ†Ån­c æši&\~µà¹5þÑW½U[yüÜѦµîa­ûcòâ’Ê–“áO†æ®Ùž'  %wWµÏ-¬ÓP4¥ÚîCØäØ%ÍVdËRì²|b½ùºµÞ)h(›²:£: Övòõ’-I°ÇÖº¡Âmº4ÃÕc Ö„aS”¦Õ5áȘü¼°Ì„”C1Vu5ž‡Ù¦àÛ¾ª¦“XLe#e#åÇ^þ!¼)„H€H€¾…Àºµ~µh]eöjfÍ÷hæþ-áÌL$@$@¿’ÀGY뢌kÌ~%L*M$@$@_BàPkÝcÚù-Ûò­ìïͼ$@$@$ð¹µÖŸ[MjF$@$@¿˜­õ/n<ªN$@$ðGÐZÿ‘†f5I€H€~1Zë_ÜxTH€Hà µþ# Íj’ übÇXë.ls²ƒDg¡ðº¥6wdcR  øsޱֲoÙÎ0`³QñØÁ»w‚cr  ¿Gàký7Ù7¼ß—ææã ÌB$@$@„À!ÖºÎÕeæ.db­3x¡µÞ…‰I€H€þ"C¬õpî²þT´æÑC0úQÞVâÀ¤‡»m £ûÓ¹iü9uß]ªªƒ.±ÖC!î¸H€H€H€V b­Í%%|QÑf+GW¸åºbü|i,ÆjÚ3îàAÖº†ÃÍ:æ\U“'I€H€Hà8ÐZcÙ˜8¶Ð†#q}·e+1ꢫ_ÖøŽ™p1î°ÖjÄO\+þC$@$@7¢y½‰ÙsB¦³å/±ÖáH¬uéðh­Û«JN¬uuj1UNk½‡8Ó’ ü%ßa­sØgØñ~sl ËÎ@$@$@$°Eà;¬ukÝp]mÏ­ñ0![gxÆõƒ3 ¬8ÄZçݵÅ_9c˪ñ<`&¼í+¬ oº&,ïO—f8%b ZѼ°¿ÊJmxŠH€H€þE‡XëgÁè*³g3 € µfO   O'ðÖº—Yo   ¾ÓZïTÉI€H€H€”­5; |:ZëOo!êG$@$p4ÿx0þ¢EIEND®B`‚lilo-24.0/doc/html/user_21-521x.png0000644000175000017500000000711211521302504015536 0ustar adjooadjoo‰PNG  IHDRØrÝ–0PLTEÿÿÿ/Ý {tRNSD‰Ívf™TÝ"»2ï«ìÏÙÝ ºIDATxí\}lS×?/ØyyŽI<ÒmZ3F ëPKU¼‰~Hë¦7DÛ¡aIh3¡ ±þ10* ˜‰ªbB“…*h«¢XPQ¤ŽÆ¨ÀؤhV'•vÙ4Ö5CElŠ&UbÝx£ ¶²sî{¾ï¾çû>ì<×$äJ¶ï=çÜsîïÛyþåž P÷V¬û j¼€¬à¿J°¢ Á[®²p‘—Y|ã¢Å—ÝÝ¿s¥ëþO½æÄÿÞu˜;x#ð¥”9¡È^›¹Òéçí] rN! 8]&&h-Å6Ì£ŽY¨Ž™Ý®,cZ‡ÜšÑ™…åO,Í›Ê"{Ò¡30JÇ@µ®dIO. ×˜Sñ³l£Ãªµ´ ëúØE°™Ä!çV .·ÉVµƒíK¶ÎÀ(cþMW%=ËÝWØÀ¾ lpLoME¡`ÉÇ­>õ®B*N¯N9ÉX›Ð¼ÀÞu@gvÍt|aVû=WÖiM)®W¾Û= |;vY}k‰}zkªÈàì\hû¨'µ}QjÛ¾^r³]…~xúú¡(­¿OùVß&´-)éµµ f:ÐîÞ’°gVÓ?€Ràý[uœaµ1hÉ ñA ;º¹`¸ˆýÓô¨ Þ ñalkšG3»-{ VBSz; Á‡iëÉK€Ç3³Ñ$¼%Ks£?È€¶¯P~(÷¬Ž&șІuš jÆ 6’û1€x/t‘1oÜÒc h´Œá'˜SÇ`f®'K±ƒ4û4IJÁ¦"%ƒ™9Ô‰¸Xú®@÷WA×à]À®„…>`΄¸”YC83· â'ØF˜“3Áâ7×0ó6ñ‹$dŠ5€ûÃN0–ß² —¶ÅæÓ<:Ö©ž“ƒH‘‚ÝA`¿a Qhì'°ó7zŒ, áè3«f °ot-ï0Ї¡#½hMÆOË[$<ŒÜhxhð>ÃN0<6v´Bsâë,¶5ϽÇÁRf‡aj7E5è,f6 ‡žµLðÛ8¯?„`Ó˜U(K߯Qsi²Ì>TS`Ìœ3³p‰„Lz¼n<³Æ’þCJ´;;H3Áâg6ñ[ØÛ…´ÑtT+&Ø$ìVó)h'…Ñì,ÐgQÞ”Ur&Ø;Jj|Å¿³_5Á6å¢EWóŠÎôEzî€øÁ¬í…ÅLQzƒØ'$d \Ø^¸“\ º”ÙÙ0'J“(6¾ø5¼ƒŠ<¾ñž¾ÞõÐØ»Ko^j›_ˆwPÏ‘Á£§žIÃÉ4¨inò6ÞA][?þ<Êc½ÊÃ:s6°;¨.üXØòŸ†äèXC’é lûU8z%e>ºJ&ÞAÍÓ„ôÀ…íN“ ô9b.©qþ¬{#7ÿœÀØâL¿¾ó[XbOŸWjŽÜÂ*žYf«˜ç˜2‹}8„ÞÃà`×Ýb`ñ­ø+olN­2’rŠÊÆíƽÄ˲©RAH™ô®JHýßRÂÀÞR˜\3 ÖõÒLrÅ-žYÍçòúéíÓ?°Íýöxbg”w ™þ´»y9ØJãî×M“‚hZ¢KId$:†¯ÛP‰ÞãÎÆ Öe1.k©\Ü/Ÿâ"f`·Ë§0)õÒÛ§:ÁöÛÕaLyµ`wªe!‹byóS®÷"P`%‹‘¯¢J)’)oæÛÖ?óÜæÆyÌ_mù7‹(¶èN›û{E±3sÞzƒ@ÁiBôù'°‚˜-F«ìŽžÜmxk¯æÕ½±?Á‡ŒóÈFð˜V,Ýñ37ûbŸ°M–ƒõÑB xüyúIXf-z…-¦©0œ%] š6©á®à‘>ˆ`ÕsP™òGïâ™õÓ γxŒÚI`X›XÍï…TµhXÌ%\ Îch×`#IbÈ{°~zãg6.ÞâQ0êBÃÀÚÄjž]…Z@Å_¦ãi|3(Äy¬d™áÛ8ÍãaæL°®™õÔ;À2E̬@¯ÐbØUàÁCí ™RKœÇKÙHG<©‰{ámÜi\ø¬†;0C"éøIöÔ;À‚Ÿ˜Ýä¾HOX³Å4ñ+4³âv2=z~ôƒ£ÿÞÿY9Øò¶ƒŸ÷ÂÛ% Óâ@ïòþyñ‘Ô<®£Ž·Þ$PˆIaÔñ(ŒÞÁ™VcÔÑóÚºätê4ü̲Æ2;u`É‘ÜV`MzÇøÌʯÇÔ“ÞoãRÚ¦Á–®ÄT{½3ûòTK"(óW”:Ff•§Ø#° ŒÐ1߯=ذþ³"¸¬C·^qþ8,ýÁ–¶ÄÔa…!†ìÁ8Ž_Â2°B Y7WÊ™¹g,nw–`¾ûzç‹[bƒÉÚíAfr;Q?ìJÜam‰ô“¶ËÀõ# 0Áâ6˜¬-1‚~ÒvX¢~¬ú¾µ%FÐOÚ®‘Ù¼mýlôkKŒÍb’X¢~„õ›`ñ3ûaKŒ`0I»ÊÃO^^6’BêG`‚íÅocaKŒ`0•º&Ø©ÉË4X÷k3¹5Ó™­MþnÞF­6W°"¯Óo〗+‹v¸I š6ë¨ßÑ=fúxÌuUñ̺x×Ö-yRœ|šÈCÀ*™Úúmé#èÝixÝ!²} ìæF,Ƚ7ç´ ¢£^ r‡µX_¢ý¬OOHçØVkšw}hÖ"ñ鎎¯Ã>ÈÐ+÷~àq»"wXs‚E:g§ÝÔc¤ÿܬ¯‡s7•Vî}¨¿æâÆ"wXs‚E:ÇK%Q^Mÿcâ ãFÜŒ| Ü&zȰÒð-Ÿ=Á §ØFž^ÜxCä¯d‚è©Íi£¢Š*œvbñ£}¨$ –îÌâ íî_Jâë ™ƒ¬TH¢c"_·‰r¬<ü£7;hgQ¼4Œõ2øCQ¨dBÝ ³¢ ?°;²L‡ñðŸùÑDôe䀢Ù¿¶uøéAV*ä¶6?ƒA£=ë6_5 ²‚Ö%ü‹ÿÂÿåv›C»hX˜õ.¨[iVT!XÜvC:¬ºç=ÐF‘ò¦ÃœÁ**W_·‰r¬,ü/Ö" Fñe 3+T2‘ά¨B°˜O“ö¡m}Wh |_ ëСå<^ { ‘ _Ñ8`_+ ÿÀbÔIù¡]4Ffq fÖ¨¨ÂÒ+zó¢ŽÙ «ÐÒ7°Úù²"6Ó|ÒÁÇ@4Ø/r;¹÷ã9ø5f`7+^Â]4 ,•L¨;aVTa…åÓ }°$ª!¡¦q ;ú>À&ÆðøöޝÝ<؈ƒuñþÚªûlg /­[Ù„äŽÎ+™ ºus©¢ªy)ÛvcÐ>XÕµt•<µí ¶’ÏÁŠƒõˆ…ocï6YþØÐ*ª¼/éĵAÀ–vÖ¸E ­¢Ê-@Xò `ÊUw?Ó`ëž‚-`:³5º°‚[^„[ôÝ(Àå§ø0¤ϬKx¬ŒÞP`±¢ß7^ùÁ4ÍýL^Ý“œ±|ý à Ö(¤ëBËà $1¶ Ž4̘xû›Â®´ô*è²ä¼ˆ5{W:¬QH= ¬Kx,NžÍb}GÄãKúù ÊŽœ±œÍHFsÖ(¤žÖ%<‚Åð`©¾JÍ7Ž£àÕ>UÛüX—øµÎoA¶£Úåó°RZ†N jǰñKË誯Ró¬ÂŠ—^}ysÞééI0B¦<„Tâ˺üä:;ÙŽÚ€•Ó2vFžŽi‡&³tdM;Ð!2v°¬ Öâ>¹ ºIÈ[/ë‚`û°š ZRÁ±ÁÊhúÌÎÎbX|Sñ“š§ê9VaUªFŠŸÓŠ‰în먴 q弈0Áâù-‡‘í„ìŠ`¥¤žôµ›ÓŽ‚æDú*VaU«œSŠ©~\‡}ŽçÂ\xkN|á)Àó["Èv„×8X—ðƆKŠ"/ÅcðóÈÿÄÇ•Ïbì³ÂcÜ»Ëj¸Õ[õ¾î \WÃ&?Ò¤Åæ×_U×}5· >¨Myo¤­ZÛ?碓öÓÍW5<Áíg?=àØ+ŠâywþЮa«ßŃEÁÂõË’7¢¥WFÍò©¾!Dµë,ëã¢yJcµ¶0î†É)bµ®N‹©¸XQ4íÄŒn.c¼rò±pç3?ZzE`–RÅùáŒÝvãæy³µ†˜@«Ü–.¦âbŤÙg7w3øwÿ[6…áÏ8Ž–^˜sSø9®Õ…Dwãªèšê1™@wƒãÔžy Vt/Of>°a*o÷¶½·°þk¸•»þo(Úç­ž^|,PÏ\¥àÕVn°–nWQó™oÉò•¥ÛÛÐwïg©ºëïmõ-UólŲ‰¤lÐ.½mAÑUM[«kõ"Æ]]¼ñb=ñ¸«Úfr §~ÔòæÏ/i¨Ö––=4·¢T”m[áéõºCÈïeÁn›Ýìö™Æq ;<ã¼p=ŻûV³6ŽŸõ…’¼Ë¢xÃè-,]‚ÎÞqÊÆ"ÝÁi€h‘@÷î‹myMYˆeN{ãfjYú@’e1®ûâÎX㵿öƒüÆ!ñ‡×:i(kËÓ ©mc×p·¹w…¸ít4q'c 8hLë[8Æ0Ž! EVP€Å hQgÈû5{a›±k’.^ ( ÐrºkÅN7eÃAÝ, x_!Ãe„/ÖÖYM]÷Ö³™Õ=ãú…6BCY³ËÊË ÆØŒÒ«­[èÃŽ-Åm«£6có,nßQƒ1- ãê¾€1IßžUH ºµpƒøÑ.‰½Û[¹·p–)Ð8¿à€q_‚j:QDœM@躡¿½ßä|á;<­Uª¡¬ÙeåeclØXÜáÊ…§Ñ³,*8ÃÅíyoé{æ«qŒç1xì¼ÊJ·$ŒƒQB4bÌ㥻7@àZ´4\ËoØ’ºãñ Ës5\L ¬„¬«– £‹5¶ÒÓ˜ZÇÜ¥¤¡¬-,+f¿Þ4†Ë¢¬·Å´=×6Æ8eñ‚5^HÀsìß»0JeeEXÝá^ª¤Ÿž»º–†“¤Ç9 ཭ěv‹±ÇËYIó™!üý¸ÄÛ¯9FxÇ€qŒRxÀ’60¦G¶×â–ÇÝ^ÕóܬOxèÀ àÀ4”µíXAÐ ÓÆ0.á*¯¿m)·Ý%îâ÷\¯ç»îïCÕ5ÏŸ¯áÜnÚhžõÂ8†>üž«Õ ªáÐ-Jºu꥛<Æ¿8èï ¼0(oxãÙçXè=b$.Ø_w¸â×ã¢1.Ÿx–ã7XYƒ þG.õž‹ÞJCY›bv fL¢t¯Ú²‚'ëzÞ7xZe·G3úDw£dåS-xÖŸhÑŸÂ&¸Â ž>aÑm}ZZîõòå~[)Rç˜/”ñoÍ·F ÄëZòbki—ߢ$÷¯à\uï[àZ—#p2Œwô,«’dŒ%¿»Îï„­û­G„òdÞ¾þ5Œb'ýaNÂðFÞ>¨`“ùaoRm;ñý-z‚f'D>oË´éæ7ta ‚Í7ýŠq\dLÕgûL¯ ƒŠkퟠíP0Æ×;/«Gúº³y;ª#ÆÂ*;!ŠaX— Q‚Uó ‹Æk‡EfÔwÚOÌX˜³Añ&ôˆ¹7ðJ–Þ-„i ýau&)0ÌgÓœL ᥈õ#ÆÎæcdð…ó¦»ôôí5¿p¤Ù˜ñè‡CØ4ñ¢&m4yÀa2PzàÍÙœòMÞNu¤)ÐæËû^ÛÅ´ ™?`·¨eÄxb·4§i2T­ŒÁË­ ŒaRqĹ_ Çí¥y èéÆ@€2€ÔPaM›¢üÒ’¨€0–¾±ÓB1-xâžfìÉc‘EúŠÕçŸ%N}ÌÀXáˆ+6‚æ5¬`,“fë$ŒILÆb>ª6 ÑL r•£ÞMŒE1b†ŽŒ7±ù:›à \½¬ á8æq§y x\Ó#æÎIàÌÐÆcлQe>šgê™xñó`l6çȈw¨ø’ D¾ZA“™Ùš×`Ñ#~"õ8fh ¡?8ISi ,óQµiˆfZðýXOíx0ÖÍA‡ŠŒ2njóu¶‘s1g'(6‚æ5Xôˆ¹sݽ‚l cª"Ie>j¶ ¦…æ¥pç#ÆîæÄå@Õð\Þååà¬6tÄXïÊ®ŒñÕ\µßæ¥0©yU(7¸tòµúÒðŸ1 Ó¥eŒ/ _ñã 0]º‘1Íž^ÚŸÊø~^«ü" c˜^ü§btqg{˜DÂÉ”5~‘…±úéœËõHz“KEÞ·sð‡Ž¼rÇwÖKK(Æy€/Eñ;ÇèǬü ×E1ž¥oYTš~"åóQU˜x ÇñR• ÆðCÚ 9"îô-Ÿ°<÷ÇHõŒ…²ä”` wqÌ×àNßâTw~-ÆŠ²ä6e‚1 ½Ð›dÍ !·†¼÷[00^L âÀBo’uÆø[8.õk`¼øõÉ1Žc¼f­IÖœ¾e©¿|ìó00V”%· ŒÕýXèM²ÆÛzþ†ìŽà×öB’˜@ÖÀÒ¢ôû}‚q«ž«…Þ$ëå|7_s3wã‰ÜæjÈ_ ±x{3Æñ1»šDÆøjˆÅÛ›1ŽÙÕ$~ã!/¿« ¹Cìýõq|HÐ.¦ôkK:ªoQÈ É1Ò'Ú•ÐØ€Zª‚Tù"Xã`Y üÔ­n`œxJûÄä2£…¤£ÂÒ!Ænûã*Ín»u§Z6îêAºR¤Ê ÃÌ#¼Ç m8Cí[0‡ˆËŒ6’ÆÆG!£·ã“ßfâ{|¬kLï­ÇµÞEª‚Ty¨ääã@YŒB‡ 2 ¨(³´à ’ËŒe cÝ­'g¿¡'ác]<@ Ɖ >e€ãpã;¬MP¼lÀSF)Ä« Ë ÆÌsa, ´ ]?ÖÅk( ca6E*JU*U)‚<ð`$K!ùþ€ÏÈ %¯h¶‹2J ¹LŽEŨPÈìêfªüWûGÕÔLBš$Ð*ê¶…¢R¬‘KœE"„•–ªa,‰›"5¤*H•õÀƒq„÷õcÀ‚AD'ÀœPBS¹ž4¨&³#:ŸË…Ì®nÆwân70àEŽ @}\ S4ágñ ®ÕšÑôa€ñG ðaÓyWÃ5PÁ\2öíE9bc9‚ùÃtÑ’Ã#Vu3…1ìF<‘¹…ÌhQ·úÕé#‹T–›ÿÅ—ÔpÑŒ¦y›Å=© Råq‡xàÅ8ÐûžB™žÖ,Ú6›GlŒIάn¦0æ1kÒÆ0ø(f•8[d~#TüA¦:‡*XÍEyOª‚TyÂ8À/ƲèiO†Ö cÇøj°¥n c5Ú¬|V|n`”­êf€1§Œ¢qÌI-3€’À¡Z©:Bu|<ü/Y½êÂTá¢Ü2UAª¿‰ÀPâºK¢Á|ÆÁ²ìU‰îé-¦ò¨=•…9î§WËãkŽ”Š`»(ǬUKìz›híßH4è7ŸáúÀœ ‡Å d)]œ/*üü<‘ýà:•jsƒ‰”²âº'©ÀœD[É9ŽeÙ Uí}Ǩ…±psã1Ô¶¢rëa‹iÈ”ñª| m‡SGŠÝÂÄokÇTã ¾Žã Y6[aŒg{ûúƒùû¢lÛ X^š›+ŠEåTA;Õ¾xÝø¯”È9B³×.À'ësWHì„™·î¡ˆ)Q¶%¨Àƒq„÷ ãÛ˜$ªÄËòCzÃñ‹óƒ¸6æ-pÓYG"ÖÀ£ª°x¢‚×Ç`×§PMŽï…ˆ)Q$¨À‡q¸÷ã8VÞ„±z[˜©ÅX·—¯W&¿Ç¡ÄQlg_øúÝa.Š"¦8[:w&¬Àq°,šn½çboA¾îàÚÛ–>Y37vB<ÁC l¶Ø®¿UW ½n_ÃûÆ«¼'ak/þ×ñW=*ñÅ‘&æ~Õ”Ÿéüló@n|Ïÿ3°ìêÈÙ0.j jÖ /úwÎo(;Æ¿ÖSy‘1>‡“1>$¬§Rš1ÞŽs??ü£§SuÌS£ßˆ¢Û˜½Éç`3Œ#½·ÞHïWàú¤SuÄÛÕt(cCûÓ¹>‘ÞÓ»Ìëq}Ò©:#`.ÞËxÔû)ªã•OàúDz/s£)Dvã êSq}’©:âYñ¢¹½ü!ŠnãÒ¨`v­]qÞ3ÆÅå¸>iTÈÇùh ^ÈÞ‹ ß¾@ªŽOîÛ¹>qÞ+Œ¯ÇõI£ê‰3›À´1þÞ ~\`ø§‘¸Æqå½Âøz\Ÿ4ªN+$–¢¤ùRá½â‹ÍðŸD6 TàÄ8Êûq ?ç"\Ÿ"‰ª£ ê!Cx/‘Óm\zãNŒ£¼ïÇÂϹׇ½ÜJÕ™`¬y,.,<û¢`ºKG ‚Œ½gŒ/ÈõaŒ·Ru4ÆœÆDóX\XxöD¡t—Ž@ zO_ëC –íTMbá'.ä*Þ‹ ×>Ж–Ç%Œû‚¸0Ž!*Yï¹þE®O'4ßßïÂø›V]ŽëÓÌ~½÷Íð9û>Æ—ãúl|éã gÃøj\ŸnË”ÓAXúÔžcŸ¡yÿædŒ7‡î2‚ãË@µÙÐŒ1„.™ª“¬`3~!‚_ÃXXòߪáegUÇ/6(ˆ¤Û˜½EžaÛù5¼bœ™æ Š‘]©\´®j“‚HºÍºÞ3Œáßô•/4)ÑA5¼&ÓôÝdŸ½™ðcÖ䯸›DÒmlo£¶Gu~T ¯‰ë/ ‰K4‘ ÛÜJÕÑÚ7*ˆ£ÛèÞâ?80ŽâúTÃkâȘhr`ÜŒÃ8™ª“¬æT^ IoŸhô~ñ“ cé<()Ñ!5¼”Ûímè»÷³T Ì‚]:Æ’(cÎ7“BÕÙëÃtIoëÁÚxÐ…q×çˆ^’Õ§ƒÂ#ø²ÉN.Ø%1U,Æ©T¸>L·‘ô6µö"_U¦§‚ã(®¤fÚ½†—°†à׿4NËN~º’ *c c!áGSu°¿$Ð5çú |£‰L 4Ó³íÄ8‚ësL /q §-ÂXvr¡‰±€“†q¦†—þ"Ô·7Ì B d§…±ŽíVŒ·Ru4Æ[hŒù6`zš,`Ô÷A5¼$«O EÂà6…oÈj§…±æQÅaœLÕIVÀérè{ÿÆÄ@Dç»]Çp}ªáÅn7'` OUœˆwrÁ.cÅ£‚íõ÷$s÷‹dªN²‡Q;ïra¼© ºen’¡M‰ðÖu2U'YÁVËÃå΂ñ·jxmz i†7Y©ì˜Ï{a|Ñ^ÉTdÇÀjiÝ cKiÞ8U2Ƨ‚ãc2Ƈ„õTJ3Ƨ‚ãc¾Œ±ï5ú!¾þ«J¿ŠqÿäÙ½‚˜:'(ëõ›gÁW1.z…1¥Ïéª:ÅN‚qÜÛæƒbñ«jσñÊzý&ÊÉw÷/²]i§Î)¸.—µ!É4I§«š¶–k5Œc£¬—TûÍÜ«dŒÓÍûÕ²U—ËÚФ˜"Äû0Bkå0^«éZÏÇÃñ“¦bÜb-Í’KõP‰áIaÍ&áãP'MÊá¯.¡1æƒBëùÉÜ©TŒk¦ U˜)±z«f“½a’r€E‚sŒ™%%´ž‡ã';LŘÆ1qj)ÕET6ÇÂk3‹tá…žqÌ…Öó“!ÿ¸S©Ómµì;äáÔ@“Ur EsÃ"åàYð€‹9ÐhyÑ×juV(ZÏÇÃñ“&c ¿iCö7ðpð‘KSp°.—µ!ÉôNx oëä‚Lø7–õbZÏOFüóN%cüy“s‘ÈGì‚Í3Æ-ÒäŒqdÀ.ØäõÕ¡Û–ÇV½IAp .»/ÙŠÈÍ3Ã8B–º;I^qÞÆhܵòiSZSçF‰5¼‚sóÌ0>g^3¢kŸ5h­¡Oþ9ËF‰5¼‚só80–Å}(¯À²ŽÅxcZžÑ”­ KpM>…&r`|¼>ç–7C0ÖlPµ©W²è8°—×[Éͳ–È…±È~1¯O$ƒHGÜ"yƒ$e |¤+­°T–d¬cÉ ¨¾SZ ¯ÀÄ@.Œ¿Ÿ×g,£Dq‹@da2ÙЕ­%¸’ìPÃ+01ã¯çõ‰f©ˆÛă ¬Ö¦žÚÞZ‚+YcP‚˲ÛÞK äÄøëy}¢D*â6ÈŽ‡½5H§Ž±[-l%+`Œ“jx©äOkÉy0^¥“×'šA¤"¾aoMË£1Þª@aœRÃKa¼–œgã5QÆy[$¿%F×_ê)žÞK&ña&¢ÛÂ(Øe±|Hî‰rOãk& ‡3ˆ$â–j2ÐýG³Q¶–àJV^‚Ëíì•ÜTI š;ëØ“œ–'Yèw¹0ÞÔEÎë³)lŸ: Æ9¯Ïqhï…qÎësF©š÷Â8ÕŽ,\2ÆÇÅö,š3ÆgAâ8;2ÆÇÅö,š3ÆgAâ8;R1^Îȳ)UO ) JNõsœßÿ’æTŒ—3òlIÕÓÃÏ\ñçÌù÷©{‡Éã›â]|¹Ýa‚½ïjå•”í±7#÷ÀR„¨”L^dŒ—¢slŒ½y¬d•"åpÞŸ1ÕÏ_ÓÜUúòù¨*¤Ï"ÆŠmãPn;‹ÀŠmcgäAœ„†Ã]ÓÖ¦±ˆ¨x^ ÀÀ"‘ k+ãÃùotöÃØ•‘‡0æÊ2MƒÂygIõCsVŠûabLØß`:/)Øc²æÃÎÈCóe$îÑ9a$Õa¬¸&ƶ²7ÿiÙ½1¶¿ñ,c¬ITÞq 'D^’#°7ÆÂôaÖ1Ö©~Fžˆ÷c[Y²¯ÿª‚TŒ3òX©z(š…y$Õ¼îhÚ»zä‚]Mÿ7Ô¨X•þUlöò;ã]ìHç íbƯ*Éÿ*²£_gÀ8•'4z“?¹"pŒ]vå}ûEàÇ1þ†ß*ÃÏüeQIEND®B`‚lilo-24.0/doc/html/user_21-52x.png0000644000175000017500000000305311521302503015454 0ustar adjooadjoo‰PNG  IHDR=`Ò¸30PLTEÿÿÿ/Ý {tRNS2‰»v™«"ïfTÍDÝCÝÇ„›IDAThíZAhUþw“Ídvº›ms<›C­ dZ¬äU"mé%ôP¨]ð ž\ЇÚP ±‡ ¦¥QF’ƒd‡DÁmW‰4„€ä ‚ÑÃÔHŠÚºþïíLvv2y³3ÚÞƒþïýÿ7ïÿ¿ùömxûS¨íèá‚ ;yl_ÖNð]œP®°/à:¿=kC§JÇÛ†q-L#&VKü`…‚-º)·ycد£ž~c ¿á?nî€0~ç:)ùéf cÙ¹ëiE–ŽáAÆÁàésyp ²ò™Üç¾ð†çg˜~,Þ\.dX#G¹”îá^0à§ýí=š)Âûa¼€ØTN’üz1cK/Hù¥«¹¹}°´ÿñÙyëeS˜ìK°4ò‰ƒ‰Ðç°~hÆ1LmäaÁ6ž¹Úào Y‡þ»ËÜ‚ôá5ÓÇÝHí}¾ÞÙyëè+ïêEü…ÉÛíÌXÕVðaô\…' sª4½±¿åE{òì!–¾Ñ1¬³´è§ï¶Y<–±– ~^ßyôS_燿Áo4רf]Ä0(à"Læ$ìÚØïçÙöܹKøùv•47»’·ýt1Ãx  ÿÕG€_¦§‹üz!{Û0}~.§†Ù77Ÿß5€ËÈ¥\«¹pã%ôÓ=ÆcÚ3ãQü€JNðÃ#¦ÑLrý|~Ž€…~þËÅ™¿ø ÚX— %:€>çÇcGß›€~‹°¬#?ô S˜i»½Çㇾ€ÅùËÛ¹Rj|ojðü]ÇógŒÂÙo„ÏùñX¥ðãÏðQç·çÃ/û›û–~pº/ £‚îóg~·ñ¹‡ÃúÕ§{L;}#ñ?aÚ÷_¯Ã±;ØeŠ7¸öâ:ã?ÿãg÷ôóÝÿm·*…}¾_üüúÔ¬øQ Éq¥Ÿ\ mè×µ#‡øQ¯’4}7óKõ<õ|`Ûc|-ŒÔ™¿Š;‡ïóa¿ž¿™tZð¶íUÖ®€0 *¹>Öpâ­ˆû}ª(ÒoæW±¼º> ãøÔ¸ù‚--‰ûý´)²næWöÏÁ)Èîaõ“ã'¿ßç.lů~œ)徜˜;|\{Îà>¸Êr_ÍpšÉñ#î÷Þϰ°~/¼iÁ/Ú ¼§/¼…?;@˜U‚kö¹DùQ÷û-ø1$ñà ðºÁ/ýe¼LVåGÝï%üNâ­ðr€_Ú„Ji6a~xŸ—Þï·æ—ͺ œŸÁ?_4zõKšu¿ßš_n4çZÈoVGRÜdWáɤù‘÷ûH~©þyû(þl86_âÇ0öàd÷ûT­6Ì‹„¾¿±ëÞk‚ð}>ìûyî?¿>5+~”Br\é'ׇB•~”Br\é'ׇB•~”Br\é'ׇB•~”Br\é'ׇB•~”Br\é'ׇB•~”Br< ŸêË¥ŠDúEâÿaÐïÓú%¾ˆ7ó#û÷Ù½‡ütqçp¿>ì×ó7ó#û÷˜Š|ÍÈÊû÷Úàë"çf~ÒþýY»ÃlKÔyÿ>Ï>…6ó“öï§ ™jT±bòþ}Ù†¿xÒÍüäý{È·À%j‹¼o@4?ª‹vT±íǨþ=äVxÒ°~ c²þ=|Áw%0¨þ=¼²À«Dñ“õï3…¸ñTÿ>uQŠà'íßñZñIRýûÅz~²þ½qd7‹Ï 3Pý{ý5xšjæGöïñ¿K1¾-ö ú÷•Zí6/ÒÌ/vÙ{Nîׇ}?Ñýâç×§fÅRHŽ+ýäúP¨ÒRHŽ+ýäúP¨ÒRHŽ+ýäúP¨ÒRHŽ+ýäúP¨ÒRHŽ+ýäúP¨ÒRHŽ»°#Ûö¤ÜS<±¿f7IEND®B`‚lilo-24.0/doc/html/user_21-53x.png0000644000175000017500000000616411521302503015463 0ustar adjooadjoo‰PNG  IHDR>å8˜†[0PLTEÿÿÿ/Ý {tRNS2‰»v™«"ïfTÍDÝCÝÇ„ äIDATxí]qˆç»ÞÞ8³Ù½¶¥°—ML·`!RG{i"Js*¡Yèmþ© ©AÚÔ³­I1¡u©Z´2 U¤ Þ¢"gÍYlS"TI[*äÀM+-1-lj«M£¹¾÷íÎíÌ·3ïÝîìygù>È7óÞû¾÷ýö7³—·/ïû“sºÕ¡s¹u†ÏñzøYªš/]Væ¾W†6”[Ãç ã½êZ:u7†?V4e—bªž¨Ë k“¿`?﯀]Õù¼6@ÙˆÏ.Ô nûÑת†[å¥x•K7AàÛW'åNp> +5œ×ìè¦Ù”_¶èë’]GÊ·åc¤œ$)¨ à³>lÍ”àgÕ5jRI ½Ä·=±,_z<7v7L,ùܱ3•§‹ªsîÛ›^­¢#”Él¯8ZÍ­Mw*´Éº÷ÁZõwî¹ Ën\üÀû^yEéì]ïM¹n>ßç^\ùÊ6°k?µKøU—÷úÜìe«†ƒQVæqx [<\>25¿ë›¾qÈ»ŸrÓoôÛnº (§oÌ«.S¹Xðý6ñí@9uüuzù[øvƒUÏŽ;u´¡R™K°?[Ü·MÍ÷ýt|&ðù”­ºSË{€rº”qIÐÿ4Z_fp€¾-|‹Á¹–-úø”¹¯e‹KÇŽ&Çw `/b™œ¬ÃO œ̸¤³¾¼+ ß'a4§ðá+f—°ÛOüùøªÊ¬øÛí¸$׳'až;àA†Ö LøH7ÿáÖ÷&À߸h#¾l±’-ªîˆ×7ØÄ‡²2«÷/ïåÊI ÑÜÔvÀ÷ïu|ÿ²Ûá™7•LøH7ZxÅ¥1Ôø\wñË~ß[wO\X^]ø‚ê¬C°pÇ–z8ny•Ìö‰£Õ…;­ûP“¬ÑfûÍUxäzn+ª7nÕ•ÍWI—Ýõ×|ïMþ|ñ¦]óÚJºì›g Ÿ¿¾t5ø$†xû­ÃßÀœŒó[ü ðDÏ’uñUµ¬ËÊÆ—Z¶ü¡¯¦}–îUç+m׿KzÕãy]nøãƒùø‰×\ÙØªkAÉ-u[B²;!¾O•”ûv|£•溺ª®© K+ò (»ºâû#Eåµ߈ÿlçvP]`ýÞáããûÜsqø–ÂÛG˹_í[¹ÖúJ–:xé„›ûõØ&‚Ù;|B|ßü¦ó÷ä*ð®UƒöùãÏPÝe‚SÞ¶žâ“âû|.‚¸c]0‡Aÿ“£=Å'Å÷ ¾Ç0*ÜÀ—.ÂhùXña<ÏÆ÷ñøRÛúy—¥ç‹=ŽüõŸßÇãËmÏÕ+ˆï˜ ¨s.Ú^ããûH|©egð%{ì—w}ûw.Ì[—º¿ªº-{ÜÔý?q/þlxäL™^ÃÄþpñ}jrr˜Ѿ¿‰×®=ž×eßÏláó×—®ŸÄo7üñüHVßÄo7üñüHVßÄo7üñüHVßÄo7üñüHVßÄo7üñüHVßÄoðgò÷1ïܵÂw—ôªçëu¹á?ŒOÌßgàpäÇì,Ÿ¿·V=«|¶ãcó÷ÏxýÅ.°DMáó÷y÷Z¨›¿?\ÈŒG-Ö…ŽÏßxð_rÚŽÏßC~¸ ,QSøü}¢ñIù{¸àE-Ö¹NÊßC®FNuþ\Ôqù{8M³zФü=l=O«Dáãò÷™B°‘ )ŸzA-Í߯õ±’ƒ”ò÷ëDàãò÷ÙÕ·»É±¡)o§…ÂøÄü=–K¹4-q“ò÷£““×h‘0¾ÄËNÛž¯×eßÑláó×—®ŸÄo7üñüHVßÄo7üñüHVßÄo7üñüHVßÄo7üñüHVßÄo7üñüHVßÄoðgò÷;v'í]øpGíÇÆ§ð½ÆíÄ6ƒƒ­¿|`Ø"ð¹ÖÉ*ÖÝÓ>}ÂGüán†l€?n'.9Nò÷cñåû¬ç©îþ2ü‰ðåË6îoΕÿh]|ìÿàvâNŽ‘ò÷£Õt\…ùÃüýšÍ'þbý°2oly±J»k±ñø¿iGíÁ}ÒŸ:{Å«j«mìN\ò*7)ó÷YvŒß^4=_¯Ëþaþ|-sí>f…©c|¿ßš?ÓBÇøfæÿÄ7·â|ü ÓhÚU#z–ÄöçëãŒä4u^„-Fåt06ÊE ¾_ú´ªŸÎñüf¼4ÍØ‰;1øO«Y­T0¶5î­Z@G·‘q~c"H‘èÄßË úŸjqøÔ˜à@šÑ _s+Û”›NnâñURäcøV‹Áç7'ξa8yíðxp÷jw-øóS¼¥8¿G'îÄñwå 5pÞIS¸LÁ=í®ÅŸb~Š÷ÆYlœ{qâN¾Àu`‘Køè¸Ü]K*‚:Mñ*áâ|´÷âÄx|ø=£NÓ¡ãrp÷*þ YD1?Åû |lœøzq⃯¾uiªbpO»WEúáàã[ÏÅù8±'î0øÞw«‡çPpO»)ÀǘŸâ}âOˆó{tâN ¾øï·¾‹ç`p¯v×R€1¿ƒñ>á“âüÞœ¸ƒ ߯›Ñþoñݤ8¿kþnÆÃÅ5nA|&¾ïàݘÅç[Õ`ê²2ÇàÌüÆÞŠæ¾SQÏ×ërÃ_ ><’?0ó3p£S@Úx>Ÿ™œ¤ ñøø3/Ám½NE>ßß|<ñøø3!1|þ^ÆÇ˜™èG™¢šÏßKø¤3­õåNhx¼¿ïÿmä?Bʽ]lšÞùAx½N%!Ÿ¾÷`‘\ƽ„KÓ—áÁN…ÇŸó÷Qû?ÐG‹?&|ÏÝ€¯…×ëTò÷#ÑûSBø˜4½U„?wŠ(4^Êßϯ*Ñ„˜ç+˜ù‡‡\šÞu“ó÷Ï*ß1øº^wºõ|½.û~f Ÿ¿¾t5ø$†x»áçG²þ$†x»áçG²þ$†x»áçG²þ$†x»áçG²þ$†x»áçG²þ$†x{&ÏS²F𲇧)y!-+8ŒrƒÏÔçD‘¡‹áê‡L}N_º*ž?SŸ£s%Çógês¢øÒuñü©ÏÑÉŠcø3õ9\E©bø‹ÖÍõú!SŸ£žW×Ï7ü´gLŠÀgâû؎௃ى†VµÙº¬Ì1øÄúp†5÷Šz=Ž.7üÅàës ¿Ô) m<_ŸOÿGñ¯ÏO$ÅÇ×ç8ßí«ÑŠÇ'ÔçìIŠO¨Ï)Y_Ÿ“ýyR||}Î@™ÐÅó'Õç¼ÜWRó»î„úœ‘{’ÕçT’âêsFOTŸcOŠO¨Ï>ÿ×´êsì¡Ï_òº~¶4Q¨ÏÉ—#Ïgʼn-|L}þÏpK´J×MªÏ±ße w­Ãltá`Ê…ú†wÑÈëzæûm;,¹ðòñKÇÎÓO•çè,Ñõ\h,ÖS¶!RS¹ÐìU”ÿ±<‰0h0ŒZ}Ì)í#-?M†95褈4i*â,Ó…’ä’“–^щâ-ª$¥ pÉU¤Rô¤èW‘\E*ª$¥ pÉU¤Rô¤èW‘\E*ª$¥ pÉU¤Rô¤èW‘\E*ª$¥ pV¤ ^]I9>ÙÏÐáÑ7CÎâµÝi¾/è ^[$¹•1`•šÛ–©Ôº»âÀpêzd,•úƒûm¡9¾ A$™õ`’¤Y¸ãYÍ9Å:qgE4mˆÃo£¶sÝ:á òó0‘p!b"g¨\jÝ]Qîc¨'IЇy¢#tÂtžw!‰@dÅ Ý´>ß]á'óþX Ñ"æ9B‡ÀÞŸ­'G¼ßÈœ°û‡ÝA4oÙ.Ui„ôi{XŽ{Ú»+êľ»" ©ëz õg!(û‚ØûCN ¹Ä€HØýÓ¦³£K@µº™='äø“‘ b©üD@ÅÝs§é¼BPƒ:ÙûCN  (»„;H@}Ë™=GŽÏAM_>ëuâÎ ß]1¡XOg*‚ƒx êdïOCTx†ØI" þDCËñ¡V{o[¸³ÂwWÒÐímgª3Tx*³x)!aö CÃo£[1wJÒ° ôʤﮤÅÛDP’[!¨ðþt™D$N„gÈÜ©WÄZÉ<Ój]‰ØQùÇÁ¼»âK¥bé«ý8M²Ý©ð±÷çErÕ^ô‹„vátØnÍ ÔÒÞ§—üšv Áê0¶Ìfê¤He Ò~¸+^W¼öšQf««H®"•©2öÃ]ErÉ^3ÊluÉU¤2UÆ~¸³"¹Ö•J쩜&%§–WÑDÝY¼üYqà&%gÅHJjcV);Wvd×°ŽpºåsÎùJØü§Ï‹¸Dt4˺BOã9Ö•aÞÄ@N$k±‰Q ¸LðÄð5ýÁs›³ntïNÑ4‹äZW‚1¥OÅŒu¥Ñ€<*(ä@OÒüÖ¤‡<ɳ£À¥>3*·ÐG±¦D©¶®tA3Ö•úh6ôYšj=]ÎÖ@iB›ÙX¡Â÷׃rŽˆrb~þ[Ö‚"Ǻ¢^Ã;£`{‰¯¿ÿÐÖ8ߤV| ¼2¾5Iùýí 4†Î )|Ø©kåÝ[îÕðB•A×EÀH‡*"Ä)çZW‚±G‘c]Q¿ExTØKª" ºç›´d(èòvÊqºôÚå½ 1µRÈàB*# ØÐ— ú;`ä BGƇè™i§tÉqºLݤfYWè[^ÛKºIfrœnÒÒ$9J@†RN“ç’‡ )ÂÄ0bB}Oи˜B’õCùªSz[ÿÿ_»ç‚šHrÛÓ¬Õ°n5r˜™Í±fû–OgÀlæ[>›í“|Ô6WÿºÝGÝZAÑn¶«ÁCÞÛöYãfØFk_¡¯kWiU£·Bß?Ód¶ÎÙ¦VW;Ô¶|¡Ýî#cìÆ¹Ƴw®BÍBÕAÄ ’·™Ôý‡Fåc§>ªÓ[ÊÆ§d6VüæÝN¤` ÷jز«h˜TÕbÍ}äZîÁ_øèz|0ÿf»2–ÔCñࣽ©«Åd¶¨}ûa^X´ÛžÅ ÑþºåZ‰ÂGŽs壇ө«Ì¿] ž]@}tßIsðÑÞªØÍ^þùåÊQû½ÞòÉ–û¦b(FÕX .MÏóhW%ÂÔ‡vô˜,ÝšçѺVÜÂüsëmp4 õ®‡ÛŒ¿DÜôƒ£ -U[o]ðe¬»ÑkY©TÍ–ª Ä»eÓ…tZÑíɹBFAƒò$–;`žÇ!„l4f6-,®kc<ø¸â”…š`‰¨C)}4¡E0ì£Õñ¸v°ázãh<õKgzðèVCÕ( ižh[qñèP¼³@lãVjŴÖZ²6Tš°û¨B¯ ;(³¥jFñÞ¥K> G™5¤~ Ê“0dÖÝóÀ–d«ª,ΈS]`òŽœ²Ðš‘Èñ–>¢ð;‹šà€…Õ7â¾3ȱ1.mxŽ4‹Vu›ü w…L–¨MC–U¢áz£W•J'id (*Þ)ý¦Ãš¶œÌÆoIƒò¤fÁýFÿÒ¨S 1uÍi!öìié#³Ìp%Ï£è`\ng|v €0“‚3ûÈ´£±ÄF¿uñ®É·Y0ÅTœµãI%DW|t£W•Jg¡š0¼]Fõò‚.3a% ‰'^¹ØG!µ³±*•Ecòѧ$HB4ûŽåà#;!a F;dfZw&Gø0GðÑGÖ<¶hAT†0 pa­èŠó<ÂSjI¿šGæ¹^AV*Uœ…jAñæUß+Z¨Ó<Êiˆ<‰e‰uJ·CQ³Ê"Âd@@¹â´ÖGpz³a] qÔçó*² {çgв±ÇÌ?íž—›î*@í¸ bEÅié™»(¡ÚV"¡Œu7z™b¥bö :‚}ë.Ó«Ž*ZYs"OÚá|%–4„EÌ-šmWœÖù¨™6Ûèð#3 6ÌÖvÞË~­õ€ÙñŽlW™Âz0ÒþD[†t7,€¹è6ÌyÓѾPı¯ó´†ª„jÃf/øMºU£0Y©TÌ–ªê7J@ÇÞQ»Öñ~Mû¡À•'Іšv øÏw¸ôÛ¶Œè(Jd‘†ûþ”qš„ì6‚]ëXÝ÷òˆŽuþx®Ÿi»±/±Ò ¿só'5_=!§üÓ‹>¢ÀƒÙ…å!œZ~}ÉøWîsË+k½nï°LH¬¡@ço”ï’7Çaâ÷5œ¤1Þ9½sòfE¤S”P×—MJ–¿¿%¥4Bï¼…}ïo@Þx¥A3Yï;¼Ýg””Ë'Ö-;îYÈ ãâ…©„›Ý+fU¸ì>ÒS›Žó&Ë“ ( ¥L¨óvTµøgUN<Ú~|/Œ”öÙÌÈÇš_ý‹É;ž>È(9|VPÀEó>¦4N"Q’K ªSà ñI\p^ƒ³ÄžÓÅ>ú¨L¨Ë+'ËÕ]: Eû»×ÜÈÁ¾Xä6_.A¾k÷$7ë·8¢Ë¬áì®ø¬ |¢¿Ò©.Š÷””é“¢ÌÉ*Å¢å4à6¼ie9➎YM“|ÄÖFê̘$µÕG±¨¿¹Î4H/ŠËŒì‹n@^¨¼©z€$æ&ë2Jà… àñ‰MõûoèÀ?óQúF£N±€¾ð©“é3m²†±¸<¡.‡Úà˜<ΉǦ÷÷FgO #¥}õÑs'…·ÄF^N Ît²Ï O¦÷†òe(‰„¹ðá¦R§XÛf{oí>\\äˆ_·¨cÆd õ,YN?%'.Šë®šK>6.ö«@õU<_"IS,ÉÒæØ ä,”O<š™#jw åýèF1‰çóèð*œrÄwÞNº• u±”,Ïs⢹æâ*W4.”öùHïë× e•×H ÌÇîM²V,Ÿæ–Â0’å£Cœýݹ–ßžîGèù<Šu?wß·ô?góÚÒç 9ãûo}tÆó­93ðõÑ™“O«ùúèÓ ·GøûÇÎgX8û'îÞˆãâcã$Ͳ<}³ž¼~b«®¢º{‰ågÅŽ·ViÓVÇš|ÖÖJ Nñª4V±…+E÷³²’ØÍ†79ŽrËqÔÖQÔ6û šø@ž9ÞF˜—Q”¢Ù´ÛÖÊõ®%­í9dá;©²ä>>æ¸y Án‡WŽŸ $ã‹|×ìݶvjŽ_³p¬´´Ì¼;VŒýŠ8k~º×%8ý´¸rü!ït8ca¿­%Ô ´O9RÓzCÁ-‹" ?MÓ5q“âÔä ªš&EA›IW´M&c8Γz<™wMª”kÝIÛbànê2k¹ø¬ÕÑZåxaTÕ4¥ûAܡҮªðqäÉi[7‚v¯­æñˆ£¬oÕ8º˜,‘ 0 ¶MŠQúñĪí³½|«6Ñp‘á°ÁNÞãVÒ#crð/D)gbà°o/'üG—?¢¢Ï£BÎERw‹4z4QKý˜‹Ë©ÓÖ Ç›Q7u0„¦ÚŽÀB ÛG„[¡ Ýk«¦¢‹óÅT•V@ ëŠªŸZ%Xw¶ÒK µF9r›d" Oâ&kè„-ÁôÆÂ#óK<ä!b6KÛ‘µn¶7+GŽõŒ¶jS;œž ´­ŒE9&S"A«oµE‘Sœ/¦ª&ÀäM¬2øöÿËh×|ƒ.†\{ƒám‘ |Ðaô`ŽM&¸GTö}óeÂ3®HË#‹åXëf{›~äXÏ?Y9~‚Pú1úXJßG©Ã  ‚V9Þj ƒ"8Öâ|‹¤ª4‡¾t¼‰Uuo+wíÖ|DÜ]Z6q÷Ì7iˆø~l.çN#­óÇOu;ýØ pzF²×(ÇO Ç-]Fup+D“¢E›ÏÛÂÀèg> TåV䦣…דyú¬b ž4£§ªµÇCH¾8¿Û^ãï÷ãÓ)9½ÂcLà­ÅÜÔ,©02ËñðuޝF¼g`íÌqÚ² ?uÎ/¬äw«=!3kN9ûûÙÉygW8^A¶UÝň·`i>MÈOÍ/Ïo9Ù˜Âð“„ãh‰Ì6È¿ÉÝÆ/FìBYÝ_X²ñ•ŸõÛê­y¨U³Ì}Ž“Ù0u5â™Ëô.‡Úý–·e›ÒO§8mHb0›*Ù¶)#üjKÛ„&_ª¬Å· ëò m¸xfó—mÊ9dißó—ÍlS~öj0ÏÆ P¯F¼kV:T‘JsT:IY*¢éB0h7ø1ŒCpÙb†ö17ªQ:j‹5d¼¡âEÿçï¶¼Q`äØ"K뢨ñ‘Ê6²ý8çtĆ`¦Õ”îe˜ØÕ„é_šî¦,L·Û Ë  •G>Ê£á¸ÇlAÅ”YašÎÑ©Üäk…/îŒ[dô’BŽödk9®Ø|4µ{)âM ê@Ïã±3Â‘Ü #&S»În0¹Åâ|”G]™ì¦Dûèf 滹¸ä›³/ÿ9¦"iYðÁ²¥<®TúñåˆwMLI³âynS4Æ1[R21 Ø õÛ,Ó`Ìyió0ѧ“Áq®ÌÅix¡ü7ÓȱE¥‘û©l‰ã‚hÓÂåˆw M¼d ²JçIDo:ѵڶEá›ýöQeFà‡­x”¢WXzMÅ£ÿQm»¦FŽ-²ã1ý.’-¾^Q ’.G,@6·Yýè'³Ü¿±€»éO²Aß© ¼ÑÑÑ›|i‹ç üP¡§ É“†~µ$¸%Ò½¯-lþf“ÏO(ÇŠlú\AŸÿPºOBW#~nÏÏ*Çw÷G0ŽýãÀ±ü·úqàØ?þ[ý8pìŸÿ-„~8öÏ€ÿÞïÇ Ê?Ømá}ŽÚ›ÙÞ<†ÑóâØFŽ™™êýoGGõu¬í8ñ ™r¢AÝÀ„9„ÊztÌó/;VŽ™Õ˜â!OÊ‚”«AÁ­Âô'^„7>)2wòyê5aJø^I9dVc´5ÔÌM»êI·RîvÃÖhMäÚq«¤[d¢1AîÀ¤5qLóÿ{óîÑÓ8jÁmÇc¨ö˜õ¾Ëʱ ³ÓÈ1iPgá½uÔÅ‚™u›*8–’#Ïm’r,ȬÆ4rŒñ8…?+Æâ¢ÇRn®AÝÆ"¾+“b›¤Óó#³ÏžÒ£rýHkð\‘ <¤Ü\ƒºI·2r¼mñöØF¹½É@àx“šÓNŽO£r³¢=ŽëcrH1°ÇñG•‡‹™À±ÿŽ8ûgÀ ³×ÃdîmîÁäŸÖI .Çdý°ôÁš\]Œ| fvD3+cš{0g¾²çrÌs>c«{¿ð.F>]Ù›r<ó`Z)ï5ëŽ/F¾IK^š½’d<˜ècL»Ç%òm¢&O úÚ*ÇŠ,íšÎ´3Ǒ՘禂O‚¢qÂì!û^]ˆ|“Dà‰'ã¹wD¼ÑjL†Ã;œ• ›·YÑY'”cA–â…î„üo¬W¤hL òèUsñ aÇ”+‘Ï­©"ï‚ÉXÁƒZ—TèÆÖA‰•PŠóæ~,+2õq w莗Z“3VÖ´Á±jO—[¢~MÜi1I ”1 •ÇÁñhŒ†Ç“&žn…ã¥Öd9­iƒãQC½Ú5sqÏÃWîX&^†PyXC†äQ·øÃðxÚè³áx©5YŽEkZãØ­ÇÀ¯´D­Ç9 ¸š0›…x#ã…Êcÿ73~dÿµñ˜þÔú7ë7Yíé¶/ˆÖôCÿ&]¿Iµ§;) õgÆ ÃqÄr?†õk o|²›ÙÛc…娮ß4ú5ÝžcQt6mþö åXÍý›"»~“õkbµì7Þ{û6•›í)Ç›%‰OÊàþõã}Ž>-8þ”ÁýëÇû}Z"pü)ƒû׎÷9ú´DàØ2X¥--&ê#JÝÉ{Dúioz~=áÈ^ëQêž_¼sö\Ž}"Ý1äÃÓ´T§õ(uÕ~.Ç>‘~dæîÅ1h#JÝîõÏ œË±O¤Ï¬pÏõþÑ Z%Í—g²K6Um‡éD Â-Be}—¦¤îpø *;ugáX‘éúL û7iŒ¼Ë‘ e{ÛxÈ“’V ’4]ž DÏK65µžquKK6t Çg/á$+2Ñ”HkÂûô#ïr¤BÙÖV´&¬´’¶n”¥ÉòLäM$K6Á©=—`"82!½„“rì"ãõ™Œ“ÆÈ»é·šoµ&AK—cwy¦É’MÏòTú=#¦-íq\”Eá.54½ÚÃÑ&Ç $³u›RkŒMÖÿÉÄ«ÄoI˜lVÖé^c½‰p¾Á[#^gå§…ã}$yÉ¿žD‹’X{â%þOÓêÃŽþûãVj þ¶cÜJÍcaÂß6pì[©9p,LøÛŽýq+5ÿ=ŽW´¦/Ï ·²u8>É 4(úm?™?¾:bÃñ›j×í4(ž?qµ&éOWmŽß„p; jα՘0í=”õÖy‘±iߣËë|)9Êñ›Hn¨A­ŒLi—Ý#Ç›ëx{oÏGi]5MÑÙˆuÞ”åXb罌ä.”*6ô±O´¦È¨gp+È\\‡oö¯±ë¼)9 Ž"Q‹D¡/ßµ”(6“iƒÓÖÔ G†Hzˆ„ƒðuÞ‚ê[?%C²Èay°Ii:¾¢±¤Æ‹ÑF Ë#­]mP«[ wU»ß>î46‘3Ì E¾eIÛYÓIEt#|· z#Ç6fžø-UˆŒHúÆŠ”ä0™uÇÖ#·‘K-nU™©» ‚dc /¦vÚðy¼Åi Â)bî¾öúª7rlbæ14ÒŒHU¤Ô¤Lñȱ)§±õ.·ÀÀÄUfÚäáNýPh‘„Ï£-•îÍ="‘+Yƒ­§ z#ÇV͈BQjú’T´K9®¬W[``:ÿk Ñ;%!à)>¶H`¸k‹œâF„6œÝùAõFŽ$´”ÄЫéî´€ÄârLå8¶H—[``8ÿ{LÆWädcSžD[LÂçqœ±”8íª¦À¿¨M¡¦û ª7rlü”4†^Õ£Qôzv£Á H{Œ!óØz—[ Têö%©tð²¶c¯EÜ<ôœ,k)2!>š,»¦¡·Ð<ÕSŽÅOIü–è¹Ý¯¶”ð¥î¢¢ú*Ø"¶ÞÕ(·íÌ<¨O ª§EÈÇÑÂRΧÒÆg[Ÿ¡ê¾Ã±O >ãÖ^í5TÝW8öjÁ){­äUŽCl½×?ŽW9~½…pEàØŽÏ``]“YÏÛ»“Ö4¢:¶·nÛzîXã 㼇™Ç’Ë×5™õ\¹†æaxüy1)þlëŒCïYq=wcmªo@Î$Ðʺ&³ž+ž¨ÔŒk =iåùvë÷ÞåÚw¾Öåx]“YÏU£OTjFŽ5z”6ótçmŽ×m[ÏU¯XŒÉ¬¨pç„®Vj„c¡7¾ùÜv­e5'äÓ{Ñš$†Þý´© kbqxMÁzµR#c’ÏL¹Î=ªDsš{V‰æ„VQ`E)w™6¥Z°¤äx§é6Z“pLž'®G•hNÖCE-Io§M‰ÖDtÁ4†åË•šy?ž{TEVsRÏ*±„ÇcøÛÜN›22 Ð6]®ÔÌ9^xT‰æ4÷¬’z·Ó¦â!-¢ö–Z“Œs*ÑœæžU6†Þý´©¼LútSMW+5Ò5†Þø\a=ªŒæ¬Ÿ¨dL›ò©ÔÇú¡Ÿ½³õý´Ÿ¯7ìS©¹'Ç>-^娫RsK޽Z¼Ê±×Lßm*Ä4õÚmå¾ûñ7l¸{cÿŸPàø—8ÞT‹6Oø·î-ìõã-Miý¦ðµyb¥’¿˜µÇñ¦¿Ó’ŒM}lóIJŽ?™sÇ›jÑæ ?„"ôX…Ù×±ÉOC‡kŽGdFSÒè}¢)Ù¹"xYÏ,SÎño¢IûŠ—',š5Gôòÿ7–“è]îÛ$á8dª)Iô>ëï$”xfI9v ¡™Du+H¾×Ú~K#Ç™jJ6zŸhJÒ¿Å3KËÙ6š$/àÁ ¹£!LÌÈŸ“ŽèÄ>Ž3Käeé¶HŽ»HÓÍ™ííÕ5rl‘©¦$Ûu™DƒÏ,-g[H1 Óx¡ßãõ†8–#:ñåTN†ŠÔ¼34Ý|ÑÈqd‘M ÏFkMIž+Ô3k¦=Uô*O›¶ô-Í^£Õñ‰ošt»¶Žo‡í¯ ûÿ$Çcÿ øo!ôãÀñ.ÿÂè]?¡¦ñgIEND®B`‚lilo-24.0/doc/html/user_21-57x.png0000644000175000017500000000545512154346151015503 0ustar adjooadjoo‰PNG  IHDRž;áÓ$mbKGDÿ‡Ì¿ pHYs  šœtIMEÝ 9BÜ ¾IDATxÚí?tÛF‡?ß¹P\!’ß½']%¨“SAr%' îÎ(wvu`iW¤ÔI•BVwî(U±+‡ìâŽLWg²;¿4DºèÞ½<’Ýñ ,¸!°(y…DüÛÌìÎ,vfï0FCCc.håÑИKsþ¤y „¡Y 1 w§ÎX<¡B‡é\›: ¼œjÔÑÖ°(ÏY²E—À O=êL˜l@ïíƒÍ}`‹7ôr-¹Gù&šm5ÆRßkÒ ›©,÷ õƒ»HmW­!,§I;'ž˜ô £7;Ü¥WÍàw'‡]é—SÝùp6ÁlëÓ‘*°¢¤ÆÎ\D´€ÃjxƒõD&/z‹|öóŒ:.¥à¨Dsá2Ã6ŸÓ*Œòœ8›äó4yr岬Îí_ rªaô™ü¡A¡YôÙÏ5ît¤#ê‚%†m6° ësãìŸ9áT¡™ç4xͰè²Ã7œ‹ÞÆb›gx ¨°Î6§´ùl`ð€.`ò=+ 4© *ÁëïãJ>‹-þ€XÀCLáÄû×ûÒÝ¢ƒCƒfàAôů å±+ÙØÑr\úAéñÚûX€)<•é2CÚú¢·s”>OôÊK§S~6æë‚ÉXPZ+cA](-Nª,D¥)ÚfGx°Žhýä.¿4—FÌïŒÊ¢-h0q® §a]CñÄ0Å»'+-Æ;¢<ñ”CŸ –¨ $*d_ p®|è€[ cw™ŒÇIÊ㥊ÚÑ¿%ª2ÛÁëê§xyùÐ+s,Î(7“i¾>ŒE÷Îõc”Wè¦ÊBTš’”§Ô7ù«êÞ¢²HðŽ®"§ÑºBUMPž»‰—:â5F‡­2#ɲm±J‰½˜ ¶%F¬ðé´©Ýï¹`Gš@d²Ø?NŸî.õ©ÚÃç:âZ¼L/ÍlÓ"ôÊK£3ÎÍ$š¯#z1¯d—c÷x‚+I²•¦$ "µv°éðF gý ‡r0Õ]NWaAÚGÒsʱAËâ*“Oˆ6çpOš›s€>Z´hQÍ4û?ÕÄ‘[¼©c¹5“ cA®Ý‹ôIeú/ÕÈ,8óÒ+s,Î(7“i¾NœaK³0b#‘¯èɲ—¦Yïwbš¸ŠozqY<ãG¨s^ršIy 1õëÄ^ÕjÐÇø¬y(šü†0À÷œc,™=}iâÐ~ÄO9ÔÇr *xÂgˆÖÞb zHSQft Ú”ÚW½2ÇÒ蔟M£ù:Ñ¢.yMJÒ>Yª)²—¦Yï7œÌ:ÓW$pÖïàÞóDØùÈi†Ù6‹—<çïùox Tx‚Å=<º˜|‹Á'þËM6YgG¬s|à)ëüÎà-'l°Ã˜wر͊43cñ‚}¾b=sÄ?©ŸÄSûÀ©â8ZƒÿÊžRâ+.ñ€w<Æ`ƒn¤vxÅÛ<`HwªÌ(m¯8aƒMÖ9dƒ·¹Ó V„cÉtÊϦÓ|èð‘çl°Ï!U~ÄÛä+6yNƒ·)²àŤi(µÙâˆ]ú¬pÄ.c.9a‡{¼ÇäNxÁ!^¤krà#ÿœ·2É©5U×)ûü•nàfšmÓИªi¼`¦áìO÷E¯ÐÐ C5n,þLÛ$û¨Ø$zA¸Ã˜;úhä86TÙ¥ªðJòA…V1Ä‚`”Ó,&£Â(Fm¶ihh³MCãóB+†Æ>††Æ¼n†††öy44>T+ ^Ðæëìñ”gô¹”®Ú”1ÙáPÄ €‡²ÍØa(}”ôZz¾Í+îá±)Õò˜*ïDìÐ ?ñ˜-(±½ßÐå–<ÆàRZû\çÞ)¯'që¶@Ýæ6¤•·'j³-\~oJq2I1ëm±.ÈP,àNˆ Î PDN‚|Ì[7õÜôõü#ü—Ïä·Ù½•íLtxÒ•'Œë‘ùŠ0DáÙÊ”ò¸´¥¯½Ž­%| Q•²n¬ò¨¹uÛ•Gû<t0‹’bÖ@ÄU_|³dCHÎ P\N»àÜlùGøEy’”yÀʽUùð²Lx"‡[¸®ÈGÑ¢Kƒž"ÚäKô¹VârŠ :Š\)ÇÔ Œ^Ükª¹µÜX”'«Sž­;ØüL0iŠ\]Ƙ iß®,¤<#×= ÿ\‰* †SÁP>Z"¢o:RsG0)…‘Ö¥OµÐ¾ºÇVý ™ñÜraQžx¼È6ZÔ¨ÑáL\ý‡‡}< Fœ§&ظÊc0fÕZìüd\¨³Å×T©(û‘†èϦM°.-Z”9ã7i¸ïÒ✒”h£T¹˜Ó§2f^OãÖ2#?žŒ„Ô˜Êî¸D“Ê 0dSq7S/Z#9fÝÄ Œ¨³Å5Á®ý °U !ÚãùY¢ç&9 ¢á]ÛÜ~åÁñÁop_üúNüÿ5r‡ÅûsøU‡3Vìr>3Âß´w›û1ÚBÚÕ­Kkm¶;¾›âGž<Ìã:‘„Æ·TylFⵟÑ£ÏäI̺¨IŸ5e6ÆsÊb@O6 M…þPQRžîñhξÏÈp=‰[E´ä&ðÄ÷‰Â¹Í1NYA—Àl3hP"³~þÁTN“¤lñ±Í™z2ÌIPÊsЉ=£Ïô¯'Gø/3Šá‰'Ô&‹Z”¸¸Ù³oê] JÀ«”¤¼"Ut1Ø’ÎûYTÖ0©Å¢ÊqXãŒ-zL²!Ôh`Hµ¬aS¥bP£”iR),¨I¥®É3gO€²h¥Cÿ\]y=‰[ËŒEybQf2»ThQjœñWrFTñ„AÞ¥¶¤cp&|© Cõ<š' kŽ^U­¡1—òèUÕMhhhhåÑÐÐÊ£¡¡•GCC+†Æˆ»š ¦Dw®}ªmØ jôñÑvô†õËýg>È›žÏ“Øüê!íK§9ZyæC¸Å™Cyæ i×X2åùr}žÅBŽÝŽ|¾v =a°¸ZȱA W$3q01©D6éóCŽýq¤C ? ¹†K;–Uf¾v íó,á•}ìIÛ$Þûpû›§m.›iêmØ¡BŸñÔNÓÚçY*43†§oÝ€OH»Æ’áËÝ“Ôat³È¤J‚|>mÚx´°¨±Ë-ª¸Ô9c•*]`@ ›©,@>"H»!Ƈ‘lnh£MO,ït††V ëP½ªZCCOhhhåÑилakh̉ÿ—˜~cëJIEND®B`‚lilo-24.0/doc/html/user_21-58x.png0000644000175000017500000000774712154346262015515 0ustar adjooadjoo‰PNG  IHDRÓa'‚ƒìbKGDÿ‡Ì¿ pHYs  šœtIMEÝ  Ïvß´xIDATxÚí=xÛÖ†_·œLˆÜÅêdps2AÊä´‹ ­ÍZ[2 ´7yR©©õFij<9ä–ld¶xªÉ­~ºÝê>}’[²±/‹B)H<ß` çžsî=÷ÿ~¼Ã@PqH˜ Ñ߈aˆ ÕÁÝ„{'xô9Öîõ°9§Í¸¤t—iô€ûX4®$Ù¢Ë>`0â¼ÝLÚ˜Ô6 ï͆Í1# Æk†%Ëî1¦!áX´ÓÛb®µ(&m+Is ¤<õßvB©“HéÐ+É'&£é[n…ÊI‹Žÿ÷§™®ö—³­ÝÛ£iÞ}ÍD+±Ø&áàJjt'k˵·•£ï¦¿.·%u©ûWu:˜%H ì» »½nE˜’>6ípRXZ›½+'¥ÈŸmmä:Ù ?Êøºì¶´¯]Ó\[f`Ÿµ‘ ¶J\ ¿å”‰µÐm^1,ð ª^µxÄ—Œ™àñ€G¼ ÇŸ8fƒ&á_2á=6j˜ü…_xç§ñŒ¾êJ¿â?à=cà Ÿc°Ï ”6|Ã3ñ1S1™a;á”}ò€'ìó}È'e軤{,]Sýël­·ƒ>¿ð”}ŽxB“ü02ù€‡<¥­ü•–ïãHÉ™jöY<ã÷xÆ!sÞsÊò“9åkž0ö+†°~áŸÊÇÖJåÑŠ¥ó‚#~Ï Rž+?Ó+¬‚¤I²ò`û]ëì 6î-÷²l½Tÿð'í’gÚ‘…¢[Š;̹#åApÅÖ®É!ÍÈØ±Lx̘°‡¡Xħ|LfL¿"­©tzéô ‚2:½ úý^@ ^@°$L‚Ê#yÒ×ôøŒ<æ ¾dÄ{í©M“ž¨3’°8'ùˆÇ|ÌSÿœG é•ö}oø1µT>§Éu¶õ”ïøœÇÔy´Õ}6YȲdškÿúž¬†^rˆÅcÞóŒ·êë­È)Í6³T+òs=ë™ÁÏô™ÅΡÖq2)eÆ!^é²5¾a:S¼1q˜Ê…M,ÚLc‡…—5YC½m»½äâ®Ëˆf üuéR+Üž&[’gyž¼ëMàçHPdY‘—ëYÏ\ºÀ·1rí!ç!‡dÏnNã¦3Õ)½¹?ö;%5>¢‰—XãµUÍ7~@—. Îø·6 Ð傺F ¶4¹,8öM³$ÛþòMTæ4ʬp·:É’|û¯æÉMÙ]Üú&½P{µÇ,ÊUr=ù™C]É«áÄ´ëÓå’¯2=»9¯y 2Fdµ¯§ÝwT=¬ñõbÁæ)‡,—V’dt&Øàî‚frs ŘÒ,ɶ¿>å[ŒžÙÀš[G˜›dÿ̇ ˬâñš.`Ñb“{TEoc±ÁS|º”XeƒCü |O 0ù‰%žÒá›ë˜üÄW>…4öiŠÉàk>óBˆìƒ‡lóQñÛ‰QPµóZL#dê`ð36YãÓP›qÞ 1Yã[¼LÈ$/~#‰}Ëà3^7‹ç˃Ç/â¹üÀ^bSc‡¿°‰Ka„.ĵI~æ‡üƒ×ØÔØd‰ ž±Ä'Àâ€.\¾Å|OYßñŒ_9§Ä{º´ÆÖÓˆÖxÊN¬ƒˆã@íó¸@Š˜áC)|ým\É'p±Åÿà†3`ƒ.¦pâƒëméîááààQ =ˆ¶ø«DIùÛ•æØñv\ÚaëIêm,ÀžÊp›omÑÛ9JŸ'~e‰eó)×Íâù²`ÒÜD³•¾à.Ò'SâÚfGx°ŽxúÁ]Ak.^ÂïŒë¢-x0q&ÐÓˆVWÔèfx·ýtã±ÅØbnjǡ„#j9´)a S‘øZX€«på#Ü¢›¸Ë¤¯øf^†dƒ€C1 u¯§IDõ‘´J11hYìQfð ÑÆ¡Ê·ð¥Øœ´éP§NòXÑÿž˜P ¹eÀú-SP ù¾˜,ÈÔýXß‘ÖfðR±gZ~e‰eñ—f:Ï—‰#lIbFb$ =]’Ú4êý&‡&®â›^RØÃ朗žŽe<†ý:‰Wµö1hî‹G~Cè`ˆ{ª˜¡HF‡/M<à-†¨åp¬ø-SPÁ>CœzŽè!mLE›ñ´)=ß<ø•%–ŧ\7‹çËDcÉ{¨±+ბ¥œ¡ Imõ~£`VU„¯H‘lÐÁòXÌ%òÑÓ1¢m/yÆNù{¼J<Æâ>-L~Ààÿe‡k¬²ÊCV9>ñ„U>ó xÏ6éó›}6X’"3ÏÙæ;VyÀ#öùÇÀ7Qk8TüŽS^ÙvùŽs|à#0(ЊQ‡Wì³Á÷ti µçíXc•= ¼Ï_°bKçS®›Íóe¢ÉWžQ`›=Ê|ÕÛä;Öx†Çû ]ðÚÔ•žÙbŸ-Ú,±Ï}Î9`“;œbò+ª—¢Ï ·èsK¿dž2[”^I>(Ñ£Ã2†XŒ2ÌbÒ›áÈ£§mzÚ¦¡q±ÐÆ£¡1ƒÏ£¡¡1­Û£¡¡¡} ƒj…Ás<_ÓË|”¾¯Ú1ÙdOd ¤—[|¦ÀÏyË=ÖxÂ;‘ÐàßT_²…ÅÎÙç” eým~æ÷h *5ÞÆVÌ Lap.­}.вÊëYòºP?sƒ‡ð>êi›:_?-c]Un‹ÿ-úbÕ®Á5†2AJ´B*%ú©õ úeãb>†‰é­›Y6|=ÿ ÿÅ›ò'ŸÙ½–Ï™êðdO$ ;Ö§š¡R«Ë°Üg„e.Xn¥ØP£-Ý;\¿!僸¸EԤƓ&¯ëm<Úç‘åë§e¬«Ë‡3czaÙ:,I•*4c÷×3ë{ÒBøõö,°çlxùgøÏ³Ê$mç#l÷Zí‡7ÊxNhŠ]L¢UEÎÄ2ou¹jáDSˆï MzÒðn%r)PLjb¯‚}L º4®€T&6žMñèˆÍ…TS3£<.uàm˜åg_bwŒJ÷ÔufÚœèŒõ9öƒ“Ëe0«L|Þˆnî›&u*Thr$®þStÛøô¨fn°qe§E:EŽøKLÝVC±ŸQžŽu|‚|@34••‰xöº³¡ÌÉ”Û#¯O.—Å@~2 ¦Ùå›ê±KÒ˜ÈfâöȾ(È×OËX'“=Þûša„¬(„—lÁIø@Ã<ùi(û,WÊRßà.ðþüáßòÔê„í)ü¦½+v÷¨Ž”‹˧ßàn‚»?¸»ƒ?bד¿G×HÞñ£B"ùɤ3B¯š± ¯¥ñ@OôGÔ0B¡Fëiåj8ìŠ{×q„ñ”iH-ÀòÈWçñ”ýÖ$ËÐí±¶Ÿ˜nä-—êBêÃüd¼Ù¨mðbƉ÷ ùúéëé™ì*¬„êäaо¹I™¡ðmNGr]ÇHøIÓ 8¥šØ#úÌàúdrYÌG&¾0KêDëìrrµ£oêS v1€lÊá¦e°~Ñ¡¿óLùÐói66W'i7¼Ùî5Ì<½v–£g:D Yœ)ŒG¤mH¥%m<‹n<7×ç™-åxÖãÈÓ’´pñdSk§,*&K96¨ààŠ\$Gä%ɇô)ÇÁ8âáPÁ"HH®àÒHì*£NÒîQ§E ƒ3íñhŸg‘'^ã=Y‡Ä;âîà°ó¬£Óåišúv(Ѧ?tÒ´†öy µ1S޳‰@žutzD9íöÁõý«¼5ÆÍ0žëªvG†Ã_‡ÒƒÉÓx)Ç£‰ï$îM;:}€´äuƒ3 Ç1ëW{sŒ›€ëi<ã}u?帎ÉCâëŠ{-Qš•®—–¤m‡_|Ún‹¢¡ˆñSŽ'9Ô~¼ãÉÓ’´_„uv&ÈêÔ¸ÜÜ3I”­Õ0)‹ý´C/¥O‹ [Q§ŒË1G,S¦t¨cSÁÀ kÅ9ØIÚžoLz"±ÙÓ“60XÜp††6 Ë0½ªZCC 44´ñhh\ èÓ°54¦Äÿš÷£ˆøˆàIEND®B`‚lilo-24.0/doc/html/user_21-56x.png0000644000175000017500000000634312154345557015510 0ustar adjooadjoo‰PNG  IHDRÓ;Š—¨}bKGDÿ‡Ì¿ pHYs  šœtIMEÝ /Ò(¬u tIDATxÚí=xÛÆÇn=8ž¹‹ÔÉà¦d‚äIIA[ë ”·x 8:(oÒäPSëÒT{²É-ÙÈlñTQ[ýt!³Å}ú$$7{cp"(Böý›øzï}ß»÷¾ï¯[L000(9L˜”Âù¹ÌýÀ~æ?2¢7wyŒÒ¹Ã9‘œ;eÁ±nlê-b$AXÔúøÒèÍÇÿ[€Ž_,FØbbgú¼/½=ë5ñðhÒ Gz}ñ+ H]Éò“R|ú¡ìdÚ}ÀãÉ´ÌH³¾¨Ó=ÍØ´}eek*¥õêa3éF}­‰Ð#*^N¾ÇKNÜ>OÌ+xÂÒÙ[Si>Mi. ^æÜ°zð(Q:#ñÅH|!_¢ù#}˜º¢½tcaêàà‰ï<ú8¨È-Qöõp_1½MÉ8ŒoÙLWú0õC–"mOX1µC%³•~æX¼}eei÷¦^ëëéäOD•ÍÌö:NKHV¾ÇKŽ.L{aг“Õf¼ÌæÅ"å1žNT!$e—$Log<ìŠÓÝ­1–Æ%m6¨Òà21X¯ˆV8ú:kã’ ÎÙ‘A†±áÿ°s–@.ŸÓTÚÑw]ñ,)s†À¼#Ûeô•=–¥iÒ›:­¯c.cÇ]^'Þ`çä{¼äè0Œ¥Ûť˚N§ŸjábÎüåq˜›;7b iæ€x½âpHÙò¿‹ÇÜb Í {@Ÿ!mÚ´©ÏµÆ6ÒÙèÅ®1ùê ~ º_rڃ؜d_#sZ ¬ îUõ•=–¥iÜ›z­¯Ïp%ï8X‰ÖuVyèó=YròrsÖ¹¶ñ+âÉ2÷ŒCȬ­¬gæ{²ääåf4•y&&/UœV™<=¡eËcRv‰gzžó„»\ð _òx„Ã]ô°ù‹ü—ZÜg“M¾b“sà-߰ɯ¼~ä˜-v˜ð—#¶¹#Í:|Ç>Ÿ±É9âïœÄWûÀI⊄üiù†*ŸñŽð†‡XlÑ‹¥ /8b›/ÑKÉŒkö‚c¶¸Ï&‡lñcÌ'Eè;•${L¯©üu¶Ö׃.ïyÂûRç§0Œl>ã>Oh éò}(9#É>‡#vés‡#v™ðŽcv¸Ë6?sÌw2+†¸Þóoácg®òè¤Ò9aŸ?ÓK”çÒÏôÌÕ$Yqpîuöÿ#÷²ÙzoPb8ü+œ´SÏ4 E)n1á–)WlíêìROŒ‹DÀ˜!Xâ€EzÊÇf¼ÂôKÒššN¯éôÑé500(¿×ÀÀÀtz –€ SƒÒC½ é;:|Å&{|Ãcú¼“žºÔ°ÙáPœ‘„é9Émöø‚Fá9HÒKéû/¸Ë€ûR*©óFœm=æRá€*Û׺Ï& Y–Œrí_Þ“åðÁsvqØãG\ˆó˜i+æÉuµ£;?„§=]jÒ/i0á}¦g‹Ô¸ yp¬›F‡¶lé$§Ž§#öIÎNõÉÈbUR³ ­‚ݨè-ɲ¿8O®½Ðú ô„Ž!)+×óx¶¬ÔéÖ&“P¶þÒy¶xK0”¦Ñ¹Sù×Ô”‰8j;’\“,\>Ééžtr5žÊ$ü^§4ÎÒY’mqž\'ÜI[_ÉVY‘—ëYÏfÏ“|AxšØR„iR“¢5¾SH],á#Ž“j§È<¬Jzv¡ñ ‹Þ¢‡u–dÛ_œ'×g}ƒn,'Ú™Väåzv‰¨ÐÀITR§ 37ÃGž]Æ7b i 8{£=–S\âcÚôhácq©8 y:ÝѾsº n¹§œ®ðtåpá-ÛjKòì/Γë³ÞIœÒl2ÖZ‘ŸëYÏ,~§Ë8uµŠ—I)3ˆñJ­ñÓ±àIÃ.¬ãÐd”:,<«ÉjâídÛ¸#Ø…è%§w}úÔ à¯Óã’ÊÂí©Ú’<û‹óäz¬·ßA‘eE^®g=ói¯SäÚ—œÆ8Ôž]Æ7 L-Æ¢Sz/qvJ*|N@Yã5EÍ6¾G›65žñ‹4 íÑæŒªD ¶Ô9_p쫳$Ûþâ<¹ë)}ɱ";׳žU0em°Sú’QyY1YÅk¼VÜž³6m gı±¸ÆœRဆpð~ØíP³*ÅëÊ)»PüÞŒÝ(^ÛÎÞÚæOü‡ÿ‰;¿‰;„oü>ûKâÝY×èœý²EeI¾ýWõdWi÷Ìö¸-Y¶O­OÚ¾ˆõI}=º¹ IY¹®{fc‡9µT_ªF'ÑiMzvu—>L]ÆÂ˜g´¤Z+bÄqÃÙçž’ì錯rºƒ¶¢ö{ Tä4ÊxánµÊ’|û¯æÉUÙ½¸õu:±öjƒq†óäºú™GUȫॴëÒæœo3=»:׊¼+±Úבî{¢‹Öø:©` „CfK+ê™ 6º;¥™\ÝÂÄbÌ:K²í/Γë¶>Z…ŒþˆÊм\ÏzÖZúh1.:©#Å‚ŒìY7|»8K£Ŭ^ƒ š´R‡&>Íð¾M€O@ƒVb<åÐbB+,=&4°c©4è 7YøLè96=‚•Qhx Œþ²,ɲ¿(O®×úÈ ‚˜i+²s]ÿÌ¥®žÛ4™ÐÃÇ¡›P›ê­÷lC ¯"4.m˜~*ø´ÿ†©ù ®7†½ÁÀ üajNÈ”&L L˜˜0500aj```Âôf`ºN×SœuiàãÓHííÄþ†™zO%× ïÍ~GµÇh <ïjë;™[á …Y™ßSé:.Žm@%W¾§æ.X¿õþÚtùcÔ„éÕ ªž @ÅA cÈ S5wA*)ƒkòý§Üéu—Þ‰“Å â ˆfÈBwÁ:¬·p4Çà¬P²ÙédƦKc¸tû çÐqÈA}°@JÕ+ìÁ]­õ<¥¸ôhŠÃýàò-À¦ÅHŒ§'ØXŒÂ½Ú&LçÆU؈urõ÷tÆ ¥Ç]pýÖį.ÏpéÒ¦AC\OŸOœµÙg€Å˜³Ä Z¦saqö¤î\€žƒ zw¬‘«Ó•‚‰W–³>^åL9)lM…T¥E°Rœ·?J«üÔÑ즦][”½a†CÎ2¸²9fínC#Wwlé”Í"âh(ž»B§å0·åîR1ÁfÂ4Ž3e!WM£Œ¯XÇOÛ@6Á,å× µ¦jî‚e8–µ>ôUIžâ)¸# L§7µ+SW´ mNÃuS‹UÑ齆n[ѱ´h†¬’«Ã·¥²^?jÝÕÖ mªœ›™_Óš.oI‡G@ ‹{ØR YÇ£I‹ U.™þ¡{—>g€M 8§É°¨b6Ä»j¹.âÞ) v¹'Òóma¬wËZïPc5v h‹Ñó3.¹Àá€1u‚x®GcœNŸ {ƒ±Þ ô1jv!” LILO Generic boot loader for Linux Version 21.5 Documentation

LILO
Generic boot loader for Linux
Version 21.5
July 17, 2000

Documentation

User’s guide
(written by Werner Almesberger and John R. Coffman)

Technical overview
(written by Werner Almesberger and John R. Coffman)


(Documentation reconstructed by Joachim Wiedorn on January 29, 2011)

lilo-24.0/doc/html/tech_21-5.html0000644000175000017500000006550612154347501015354 0ustar adjooadjoo LILO Generic boot loader for Linux Version 21.5 Technical overview

LILO
Generic boot loader for Linux
Version 21.5
 
Technical overview

Werner Almesberger
John R. Coffman
(reconstructed by Joachim Wiedorn)

July 17, 2000

Contents

This document describes internals of LILO and related parts of its environment (kernel, etc.). It is not necessary to read or understand this document in order to install or use LILO. A general introduction and installation instructions can be found in the user’s guide.

This document has only been partially updated and does reflect the status of Linux (until 2.2.16) and of LILO (until 21.5) in the year 2000.

1 Load sequence

The boot sector is loaded by the ROM-BIOS at address 0x07C00. It moves itself to address 0x96A00, sets up the stack (growing downwards from 0x96A00 to 0x96800), loads the secondary boot loader at address 0x96C00 and transfers control to it. It displays an “L” after moving itself and an “I” before starting the secondary boot loader. If a read error occurs when loading the secondary boot loader, a two-digit hex code is displayed after the “L”. This results in an endless stream of error codes if the problem is permanent. Displaying these error codes is disabled if the build-time option NO1STDIAG is set.

The secondary boot loader loads the descriptor table at 0x98800 and the sector containing the default command line at 0x98C00. If the default command line is enabled, its magic number is invalidated and the sector is written back to disk. This potentially dangerous operation can be disabled by defining LCF_READONLY when passing second.S through cpp. Next, the secondary boot loader checks for user input. If either the default is used or if the user has specified an alternate image, the options sector is loaded at 0x98C00 and the parameter line is constructed at 0x99000. If the resulting line contains the option lock, the command line as entered by the user (it is saved before the final line is constructed) is written to the disk as the new default command line. Also, if a fallback command line is set, it is copied to the default command line sector.

If the user has supplied an initial RAM disk image, this file is loaded below the end of physical memory or 16 MB, whichever is lower. The start address is lowered to the next page boundary so that the memory area occupied by the initial RAM disk can later be easily returned to the system’s free memory pool. The 16 MB limit exists because the BIOS functions used to transfer data in memory are only specified for an 24 bit address space.

Next, the floppy boot sector of that image is loaded at 0x900001, the setup part is loaded at 0x90200 and the kernel part is loaded at 0x10000, or, if the kernel has been compiled for being loaded “high” (i.e. with make bzImage), it is loaded at 0x100000 instead. During the load operations, the sectors of the map file are loaded at 0x98600.

If the loaded image is a kernel image, control is transferred to its setup code. If a different operating system is booted, things are a bit more difficult: the chain loader is loaded at 0x90200 and the boot sector of the other OS is loaded at 0x90400. The chain loader moves the partition table (loaded at 0x903BE as part of the chain loader) to 0x00600 and the boot sector to 0x07C00. After that, it passes control to the boot sector.

Chain loaders that allow booting from a second drive (either floppy or hard disk) also install a small function to intercept BIOS calls and to swap the drive numbers at the top of available memory.

The secondary boot loader displays an “L” after being started and an “O” after loading the descriptor table and the default command line. Before loading the descriptor table, it checks, whether it has been loaded at the correct location and displays a question mark if it hasn’t. If the descriptor table has an incorrect checksum, a minus sign is displayed.

0x00000  |-------------------------------|1982 bytes
         |-------------------------------|
0x007BE  |--------Partition-table---------|64 bytes
0x007FE  |-------------------------------|29 kB
0x07C00  |--------Boot-load-area---------|512 bytes
0x07E00  |-------------------------------|32.5 kB
0x10000  |                               |448 kB
         |                               |
         |            Kernel             |
         |                               |
         |                               |
         |-------------------------------|
0x90000  |------Floppy-boot-sector-------|512 bytes
0x90200  |---------Setup-(kernel)---------|39.5 kB (2 kB used)
0x9A000  |------Primary--boot-loader-------|512 bytes
0x9A200  |             Stack              |3.5 kB
0x9B000  |-----Secondary-boot-loader------|8 kB (3.5 kB used)
0x9D000  |--------Map--load-area---------|512 bytes
         |-------------------------------|
0x9D200  |--------Descriptor-table---------|1 kB
0x9D600  |---Default command--line, etc.--|512 bytes
0x9D800  |---Keyboard-translation-table----|512 bytes
0x9DA00  |Parameter-line-construction-area-|1 kB
0x9DC00  |                               |7.5 kB
         |                               |
         |--------Drive-swapper----------|1 kB
         ---------------------------------
0xA0000

The area 0x90020-0x90023 is overlaid by a command-line descriptor while the secondary boot loader is running.

If the build-time configuration option LARGE_EBDA is set, all the addresses in the area 0x90000-0x9FFFF are changed to 0x80000-0x8FFFF, with the exception of the location of the driver swapper, which automatically follows the end of the available memory.

2 File references

This section describes the references among files involved in the boot procedures.

                          --------------|
                          |  Default    |
                         /|             |
                      //  -command--line---
                     /    |  Image      |
                   /   // |             |
                  /  /    |-descriptors-- |
                 / /      |             |
              // /        |             |
-------------/-/          |   map       |
|Boot sector  /\ |
|            \\|\
-------------\\\\  \ \ \   |-------------|
              \ \\      \ \  Primary    |
               \ \ \      | boot loader  |
                \\\  \ \  ---------------
                  \\    \ |             |
                   \ \\   |             |
                    \  \  |- --- --- -- |
                     \   \| Secondary   |
                      \\  | boot loader  |
                        \ |- --- --- -- |
                         \\|             |
                          |             |
                          ---------------
                            boot.b

The boot sector contains the primary boot loader, the address of the default command line sector, the address of both descriptor table sectors and the addresses of the sectors of the secondary boot loader. The generic boot sector is copied from boot.b.

The primary boot loader can store up to eight sector addresses of the secondary boot loader.

|-------------|
|   Default   |
|             |
--command--line-|
|             |
|    Image    |
- --- --- --- -
|             |
|  descriptors  |
--------------|
|             |
|  Zero sector  |
--------------|
|  Keyboard   |
|             |
--trans. table-|
|    First    |
|             |
----section----|
|             |
|   Second    |
- --- --/ --- -
|    //       |
|   section    |
--------------|
|    Third    |
|             |
----section----|

The map file consists of so-called sections and of special data sectors. Each section spans an integral number of disk sectors and contains addresses of sectors of other files.

There are three exceptions: 1. If a “hole” is being covered or if the floppy boot sector of an unstripped kernel has been omitted, the address of the zero sector is used. This sector is part of the map file. 2. When booting a different operating system, the first sector is the merged chain loader that has been written to the map file before that section. 3. Each map section describing an image is followed by a sector containing the options line of that image.

The last address slot of each map sector is either unused (if the map section ends in this sector) or contains the address of the next map sector in the section.

The ifive sectors at the beginning of the map file are special: the first sector contains the default command line, the next two sectors contain the boot image descriptor table and the fourth sector is filled with zero bytes. This sector is mapped whenever a file contains a “hole”. The fifth sector contains the keyboard translation table.

|-----------|                       --------------|
|Descriptor  |                       |             |
------------                        |             |
   |    | \    |-------------|     //-- -- --- -- -
    ||   || \\  |             |    / |             |
     |    |    |   Fallback    |   /  |             |
     |    |    |             |  /  /|             |
      |    |   -- --- -- --- - /  / --- -- --- -- -
      |     |  |   Options    |////// |             |
       ||    || |             // /   |             |
        |    | |- --- -- ---///     --- -- --- --
        |     |||            //      |             |
        |      |            /|      |             |
         |     -- -// /-/--- -
         ||    |             |      |             |
          |    |             |      |             |
           |   -------------\-\     --- -- --- -- -
           |                   \ \\ |             |
            |    Map section         |             |
            ||                      ---------------
             |
    optional   |                       Kernel image
              |
               |
               ||----------------------------------|
               |             |      |             |
               |             |      |             |
               -- --/ /-/--- -      --- -- --- -- -
               |   /         |      |             |
               |             |      |             |
               -------------\-
                             \      |             |
                 Map section   \     |             |
                                \   --- -- --- -- -
                                 \\ |             |
                                    |             |
                                    |             |
                                    ---------------
                                   Initial RAM  disk

A kernel image consists simply of a sequence of sectors being loaded. The map section also contains a sector with a fallback command line and a sector with parameter line options. Optionally, a RAM disk image, specified by a second map section, can be loaded.

                             |--------------|         |-------------|
                             |              |         |  Original   |
                             |  chain.b     |         |  partition   |
|-----------|                -----/---------|        /----table------
|           |                    /                 /
-Descriptor--                    /              / /
       \                      //           / /
         \\ |--------------|  /           /
           |              | /         //
           |   Fallback    |/        /
           - --- -- --- --/     / /
           |            //| / /
           |   (Options)/  /
           | --- -- --/// /-|
           |              \
           | Chain loader  |\ |
           | --- -- --- --cccccccccccmmmmmmmmmmmcmcmcmcmcmcmcmccccrmrmrmrmrmrrrrrrrrrrrrrmmmmnnnnnmmmmmmmmmmmmmrmrmrmrm.....n.nnnnnnnnnnnnnnnn................
           |            cccccccmmcmcmcmcccccc/mmmmmcmcmcmcmcmcmcmcrrrrrmmmmmmcmcmcmccccccrrrrrrrrrrrrmmmmmmrmrmrmrrrrrrmmmmmmcmcmcmcmccmmmmmmmmmmmmrmnnnnnnnnmmmmmmrmrmrmrrrrrrrmmnnnnnnnnnnnnn........n.nnnnnnnnmmmmmmmrmrm.....................n.nnnnnnnn........     |-------------|
           |            /-|----------|Boot sector   |
           ---------------|          |             |
                                     ---------------
             Map  section

When booting another operating system, the chain loader (chain.b) is merged with the patched partition table2 and written into the map file. The map section of this boot image starts after that sector and contains only the address of a dummy floppy boot sector (the zero sector, but its contents are irrelevant), the loader sector and the boot sector of the other operating system. Not that the map section also contains the fallback sector and a (useless) sector for options.

3 Configuration parameters

The boot sector of each kernel contains a set of configuration parameters that have to be available at boot time before the kernel can access file systems. These parameters can be set when the kernel is compiled and later be changed with programs like rdev. LILO can supersede the parameters (in memory) at boot time by placing the corresponding items on the parameter line passed to the kernel.

The parameters are stored at the following (decimal) offsets:

497
the size of the setup code in sectors (512 bytes). Older kernels may put a zero at this place.
498-499
is a flag specifying whether the root file system should be mounted read-only (if non-zero) or read-write (if zero).
500-501
the size of the kernel, counted in paragraphs (16 bytes).
502-503
this parameter is currently unused.
504-505
the size of the RAM disk in kilobytes. No RAM disk is created if this parameter is set to zero.
506-507
the text mode the VGA is set to.
0xFFFD
the user is asked to specify the VGA mode at boot time.
0xFFFE
uses 80x50 (“extended”) mode.
0xFFFF
uses 80x25 (“normal”) mode.

Any other value selects the corresponding mode as displayed in the interactive VGA mode selection menu. This is the only option that is set by LILO by patching the boot sector instead of passing it on the parameter line.

508
the minor number of the device that should be mounted as root.
509
the major number of the device that should be mounted as root.

4 Parameter line interface

The kernel supports processing of parameters that are provided by the boot loader. The parameter string is a NUL-terminated ASCII string that contains space-separated words or variable=value pairs. A description of how they are interpreted can be found in the section of the user’s guide labeled “The boot prompt”.

The following descriptor has to be set up to pass a parameter string to the kernel:

0x90020
the magic number 0xA33F.
0x90022
the offset of the first byte of the parameter line relative to 0x90000.

The boot loader composes the parameter line from the command line, from the options sector and from some internally generated prefixes (typically auto and BOOT_IMAGE=), as follows:

                  |---------------------------------------|
                  |  Image    |                            |
Command  line      |  name    |    Command  -line options    |
                  ---------------------------\------------
                       |                       \ \ \
                       |                             \ \
                       |                                 \ \
                       |                                    \ \ \
           |-----------|----------------------------------|-------\\-------------------|
           | Pre- |  Image    |                            |                            |
           |fixes  |  name    |       Static options         |    Command  -line options    |
           --------------------------------|--------------------------------------------
Parameter string                            |
passed to the kernel                         |
                                           |
                                           |
                             |----------------------------|
Options sector                |       Static options         |
                             |                            |
                             ------------------------------

Example:
Command line: vmlinuz root=802
Options sector: root=801 ro

yields BOOT_IMAGE=vmlinuz root=801 ro root=802

Because parameter line options can typically be overridden, the first root option is ignored by the kernel.

5 External interface

LILO is able to receive its command line from a program that is booted before it. This externally provided command line is only used if the user does not use the normal mechanism to invoke the boot prompt.

The following register contents are expected:

DL
contains the value 0xFE.
ES:SI
points to the string “LILO”. The string must be in upper case and no terminating character is needed. The string must not cross segment boundaries, i.e. SI must be below 0xFFFD.
ES:BX
points to a NUL-terminated string that is used as the command line. This string has a maximum length of 78 characters (not including the terminating NUL) and must not cross segment boundaries.

There are two values of the externally provided command line that have a special meaning:

  • an empty string (ES:BX points to a NUL byte) is interpreted as a request to enter the boot prompt and to accept keyboard input.
  • a string that consists only of blanks is interpreted as a request to boot the default boot image.

LILO can also obtain the default command line from the map file. It is only used if no externally provided command line is available.

6 Default command line in map file

The first sector of the map file is reserved for a default command line. Unless the user invokes the boot prompt by pressing a shift key or unless an externally provided command line is present, the command line in the map file is interpreted as if it had been typed on the keyboard.

The first two bytes of the first sector of the map file have to contain the magic number DC_MAGIC (0xF4F2) in little-endian byte order. They are followed by a NUL-terminated string with a maximum length of 510 bytes, including the NUL. Note that the boot loader limits command lines to 78 characters after removing duplicate spaces.

The command line is disabled by either clobbering the magic number or by using an empty string (i.e. only a NUL byte) as the command line.

Last updated by John R. Coffman on July 17, 2000
reconstructed by Joachim Wiedorn on January 29, 2011

lilo-24.0/doc/html/tech_21-52.html0000644000175000017500000000204711521302637015423 0ustar adjooadjoo

1The floppy boot sector is only used as a source of setup information.

lilo-24.0/doc/html/tech_21-53.html0000644000175000017500000000205111521302637015417 0ustar adjooadjoo

2If the partition table is omitted, that area is filled with zero bytes.

lilo-24.0/doc/html/tech_21-5.css0000644000175000017500000001614412154347377015205 0ustar adjooadjoo /* start css.sty */ description { margin-top: 1em; } dt.description { margin-top: 1em; } dd.description { margin-top: 0.5em; } .line-10{font-size:90%;} .cmr-10{font-size:90%;} .cmr-10x-x-109{} .cmr-17{font-size:154%;} .cmr-12x-x-120{font-size:130%;} .cmbx-12x-x-120{font-size:130%; font-weight: bold;} .cmbx-12x-x-120{ font-weight: bold;} .cmr-12{font-size:109%;} .cmr-6{font-size:54%;} .cmti-12{font-size:109%; font-style: italic;} .cmtt-10x-x-109{font-family: monospace;} .cmtt-10x-x-109{font-family: monospace;} .cmbx-10x-x-109{ font-weight: bold;} .cmbx-10x-x-109{ font-weight: bold;} .cmss-10x-x-109{ font-family: sans-serif;} .cmr-9{font-size:81%;} .cmtt-10{font-size:90%;font-family: monospace;} .cmtt-10{font-family: monospace;} .cmti-10x-x-109{ font-style: italic;} p.noindent { text-indent: 0em } td p.noindent { text-indent: 0em; margin-top:0em; } p.nopar { text-indent: 0em; } p.indent{ text-indent: 1.5em } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} li p.indent { text-indent: 0em } li p:first-child{ margin-top:0em; } li p:last-child, li div:last-child { margin-bottom:0.5em; } li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } .enumerate1 {list-style-type:decimal;} .enumerate2 {list-style-type:lower-alpha;} .enumerate3 {list-style-type:lower-roman;} .enumerate4 {list-style-type:upper-alpha;} div.newtheorem { margin-bottom: 2em; margin-top: 2em;} .obeylines-h,.obeylines-v {white-space: nowrap; } div.obeylines-v p { margin-top:0; margin-bottom:0; } .overline{ text-decoration:overline; } .overline img{ border-top: 1px solid black; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; } .fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.fbox {display:table} div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.minipage{width:100%;} div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;} div.center div {text-align: left;} div.flushright, div.flushright div.flushright {text-align: right;} div.flushright div {text-align: left;} div.flushleft {text-align: left;} .underline{ text-decoration:underline; } .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } .framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } .framebox-c {text-align:center;} .framebox-l {text-align:left;} .framebox-r {text-align:right;} span.thank-mark{ vertical-align: super } span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; } div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; } table.tabular td p{margin-top:0em;} table.tabular {margin-left: auto; margin-right: auto;} td p:first-child{ margin-top:0em; } td p:last-child{ margin-bottom:0em; } div.td00{ margin-left:0pt; margin-right:0pt; } div.td01{ margin-left:0pt; margin-right:5pt; } div.td10{ margin-left:5pt; margin-right:0pt; } div.td11{ margin-left:5pt; margin-right:5pt; } table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } td.td00{ padding-left:0pt; padding-right:0pt; } td.td01{ padding-left:0pt; padding-right:5pt; } td.td10{ padding-left:5pt; padding-right:0pt; } td.td11{ padding-left:5pt; padding-right:5pt; } table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } .hline hr, .cline hr{ height : 1px; margin:0px; } .tabbing-right {text-align:right;} span.TEX {letter-spacing: -0.125em; } span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} a span.TEX span.E {text-decoration: none; } span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;} span.LATEX span.TEX{ position:relative; left: -0.4em; } div.float, div.figure {margin-left: auto; margin-right: auto;} div.float img {text-align:center;} div.figure img {text-align:center;} .marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} .marginpar p{margin-top:0.4em; margin-bottom:0.4em;} table.equation {width:100%;} .equation td{text-align:center; } td.equation { margin-top:1em; margin-bottom:1em; } td.equation-label { width:5%; text-align:center; } td.eqnarray4 { width:5%; white-space: normal; } td.eqnarray2 { width:5%; } table.eqnarray-star, table.eqnarray {width:100%;} div.eqnarray{text-align:center;} div.array {text-align:center;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} span.pmatrix img{vertical-align:middle;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} span.bar-css {text-decoration:overline;} img.cdots{vertical-align:middle;} .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;} .index-item, .index-subitem, .index-subsubitem {display:block} div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;} div.caption span.id{font-weight: bold; white-space: nowrap; } h1.partHead{text-align: center} p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;} .subparagraphHead, .likesubparagraphHead { font-weight: bold;} .quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;} .verse{white-space:nowrap; margin-left:2em} div.maketitle {text-align:center;} h2.titleHead{text-align:center;} div.maketitle{ margin-bottom: 2em; } div.author, div.date {text-align:center;} div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } div.author{white-space: nowrap;} .quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; } .abstract p {margin-left:5%; margin-right:5%;} div.abstract {width:100%;} .figure img.graphics {margin-left:10%;} .caption span.id{font-weight: bold;} .wrapfig-r, .wrapfig-ri, .wrapfig-ir, .wrapfig-ro, .wrapfig-or {float:right; text-align:left; margin-left:auto; margin-top:0.5em;} .wrapfig-l, .wrapfig-li, .wrapfig-il, .wrapfig-lo, .wrapfig-ol {float:left; text-align:left; margin-right:auto; margin-top:0.5em;} .wrapfig-r .caption td.content, .wrapfig-ri .caption td.content, .wrapfig-ir .caption td.content, .wrapfig-ro .caption td.content, .wrapfig-or .caption td.content, .wrapfig-l .caption td.content, .wrapfig-li .caption td.content, .wrapfig-il .caption td.content, .wrapfig-lo .caption td.content, .wrapfig-ol .caption td.content {white-space: normal; } .wrapfig-r .caption, .wrapfig-ri .caption, .wrapfig-ir .caption, .wrapfig-ro .caption, .wrapfig-or .caption, .wrapfig-l .caption, .wrapfig-li .caption, .wrapfig-il .caption, .wrapfig-lo .caption, .wrapfig-ol .caption {width:30%; } /* end css.sty */ lilo-24.0/doc/html/user_21-5.html0000644000175000017500000072177712154425077015425 0ustar adjooadjoo LILO Generic boot loader for Linux Version 21.5 User’s guide

LILO
Generic boot loader for Linux
Version 21.5
 
User’s guide

Werner Almesberger
John R. Coffman
(reconstructed by Joachim Wiedorn)

July 17, 2000

Contents

1 Overview
 1.1 Easy rules
 1.2 System overview
2 Introduction
 2.1 Disk organization
 2.2 Booting basics
  2.2.1 MS-DOS alone
  2.2.2 LOADLIN
  2.2.3 LILO started by DOS-MBR
  2.2.4 Several alternate branches
  2.2.5 LILO started by BOOTACTV1
  2.2.6 LILO alone
  2.2.7 Names
 2.3 Choosing the “right” boot concept
  2.3.1 BIOS restrictions
  2.3.2 One disk, Linux on a primary partition
  2.3.3 One disk, Linux on a logical partition
  2.3.4 Two disks, Linux (at least partially) on the first disk
  2.3.5 Two disks, Linux on second disk, first disk has an extended partition
  2.3.6 Two disks, Linux on second disk, first disk has no extended partition
  2.3.7 More than two disks
  2.3.8 /boot on a DOS partition
3 The boot prompt
 3.1 Boot command-line options
  3.1.1 Standard options
  3.1.2 Device-specific options
  3.1.3 Other options
  3.1.4 Repeating options
  3.1.5 Implicit options
 3.2 Boot image selection
4 Map installer
 4.1 Command-line options
  4.1.1 Show current installation
  4.1.2 Create or update map
  4.1.3 Change default command line
  4.1.4 Kernel name translation
  4.1.5 De-installation
  4.1.6 Print version number
  4.1.7 Options corresponding to configuration variables
 4.2 Configuration
  4.2.1 Syntax
  4.2.2 Global options
  4.2.3 General per-image options
  4.2.4 Per-image options for kernels
 4.3 Boot image types
  4.3.1 Booting kernel images from a file
  4.3.2 Booting kernel images from a device
  4.3.3 Booting a foreign operating system
 4.4 Disk geometry
  4.4.1 Obtaining the geometry
  4.4.2 Specifying the geometry
 4.5 Partition table manipulation
  4.5.1 Partition activation
  4.5.2 Partition type change rules
  4.5.3 Partition type changes
 4.6 Keyboard translation
  4.6.1 Compiling keyboard translation tables
  4.6.2 Using keyboard translation tables
5 Installation and updates
 5.1 Installation
  5.1.1 Compatibility
  5.1.2 Quick installation
  5.1.3 Files
  5.1.4 Normal first-time installation
  5.1.5 Build-time configuration
  5.1.6 Floppy disk installation
 5.2 Updates
  5.2.1 LILO update
  5.2.2 Kernel update
  5.2.3 System upgrade
 5.3 LILO de-installation
 5.4 Installation of other operating systems
6 Troubleshooting
 6.1 Map installer warnings and errors
  6.1.1 Fatal errors
  6.1.2 Warnings
 6.2 Boot loader messages
  6.2.1 LILO start message
  6.2.2 Disk error codes
 6.3 Other problems

 
This document has only been partially updated and does reflect the status of Linux (until 2.2.16) and of LILO (until 21.5) in the year 2000.  

1 Overview

LILO is a versatile boot loader for Linux. It does not depend on a specific file system, can boot Linux kernel images from floppy disks and from hard disks and can even act as a “boot manager” for other operating systems.2

One of up to sixteen different images can be selected at boot time. Various parameters, such as the root device, can be set independently for each kernel. LILO can even be used as the master boot record.

This document introduces the basics of disk organization and booting, continues with an overview of common boot techniques and finally describes installation and use of LILO in greater detail. The troubleshooting section at the end describes diagnostic messages and contains suggestions for most problems that have been observed in the past.

Please read at least the sections about installation and configuration if you’re already using an older version of LILO. This distribution is accompanied by a file named INCOMPAT that describes further incompatibilities to older versions.

For the impatient: there is a quick-installation script to create a simple but quite usable installation. See section 5.1.2 for details.

1.1 Easy rules

But wait here are a few easy rules that will help you to avoid most problems people experience with LILO:

  • Don’t panic. If something doesn’t work, try to find out what is wrong, try to verify your assumption and only then attempt to fix it.
  • Read the documentation. Especially if what the system does doesn’t correspond to what you think it should do.
  • Make sure you have an emergency boot disk, that you know how to use it, and that it is always kept up to date.
  • Run /sbin/lilo whenever the kernel or any part of LILO, including its configuration file, has changed. When in doubt, run it. You can’t run /sbin/lilo too many times.
  • If performing a destructive upgrade and/or erasing your Linux partitions, de-install LILO before that if using it as the MBR.
  • Don’t trust setup scripts. Always verify the /etc/lilo.conf they create before booting.
  • If using a big disk, be prepared for inconveniences: you may have to use the linear option.

1.2 System overview

LILO is a collection of several programs and other files:

The map installer
is the program you run under Linux to put all files belonging to LILO at the appropriate places and to record information about the location of data needed at boot time. This program normally resides in /sbin/lilo. It has to be run to refresh that information whenever any part of the system that LILO knows about changes, e.g. after installing a new kernel.
Various files
contain data LILO needs at boot time, e.g. the boot loader. Those files normally reside in /boot. The most important files are the boot loader (see below) and the map file (/boot/map), where the map installer records the location of the kernel(s).3 Another important file is the configuration file, which is normally called /etc/lilo.conf
The boot loader
is the part of LILO that is loaded by the BIOS and that loads kernels or the boot sectors of other operating systems. It also provides a simple command-line interface to interactively select the item to boot and to add boot options.

LILO primarily accesses the following parts of the system:

The root file system partition
is important for two reasons: first, LILO sometimes has to tell the kernel where to look for it. Second, it is frequently a convenient place for many other items LILO uses, such as the boot sector, the /boot directory, and the kernels.
The boot sector
contains the first part of LILO’s boot loader. It loads the much larger second-stage loader. Both loaders are typically stored in the file /boot/boot.b
The kernel
is loaded and started by the boot loader. Kernels typically reside in the root directory or in /boot.

Note that many of the files LILO needs at boot time have to be accessible with the BIOS. This creates certain restrictions, see section 2.3.1.

2 Introduction

The following sections describe how PCs boot in general and what has to be known when booting Linux and using LILO in particular.

2.1 Disk organization

When designing a boot concept, it is important to understand some of the subtleties of how PCs typically organize disks. The most simple case are floppy disks. They consist of a boot sector, some administrative data (FAT or super block, etc.) and the data area. Because that administrative data is irrelevant as far as booting is concerned, it is regarded as part of the data area for simplicity.

|------------|----------------------|
|-Boot-sector--                      |
|                                   |
|             Data area             |
|                                   |
 ------------------------------------

The entire disk appears as one device (e.g. /dev/fd0) on Linux.

The MS-DOS boot sector has the following structure:

       0x000 |Jump--to-the-program--code-|
             |--------------------------|
       0x003 |                          |
             |     Disk parameters      |
             |--------------------------|
0x02C/0x03E  |                          |
             |      Program  code       |
             |                          |
             |                          |
       0x1FE |-Magic-number--(0xAA55-)--|
             ---------------------------|

LILO uses a similar boot sector, but it does not contain the disk parameters part. This is no problem for Minix, Ext2 or similar file systems, because they don’t look at the boot sector, but putting a LILO boot sector on an MS-DOS file system would make it inaccessible for MS-DOS.

Hard disks are organized in a more complex way than floppy disks. They contain several data areas called partitions. Up to four so-called primary partitions can exist on an MS-DOS hard disk. If more partitions are needed, one primary partition is used as an extended partition that contains several logical partitions.

The first sector of each hard disk contains a partition table, and an extended partition and each logical partition contains a partition table too.

|------------------------------------------|
|Partition table                  /dev/hda   |
| |Partition-1-------------------/dev/hda1--|
| |                                        |
| |----------------------------------------|
| |Partition 2                   /dev/hda2  |
--------------------------------------------

The entire disk can be accessed as /dev/hda, /dev/hdb, /dev/sda, etc. The primary partitions are /dev/hda1 /dev/hda4.

|------------------------------------------|
|Partition-table------------------/dev/hda---|
| |Partition 1                   /dev/hda1  |
| |----------------------------------------|
| |Partition 2                   /dev/hda2  |
| |                                        |
| |Extended--partition------------/dev/hda3--|
| | |--------------------------------------|
| | |Extended--partition-table---------------|
| | |Partition 3                 /dev/hda5  |
| | |--------------------------------------|
| | |Extended--partition-table---------------|
| | |Partition 4                 /dev/hda6  |
| | |                                      |
--------------------------------------------

This hard disk has two primary partitions and an extended partition that contains two logical partitions. They are accessed as /dev/hda5

Note that the partition tables of logical partitions are not accessible as the first blocks of some devices, while the main partition table, all boot sectors and the partition tables of extended partitions are.

Partition tables are stored in partition boot sectors. Normally, only the partition boot sector of the entire disk is used as a boot sector. It is also frequently called the master boot record (MBR). Its structure is as follows:

       |------------------------|
0x000  |                        |
       |     Program code       |
       |                        |
       |------------------------|
0x1BE  |     Partition table     |
       |                        |
       |------------------------|
0x1FE  -Magic-number--(0xAA55--)--

The LILO boot sector is designed to be usable as a partition boot sector. (I.e. there is room for the partition table.) Therefore, the LILO boot sector can be stored at the following locations:

  • boot sector of a Linux floppy disk. (/dev/fd0, )
  • MBR of the first hard disk. (/dev/hda, /dev/sda, )
  • boot sector of a primary Linux file system partition on the first hard disk. (/dev/hda1, )
  • partition boot sector of an extended partition on the first hard disk. (/dev/hda1, )4

It can’t be stored at any of the following locations:

  • boot sector of a non-Linux floppy disk or primary partition.
  • a Linux swap partition.
  • boot sector of a logical partition in an extended partition.5
  • on the second hard disk. (Unless for backup installations, if the current first disk will be removed or disabled, or if some other boot loader is used, that is capable of loading boot sectors from other drives.)

Although LILO tries to detect attempts to put its boot sector at an invalid location, you should not rely on that.

2.2 Booting basics

When booting from a floppy disk, the first sector of the disk, the so-called boot sector, is loaded. That boot sector contains a small program that loads the respective operating system. MS-DOS boot sectors also contain a data area, where disk and file system parameters (cluster size, number of sectors, number of heads, etc.) are stored.

When booting from a hard disk, the very first sector of that disk, the so-called master boot record (MBR) is loaded. This sector contains a loader program and the partition table of the disk. The loader program usually loads the boot sector, as if the system was booting from a floppy.

Note that there is no functional difference between the MBR and the boot sector other than that the MBR contains the partition information but doesn’t contain any file system-specific information (e.g. MS-DOS disk parameters).

The first 446 (0x1BE) bytes of the MBR are used by the loader program. They are followed by the partition table, with a length of 64 (0x40) bytes. The last two bytes contain a magic number that is sometimes used to verify that a given sector really is a boot sector.

There is a large number of possible boot configurations. The most common ones are described in the following sections.

2.2.1 MS-DOS alone

|--------------------------------------------------------|
|Master-Boot-Record-Boot-sector---------Operating system--|
-DOS--MBR--------→----MS--DOS--------→----COMMAND.COM--------

This is what usually happens when MS-DOS boots from a hard disk: the DOS-MBR determines the active partition and loads the MS-DOS boot sector. This boot sector loads MS-DOS and finally passes control to COMMAND.COM. (This is greatly simplified.)

2.2.2 LOADLIN

|--------------------------------------------------------------|
|MasterBoot-Record-Boot--sector-------Operating-systems-----------
|DOS -MBR  ----→   MS  -DOS  --- -→   COMMAND.COM
---------------→---LOADLIN-------→---Linux----------------------

A typical LOADLIN setup: everything happens like when booting MS-DOS, but in CONFIG.SYS or AUTOEXEC.BAT, LOADLIN is invoked. Typically, a program like BOOT.SYS is used to choose among configuration sections in CONFIG.SYS and AUTOEXEC.BAT. This approach has the pleasant property that no boot sectors have to be altered.

Please refer to the documentation accompanying the LOADLIN package for installation instructions and further details.

2.2.3 LILO started by DOS-MBR

|--------------------------------------------------------|
|Master Boot Record Boot sector        Operating system   |
|DOS---MBR-------→---LILO-----------→---Linux-------------|
|                                                        |
----------------→---other-OS-----------------------------

This is a “safe” LILO setup: LILO is booted by the DOS-MBR. No other boot sectors have to be touched. If the other OS (or one of them, if there are several other operating systems being used) should be booted without using LILO, the other partition has to be marked “active” with fdisk or activate.

Installation:

  • install LILO with its boot sector on the Linux partition.
  • use fdisk or activate to make that partition active.
  • reboot.

Deinstallation:

  • make a different partition active.
  • install whatever should replace LILO and/or Linux.

2.2.4 Several alternate branches

|--------------------------------------------------------------|
|MasterBoot-Record-Boot--sector-------Operating-systems-----------
|DOS -MBR  ----→   MS  -DOS  --- -→   COMMAND.COM
|             -→   LOADLIN    ---→   Linux
|             -→   LILO  ----- --→   Linux
---------------→---MS---DOS--—--⋅⋅⋅------------------------------

An extended form of the above setup: the MBR is not changed and both branches can either boot Linux or MS-DOS. (LILO could also boot other operating systems.)

2.2.5 LILO started by BOOTACTV6

|--------------------------------------------------------|
|Master-Boot-Record-Boot-sector--------Operating-system---|
|BOOTACTV     --→   LILO  ------- -→   Linux             |
|             - →   other OS
---------------------------------------------------------

Here, the MBR is replaced by BOOTACTV (or any other interactive boot partition selector) and the choice between Linux and the other operating system(s) can be made at boot time. This approach should be used if LILO fails to boot the other operating system(s).7

Installation:

  • boot Linux.
  • make a backup copy of your MBR on a floppy disk, e.g.
    dd if=/dev/hda of=/fd/MBR bs=512 count=1
  • install LILO with the boot sector on the Linux partition.
  • install BOOTACTV as the MBR, e.g.
    dd if=bootactv.bin of=/dev/hda bs=446 count=1
  • reboot.

Deinstallation:

  • boot Linux.
  • restore the old MBR, e.g.
    dd if=/MBR of=/dev/hda bs=446 count=1
    or FDISK /MBR under MS-DOS.

If replacing the MBR appears undesirable and if a second Linux partition exists (e.g. /usr, not a swap partition), BOOTACTV can be merged with the partition table and stored as the “boot sector” of that partition. Then, the partition can be marked active to be booted by the DOS-MBR.

Example:

# dd if=/dev/hda of=/dev/hda3 bs=512 count=1  
# dd if=bootactv.bin of=/dev/hda3 bs=446 count=1

WARNING: Whenever the disk is re-partitioned, the merged boot sector on that “spare” Linux partition has to be updated too.

2.2.6 LILO alone

|------------------------------------|
|MasterBoot-Record-Operating-system--|
|LILO --- -----→   Linux             |
|             -→   other OS          |
--------------------------------------

LILO can also take over the entire boot procedure. If installed as the MBR, LILO is responsible for either booting Linux or any other OS. This approach has the disadvantage, that the old MBR is overwritten and has to be restored (either from a backup copy, with FDISK /MBR on recent versions of MS-DOS or by overwriting it with something like BOOTACTV) if Linux should ever be removed from the system.

You should verify that LILO is able to boot your other operating system(s) before relying on this method.

Installation:

  • boot Linux.
  • make a backup copy of your MBR on a floppy disk, e.g.
    dd if=/dev/hda of=/fd/MBR bs=512 count=1
  • install LILO with its boot sector as the MBR.
  • reboot.

Deinstallation:

  • boot Linux.
  • restore the old MBR, e.g.
    dd if=/fd/MBR of=/dev/hda bs=446 count=1

If you’ve installed LILO as the master boot record, you have to explicitly specify the boot sector (configuration variable boot=) when updating the map. Otherwise, it will try to use the boot sector of your current root partition, which will usually work, but it will probably leave your system unbootable.

2.2.7 Names

The following names have been used to describe boot sectors or parts of operating systems:

“DOS-MBR”
is the original MS-DOS MBR. It scans the partition table for a partition that is marked “active” and loads the boot sector of that partition. Programs like MS-DOS’ FDISK, Linux fdisk or activate (accompanies LILO) can change the active marker in the partition table.
“MS-DOS”
denotes the MS-DOS boot sector that loads the other parts of the system (IO.SYS, etc.).
“COMMAND.COM”
is the standard command interpreter of MS-DOS.
“LOADLIN”
is a program that loads a Linux kernel image from an MS-DOS partition into memory and executes it. It is usually invoked from CONFIG.SYS and is used in combination with a CONFIG.SYS configuration switcher, like BOOT.SYS.8
“LILO”
can either load a Linux kernel or the boot sector of any other operating system. It has a first stage boot sector that loads the remaining parts of LILO from various locations.9
“BOOTACTV”
permits interactive selection of the partition from which the boot sector should be read. If no key is pressed within a given interval, the partition marked active is booted. BOOTACTV is included in the pfdisk package. There are also several similar programs, like PBOOT and OS-BS.10

2.3 Choosing the “right” boot concept

Although LILO can be installed in many different ways, the choice is usually limited by the present setup and therefore, typically only a small number of configurations which fit naturally into an existing system remains. The following sections describe various possible cases. See also section 2.3.1.

The configuration file /etc/lilo.conf for the examples could look like this:

boot = /dev/hda2  
compact  
image = /vmlinuz  
image = /vmlinuz.old  
other = /dev/hda1  
  table = /dev/hda  
  label = msdos

It installs a Linux kernel image (/vmlinuz), an alternate Linux kernel image (/vmlinuz.old) and a chain loader to boot MS-DOS from /dev/hda1. The option compact on the second line instructs the map installer to optimize loading.

In all examples, the names of the IDE-type hard disk devices (/dev/hda) are used. Everything applies to other disk types (e.g. SCSI disks; /dev/sda) too.

2.3.1 BIOS restrictions

Nowadays, an increasing number of systems is equipped with comparably large disks or even with multiple disks. At the time the disk interface of the standard PC BIOS has been designed (about 16 years ago), such configurations were apparently considered to be too unlikely to be worth supporting.

The most common BIOS restrictions that affect LILO are the limitation to two hard disks and the inability to access more than 1024 cylinders per disk. LILO can detect both conditions, but in order to work around the underlying problems, manual intervention is necessary.

The drive limit does not exist in every BIOS. Some modern motherboards and disk controllers are equipped with a BIOS that supports more (typically four) disk drives. When attempting to access the third, fourth, etc. drive, LILO prints a warning message but continues. Unless the BIOS really supports more than two drives, the system will not be able to boot in that case.11

The cylinder limit is a very common problem with IDE disks. There, the number of cylinders may already exceed 1024 if the drive has a capacity of more than 504 MB. Many SCSI driver BIOSes present the disk geometry in a way that makes the limit occur near 1 GB. Modern disk controllers may even push the limit up to about 8 GB. All cylinders beyond the 1024th are inaccessible for the BIOS. LILO detects this problem and aborts the installation (unless the linear option is used, see section 4.2.2).

Note that large partitions that only partially extend into the “forbidden zone” are still in jeopardy even if they appear to work at first, because the file system does not know about the restrictions and may allocate disk space from the area beyond the 1024th cylinder when installing new kernels. LILO therefore prints a warning message but continues as long as no imminent danger exists.

There are four approaches of how such problems can be solved:

  • use of a different partition which is on an accessible disk and which does not exceed the 1024 cylinder limit. If there is only a DOS partition which fulfills all the criteria, that partition can be used to store the relevant files. (See section 2.3.8.)
  • rearranging partitions and disks. This is typically a destructive operation, so extra care should be taken to make good backups.
  • if the system is running DOS or Windows 95, LOADLIN can be used instead of LILO.
  • if all else fails, installation of a more capable BIOS, a different controller or a different disk configuration.

LILO depends on the BIOS to load the following items:

  • /boot/boot.b
  • /boot/map (created when running /sbin/lilo)
  • all kernels
  • the boot sectors of all other operating systems it boots
  • the startup message, if one has been defined

Normally, this implies that the Linux root file system should be in the “safe” area. However, it is already sufficient to put all kernels into /boot and to either mount a “good” partition on /boot or to let /boot be a symbolic link pointing to or into such a partition.

See also /usr/src/linux/Documentation/ide.txt (or /usr/src/linux/drivers/block/README.ide in older kernels) for a detailed description of problems with large disks.

2.3.2 One disk, Linux on a primary partition

If at least one primary partition of the first hard disk is used as a Linux file system (/, /usr, etc. but not as a swap partition), the LILO boot sector should be stored on that partition and it should be booted by the original master boot record or by a program like BOOTACTV.

   |------------------------|
   |MBR----------/dev/hda---|
   | |MS--DOS----/dev/hda1--|
→  ---Linux-/----/dev/hda2---

In this example, the boot variable could be omitted, because the boot sector is on the root partition.

2.3.3 One disk, Linux on a logical partition

If no primary partition is available for Linux, but at least one logical partition of an extended partition on the first hard disk contains a Linux file system, the LILO boot sector should be stored in the partition sector of the extended partition and it should be booted by the original master boot record or by a program like BOOTACTV.

   |------------------------|
   |MBR----------/dev/hda---|
   | |MS -DOS    /dev/hda1  |
→  | |Extended---/dev/hda2--|
   | |  |Linux---/dev/hda5--|
   | |  |-------------------|
   ------...-----/dev/hda6---

Because many disk partitioning programs refuse to make an extended partition (in our example /dev/hda2) active, you might have to use activate, which comes with the LILO distribution.

OS/2 BootManager should be able to boot LILO boot sectors from logical partitions. The installation on the extended partition itself is not necessary in this case.

2.3.4 Two disks, Linux (at least partially) on the first disk

This case is equivalent to the configurations where only one disk is in the system. The Linux boot sector resides on the first hard disk and the second disk is used later in the boot process.

Only the location of the boot sector matters – everything else (/boot/boot.b, /boot/map, the root file system, a swap partition, other Linux file systems, etc.) can be located anywhere on the second disk, provided that the constraints described in section 2.3.1 are met.

2.3.5 Two disks, Linux on second disk, first disk has an extended partition

If there is no Linux partition on the first disk, but there is an extended partition, the LILO boot sector can be stored in the partition sector of the extended partition and it should be booted by the original master boot record or by a program like BOOTACTV.

   |-------First-disk-------|  |-----Second--disk-------|
   |MBR          /dev/hda   |  |MBR          /dev/hdb   |
   |  |MS--DOS----/dev/hda1--|  | |Linux------/dev/hdb1--|
→  |  |Extended--/dev/hda2--|  | |...--------/dev/hdb2--|
   |  | |-------------------|  | |                      |
   |  | |...-----/dev/hda5--|  | |                      |
   ------...-----/dev/hda6---  --------------------------

The program activate, that accompanies LILO, may have to be used to set the active marker on an extended partition, because MS-DOS’ FDISK and some older version of Linux fdisk refuse to do that. (Which is generally a good idea.)

2.3.6 Two disks, Linux on second disk, first disk has no extended partition

If there is neither a Linux partition nor an extended partition on the first disk, then there’s only one place left, where a LILO boot sector could be stored: the master boot record.

In this configuration, LILO is responsible for booting all other operating systems too.

   |-------First-disk-------|  |-----Second--disk-------|
→  |MBR----------/dev/hda---|  |MBR----------/dev/hdb---|
   |  |MS--DOS----/dev/hda1--|  | |Linux------/dev/hdb1--|
   ----...-------/dev/hda2---  ---...--------/dev/hdb2---

You should back up your old MBR before installing LILO and verify that LILO is able to boot your other operating system(s) before relying on this approach.

The line boot = /dev/hda2 in /etc/lilo.conf would have to be changed to boot = /dev/hda in this example.

2.3.7 More than two disks

On systems with more than two disks, typically only the first two can be accessed. The configuration choices are therefore the same as with two disks.

When attempting to access one of the extra disks, LILO displays a warning message (Warning: BIOS drive 0xnumber may not be accessible) but does not abort. This is done in order to allow the lucky few whose BIOS (or controller-BIOS) does support more than two drives to make use of this feature. By all others, this warning should be considered a fatal error.

Note that the two disks restriction is only imposed by the BIOS. Linux normally has no problems using all disks once it is booted.

2.3.8 /boot on a DOS partition

Recent kernels support all the functions LILO needs to map files also on MS-DOS (or UMSDOS) file systems. Since DOS partitions tend to occupy exactly the places where BIOS restrictions (see section 2.3.1) are invisible, they’re an ideal location for /boot if the native Linux file systems can’t be used because of BIOS problems.

In order to accomplish this, the DOS partition is mounted read-write, a directory (e.g. /dos/linux) is created, all files from /boot are moved to that directory, /boot is replaced by a symbolic link to it, the kernels are also moved to the new directory, their new location is recorded in /etc/lilo.conf, and finally /sbin/lilo is run.

From then on, new kernels must always be copied into that directory on the DOS partition before running /sbin/lilo, e.g. when recompiling a kernel, the standard procedure changes from

# make zlilo

to

# make zImage  
# mv /dos/linux/vmlinuz /dos/linux/vmlinuz.old  
# mv arch/i386/boot/zImage /dos/linux/vmlinuz  
# /sbin/lilo

WARNING: De-fragmenting such a DOS partition is likely to make Linux or even the whole system unbootable. Therefore, the DOS partition should either not be de-fragmented, or a Linux boot disk should be prepared (and tested) to bring up Linux and to run /sbin/lilo after the de-fragmentation.12

3 The boot prompt

Immediately after it’s loaded, LILO checks whether one of the following is happening:

  • any of the [Shift], [Control] or [Alt] keys is pressed.
  • [CapsLock] or [ScrollLock] is set.

If this is the case, LILO displays the boot: prompt and waits for the name of a boot image (i.e. Linux kernel or other operating system). Otherwise, it boots the default boot image13 or – if a delay has been specified – waits for one of the listed activities until that amount of time has passed.

At the boot prompt, the name of the image to boot can be entered. Typing errors can be corrected with [BackSpace], [Delete], [Ctrl U] and [Ctrl X]. A list of known images can be obtained by pressing [?] or [Tab].

If [Enter] is pressed and no file name has been entered, the default image is booted.

3.1 Boot command-line options

LILO is also able to pass command-line options to the kernel. Command-line options are words that follow the name of the boot image and that are separated by spaces.

Example:

boot: linux single root=200

This document only gives an overview of boot options. Please consult Paul Gortmaker’s BootPrompt-HOWTO for a more complete and more up to date list. You can get it from

ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/BootPrompt-HOWTO.gz

or from one of the many mirror sites.

3.1.1 Standard options

Recent kernels recognize a large number of options, among them are debug, no387, no-hlt, ramdisk=size, reserve=base,size,, root=device, ro, and rw. All current init programs also recognize the option single. The options lock and vga are processed by the boot loader itself. Boot command-line options are always case-sensitive.

single boots the system in single-user mode. This bypasses most system initialization procedures and directly starts a root shell on the console. Multi-user mode can typically be entered by exiting the single-user shell or by rebooting.

root=device changes the root device. This overrides settings that may have been made in the boot image and on the LILO command line. device is either the hexadecimal device number 14 or the full path name of the device, e.g. /dev/hda3.15

reserve=base,size, reserves IO port regions. This can be used to prevent device drivers from auto-probing addresses where other devices are located, which get confused by the probing.

ro instructs the kernel to mount the root file system read-only. rw mounts it read-write. If neither ro nor rw is specified, the setting from the boot image is used.

no-hlt avoids executing a HLT instructions whenever the system is idle. HLT normally significantly reduces power consumption and therefore also heat dissipation of the CPU, but may not work properly with some clone CPUs. no387 disables using the hardware FPU even if one is present.

debug enables more verbose console logging.

Recent kernels also accept the options init=name and noinitrd. init specifies the name of the init program to execute. Therefore, if single mode cannot be entered because init is mis-configured, one may still be able to reach a shell using init=/bin/sh. noinitrd disables automatic loading of the initial RAM disk. Instead, its content is then available on /dev/initrd.

vga=mode alters the VGA mode set at startup. The values normal, extended, ask or a decimal number are recognized. (See also page §.)

kbd=code, preloads a sequence of keystrokes in the BIOS keyboard buffer. The keystrokes have to be entered as 16 bit hexadecimal numbers, with the upper byte containing the scan code and the lower byte containing the ASCII code. Note that most programs only use the ASCII code, so the scan code can frequently be omitted. Scan code tables can be found in many books on PC hardware. Note that scan codes depend on the keyboard layout.

Finally, lock stores the current command-line as the default command-line, so that LILO boots the same image with the same options (including lock) when invoked the next time.

3.1.2 Device-specific options

There is also a plethora of options to specify certain characteristics (e.g. IO and memory addresses) of devices. Some common ones are ether, floppy, hd, bmouse, and sound. The usage of these options is option=number,. Please consult the corresponding FAQs and HOWTOs for details. For an overview of all available options, consult the file init/main.c in the kernel source tree.

3.1.3 Other options

Options of the type variable=value which are neither standard options nor device-specific options, cause the respective variables to be set in the environment passed to init. The case of the variable name is preserved, i.e. it isn’t automatically converted to upper case.

Note that environment variables passed to init are typically available in system initialization scripts (e.g. /etc/rc.local), but they’re not visible from ordinary login sessions, because the login program removes them from the user’s environment.

3.1.4 Repeating options

The effect of repeating boot command-line options depends on the options.16 There are three possible behaviours:

Options that only enable or disable a certain functionality can be repeated any number of times. debug, lock, no-hlt, and no387 fall into this category.

Other options change a global setting whenever they appear, so only the value or presence of the last option matters. The antagonists ro and rw are such options. Also, ramdisk, root, and vga work this way. Example: ro rw would mount the root file system read-write.

Finally, when reserve and many device-specific options are repeated, each occurrence has its own meaning, e.g.

hd= hd= would configure two hard disks, and

reserve=0x300,8 reserve=0x5f0,16 would reserve the ranges 0x300 to 0x307 and 0x5f0 to 0x5ff (which is equivalent to writing reserve=0x300,8,0x5f0,16).

3.1.5 Implicit options

LILO always passes the string BOOT_IMAGE=name to the kernel, where name is the name by which the kernel is identified (e.g. the label). This variable can be used in /etc/rc to select a different behaviour, depending on the kernel.

When booting automatically, i.e. without human intervention, the word auto is also passed on the command line. This can be used by init to suppress interactive prompts in the boot phase.

3.2 Boot image selection

The details of selecting the boot image are somewhat complicated. The following tables illustrate them. First, if neither prompt is set nor a shift key is being pressed:

                        |
 Externally   Command   | Auto-  Booted  image
  provided     line in  | matic
 cmd. line17   map file18 |boot19
-----No----------No-----|--Yes---Default-image--------------- 17Externally provided command lines could be used to add front- ends to LILO. They would pass the respective 18This command line is set by invoking the map installer with the -R option, by using the boot command -line option
     Yes         —      |  Yes   Specified by external      command string to LILO, which would then interpret it like keyboard input. This feature is currently not used. lock, or if a fallback command line is set (with fallback).                                    19I.e. the keyword auto is a
                        |
                        |        command   line
     No          Yes    |  Yes   Specified by command   line
                        |        in map file

If prompt is not set and a shift key is being pressed:

                                    |
  Input    Empty   Extern.  Cmd.l.  |Auto-  Booted  image
 timeout   cmd.l.   cmd.l.  in map  |matic
                              file   |boot
----No------No-------—--------—-----|-No----Specified-by-the-user-
                                    |
    No      Yes      —        —     | No    Default image
   Yes      n/a      —        —     | Yes   Default image

Finally, if the configuration variable prompt is set:

   Input    Empty   Extern.   Cmd.l. |Auto -  Booted image
                                    |
  timeout   cmd.l.   cmd.l.  in map  |matic
------------------------------file---|-boot------------------------
    No       No      No       No    | No     Specified by the user
    No      Yes      No       No    | No     Default image
    Yes     n/a      No       No    | Yes    Default image
   n/a      n/a      Yes       —    | Yes    Specified by external
                                    |        command  line
                                    |
   n/a      n/a      No       Yes   | Yes    Specified by command
                                    |        line in map  file

Note that LILO pauses for the amount of time specified in delay when at the end of a default command line. The automatic boot can then be interrupted by pressing a modifier key ([Shift], [Ctrl], etc.).

The default image is the first image in the map file or the image specified with the default variable. However, after an unsuccessful boot attempt, the respective image becomes the default image.

4 Map installer

The map installer program /sbin/lilo updates the boot sector and creates the map file. If the map installer detects an error, it terminates immediately and does not touch the boot sector and the map file.

Whenever the map installer updates a boot sector, the original boot sector is copied to
/boot/boot.number
where number is the hexadecimal device number. If such a file already exists, no backup copy is made. Similarly, a file
/boot/part.number
is created if LILO modifies the partition table. (See page §.)

4.1 Command-line options

The LILO map installer can be invoked in the following ways:

4.1.1 Show current installation

The currently mapped files are listed. With -v, also many parameters are shown.

/sbin/lilo [ -C config_file ] -q [ -m map_file ] [ -v ]  

-C config_file
 
Specifies the configuration file that is used by the map installer (see section 4.2). If -C is omitted, /etc/lilo.conf is used.
-m map_file
 
Specifies an alternate map file. See also sections 4.1.7 and 4.2.2.
-q
 
Lists the currently mapped files.
-v
 
Increase verbosity. See also sections 4.1.7 and 4.2.2.

4.1.2 Create or update map

A new map is created for the images described in the configuration file /etc/lilo.conf and they are registered in the boot sector.

/sbin/lilo [ -C config_file ] [ -b boot_device ] [ -c ] [ -l ] [ -i boot_sector ]
        [ -f disk_tab ] [ -m map_file ] [ -d delay ] [ -v ] [ -t ] [ -s save_file |
        -S save_file ] [ -P fix | -P ignore ] [ -r root_dir ]  

-b boot<_device
 
Specifies the boot device. See also sections 4.1.7 and 4.2.2.
-c
 
Enables map compaction. See also sections 4.1.7 and 4.2.2.
-C config_file
 
Specifies an alternate configuration file. See also section 4.1.1.
-d delay
 
Sets the delay before LILO boots the default image. Note that the delay is specified in tenths of a second. See also sections 4.1.7 and 4.2.2.
-D name
 
Specifies the default image. See also sections 4.1.7 and 4.2.2.
-f disk_tab
 
Specifies a disk parameter table file. See also sections 4.1.7 and 4.2.2.
-i boot_sector
 
Specifies an alternate boot file. See also sections 4.1.7 and 4.2.2.
-L
 
Enables lba32 sector addresses. See also sections 4.1.7 and 4.2.2.
-l
 
Enables linear sector addresses. See also sections 4.1.7 and 4.2.2.
-m map_file
 
Specifies an alternate map file. See also sections 4.1.7 and 4.2.2.
-P mode
 
Specifies how invalid partition table entries should be handled. See also sections 4.1.7 and 4.2.2.
-r root_directory
 
Chroots to the specified directory before doing anything else. This is useful when running the map installer while the normal root file system is mounted somewhere else, e.g. when recovering from an installation failure with a recovery disk. The -r option is implied if the environment variable ROOT is set.20 The current directory is changed to the new root directory, so using relative paths may not work.
-s save_file
 
Specifies an alternate boot sector save file. See also sections 4.1.7 and 4.2.2.
-S save_file
 
Like -s, but overwrites old save files.
-t
 
Test only. This performs the entire installation procedure except replacing the map file, writing the modified boot sector and fixing partition tables. This can be used in conjunction with the -v option to verify that LILO will use sane values.
-v
 
Increase verbosity. See also sections 4.1.7 and 4.2.2.

4.1.3 Change default command line

Changes LILO’s default command line. See also section 3.2.

/sbin/lilo [ -C config_file ] [ -m map_file ] -R [ word ]  

-C config_file
 
Specifies an alternate configuration file. See also section 4.1.1.
-m map_file
 
Specifies an alternate map file. See also sections 4.1.7 and 4.2.2.
-R word
 
Stores the specified words in the map file. The boot loader uses those words as the default command line when booting the next time. That command line is removed from the map file by the boot loader by overwriting the sector immediately after reading it. The first word has to be the name of a boot image. If -R is not followed by any words, the current default command line in the map file is erased.21 If the command line isn’t valid, the map installer issues an error message and returns a non-zero exit code.

4.1.4 Kernel name translation

Determines the path of the kernel.

/sbin/lilo [ -C config_file ] -I name [ options ]  

-C config_file
 
Specifies an alternate configuration file. See also section 4.1.1.
-I name [ options ]
 
Translates the specified label name to the path of the corresponding kernel image and prints that path on standard output. This can be used to synchronize files that depend on the kernel (e.g. the ps database). The image name can be obtained from the environment variable BOOT_IMAGE. An error message is issued and a non-zero exit code is returned if no matching label name can be found. The existence of the image file is verified if the option character v is added.

4.1.5 De-installation

Restores the boot sector that was used before the installation of LILO. Note that this option only works properly if LILO’s directories (e.g. /boot) have not been touched since the first installation. See also section 5.3.

/sbin/lilo [ -C config_file ] [ -s save_file ] -u | -U [ boot_device ]  

-C config_file
 
Specifies an alternate configuration file. See also section 4.1.1.
-s save_file
 
Specifies an alternate boot sector save file. See also sections 4.1.7 and 4.2.2.
-u [ device_name ]
 
Restores the backup copy of the specified boot sector. If no device is specified, the value of the boot variable is used. If this one is also unavailable, LILO uses the current root device. The name of the backup copy is derived from the device name. The -s option or the backup variable can be used to override this. LILO validates the backup copy by checking a time stamp.
-U [ device_name ]
 
Like -u, but does not check the time stamp.

4.1.6 Print version number

/sbin/lilo -V  

-V
 
Print the version number and exit.

4.1.7 Options corresponding to configuration variables

There are also many command-line options that correspond to configuration variables. See section 4.2.2 for a description.

                      |
-Command----line option|Con-figuration-variable-----
 -b  bootxdevice       |boot=bootxdevice
 -c                   |compact
 -d  tsecs             |delay=tsecs
                      |
 -D  name             |default=name
 -i  bootxsector        |install=bootxsector
 -L                   |lba32
 -l                   |linear
 -m  mapxfile          |map=mapx  file
 -P  fix              |fix -table
 -P  ignore           |ignore -table
                      |
 -s  backupx file        |backup=backupx file
 -S  backupx file        |force -backup=backupx file
 -v  ...               |verbose=level

4.2 Configuration

The configuration information is stored in the file /etc/lilo.conf and consists of variable assignments.

4.2.1 Syntax

The following syntax rules apply:

  • flag variables consist of a single word and are followed by whitespace or the end of the file.
  • string variables consist of the variable name, optional whitespace, an equal sign, optional whitespace, the value and required whitespace, or the end of the file.
  • a non-empty sequence of blanks, tabs, newlines and comments counts as whitespace.
  • variable names are case-insensitive. Values are usually case-sensitive, but there are a few exceptions. (See below.)
  • tabs and newlines are special characters and may not be part of a variable name or a value. The use of other control characters and non-ASCII characters is discouraged.
  • blanks and equal signs may only be part of a variable name or a value if they are escaped by a backslash or if the value is embedded in double quotes. An equal sign may not be the only character in a name or value.
  • an escaped tab is converted to an escaped blank. An escaped newline is removed from the input stream. An escaped backslash (i.e. two backslashes) is converted to a backslash. Inside quoted strings, only double quotes, backslashes, dollar signs, and newlines can be escaped.
  • quoted strings can be continued over several lines by ending each incomplete line with a backslash. A single space is inserted in the string for the line end and all spaces or tabs that follow immediately on the next line.
  • environment variables can be used by specifying them in the form $name or ${name}. Dollar signs can be escaped.
  • comments begin with a number sign and end with the next newline. All characters (including backslashes) until the newline are ignored.

Example:

boot = $FD  
install = $MNT/boot.b  
map = $MNT/map  
compact  
read-only  
append = "nfsroot=/home/linux-install/root \  
  nfsaddrs=128.178.156.28:128.178.156.24::255.255.255.0:lrcinst"  
image = $MNT/zImage

4.2.2 Global options

/etc/lilo.conf begins with a possibly empty global options section. Many global options can also be set from the command line, but storing permanent options in the configuration file is more convenient.

The following global options are recognized:

backup=backup_file
Copy the original boot sector to backup_file (which may also be a device, e.g. /dev/null) instead of /boot/boot.number
boot=boot_device
Sets the name of the device (e.g. a hard disk partition) that contains the boot sector. If boot is omitted, the boot sector is read from (and possibly written to) the device that is currently mounted as root.
change-rules
Defines partition type numbers. See section 4.5.2 for details.
compact
Tries to merge read requests for adjacent sectors into a single read request. This drastically reduces load time and keeps the map smaller. Using compact is especially recommended when booting from a floppy disk. compact may conflict with linear or lba32, see section 6.3.
default=name
Uses the specified image as the default boot image. If default is omitted, the image appearing first in the configuration file is used.
delay=tsecs
Specifies the number of tenths of a second LILO should wait before booting the first image. This is useful on systems that immediately boot from the hard disk after enabling the keyboard. LILO doesn’t wait if delay is omitted or if delay is set to zero.
disk=device_name
Defines non-standard parameters for the specified disk. See section 4.4 for details.
fix-table
Allows LILO to adjust 3D addresses in partition tables. Each partition entry contains a 3D (sector/head/cylinder) and a linear 32-bit address of the first and the last sector of the partition. If a partition is not track-aligned and if certain other operating systems (e.g. PC/MS-DOS or OS/2) are using the same disk, they may change the 3D address. LILO can store its boot sector only on partitions where both address types correspond. LILO re-adjusts incorrect 3D start addresses if fix-table is set.

WARNING: This does not guarantee that other operating systems may not attempt to reset the address later. It is also possible that this change has other, unexpected side-effects. The correct fix is to re-partition the drive with a program that does align partitions to tracks. Also, with some disks (e.g. some large EIDE disks with address translation enabled), under some circumstances, it may even be unavoidable to have conflicting partition table entries.

force-backup=backup_file
Like backup, but overwrite an old backup copy if it exists.
backup=backup_file is ignored if force-backup appears in the same configuration file.
ignore-table
Tells LILO to ignore corrupt partition tables and to put the boot sector even on partitions that appear to be unsuitable for that.
install=boot_sector
Install the specified file as the new boot sector. If install is omitted,
/boot/boot.b is used as the default.
keytable=table_file
Re-map the keyboard as specified in this file. See section 4.6 for details.
lba32
Generate 32-bit Logical Block Addresses instead of sector/head/cylinder addresses. If the BIOS supports packet addressing, then packet calls will be used to access the disk. This allows booting from any partition on disks with more than 1024 cylinders. If the BIOS does not support packet addressing, then lba32 addresses are translated to C:H:S, just as for linear. All floppy disk references are retained in C:H:S form. Use of lba32 is recommended on all post-1998 systems. lba32 may conflict with compact, see section 6.3.
linear
Generate linear sector addresses instead of sector/head/cylinder addresses. Linear addresses are translated at run time and do not depend on disk geometry. Note that boot disks may not be portable if linear is used, because the BIOS service to determine the disk geometry does not work reliably for floppy disks. When using linear with large disks, /sbin/lilo may generate references to inaccessible disk areas (see section 2.3.1), because 3D sector addresses are not known before boot time. linear may conflict with compact, see section 6.3.
map=map_file
Specifies the location of the map file. If map is omitted, a file /boot/map is used.
message=message_file
Specifies a file containing a message that is displayed before the boot prompt. No message is displayed while waiting for a modifier key ([Shift], etc.) after printing “LILO ”. In the message, the FF character ([Ctrl L]) clears the local screen. The size of the message file is limited to 65535 bytes. The map file has to be rebuilt if the message file is changed or moved.
nowarn
Disables warnings about possible future dangers.
prompt
Forces entering the boot prompt without expecting any prior key-presses. Unattended reboots are impossible if prompt is set and timeout isn’t.
serial=parameters
Enables control from a serial line. The specified serial port is initialized and LILO is accepting input from it and from the PC’s keyboard. Sending a break on the serial line corresponds to pressing a shift key on the console in order to get LILO’s attention. All boot images should be password-protected if the serial access is less secure than access to the console, e.g. if the line is connected to a modem. The parameter string has the following syntax:
port,bps parity bits
The components bps, parity and bits can be omitted. If a component is omitted, all following components have to be omitted too. Additionally, the comma has to be omitted if only the port number is specified.
port
the number of the serial port, zero-based. 0 corresponds to COM1 alias /dev/ttyS0, etc. All four ports can be used (if present).
bps
the baud rate of the serial port. The following baud rates are supported: 110, 300, 1200, 2400, 4800, 9600, 19200, and 38400 bps. Default is 2400 bps.
parity
the parity used on the serial line. LILO ignores input parity and strips the 8th bit. The following (upper or lower case) characters are used to describe the parity: n for no parity, e for even parity and o for odd parity.
bits
the number of bits in a character. Only 7 and 8 bits are supported. Default is 8 if parity is “none”, 7 if parity is “even” or “odd”.

If serial is set, the value of delay is automatically raised to 20.

Example: serial=0,2400n8 initializes COM1 with the default parameters.

timeout=tsecs
Sets a timeout (in tenths of a second) for keyboard input. If no key is pressed for the specified time, the first image is automatically booted. Similarly, password input is aborted if the user is idle for too long. The default timeout is infinite.
verbose=level
Turns on lots of progress reporting. Higher numbers give more verbose output. If -v is additionally specified on the command line, level is increased accordingly. The following verbosity levels exist:
<0
only warnings and errors are shown
0
prints one line for each added or skipped image
1
mentions names of important files and devices and why they are accessed. Also displays informational messages for exceptional but harmless conditions and prints the version number.
2
displays statistics and processing of temporary files and devices
3
displays disk geometry information and partition table change rules
4
lists sector mappings as they are written into the map file (i.e. after compaction, in a format suitable to pass it to the BIOS)
5
lists the mapping of each sector (i.e. before compaction, raw)

When using the -q option, the levels have a slightly different meaning:

0
displays only image names
1
also displays all global and per-image settings
2
displays the address of the first map sector

Additionally, the kernel configuration parameters append, initrd, ramdisk, read-only, read-write, root and vga, and the general per-image options fallback, lock, optional, password, restricted, and single-key can be set in the global options section. They are used as defaults if they aren’t specified in the configuration sections of the respective images. See below for a description.

The plethora of options may be intimidating at first, but in “normal” configurations, hardly any options but boot, compact, delay, root, and vga are used.

4.2.3 General per-image options

The following options can be specified for all images, independent of their type:

alias=name
Specifies a second name for the current entry.
fallback=command_line
Specifies a string that is stored as the default command line if the current image is booted. This is useful when experimenting with kernels which may crash before allowing interaction with the system. If using the fallback option, the next reboot (e.g. triggered by a manual reset or by a watchdog timer) will load a different (supposedly stable) kernel. The command line by the fallback mechanism is cleared by removing or changing the default command line with the -R option, see 4.1.3.
label=name
By default, LILO uses the main file name (without its path) of each image specification to identify that image. A different name can be used by setting the variable label.
lock
Enables automatic recording of boot command lines as the defaults for the following boots. This way, LILO “locks” on a choice until it is manually overridden.
optional
Omit this image if its main file is not available at map creation time. This is useful to specify test kernels that are not always present.
password=password
Ask the user for a password when trying to load this image. Because the configuration file contains unencrypted passwords when using this option, it should only be readable for the super-user. Passwords are always case-sensitive.
restricted
Relaxes the password protection by requiring a password only if parameters are specified on the command line (e.g. single). restricted can only be used together with password.
single-key
Enables booting the image by hitting a single key, without the need to press [Enter] afterwards. single-key requires that either the image’s label or its alias (or both) is a single character. Furthermore, no other image label or alias may start with that character, e.g. an entry specifying a label linux and an alias l is not allowed with single-key. Note that you can’t specify command-line parameters for an entry for which only single-keyed names exist.

All general per-image options, with the exception of label and alias, can also be set in the global options section as defaults for all images.

Example:

password = Geheim  
single-key  
image = /vmlinuz  
  label = linux  
  alias = 1  
  restricted  
other = /dev/hda1  
  label = dos  
  alias = 2

4.2.4 Per-image options for kernels

Each (kernel or non-kernel) image description begins with a special variable (see section 4.3) which is followed by optional variables. The following variables can be used for all image descriptions that describe a Linux kernel:

append=string
Appends the options specified in string to the parameter line passed to the kernel. This is typically used to specify parameters of hardware that can’t be entirely auto-detected, e.g.
append = "aha152x=0x140,11"
initrd=name
Specifies the file that will be loaded at boot time as the initial RAM disk.
literal=string
like append, but removes all other options (e.g. setting of the root device). Because vital options can be removed unintentionally with literal, this option cannot be set in the global options section.
ramdisk=size
Specifies the size of the optional RAM disk. A value of zero indicates that no RAM disk should be created. If this variable is omitted, the RAM disk size configured into the boot image is used.
read-only
Specifies that the root file system should be mounted read-only. Typically, the system startup procedure re-mounts the root file system read-write later (e.g. after fsck’ing it).
read-write
specifies that the root file system should be mounted read-write.
root=root_device
Specifies the device that should be mounted as root. If the special name current is used, the root device is set to the device on which the root file system is currently mounted. If the root has been changed with -r, the respective device is used. If the variable root is omitted, the root device setting contained in the kernel image is used. It can be changed with the rdev program.
vga=mode
Specifies the VGA text mode that should be selected when booting. The following values are recognized (case is ignored):
normal
select normal 80x25 text mode.
extended
select 80x50 text mode. The word extended can be abbreviated to ext.
ask
stop and ask for user input (at boot time).
number
use the corresponding text mode. A list of available modes can be obtained by booting with vga=ask and pressing [Enter].

If this variable is omitted, the VGA mode setting contained in the kernel image is used. rdev supports manipulation of the VGA text mode setting in the kernel image.

All kernel per-image options but literal can also be set in the global options section as defaults for all kernels.

If one of ramdisk, read-only, read-write, root, or vga is omitted in the configuration file and the corresponding value in the kernel image is changed, LILO or the kernel will use the new value.

It is perfectly valid to use different settings for the same image, because LILO stores them in the image descriptors and not in the images themselves.

Example:

image = /vmlinuz  
  label = lin-hd  
  root = /dev/hda2  
image = /vmlinuz  
  label = lin-fd  
  root = /dev/fd0

4.3 Boot image types

LILO can boot the following types of images:

  • kernel images from a file.
  • kernel images from a block device. (E.g. a floppy disk.)
  • the boot sector of some other operating system.

The image type is determined by the name of the initial variable of the configuration section.

The image files can reside on any media that is accessible at boot time. There’s no need to put them on the root device, although this certainly doesn’t hurt.

4.3.1 Booting kernel images from a file

The image is specified as follows: image=name

Example:

image = /linux

See sections 4.2.3 and 4.2.4 for the options that can be added in a kernel image section.

4.3.2 Booting kernel images from a device

The range of sectors that should be mapped has to be specified. Either a range (start-end) or a start and a distance (start+number) have to be specified. start and end are zero-based. If only the start is specified, only that sector is mapped.

The image is specified as follows: image=device_name Additionally, the range variable must be set.

Example:

image = /dev/fd0  
  range = 1+512

All kernel options can also be used when booting the kernel from a device.

4.3.3 Booting a foreign operating system

LILO can even boot other operating systems, i.e. MS-DOS. To boot an other operating system, the name of a loader program, the device or file that contains the boot sector and the device that contains the partition table have to be specified.

The boot sector is merged with the partition table and stored in the map file.

Currently, the loaders chain.b and os2_d.b exist. chain.b simply starts the specified boot sector.22 os2_d.b it a variant of chain.b that can boot OS/2 from the second hard disk. The map-drive option has to be used with os2_d.b to actually swap the drives.

The image is specified as follows: other=device_name or other=file_name

In addition to the options listen in section 4.2.3, the following variables are recognized:

change
Change the partition table according to the rules specified in this change section. This option is intended for booting systems which find their partitions by examining the partition table. See section 4.5.3 for details.
loader=chain_loader
Specifies the chain loader that should be used. If it is omitted, /boot/chain.b is used.
map-drive=bios_device_code
Instructs chain.b to installs a resident driver that re-maps the floppy or hard disk drives. This way, one can boot any operating system from a hard disk different from the first one, as long as that operating system uses only the BIOS to access that hard disk.23 This is known to work for PC/MS-DOS.

map-drive is followed by the variable to=bios_device_code which specifies the drive that should effectively be accessed instead of the original one. The list of mappings is only searched until the first match is found. It is therefore possible to “swap” drives, see the second example below.

table=device
Specifies the device that contains the partition table. LILO does not pass partition information to the booted operating system if this variable is omitted. (Some operating systems have other means to determine from which partition they have been booted. E.g. MS-DOS usually stores the geometry of the boot disk or partition in its boot sector.) Note that /sbin/lilo must be re-run if a partition table mapped referenced with table is modified.
unsafe
Do not access the boot sector at map creation time. This disables some sanity checks, including a partition table check. If the boot sector is on a fixed-format floppy disk device, using unsafe avoids the need to put a readable disk into the drive when running the map installer. unsafe and table are mutually incompatible.

None of these options can be set in the global options section.

Examples:

other = /dev/hda2  
  label = dos  
  table = /dev/hda

other = /dev/hdb2  
  label = os2  
  loader = /boot/os2_d.b  
  map-drive = 0x80  
    to = 0x81  
  map-drive = 0x81  
    to = 0x80

4.4 Disk geometry

For floppies and most hard disks, LILO can obtain the disk geometry information from the kernel. Unfortunately, there are some exotic disks or adapters which may either not supply this information or which may even return incorrect information.

If no geometry information is available, LILO reports either the error
geo_query_dev HDIO_GETGEO (dev 0xnumber)
or
Device 0xnumber: Got bad geometry sec/hd/cyl

If incorrect information is returned, booting may fail in several ways, typically with a partial “LILO” banner message. In this document, that is called a “geometry mismatch”.

The next step should be to attempt setting the lba32 or linear configuration variable or the -L or -l command-line option. If this doesn’t help, the entire disk geometry has to be specified explicitly. Note that linear doesn’t always work with floppy disks.

Another common use of disk sections is if an (E)IDE and a SCSI drive are used in the same system and the BIOS is configured to use the SCSI drive as the first drive. (Normally, the (E)IDE drive would be the first drive and the SCSI drive would be the second one.) Since LILO doesn’t know how the BIOS is configured, it needs to be told explicitly about this arrangement. (See the second example below.)

4.4.1 Obtaining the geometry

The disk geometry parameters can be obtained by booting MS-DOS and running the program DPARAM.COM with the hexadecimal BIOS code of the drive as its argument, e.g. dparam 0x80 for the first hard disk. It displays the number of sectors per track, the number of heads per cylinder and the number of cylinders. All three numbers are one-based.

Alternatively, the geometry may also be determined by reading the information presented by the “setup” section of the ROM-BIOS or by using certain disk utilities under operating systems accessing the disk through the BIOS.

4.4.2 Specifying the geometry

Disk geometry parameters are specified in the options section of the configuration file. Each disk parameter section begins with disk=disk_device, similar to the way how boot images are specified. It is suggested to group disk parameter sections together, preferably at the beginning or the end of the options section.

For each disk, the following variables can be specified:

bios=bios_device_code
Is the number the BIOS uses to refer to that device. Normally, it’s 0x80 for the first hard disk and 0x81 for the second hard disk. Note that hexadecimal numbers have to begin with “0x”. If bios is omitted, LILO tries to “guess” that number.
sectors=sectors
and
heads=heads
specify the number of sectors per track and the number of heads, i.e. the number of tracks per cylinder. Both parameters have to be either specified together or they have to be entirely omitted. If omitted, LILO tries to obtain that geometry information from the kernel.
cylinders=cylinders
Specifies the number of cylinders. This value is only used for sanity checks. If cylinders is omitted, LILO uses the information obtained from the kernel if geometry information had to be requested in order to determine some other parameter. Otherwise,24 it just assumes the number of cylinders to be 1024, which is the cylinder limit imposed by the BIOS.
inaccessible
Marks the device as inaccessible (for the BIOS). This is useful if some disks on the system can’t be read by the BIOS, although LILO “thinks” they can. If one accidentally tries to use files located on such disks for booting, the map installer won’t notice and the system becomes unbootable. The most likely use of inaccessible is to prevent repetition after experiencing such a situation once. No other variables may be specified if a device is configured as inaccessible.

Additionally, partition subsections can be added with partition=partition_device. Each partition section can contain only one variable:

start=partition_offset
Specifies the zero-based number of the start sector of that partition. The whole disk always has a partition offset of zero. The partition offset is only necessary when using devices for which the kernel does not provide that information, e.g. CD-ROMs.

Examples:

disk = /dev/sda  
  bios = 0x80  
  sectors = 32  
  heads = 64  
  cylinders = 632  
  partition = /dev/sda1  
    start = 2048  
  partition = /dev/sda2  
    start = 204800  
  partition = /dev/sda3  
    start = 500000  
  partition = /dev/sda4  
    start = 900000

disk = /dev/sda  
  bios = 0x80  
disk = /dev/hda  
  bios = 0x81

4.5 Partition table manipulation

Some non-Linux operating systems obtain information about their partitions (e.g. their equivalent of the root file system) from the partition table. If more than one such operating system is installed on a PC, they may have conflicting interpretations of the content of the partition table. Those problems can be avoided by changing the partition table, depending on which operating system is being booted.

Partition table changes are specified in a change section in the configuration file section describing the foreign operating system. Note that change sections are only accepted if the build-time option REWRITE_TABLE is set.

The change section contains subsections for each partition whose table entry needs to be modified. Partitions are specified with partition=device_name

Changes are applied in the sequence in which they appear in the configuration file. Configurations containing changes that are redundant either by repeating a previous change or by changing its result further are invalid and refused by the map installer.

Internally, all changes are expressed as rules which specify the location (disk and offset in the partition table), the value this location must contain before the change, and the value that has to be stored. As a safety measure, the rule is ignored if the previous value is found to be different.

4.5.1 Partition activation

This option is intended for booting systems which determine their boot partition by examining the active flag in the partition table. The flag is enabled with activate and disabled with deactivate. Note that only the current partition is affected. LILO does not automatically change the active flags of other partitions and it also allows more than one partition to be active at the same time.

Example:

other = /dev/sda4  
  label = sco  
  change  
    partition = /dev/sda4  
      activate  
    partition = /dev/sda3  
      deactivate

4.5.2 Partition type change rules

Partition type changes are normally a transition between two possible values, e.g. a typical convention is to set the lowest bit in the upper nibble of the partition type (i.e. 0x10) in order to “hide”, and to clear it to “unhide” a partition. LILO performs these changes based on a set of rules. Each rule defines the name of a partition type, its normal value, and the value when hidden. Those rules are defined in the options section of the configuration file. The section defining them begins with change-rules.

The following options and variables can appear in the section:

reset
Removes all previously defined rules. This is needed if a user doesn’t wish to use the pre-defined rules (see below).
type=name
Adds a rule for the type with the specified name. Type names are case-insensitive. The values are defined with normal=byte and hidden=byte. Values can be specified as decimal or as hexadecimal numbers with a leading 0x. If only one of the values is present, the other value is assumed to be the same number, but with the most significant bit inverted.

LILO pre-defines rules for the three partition types of DOS partitions. The following example removes the pre-defined rules and creates them again:

change-rules  
  reset  
  type = DOS12  
    normal = 0x01  
    hidden = 0x11  
  type = DOS16_small  
    normal = 4 # hidden is 0x14  
  type = DOS16_big  
    hidden = 0x16

4.5.3 Partition type changes

Partition type changes are specified in the partition section as set=name_state, where name is the name of the partition type, and state is its state, i.e. normal or hidden.

Example:

other = /dev/sda3  
  label = dos  
  change  
    partition = /dev/sda2  
      set = dos16_big_normal  
    partition = /dev/sda3  
      activate  
      set = DOS16_big_normal

Only one set variable is allowed per partition section. In the rare event that more than one set variable is needed, further partition sections can be used.

4.6 Keyboard translation

The PC keyboard emits so-called scan codes, which are basically key numbers. The BIOS then translates those scan codes to the character codes of the characters printed on the key-caps. By default, the BIOS normally assumes that the keyboard has a US layout. Once an operating system is loaded, this operating system can use a different mapping.

At boot time, LILO only has access to the basic services provided by the BIOS and therefore receives the character codes for an US keyboard. It provides a simple mechanism to re-map the character codes to what is appropriate for the actual layout.25

4.6.1 Compiling keyboard translation tables

LILO obtains layout information from the keyboard translation tables Linux uses for the text console. They are usually stored in /usr/lib/kbd/keytables. LILO comes with a program keytab-lilo.pl that reads those tables and generates a table suitable for use by the map installer. keytab-lilo.pl invokes the program loadkeys to print the tables in a format that is easy to parse. 26

keytab-lilo.pl is used as follows:

keytab-lilo.pl [ -p old_code=new_code ] [path]default_layout[.extension]
        [path]kbd_layout[.extension]  

-p old_code=new_code
 
Specifies corrections (“patches”) to the mapping obtained from the translation table files. E.g. if pressing the upper case “A” should yield an at sign, -p 65=64 would be used. The -p option can be repeated any number of times. The codes can also be given as hexadecimal or as octal numbers if they are prefixed with 0x or 0, respectively.
path
The directory in which the file resides. The default path is /usr/lib/kbd/keytables.
extension
Usually the trailing .map, which is automatically added if the file name doesn’t contain dots.
default_layout
Is the layout which specifies the translation by the BIOS. If none is specified, us is assumed.
kbd_layout
Is the actual layout of the keyboard.

keytab-lilo.pl writes the resulting translation table as a binary string to standard output. Such tables can be stored anywhere with any name, but the suggested naming convention is /boot/kbd.ktl (“Keyboard Table for Lilo”), where kbd is the name of the keyboard layout.

Example:

keytab-lilo.pl de >/boot/de.ktl

4.6.2 Using keyboard translation tables

The keyboard translation table file is specified with the global configuration option keytable=table_file. The complete name of the file has to be given.

Example:

keytable = /boot/de.klt

5 Installation and updates

5.1 Installation

This section describes the installation of LILO. See section 5.3 for how to uninstall LILO.

5.1.1 Compatibility

The kernel header files have to be in /usr/include/linux and the kernel usually has to be configured by running make config before LILO can be compiled.

/bin/sh has to be a real Bourne shell. bash is sufficiently compatible, but some ksh clones may cause problems.

A file named INCOMPAT is included in the distribution. It describes incompatibilities to older versions of LILO and may also contain further compatibility notes.

5.1.2 Quick installation

If you want to install LILO on your hard disk and if you don’t want to use all its features, you can use the quick installation script. Read QuickInst for details.

QuickInst can only be used for first-time installations or to entirely replace an existing installation, not to update or modify an existing installation of LILO. Be sure you’ve extracted LILO into a directory that doesn’t contain any files of other LILO installations.

5.1.3 Files

Some of the files contained in lilo-21.tar.gz:

lilo/README
 
This documentation in plain ASCII format. Some sections containing complex tables are only included in the LATEX version in doc/user.tex
lilo/INCOMPAT
 
List of incompatibilities to previous versions of LILO.
lilo/CHANGES
 
Change history.
lilo/VERSION
 
The version number of the respective release.
lilo/QuickInst
 
Quick installation script.
lilo/lilo-version.lsm
 
The LSM (“Linux Software Map”) entry of the respective LILO release.
lilo/Makefile
 
Makefile to generate everything else.
lilo/*.c, lilo/*.h
 
LILO map installer C source and common header files.
lilo/*.S
 
LILO boot loader assembler source.
lilo/activate.c
 
C source of a simple boot partition setter.
lilo/dparam.s
 
Assembler source of a disk parameter dumper.
lilo/mkdist
 
Shell script used to create the current LILO distribution.
lilo/keytab-lilo.pl
 
Perl script to generate keyboard translation tables.
lilo/doc/README
 
Description of how to generate the documentation.
lilo/doc/Makefile
 
Makefile used to convert the LATEX source into either DVI output or the plain ASCII README file.
lilo/doc/user.tex
 
LATEX source of LILO’s user’s guide (this document).
lilo/doc/tech.tex
 
LATEX source of LILO’s technical overview.
lilo/doc/*.fig
 
Various xfig pictures used in the technical overview.
lilo/doc/fullpage.sty
 
Style file to save a few square miles of forest.
lilo/doc/rlatex
 
Shell script that invokes LATEX repeatedly until all references have settled.
lilo/doc/t2a.pl
 
Perl script to convert the LATEX source of the user’s guide to plain ASCII.

Files created after make in lilo/ (among others):

lilo/boot.b
 
Combined boot sector. make install puts this file into /boot
lilo/chain.b
 
Generic chain loader. make install puts this file into /boot
lilo/os2_d.b
 
Chain loader to load OS/2 from the second hard disk. make install puts this file into /boot
lilo/lilo
 
LILO (map) installer. make install puts this file into /sbin
lilo/activate
 
Simple boot partition setter.
lilo/dparam.com
 
MS-DOS executable of the disk parameter dumper.

5.1.4 Normal first-time installation

First, you have to install the LILO files:

  • extract all files from lilo-version.tar.gz in a new directory.27
  • configure the Makefile (see section 5.1.5)
  • run make to compile and assemble all parts.
  • run make install to copy all LILO files to the directories where they’re installed. /sbin should now contain the file lilo, /usr/sbin should contain keytab-lilo.pl, and /boot should contain boot.b, chain.b, and os2_d.b.

If you want to use LILO on a non-standard disk, you might have to determine the parameters of your disk(s) and specify them in the configuration file. See section 4.4 for details. If you’re using such a non-standard system, the next step is to test LILO with the boot sector on a floppy disk:

  • insert a blank (but low-level formatted) floppy disk into /dev/fd0.
  • run echo image=kernel_image |
    /sbin/lilo -C - -b /dev/fd0 -v -v -v
    If you’ve already installed LILO on your system, you might not want to overwrite your old map file. Use the -m option to specify an alternate map file name.
  • reboot. LILO should now load its boot loaders from the floppy disk and then continue loading the kernel from the hard disk.

Now, you have to decide, which boot concept you want to use. Let’s assume you have a Linux partition on /dev/hda2 and you want to install your LILO boot sector there. The DOS-MBR loads the LILO boot sector.

  • get a working boot disk, e.g. an install or recovery disk. Verify that you can boot with this setup and that you can mount your Linux partition(s) with it.
  • if the boot sector you want to overwrite with LILO is of any value (e.g. it’s the MBR or if it contains a boot loader you might want to use if you encounter problems with LILO), you should mount your boot disk and make a backup copy of your boot sector to a file on that floppy, e.g. dd if=/dev/hda of=/fd/boot_sector bs=512 count=1
  • create the configuration file /etc/lilo.conf, e.g.
    global settings
    image specification
      per-image options

    Be sure to use absolute paths for all files. Relative paths may cause unexpected behaviour when using the -r option.
  • now, you can check what LILO would do if you were about to install it on your hard disk:
    /sbin/lilo -v -v -v -t
  • if you need some additional boot utility (i.e. BOOTACTV), you should install that now
  • run /sbin/lilo to install LILO on your hard disk
  • if you have to change the active partition, use fdisk or activate to do that
  • reboot

5.1.5 Build-time configuration

Certain build-time parameters can be configured. They can either be edited in the top-level Makefile or they can be stored in a file /etc/lilo.defines. Settings in the Makefile are ignored if that file exists.

The following items can be configured:

BEEP
Enables beeping after displaying “LILO”. This is useful on machines which don’t beep at the right time when booting and when working over a serial console. This option is disabled by default.
IGNORECASE
Makes image name matching case-insensitive, i.e. “linux” and “Linux” are identical. This option is enabled by default. Note that password matching is always case-sensitive.
LARGE_EBDA
Loads LILO at a lower address in order to leave more space for the EBDA (Extended BIOS Data Area). This is necessary on some recent MP systems. Note that enabling LARGE_EBDA reduces the maximum size of “small” images (e.g. “Image” or “zImage”).
NO1STDIAG
Do not generate diagnostics on read errors in the first stage boot loader. This avoids possibly irritating error codes if the disk controller has transient read problems. This option is disabled by default.
NODRAIN
The boot loader empties the keyboard buffer when starting, because it may contain garbage on some systems. Draining the keyboard buffer can be disabled by setting the NODRAIN option. NODRAIN is disabled by default.
NOINSTDEF
If the option install is omitted, don’t install a new boot sector, but try to modify the old boot sector instead. This option is disabled by default.
ONE_SHOT
Disables the command-line timeout (configuration variable timeout) if any key is pressed. This way, very short timeouts can be used if prompt is set. ONE_SHOT is disabled by default.
READONLY
Disallows overwriting the default command line sector of the map file. This way, command lines set with -R stay in effect until they are explicitly removed. READONLY also disables lock, fallback, and everything enabled by REWRITE_TABLE. This option is disabled by default.
REWRITE_TABLE
Enables rewriting the partition table at boot time. This may be necessary to boot certain operating systems who expect the active flag to be set on their partition or who need changes in partition types. See also section 4.5. This option is dangerous and it is disabled by default.
USE_TMPDIR
Use the directory indicated in the TMPDIR environment variable when creating temporary device files. If TMPDIR is not set or if LILO is compiled without USE_TMPDIR, temporary device files are created in /tmp.28 This option is disabled by default.
VARSETUP
Enables the use of variable-size setup segments. This option is enabled by default and is only provided to fall back to fixed-size setup segments in the unlikely case of problems when using prehistoric kernels.
XL_SECS=sectors
Enable support for extra large (non-standard) floppy disks. The number of sectors is set in the BIOS disk parameter table to the specified value. Note that this hack may yield incorrect behaviour on some systems. This option is disabled by default.

/etc/lilo.defines should be used if one wishes to make permanent configuration changes. The usual installation procedures don’t touch that file. Example:

-DIGNORECASE -DONE_SHOT

After changing the build-time configuration, LILO has to be recompiled with the following commands:

make spotless  
make

5.1.6 Floppy disk installation

In some cases29, it may be desirable to install LILO on a floppy disk in a way that it can boot a kernel without accessing the hard disk.

The basic procedure is quite straightforward (see also section 2.3.1):

  • a file system has to be created on the file system
  • the kernel and boot.b have to be copied to the floppy disk
  • /sbin/lilo has to be run to create the map file

This can be as easy as

/sbin/mke2fs /dev/fd0  
[ -d /fd ] || mkdir /fd  
mount /dev/fd0 /fd  
cp /boot/boot.b /fd  
cp /zImage /fd  
echo image=/fd/zImage label=linux |  
  /sbin/lilo -C - -b /dev/fd0 -i /fd/boot.b -c -m /fd/map  
umount /fd

The command line of /sbin/lilo is a little tricky. -C - takes the configuration from standard input (naturally, one could also write the configuration into a file), -b /dev/fd0 specifies that the boot sector is written to the floppy disk, -i /fd/boot.b takes the first and second stage loaders from the floppy, -c speeds up the load process, and -m /fd/map puts the map file on the floppy too.

5.2 Updates

LILO is affected by updates of kernels, the whole system and (trivially) of LILO itself. Typically, only /sbin/lilo has to be run after any of those updates and everything will be well again (at least as far as LILO is concerned).

5.2.1 LILO update

Before updating to a new version of LILO, you should read at least the file INCOMPAT which describes incompatibilities with previous releases.

After that, the initial steps are the same as for a first time installation: extract all files, configure the Makefile, run make to build the executables and run make install to install the files.

The old versions of boot.b, chain.b, etc. are automatically renamed to boot.old, chain.old, etc. This is done to ensure that you can boot even if the installation procedure does not finish. boot.old, chain.old, etc. can be deleted after the map file is rebuilt.

Because the locations of boot.b, chain.b, etc. have changed and because the map file format may be different too, you have to update the boot sector and the map file. Run /sbin/lilo to do this.

5.2.2 Kernel update

Whenever any of the kernel files that are accessed by LILO is moved or overwritten, the map has to be re-built.30 Run /sbin/lilo to do this.

The kernel has a make target “zlilo” that copies the kernel to /vmlinuz and runs /sbin/lilo.

5.2.3 System upgrade

Normally, system upgrades (i.e. installation or removal of packages, possibly replacement of a large part of the installed binaries) do not affect LILO. Of course, if a new kernel is installed in the process, the normal kernel update procedure has to be followed (see section 5.2.2). Also, if kernels are removed or added, it may be necessary to update the configuration file.

If LILO is updated by this system upgrade, /sbin/lilo should be run before booting the upgraded system. It is generally a good idea not to rely on the upgrade procedure to perform this essential step automatically.

However, system upgrades which involve removal and re-creation of entire partitions (e.g. /, /usr, etc.) are different. First, they should be avoided, because they bear a high risk of losing other critical files, e.g. the /etc/XF86Config you’ve spent the last week fiddling with. If an upgrade really has to be performed in such a brute-force way, this is equal with total removal of LILO, followed by a new installation. Therefore, the procedures described in the sections 5.3 and 5.2.1 have to be performed. If you’ve forgotten to make a backup copy of /etc/lilo.conf before the destructive upgrade, you might also have to go through section 5.1.4 again.

5.3 LILO de-installation

In order to stop LILO from being invoked when the system boots, its boot sector has to be either removed or disabled. All other files belonging to LILO can be deleted after removing the boot sector, if desired.31

Again, when removing Linux, LILO must be de-installed before (!) its files (/boot, etc.) are deleted. This is especially important if LILO is operating as the MBR.

LILO 14 (and newer) can be de-installed with lilo -u. If LILO 14 or newer is currently installed, but the first version of LILO installed was older than 14, lilo -U may work. When using -U, the warning at the end of this section applies.

If LILO’s boot sector has been installed on a primary partition and is booted by the “standard” MBR or some partition switcher program, it can be disabled by making a different partition active. MS-DOS’ FDISK, Linux fdisk or LILO’s activate can do that.

If LILO’s boot sector is the master boot record (MBR) of a disk, it has to be replaced with a different MBR, typically MS-DOS’ “standard” MBR. When using MS-DOS 5.0 or above, the MS-DOS MBR can be restored with FDISK /MBR. This only alters the boot loader code, not the partition table.

LILO automatically makes backup copies when it overwrites boot sectors. They are named
/boot/boot.nnnn, with nnnn corresponding to the device number, e.g. 0300 is /dev/hda, 0800 is /dev/sda, etc. Those backups can be used to restore the old MBR if no easier method is available. The commands are
dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1 or
dd if=/boot/boot.0800 of=/dev/sda bs=446 count=1
respectively.

WARNING: Some Linux distributions install boot.nnnn files from the system where the distribution was created. Using those files may yield unpredictable results. Therefore, the file creation date should be carefully checked.

5.4 Installation of other operating systems

Some other operating systems (e.g. MS-DOS 6.0) appear to modify the MBR in their install procedures. It is therefore possible that LILO will stop to work after such an installation and Linux has to be booted from floppy disk. The original state can be restored by either re-running /sbin/lilo (if LILO is installed as the MBR) or by making LILO’s partition active (if it’s installed on a primary partition).

It is generally a good idea to install LILO after the other operating systems have been installed. E.g. OS/2 is said to cause trouble when attempting to add it to an existing Linux system. (However, booting from floppy and running /sbin/lilo should get around most interferences.)

Typically, the new operating system then has to be added to LILO’s configuration (and /sbin/lilo has to be re-run) in order to boot it.

See also section 6.3 for a list of known problems with some other operating systems.

6 Troubleshooting

All parts of LILO display some messages that can be used to diagnose problems.

6.1 Map installer warnings and errors

Most messages of the map installer (/sbin/lilo) should be self-explanatory. Some messages that indicate common errors are listed below. They are grouped into fatal errors and warnings (non-fatal errors).

6.1.1 Fatal errors

Boot sector of device_name doesn’t have a boot signature
Boot sector of device_name doesn’t have a LILO signature
 
The sector from which LILO should be uninstalled doesn’t appear to be a LILO boot sector.
Can’t put the boot sector on logical partition number
 
An attempt has been made to put LILO’s boot sector on the current root file system partition which is on a logical partition. This usually doesn’t have the desired effect, because common MBRs can only boot primary partitions. This check can be bypassed by explicitly specifying the boot partition with the -b option or by setting the configuration variable boot.
Checksum error
 
The descriptor table of the map file has an invalid checksum. Refresh the map file immediately !
Device 0xnumber: Configured as inaccessible.
 
There is a disk section entry indicating that the device is inaccessible from the BIOS. You should check carefully that all files LILO tries to access when booting are on the right device.
Device 0xnumber: Got bad geometry sec/hd/cyl
 
The device driver for your SCSI controller does not support geometry detection. You have to specify the geometry explicitly (see section 4.4).
Device 0xnumber: Invalid partition table, entry number
 
The 3D and linear addresses of the first sector of the specified partition don’t correspond. This is typically caused by partitioning a disk with a program that doesn’t align partitions to tracks and later using PC/MS-DOS or OS/2 on that disk. LILO can attempt to correct the problem, see page §.
Device 0xnumber: Partition type 0xnumber
 
does not seem suitable for a LILO boot sector 
The location where the LILO boot sector should be placed does not seem to be suitable for that. (See also also section 2.1). You should either adjust the partition type to reflect the actual use or put the boot sector on a different partition. This consistency check only yields a warning (i.e. LILO continues) if the option ignore-table is set.
device_name is not a valid partition device
 
The specified device is either not a device at all, a whole disk, or a partition on a different disk than the one in whose section its entry appears.
device_name is not a whole disk device
 
Only the geometry of whole disks (e.g. /dev/hda, /dev/sdb, etc.) can be redefined when using disk sections.
DISKTAB and DISK are mutually exclusive
 
You cannot use a disktab file and disk geometry definitions in the configuration file at the same time. Maybe /etc/disktab was accidentally used, because that’s the default for backward-compatibility. You should delete /etc/disktab after completing the transition to disk sections.
Duplicate entry in partition table
 
A partition table entry appears twice. The partition table has to be fixed with fdisk.
Duplicate geometry definition for device_name
 
A disk or partition geometry definition entry for the same device appears twice in the configuration file. Note that you mustn’t write a partition section for the whole disk — its start sector is always the first sector of the disk.
First sector of device doesn’t have a valid boot signature
 
The first sector of the specified device does not appear to be a valid boot sector. You might have confused the device name.32
geo_comp_addr: Cylinder number beyond end of media (number)
 
A file block appears to be located beyond the last cylinder of the disk. This probably indicates an error in the disk geometry specification (see section 4.4) or a file system corruption.
geo_comp_addr: Cylinder number is too big (number > 1023)
 
Blocks of a file are located beyond the 1024th cylinder of a hard disk. LILO can’t access such files, because the BIOS limits cylinder numbers to the range 01023. Try moving the file to a different place, preferably a partition that is entirely within the first 1024 cylinders of the disk.
Hole found in map file (location)
 
The map installer is confused about the disk organization. Please report this error.
item doesn’t have a valid LILO signature
 
The specified item has been located, but is not part of LILO.
item has an invalid stage code (number)
 
The specified item has probably been corrupted. Try re-building LILO.
item is version number. Expecting versionnumber.
 
The specified entity is either too old or too new. Make sure all parts of LILO (map installer, boot loaders and chain loaders) are from the same distribution. 33
Kernel name is too big
 
The kernel image (without the setup code) is bigger than 512 kbytes (or 448 kbytes, if built with LARGE_EBDA). LILO would overwrite itself when trying to load such a kernel. This limitation only applies to old kernels which are loaded below 0x10000 (e.g. “Image” or “zImage”). Try building the kernel with “bzImage”. If this is undesirable for some reason, try removing some unused drivers and compiling the kernel again. This error may also occur if the kernel image is damaged or if it contains trailing “junk”, e.g. as the result of copying an entire boot floppy to the hard disk.
LOCK and FALLBACK are mutually exclusive
 
Since lock and fallback both change the default command line, they can’t be reasonably used together.
Map path is not a regular file.
 
This is probably the result of an attempt to omit writing a map file, e.g. with -m /dev/null. The -t option should be used to accomplish this.
Must specify SECTORS and HEADS together
 
It is assumed that disks with a “strange” number of sectors will also have a “strange” number of heads. Therefore, it’s all or nothing.
No geometry variables allowed if INACCESSIBLE
 
If a device is configured as inaccessible (see section 4.4.2), its disk section must not contain any geometry variables.
No image image is defined
 
The command line specified either with the -R option or with fallback does not contain the name of a valid image. Note that optional images which have not been included in the map file are not considered as valid.
Partition entry not found
 
The partition from which an other operating system should be booted isn’t listed in the specified partition table. This either means that an incorrect partition table has been specified or that you’re trying to boot from a logical partition. The latter usually doesn’t work. You can bypass this check by omitting the partition table specification (e.g. omitting the variable table).
Single-key clash: "name" vs. "name"
 
The specified image labels or aliases conflict because one of them is a single character and has the single-key option set, and the other name begins with that character.
Sorry, don’t know how to handle device number
 
LILO uses files that are located on a device for which there is no easy way to determine the disk geometry. Such devices have to be explicitly described, see section 4.4.
This LILO is compiled READONLY and doesn’t support
 
If LILO is not allowed to write to the disk at boot time (see section 5.1.5), options like lock and fallback are unavailable.
This LILO is compiled without REWRITE_TABLE and doesn’t support
 
If LILO is not allowed to rewrite partition tables at boot time (see section 4.5), options like activate and set (in a change section) are unavailable. You may also get this error if LILO is compiled with READONLY enabled.
Timestamp in boot sector of device differs from date of file
 
The backup copy of the boot sector does not appear to be an ancestor of the current boot sector. If you are absolutely sure that the boot sector is indeed correct, you can bypass this check by using -U instead of -u.
Trying to map files from unnamed device 0xnumber (NFS ?)
 
This is probably the same problem as described below, only with the root file system residing on NFS.
Trying to map files from your RAM disk.
 
Please check -r option or ROOT environment variable. 
Most likely, you or some installation script is trying to invoke LILO in a way that some of the files is has to access reside on the RAM disk. Normally, the ROOT environment variable should be set to the mount point of the effective root device if installing LILO with a different root directory. See also sections 4.1.2 and 5.1.4.
VGA mode presetting is not supported by your kernel.
 
Your kernel sources appear to be very old (’93 ?). LILO may work on your system if you remove the vga option.
write item: error_reason
 
The disk is probably full or mounted read-only.

6.1.2 Warnings

Messages labeled with “Warning” can be turned off with the nowarn option.

FIGETBSZ file_name: error_reason
 
The map installer is unable to determine the block size of a file system. It assumes a block size of two sectors (1kB).
Ignoring entry ’variable_name
 
The command-line option corresponding to the specified variable is set. Therefore, the configuration file entry is ignored.
Setting DELAY to 20 (2 seconds)
 
Because accidentally booting the wrong kernel or operating system may be very inconvenient on systems that are not run from a local display, the minimum delay is two seconds if the serial variable is set.
(temp) item: error_reason
 
Deleting a temporary file has failed for the specified reason.
Warning: BIOS drive 0xnumber may not be accessible
 
Because most BIOS versions only support two floppies and two hard disks, files located on additional disks may be inaccessible. This warning indicates that some kernels or even the whole system may be unbootable.
Warning: COMPACT may conflict with LINEAR on some systems
 
Please see section 6.3 for a description of this problem.
Warning: config_file should be owned by root
 
In order to prevent users from compromising system integrity, the configuration file should be owned by root and write access for all other users should be disabled.
Warning: config_file should be readable only for root if using PASSWORD
 
Users should not be allowed to read the configuration file when using the password option, because then, it contains unencrypted passwords.
Warning: config_file should be writable only for root
 
See “Warning: config_file should be owned by root”.
Warning: device 0xnumber exceeds 1024 cylinder limit
 
A disk or partition exceeds the 1024 cylinder limit imposed by the BIOS. This may result in a fatal error in the current installation run or in later installation runs. See “geo_comp_addr: Cylinder number is too big (number > 1023)” for details.
Warning: device is not on the first disk
 
The specified partition is probably not on the first disk. LILO’s boot sector can only be booted from the first disk unless some special boot manager is used.
WARNING: The system is unbootable !
 
One of the last installation steps has failed. This warning is typically followed by a fatal error describing the problem.

6.2 Boot loader messages

The boot loader generates three types of messages: progress and error messages while it is loading, messages indicating disk access errors, and error messages in response to invalid command-line input. Since messages of the latter type are usually self-explanatory, only the two other categories are explained.

6.2.1 LILO start message

When LILO loads itself, it displays the word “LILO”. Each letter is printed before or after performing some specific action. If LILO fails at some point, the letters printed so far can be used to identify the problem. This is described in more detail in the technical overview.

Note that some hex digits may be inserted after the first “L” if a transient disk problem occurs. Unless LILO stops at that point, generating an endless stream of error codes, such hex digits do not indicate a severe problem.

(nothing)
No part of LILO has been loaded. LILO either isn’t installed or the partition on which its boot sector is located isn’t active.
L error
The first stage boot loader has been loaded and started, but it can’t load the second stage boot loader. The two-digit error codes indicate the type of problem. (See also section 6.2.2.) This condition usually indicates a media failure or a geometry mismatch (e.g. bad disk parameters, see section 4.4).
LI
The first stage boot loader was able to load the second stage boot loader, but has failed to execute it. This can either be caused by a geometry mismatch or by moving /boot/boot.b without running the map installer.
LIL
The second stage boot loader has been started, but it can’t load the descriptor table from the map file. This is typically caused by a media failure or by a geometry mismatch.
LIL?
The second stage boot loader has been loaded at an incorrect address. This is typically caused by a subtle geometry mismatch or by moving /boot/boot.b without running the map installer.
LIL-
The descriptor table is corrupt. This can either be caused by a geometry mismatch or by moving /boot/map without running the map installer.
LILO
All parts of LILO have been successfully loaded.

6.2.2 Disk error codes

If the BIOS signals an error when LILO is trying to load a boot image, the respective error code is displayed. The following BIOS error codes are known:

0x00
“Internal error”. This code is generated by the sector read routine of the LILO boot loader whenever an internal inconsistency is detected. This might be caused by corrupt files. Try re-building the map file. Another possible cause for this error are attempts to access cylinders beyond 1024 while using the linear option. See section 2.3.1 for more details and for how to solve the problem.
0x01
“Illegal command”. This shouldn’t happen, but if it does, it may indicate an attempt to access a disk which is not supported by the BIOS. See also “Warning: BIOS drive 0xnumber may not be accessible” in section 6.1.2.
0x02
“Address mark not found”. This usually indicates a media problem. Try again several times.
0x03
“Write-protected disk”. This should only occur on write operations.
0x04
“Sector not found”. This typically indicates a geometry mismatch. If you’re booting a raw-written disk image, verify whether it was created for disks with the same geometry as the one you’re using. If you’re booting from a SCSI disk or a large IDE disk, you should check, whether LILO has obtained correct geometry data from the kernel or whether the geometry definition corresponds to the real disk geometry. (See section 4.4.) Removing compact may help too. So may adding lba32 or linear.
0x06
“Change line active”. This should be a transient error. Try booting a second time.
0x07
“Invalid initialization”. The BIOS failed to properly initialize the disk controller. You should control the BIOS setup parameters. A warm boot might help too.
0x08
“DMA overrun”. This shouldn’t happen. Try booting again.
0x09
“DMA attempt across 64k boundary”. This shouldn’t happen, but may inicate a disk geometry mis-match. Try omitting the compact option. You may need to specify the disk geometry yourself.
0x0C
“Invalid media”. This shouldn’t happen and might be caused by a media error. Try booting again.
0x10
“CRC error”. A media error has been detected. Try booting several times, running the map installer a second time (to put the map file at some other physical location or to write “good data” over the bad spot), mapping out the bad sectors/tracks and, if all else fails, replacing the media.
0x11
“ECC correction successful”. A read error occurred, but was corrected. LILO does not recognize this condition and aborts the load process anyway. A second load attempt should succeed.
0x20
“Controller error”. This shouldn’t happen.
0x40
“Seek failure”. This might be a media problem. Try booting again.
0x80
“Disk timeout”. The disk or the drive isn’t ready. Either the media is bad or the disk isn’t spinning. If you’re booting from a floppy, you might not have closed the drive door. Otherwise, trying to boot again might help.
0xBB
“BIOS error”. This shouldn’t happen. Try booting again. If the problem persists, removing the compact option or adding/removing linear or lba32 might help.

If the error occurred during a write operation, the error code (two hex digits) is prefixed with a “W”. Although write errors don’t affect the boot process, they might indicate a severe problem, because they usually imply that LILO has tried to write to an invalid location. If spurious write errors occur on a system, it might be a good idea to configure LILO to run read-only (see section 5.1.5).

Generally, invalid geometry and attempts to use more than two disks without a very modern BIOS may yield misleading error codes. Please check carefully if /sbin/lilo doesn’t emit any warnings. Then try using the linear or lba32 option (see section 4.2.2).

6.3 Other problems

This section contains a collection of less common problems that have been observed. See also section 5.4 for general remarks on using LILO with other operating systems. Some of the problems are obscure and so are the work-arounds.

  • If LILO doesn’t go away even if you erase its files, format your Linux partition, etc., you’ve probably installed LILO as your MBR and you’ve forgotten to deinstall it before deleting its files. See section 5.3 for what you can do now.
  • For yet unknown reasons, LILO may fail on some systems with AMI BIOS if the “Hard Disk Type 47 RAM area” is set to “0:300” instead of “DOS 1K”.
  • Some disk controller BIOSes perform disk geometry/address translations that are incompatible with the way the device’s geometry is seen from Linux, i.e. without going through the BIOS. Particularly, large IDE disks and some PCI SCSI controllers appear to have this problem. In such cases, either the translated geometry has to be specified in a disk section or the sector address translation can be deferred by using the linear option. In a setup where floppies are not normally used for booting, the linear approach should be preferred, because this avoids the risk of specifying incorrect numbers.
  • OS/2 is said to be bootable from a logical partition with LILO acting as the primary boot selector if LILO is installed on the MBR, the OS/2 BootManager is on an active primary partition and LILO boots BootManager. Putting LILO on an extended partition instead is said to crash the OS/2 FDISK in this scenario.

    Note that booting LILO from BootManager (so BootManager is the primary selector) or booting OS/2 directly from a primary partition (without BootManager) should generally work. See also section 5.4.

  • Windows NT is reported to be bootable with LILO when LILO acts as the MBR and the Windows NT boot loader is on the DOS partition. However, NT’s disk manager complains about LILO’s MBR when trying to edit the partition table.
  • Some PC UNIX systems (SCO and Unixware have been reported to exhibit this problem) depend on their partition being active. See section 4.5 for how this can be accomplished.
  • Future Domain TMC-1680 adapters with the BIOS versions 3.4 and 3.5 assign BIOS device numbers in the wrong order, e.g. on a two-disk system, /dev/sda becomes 0x81 and /dev/sdb becomes 0x80. This can be fixed with the following disk section:
    disk=/dev/sda bios=0x81 disk=/dev/sdb bios=0x80
    Note that this is only valid for a two-disk system. In three-disk systems, /dev/sdc would become 0x80, etc. Also, single-disk systems don’t have this problem (and the “fix” would break them).
  • Some BIOSes don’t properly recognize disks with an unusual partition table (e.g. without any partition marked active) and refuse to boot from them. This can also affect the second hard disk and the problem may only occur if the system is booted in a particular way (e.g. only after a cold boot).
  • On some systems, using linear and compact or lba32 and compact together leads to a boot failure. The exact circumstances under which this happens are still unknown.
  • If the kernel crashes after booting on a multi-processor system, LILO may have overwritten data structures set up by the BIOS. Try the option LARGE_EBDA in this case.

Last updated by John R. Coffman on July 17, 2000
reconstructed by Joachim Wiedorn on January 29, 2011

lilo-24.0/doc/Makefile.old0000644000175000017500000000162411550012536014333 0ustar adjooadjoo# -*- makefile -*- LATEX=latex PDFLATEX=pdflatex RLATEX=./rlatex FIG2DEV=fig2dev SHELL=/bin/sh IMAGES=bootloader.tex map.tex image.tex parameter.tex other.tex .SUFFIXES: .fig .tex .dvi .ps .fig.tex: $(FIG2DEV) -L latex $*.fig $*.tex .tex.dvi: $(RLATEX) $* all: user.dvi tech.dvi user.pdf tech.pdf user.ps: user.dvi dvips -o user.ps user.dvi tech.ps: tech.dvi dvips -o tech.ps tech.dvi user.dvi: user.tex tech.dvi: tech.tex $(IMAGES) user.pdf: user.dvi $(PDFLATEX) user $(PDFLATEX) user tech.pdf: tech.dvi $(PDFLATEX) tech $(PDFLATEX) tech html: user.ps tech.ps latex2html -split 2 -link 2 -toc_depth 2 user latex2html -split 1 -link 1 -toc_depth 1 tech again: $(PDFLATEX) user $(PDFLATEX) tech tidy: rm -f *~ *.toc *.aux *.log *.out clean: tidy rm -f *.ps *.dvi *.pdf rm -Rf user tech distclean: clean dummies: for n in $(IMAGES); do echo '(omitted)' >$$n; done lilo-24.0/dos/0000755000175000017500000000000011411644661012141 5ustar adjooadjoolilo-24.0/dos/Makefile0000644000175000017500000000313711411644661013605 0ustar adjooadjoo# -*- makefile -*- # Makefile for BCC compilation of 'lilo.com' # # Known to work with BCC version 0.16.15 # Known not to work with BCC version 0.16.10 # adding variables include ../make.vars MODEL=d CC = bcc -M$(MODEL) CPP = gcc -E CINCL = /usr/lib/bcc/include AS = as86 LINK = $(CC) -v COPT = -ansi -I.. -I$(CINCL) -c -O $(CFLAGS) LOPT = -m >$*.map -M -d AOPT = -0 -a -w CFLAGS = -DLCF_IGNORECASE -DLCF_DSECS=3 -DLCF_PASS160 .SUFFIXES: .com .S HFILES = ../src/lilo.h ../src/bitmap.h ../src/cfg.h ../src/config.h ../src/common.h ../src/map.h ../src/temp.h ../src/version.h .c.o: $(CC) $(COPT) -o $@ ../$*.c .o.com: $(LINK) $(LOPT) -o $@ $^ .s.o: $(AS) $(AOPT) -l $*.lis -o $@ $< all: check lilo.com alles: all cp -ufv lilo.com lilo.map /dosC/boot check: @echo $(CFLAGS) @if [ -x /usr/bin/bcc -o -x /usr/local/bin/bcc ]; then echo Okay; \ else echo; echo "You don't seem to have the 'bcc' compiler from the 'dev86' package."; \ echo; exit 1; fi lilo: make -e CFLAGS="$(PCONFIG)" lilo.com lilo.com: lilo.o common.o cfg.o map.o # cprintf.o lilo.o: ../src/lilo.c $(HFILES) $(CC) $(COPT) -o $@ ../src/$*.c cfg.o: ../src/cfg.c $(HFILES) $(CC) $(COPT) -o $@ ../src/$*.c common.o: ../src/common.c $(HFILES) $(CC) $(COPT) -o $@ ../src/$*.c cprintf.o: ../src/cprintf.c $(HFILES) $(CC) $(COPT) -o $@ ../src/$*.c map.o: ../src/map.c $(HFILES) $(CC) $(COPT) -o $@ ../src/$*.c install: if [ -d $$DESTDIR$(DOS_DIR) -a -f lilo.com ]; then \ cp lilo.com $$DESTDIR$(DOS_DIR); fi tidy: rm -f *.map *.lis core clean: tidy rm -f *.o *.s *.img *.b *.com *.gz distclean: clean rm -f *~ *.c *.h lilo-24.0/dos/README0000644000175000017500000000237710174540646013035 0ustar adjooadjoo DOS executable 'lilo.com' Configuration file: C:\ETC\LILO.CNF Sector Map file: C:\BOOT\MAP 1. The default configuration file may be overridden with the speci- fication '-C ' on the command line. '' may be specified literally as "none", for no configuration file. The only keyword allowed in the configuration file is "map=", to specify the name of the sector map file. 2. The sector map file is 'C:\BOOT\MAP' if no other name is explicitly specified by "map=" in the configuration file, or '-m ' on the command line. This file must be the same file as specified in the '/etc/lilo.conf' file, except that under Linux, Linux file system naming applies; whereas under DOS/Windows, DOS file system naming applies. 3. The sector map file MUST be placed on a filesystem that can be read/ written under both DOS and Linux. FAT filesystems satisfy this require- ment. 4. The 'LILO.COM' executable must be placed somewhere on the executable path within the DOS/Windows system. Or it may be referenced by a *.BAT file on the executable PATH, which provides the opportunity to override the default configuration and sector map files with command line switches that will always be seen by the 'LILO.COM' executable. --John Coffman 23-Jan-2005 lilo-24.0/man/0000755000175000017500000000000012154355534012132 5ustar adjooadjoolilo-24.0/man/keytab-lilo.80000644000175000017500000000571611412204356014437 0ustar adjooadjoo.\" '\" t .\" This page is based on the lilo docs/source, which carry the following .\" COPYING condition: .\" .\" LILO program code, documentation and auxiliary programs are .\" Copyright 1992-1994 Werner Almesberger. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms of parts of or the .\" whole original or derived work are permitted provided that the .\" original work is properly attributed to the author. The name of the .\" author may not be used to endorse or promote products derived from .\" this software without specific prior written permission. This work .\" is provided "as is" and without any express or implied warranties. .\" .\" Original version of this manpage: .\" Peter Maydell (pmaydell@chiark.greenend.org.uk), 03/1998 .\" .TH "KEYTAB-LILO.PL" "8" "April 1998" "" "" .SH "NAME" keytab\-lilo \- compile keytables files for use with LILO .SH "SYNOPSIS" .B /usr/sbin/keytab\-lilo .RB [ \-p .I R old_code = new_code ] .RB ... .RI [ default_layout ] " kbd_layout" .SH "DESCRIPTION" .LP .B keytab\-lilo is a program which compiles keytable definitions (in the format specified in .BR keytables(5) ) into a format which can be used by .B lilo(8) to set the keyboard type when booting [using the .B keytable parameter in .BR /etc/lilo.conf ]. .I kbd_layout should be the name of a map file which specifies the desired keyboard layout. This file may be a .B gzip(1) compressed map. If no file extension is given, .B .map.gz is assumed. If the full pathname is not specified, .B /usr/share/keymaps/ is assumed. Since .B lilo essentially needs to know the differences between the BIOS keyboard mapping and the one you require, the .I default_layout file should contain a .B keytables(5) file for the BIOS default mapping. If no .I default_layout file is specified, .B us.map.gz is used. .B keytab\-lilo writes the output translation table as a binary string to standard output, so you should redirect it to a suitable file. .B lilo has no particular restrictions on the name of keyboard translation files, but the suggested naming convention and location is .BI /boot/ mapping .ktl (where .B .ktl stands for "Keyboard Table for Lilo"). .SH "OPTIONS" .TP .B \-p .I R old_code = new_code .br Specifies corrections ("patches") to the mapping obtained from the translation table files. E.g. if pressing the upper case "A" should yield an at sign, \-p 65=64 would be used. The \-p option can be repeated any number of times. The codes can also be given as hexadecimal or as octal numbers if they are prefixed with 0x or 0, respectively. .SH "EXAMPLES" .TP .B keytab\-lilo dvorak >/boot/dvorak.ktl This is the most common form of invocation; it simply compiles the given map file (in this case dvorak) and puts the result in .BR /boot/dvorak.ktl . .SH "AUTHOR" Werner Almesberger (almesber@bernina.ethz.ch). .br Peter Maydell (pmaydell@chiark.greenend.org.uk) wrote this manual page. .SH "SEE ALSO" .BR lilo (8), .BR keytables (5), .BR gzip (1) lilo-24.0/man/mkrescue.80000644000175000017500000001246711550026500014036 0ustar adjooadjoo'\" t .\" @(#)mkrescue.8 .\" This page is part of the LILO package, which is released by .\" the author(s) under a BSD license. See the file COPYING .\" in the LILO source directory for the license and disclaimer. .\" .\" Original for lilo 22.1, John Coffman 2001-10-31 .\" Updated for lilo 22.5.4, John Coffman 2003-05-24 .\" Updated for lilo 22.6.1, John Coffman 2004-11-16 .\" Updated for lilo 23.1, Martin Eberhard Schauer 2011-03-06 .\" (Reformatted to better match Linux man-pages conventions) .TH MKRESCUE 8 "6 Mar 2011" .SH NAME mkrescue \- make rescue floppy or CD .SH SYNOPSIS .B /sbin/mkrescue makes a bootable rescue floppy or CD using the default kernel specified in .IR lilo.conf . .SH DESCRIPTION \fBmkrescue\fP takes its specifation for the kernel from the default image specified in \fI/etc/lilo.conf\fP. If the actual default is an \fIother=\fP specification, then use the first \fIimage=\fP specification. Any associated initial ramdisk (\fIinitrd=\fP), and \fIappend=\fP options will also be used. The root directory will be taken to be the \fIcurrent\fP root. A bootable floppy or CD-image will be created using LILO version 22.5.5 or later. \fBmkrescue\fP normally requires no options, unless a CD-image is desired (\fB--iso\fP). .SH OPTIONS .TP \fB--append\fP Override any \fIappend=\fP options taken from the default image. If there is any doubt about whether the \fIlilo.conf\fP options are correct, then specify no kernel parameters by providing the null string (\fB--append ""\fP). .TP .B --debug Provide verbose output of the operation of .BR mkrescue , pausing to allow the setting of internal operating parameters to be viewed. must be hit to proceed from these pauses. .TP \fB--device\fP Make the floppy on a device other than \fI/dev/fd0\fP. The floppy disk will always be made to boot on BIOS device code 0x00 (A: drive), without regard to the drive on which it is created. .TP .B --fast Use a faster method of creating the boot floppy. This involves first creating a file of \fB--size\fP 1k blocks (default is 1440) mounted using a loopback device, creating the bootable floppy, then copying the entire file to the disk. .TP \fB--fs\fP [ \fIext2\fP | \fImsdos\fP | \fIminix\fP ] Specify the type of filesystem to create on the drive. \fIext2\fP is the default, but \fImsdos\fP and \fIminix\fP allow slightly more disk sectors for really big kernels. .TP .B --help Print a short usage synopsis, including a list of command options. .TP \fB--image\fP