xref: /linux/README (revision 5ebe0ee802c52cdf0c0eed8f3eccc9a056e412a3)
149d86dc9SJeff Kirsher        Linux kernel release 4.x <http://kernel.org/>
21da177e4SLinus Torvalds
349d86dc9SJeff KirsherThese are the release notes for Linux version 4.  Read them carefully,
41da177e4SLinus Torvaldsas they tell you what this is all about, explain how to install the
51da177e4SLinus Torvaldskernel, and what to do if something goes wrong.
61da177e4SLinus Torvalds
71da177e4SLinus TorvaldsWHAT IS LINUX?
81da177e4SLinus Torvalds
94f4e2dc3SXose Vazquez Perez  Linux is a clone of the operating system Unix, written from scratch by
104f4e2dc3SXose Vazquez Perez  Linus Torvalds with assistance from a loosely-knit team of hackers across
114f4e2dc3SXose Vazquez Perez  the Net. It aims towards POSIX and Single UNIX Specification compliance.
121da177e4SLinus Torvalds
134f4e2dc3SXose Vazquez Perez  It has all the features you would expect in a modern fully-fledged Unix,
144f4e2dc3SXose Vazquez Perez  including true multitasking, virtual memory, shared libraries, demand
154f4e2dc3SXose Vazquez Perez  loading, shared copy-on-write executables, proper memory management,
164f4e2dc3SXose Vazquez Perez  and multistack networking including IPv4 and IPv6.
171da177e4SLinus Torvalds
181da177e4SLinus Torvalds  It is distributed under the GNU General Public License - see the
191da177e4SLinus Torvalds  accompanying COPYING file for more details.
201da177e4SLinus Torvalds
211da177e4SLinus TorvaldsON WHAT HARDWARE DOES IT RUN?
221da177e4SLinus Torvalds
234f4e2dc3SXose Vazquez Perez  Although originally developed first for 32-bit x86-based PCs (386 or higher),
244f4e2dc3SXose Vazquez Perez  today Linux also runs on (at least) the Compaq Alpha AXP, Sun SPARC and
25620034c8SJesper Juhl  UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, Cell,
264f4e2dc3SXose Vazquez Perez  IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64, AXIS CRIS,
27ad29fff8SVineet Gupta  Xtensa, Tilera TILE, AVR32, ARC and Renesas M32R architectures.
284f4e2dc3SXose Vazquez Perez
294f4e2dc3SXose Vazquez Perez  Linux is easily portable to most general-purpose 32- or 64-bit architectures
304f4e2dc3SXose Vazquez Perez  as long as they have a paged memory management unit (PMMU) and a port of the
314f4e2dc3SXose Vazquez Perez  GNU C compiler (gcc) (part of The GNU Compiler Collection, GCC). Linux has
324f4e2dc3SXose Vazquez Perez  also been ported to a number of architectures without a PMMU, although
334f4e2dc3SXose Vazquez Perez  functionality is then obviously somewhat limited.
34620034c8SJesper Juhl  Linux has also been ported to itself. You can now run the kernel as a
35620034c8SJesper Juhl  userspace application - this is called UserMode Linux (UML).
361da177e4SLinus Torvalds
371da177e4SLinus TorvaldsDOCUMENTATION:
381da177e4SLinus Torvalds
391da177e4SLinus Torvalds - There is a lot of documentation available both in electronic form on
401da177e4SLinus Torvalds   the Internet and in books, both Linux-specific and pertaining to
411da177e4SLinus Torvalds   general UNIX questions.  I'd recommend looking into the documentation
421da177e4SLinus Torvalds   subdirectories on any Linux FTP site for the LDP (Linux Documentation
431da177e4SLinus Torvalds   Project) books.  This README is not meant to be documentation on the
441da177e4SLinus Torvalds   system: there are much better sources available.
451da177e4SLinus Torvalds
461da177e4SLinus Torvalds - There are various README files in the Documentation/ subdirectory:
471da177e4SLinus Torvalds   these typically contain kernel-specific installation notes for some
481da177e4SLinus Torvalds   drivers for example. See Documentation/00-INDEX for a list of what
491da177e4SLinus Torvalds   is contained in each file.  Please read the Changes file, as it
501da177e4SLinus Torvalds   contains information about the problems, which may result by upgrading
511da177e4SLinus Torvalds   your kernel.
521da177e4SLinus Torvalds
531da177e4SLinus Torvalds - The Documentation/DocBook/ subdirectory contains several guides for
541da177e4SLinus Torvalds   kernel developers and users.  These guides can be rendered in a
552af238e4SRandy Dunlap   number of formats:  PostScript (.ps), PDF, HTML, & man-pages, among others.
562af238e4SRandy Dunlap   After installation, "make psdocs", "make pdfdocs", "make htmldocs",
572af238e4SRandy Dunlap   or "make mandocs" will render the documentation in the requested format.
581da177e4SLinus Torvalds
592af238e4SRandy DunlapINSTALLING the kernel source:
601da177e4SLinus Torvalds
611da177e4SLinus Torvalds - If you install the full sources, put the kernel tarball in a
621da177e4SLinus Torvalds   directory where you have permissions (eg. your home directory) and
631da177e4SLinus Torvalds   unpack it:
641da177e4SLinus Torvalds
651913c6f4SYaowei Bai     xz -cd linux-4.X.tar.xz | tar xvf -
66b39f72feSHorms
675b4285fbSMichael Witten   Replace "X" with the version number of the latest kernel.
681da177e4SLinus Torvalds
691da177e4SLinus Torvalds   Do NOT use the /usr/src/linux area! This area has a (usually
701da177e4SLinus Torvalds   incomplete) set of kernel headers that are used by the library header
711da177e4SLinus Torvalds   files.  They should match the library, and not get messed up by
721da177e4SLinus Torvalds   whatever the kernel-du-jour happens to be.
731da177e4SLinus Torvalds
7449d86dc9SJeff Kirsher - You can also upgrade between 4.x releases by patching.  Patches are
751913c6f4SYaowei Bai   distributed in the xz format.  To install by patching, get all the
761913c6f4SYaowei Bai   newer patch files, enter the top level directory of the kernel source
771913c6f4SYaowei Bai   (linux-4.X) and execute:
781da177e4SLinus Torvalds
791913c6f4SYaowei Bai     xz -cd ../patch-4.x.xz | patch -p1
801da177e4SLinus Torvalds
815b4285fbSMichael Witten   Replace "x" for all versions bigger than the version "X" of your current
825b4285fbSMichael Witten   source tree, _in_order_, and you should be ok.  You may want to remove
835b4285fbSMichael Witten   the backup files (some-file-name~ or some-file-name.orig), and make sure
845b4285fbSMichael Witten   that there are no failed patches (some-file-name# or some-file-name.rej).
85a20e3a79SMichael Witten   If there are, either you or I have made a mistake.
861da177e4SLinus Torvalds
8749d86dc9SJeff Kirsher   Unlike patches for the 4.x kernels, patches for the 4.x.y kernels
886ad44229SJesper Juhl   (also known as the -stable kernels) are not incremental but instead apply
8949d86dc9SJeff Kirsher   directly to the base 4.x kernel.  For example, if your base kernel is 4.0
9049d86dc9SJeff Kirsher   and you want to apply the 4.0.3 patch, you must not first apply the 4.0.1
9149d86dc9SJeff Kirsher   and 4.0.2 patches. Similarly, if you are running kernel version 4.0.2 and
9249d86dc9SJeff Kirsher   want to jump to 4.0.3, you must first reverse the 4.0.2 patch (that is,
9349d86dc9SJeff Kirsher   patch -R) _before_ applying the 4.0.3 patch. You can read more on this in
947f65e924SMichael Witten   Documentation/applying-patches.txt
956ad44229SJesper Juhl
961da177e4SLinus Torvalds   Alternatively, the script patch-kernel can be used to automate this
971da177e4SLinus Torvalds   process.  It determines the current kernel version and applies any
981da177e4SLinus Torvalds   patches found.
991da177e4SLinus Torvalds
1001da177e4SLinus Torvalds     linux/scripts/patch-kernel linux
1011da177e4SLinus Torvalds
1021da177e4SLinus Torvalds   The first argument in the command above is the location of the
1031da177e4SLinus Torvalds   kernel source.  Patches are applied from the current directory, but
1041da177e4SLinus Torvalds   an alternative directory can be specified as the second argument.
1051da177e4SLinus Torvalds
1061da177e4SLinus Torvalds - Make sure you have no stale .o files and dependencies lying around:
1071da177e4SLinus Torvalds
1081da177e4SLinus Torvalds     cd linux
1091da177e4SLinus Torvalds     make mrproper
1101da177e4SLinus Torvalds
1111da177e4SLinus Torvalds   You should now have the sources correctly installed.
1121da177e4SLinus Torvalds
1131da177e4SLinus TorvaldsSOFTWARE REQUIREMENTS
1141da177e4SLinus Torvalds
11549d86dc9SJeff Kirsher   Compiling and running the 4.x kernels requires up-to-date
1161da177e4SLinus Torvalds   versions of various software packages.  Consult
1171da177e4SLinus Torvalds   Documentation/Changes for the minimum version numbers required
1181da177e4SLinus Torvalds   and how to get updates for these packages.  Beware that using
1191da177e4SLinus Torvalds   excessively old versions of these packages can cause indirect
1201da177e4SLinus Torvalds   errors that are very difficult to track down, so don't assume that
1211da177e4SLinus Torvalds   you can just update packages when obvious problems arise during
1221da177e4SLinus Torvalds   build or operation.
1231da177e4SLinus Torvalds
1241da177e4SLinus TorvaldsBUILD directory for the kernel:
1251da177e4SLinus Torvalds
126a6144bb9SMichael Witten   When compiling the kernel, all output files will per default be
1271da177e4SLinus Torvalds   stored together with the kernel source code.
1281da177e4SLinus Torvalds   Using the option "make O=output/dir" allow you to specify an alternate
1291da177e4SLinus Torvalds   place for the output files (including .config).
1301da177e4SLinus Torvalds   Example:
13188f7a642SMichael Witten
13249d86dc9SJeff Kirsher     kernel source code: /usr/src/linux-4.X
1331da177e4SLinus Torvalds     build directory:    /home/name/build/kernel
1341da177e4SLinus Torvalds
135a6144bb9SMichael Witten   To configure and build the kernel, use:
13688f7a642SMichael Witten
13749d86dc9SJeff Kirsher     cd /usr/src/linux-4.X
1381da177e4SLinus Torvalds     make O=/home/name/build/kernel menuconfig
1391da177e4SLinus Torvalds     make O=/home/name/build/kernel
1401da177e4SLinus Torvalds     sudo make O=/home/name/build/kernel modules_install install
1411da177e4SLinus Torvalds
142a6144bb9SMichael Witten   Please note: If the 'O=output/dir' option is used, then it must be
1431da177e4SLinus Torvalds   used for all invocations of make.
1441da177e4SLinus Torvalds
1451da177e4SLinus TorvaldsCONFIGURING the kernel:
1461da177e4SLinus Torvalds
1471da177e4SLinus Torvalds   Do not skip this step even if you are only upgrading one minor
1481da177e4SLinus Torvalds   version.  New configuration options are added in each release, and
1491da177e4SLinus Torvalds   odd problems will turn up if the configuration files are not set up
1501da177e4SLinus Torvalds   as expected.  If you want to carry your existing configuration to a
1511da177e4SLinus Torvalds   new version with minimal work, use "make oldconfig", which will
1521da177e4SLinus Torvalds   only ask you for the answers to new questions.
1531da177e4SLinus Torvalds
1546d12760cSMichael Witten - Alternative configuration commands are:
15588f7a642SMichael Witten
156620034c8SJesper Juhl     "make config"      Plain text interface.
15788f7a642SMichael Witten
1581da177e4SLinus Torvalds     "make menuconfig"  Text based color menus, radiolists & dialogs.
15988f7a642SMichael Witten
160b3235fe4SAndrea Gelmini     "make nconfig"     Enhanced text based color menus.
16188f7a642SMichael Witten
1621da177e4SLinus Torvalds     "make xconfig"     X windows (Qt) based configuration tool.
16388f7a642SMichael Witten
1646609b638SDiego Viola     "make gconfig"     X windows (GTK+) based configuration tool.
16588f7a642SMichael Witten
1661da177e4SLinus Torvalds     "make oldconfig"   Default all questions based on the contents of
1679dfb563bSRandy Dunlap                        your existing ./.config file and asking about
1689dfb563bSRandy Dunlap                        new config symbols.
16988f7a642SMichael Witten
170f875a1a6SPaolo 'Blaisorblade' Giarrusso     "make silentoldconfig"
171f875a1a6SPaolo 'Blaisorblade' Giarrusso                        Like above, but avoids cluttering the screen
172e3fc4cc1SRandy Dunlap                        with questions already answered.
173590a5857SMarkus Heidelberg                        Additionally updates the dependencies.
17488f7a642SMichael Witten
175fc0d1b93SKees Cook     "make olddefconfig"
176fc0d1b93SKees Cook                        Like above, but sets new symbols to their default
177fc0d1b93SKees Cook                        values without prompting.
178fc0d1b93SKees Cook
1799dfb563bSRandy Dunlap     "make defconfig"   Create a ./.config file by using the default
180b2d89930SPatrick Ringl                        symbol values from either arch/$ARCH/defconfig
181b2d89930SPatrick Ringl                        or arch/$ARCH/configs/${PLATFORM}_defconfig,
182b2d89930SPatrick Ringl                        depending on the architecture.
18388f7a642SMichael Witten
184b2d89930SPatrick Ringl     "make ${PLATFORM}_defconfig"
185b2d89930SPatrick Ringl                        Create a ./.config file by using the default
186b2d89930SPatrick Ringl                        symbol values from
187b2d89930SPatrick Ringl                        arch/$ARCH/configs/${PLATFORM}_defconfig.
188b2d89930SPatrick Ringl                        Use "make help" to get a list of all available
189b2d89930SPatrick Ringl                        platforms of your architecture.
19088f7a642SMichael Witten
1919dfb563bSRandy Dunlap     "make allyesconfig"
1929dfb563bSRandy Dunlap                        Create a ./.config file by setting symbol
1939dfb563bSRandy Dunlap                        values to 'y' as much as possible.
19488f7a642SMichael Witten
1959dfb563bSRandy Dunlap     "make allmodconfig"
1969dfb563bSRandy Dunlap                        Create a ./.config file by setting symbol
1979dfb563bSRandy Dunlap                        values to 'm' as much as possible.
19888f7a642SMichael Witten
1999dfb563bSRandy Dunlap     "make allnoconfig" Create a ./.config file by setting symbol
2009dfb563bSRandy Dunlap                        values to 'n' as much as possible.
20188f7a642SMichael Witten
2029dfb563bSRandy Dunlap     "make randconfig"  Create a ./.config file by setting symbol
2039dfb563bSRandy Dunlap                        values to random values.
2049dfb563bSRandy Dunlap
20580b810b2SSteven Rostedt     "make localmodconfig" Create a config based on current config and
20680b810b2SSteven Rostedt                           loaded modules (lsmod). Disables any module
20780b810b2SSteven Rostedt                           option that is not needed for the loaded modules.
20880b810b2SSteven Rostedt
20980b810b2SSteven Rostedt                           To create a localmodconfig for another machine,
21080b810b2SSteven Rostedt                           store the lsmod of that machine into a file
21180b810b2SSteven Rostedt                           and pass it in as a LSMOD parameter.
21280b810b2SSteven Rostedt
21380b810b2SSteven Rostedt                   target$ lsmod > /tmp/mylsmod
21480b810b2SSteven Rostedt                   target$ scp /tmp/mylsmod host:/tmp
21580b810b2SSteven Rostedt
21680b810b2SSteven Rostedt                   host$ make LSMOD=/tmp/mylsmod localmodconfig
21780b810b2SSteven Rostedt
21880b810b2SSteven Rostedt                           The above also works when cross compiling.
21980b810b2SSteven Rostedt
22080b810b2SSteven Rostedt     "make localyesconfig" Similar to localmodconfig, except it will convert
22180b810b2SSteven Rostedt                           all module options to built in (=y) options.
22280b810b2SSteven Rostedt
2232af238e4SRandy Dunlap   You can find more information on using the Linux kernel config tools
224ad444684SLi Zefan   in Documentation/kbuild/kconfig.txt.
2251da177e4SLinus Torvalds
2263773b454SMichael Witten - NOTES on "make config":
22788f7a642SMichael Witten
228c072c3f0SMichael Witten    - Having unnecessary drivers will make the kernel bigger, and can
2291da177e4SLinus Torvalds      under some circumstances lead to problems: probing for a
2301da177e4SLinus Torvalds      nonexistent controller card may confuse your other controllers
23188f7a642SMichael Witten
232c072c3f0SMichael Witten    - Compiling the kernel with "Processor type" set higher than 386
2331da177e4SLinus Torvalds      will result in a kernel that does NOT work on a 386.  The
2341da177e4SLinus Torvalds      kernel will detect this on bootup, and give up.
23588f7a642SMichael Witten
2361da177e4SLinus Torvalds    - A kernel with math-emulation compiled in will still use the
2371da177e4SLinus Torvalds      coprocessor if one is present: the math emulation will just
2381da177e4SLinus Torvalds      never get used in that case.  The kernel will be slightly larger,
2391da177e4SLinus Torvalds      but will work on different machines regardless of whether they
2401da177e4SLinus Torvalds      have a math coprocessor or not.
24188f7a642SMichael Witten
242c072c3f0SMichael Witten    - The "kernel hacking" configuration details usually result in a
2431da177e4SLinus Torvalds      bigger or slower kernel (or both), and can even make the kernel
2441da177e4SLinus Torvalds      less stable by configuring some routines to actively try to
2451da177e4SLinus Torvalds      break bad code to find kernel problems (kmalloc()).  Thus you
2463773b454SMichael Witten      should probably answer 'n' to the questions for "development",
2473773b454SMichael Witten      "experimental", or "debugging" features.
2481da177e4SLinus Torvalds
2491da177e4SLinus TorvaldsCOMPILING the kernel:
2501da177e4SLinus Torvalds
251a1365647SAndrew Morton - Make sure you have at least gcc 3.2 available.
252a1365647SAndrew Morton   For more information, refer to Documentation/Changes.
2531da177e4SLinus Torvalds
2541da177e4SLinus Torvalds   Please note that you can still run a.out user programs with this kernel.
2551da177e4SLinus Torvalds
2561da177e4SLinus Torvalds - Do a "make" to create a compressed kernel image. It is also
2571da177e4SLinus Torvalds   possible to do "make install" if you have lilo installed to suit the
2581da177e4SLinus Torvalds   kernel makefiles, but you may want to check your particular lilo setup first.
2591da177e4SLinus Torvalds
260a6144bb9SMichael Witten   To do the actual install, you have to be root, but none of the normal
2611da177e4SLinus Torvalds   build should require that. Don't take the name of root in vain.
2621da177e4SLinus Torvalds
2631da177e4SLinus Torvalds - If you configured any of the parts of the kernel as `modules', you
2641da177e4SLinus Torvalds   will also have to do "make modules_install".
2651da177e4SLinus Torvalds
2662af238e4SRandy Dunlap - Verbose kernel compile/build output:
2672af238e4SRandy Dunlap
268a6144bb9SMichael Witten   Normally, the kernel build system runs in a fairly quiet mode (but not
2692af238e4SRandy Dunlap   totally silent).  However, sometimes you or other kernel developers need
2702af238e4SRandy Dunlap   to see compile, link, or other commands exactly as they are executed.
2712af238e4SRandy Dunlap   For this, use "verbose" build mode.  This is done by inserting
2722af238e4SRandy Dunlap   "V=1" in the "make" command.  E.g.:
2732af238e4SRandy Dunlap
2742af238e4SRandy Dunlap     make V=1 all
2752af238e4SRandy Dunlap
2762af238e4SRandy Dunlap   To have the build system also tell the reason for the rebuild of each
2772af238e4SRandy Dunlap   target, use "V=2".  The default is "V=0".
2782af238e4SRandy Dunlap
2791da177e4SLinus Torvalds - Keep a backup kernel handy in case something goes wrong.  This is
2801da177e4SLinus Torvalds   especially true for the development releases, since each new release
2811da177e4SLinus Torvalds   contains new code which has not been debugged.  Make sure you keep a
2821da177e4SLinus Torvalds   backup of the modules corresponding to that kernel, as well.  If you
2831da177e4SLinus Torvalds   are installing a new kernel with the same version number as your
2841da177e4SLinus Torvalds   working kernel, make a backup of your modules directory before you
2851da177e4SLinus Torvalds   do a "make modules_install".
28688f7a642SMichael Witten
287e3fc4cc1SRandy Dunlap   Alternatively, before compiling, use the kernel config option
288e3fc4cc1SRandy Dunlap   "LOCALVERSION" to append a unique suffix to the regular kernel version.
289e3fc4cc1SRandy Dunlap   LOCALVERSION can be set in the "General Setup" menu.
2901da177e4SLinus Torvalds
2911da177e4SLinus Torvalds - In order to boot your new kernel, you'll need to copy the kernel
2921da177e4SLinus Torvalds   image (e.g. .../linux/arch/i386/boot/bzImage after compilation)
2931da177e4SLinus Torvalds   to the place where your regular bootable kernel is found.
2941da177e4SLinus Torvalds
2951da177e4SLinus Torvalds - Booting a kernel directly from a floppy without the assistance of a
2961da177e4SLinus Torvalds   bootloader such as LILO, is no longer supported.
2971da177e4SLinus Torvalds
298a6144bb9SMichael Witten   If you boot Linux from the hard drive, chances are you use LILO, which
2991da177e4SLinus Torvalds   uses the kernel image as specified in the file /etc/lilo.conf.  The
3001da177e4SLinus Torvalds   kernel image file is usually /vmlinuz, /boot/vmlinuz, /bzImage or
3011da177e4SLinus Torvalds   /boot/bzImage.  To use the new kernel, save a copy of the old image
3021da177e4SLinus Torvalds   and copy the new image over the old one.  Then, you MUST RERUN LILO
3031da177e4SLinus Torvalds   to update the loading map!! If you don't, you won't be able to boot
3041da177e4SLinus Torvalds   the new kernel image.
3051da177e4SLinus Torvalds
3061da177e4SLinus Torvalds   Reinstalling LILO is usually a matter of running /sbin/lilo.
3071da177e4SLinus Torvalds   You may wish to edit /etc/lilo.conf to specify an entry for your
3081da177e4SLinus Torvalds   old kernel image (say, /vmlinux.old) in case the new one does not
3091da177e4SLinus Torvalds   work.  See the LILO docs for more information.
3101da177e4SLinus Torvalds
3111da177e4SLinus Torvalds   After reinstalling LILO, you should be all set.  Shutdown the system,
3121da177e4SLinus Torvalds   reboot, and enjoy!
3131da177e4SLinus Torvalds
3141da177e4SLinus Torvalds   If you ever need to change the default root device, video mode,
3151da177e4SLinus Torvalds   ramdisk size, etc.  in the kernel image, use the 'rdev' program (or
3161da177e4SLinus Torvalds   alternatively the LILO boot options when appropriate).  No need to
3171da177e4SLinus Torvalds   recompile the kernel to change these parameters.
3181da177e4SLinus Torvalds
3191da177e4SLinus Torvalds - Reboot with the new kernel and enjoy.
3201da177e4SLinus Torvalds
3211da177e4SLinus TorvaldsIF SOMETHING GOES WRONG:
3221da177e4SLinus Torvalds
3231da177e4SLinus Torvalds - If you have problems that seem to be due to kernel bugs, please check
3241da177e4SLinus Torvalds   the file MAINTAINERS to see if there is a particular person associated
3251da177e4SLinus Torvalds   with the part of the kernel that you are having trouble with. If there
3261da177e4SLinus Torvalds   isn't anyone listed there, then the second best thing is to mail
32799ddcc7eSLinus Torvalds   them to me (torvalds@linux-foundation.org), and possibly to any other
32899ddcc7eSLinus Torvalds   relevant mailing-list or to the newsgroup.
3291da177e4SLinus Torvalds
3301da177e4SLinus Torvalds - In all bug-reports, *please* tell what kernel you are talking about,
3311da177e4SLinus Torvalds   how to duplicate the problem, and what your setup is (use your common
3321da177e4SLinus Torvalds   sense).  If the problem is new, tell me so, and if the problem is
3331da177e4SLinus Torvalds   old, please try to tell me when you first noticed it.
3341da177e4SLinus Torvalds
3351da177e4SLinus Torvalds - If the bug results in a message like
3361da177e4SLinus Torvalds
3371da177e4SLinus Torvalds     unable to handle kernel paging request at address C0000010
3381da177e4SLinus Torvalds     Oops: 0002
3391da177e4SLinus Torvalds     EIP:   0010:XXXXXXXX
3401da177e4SLinus Torvalds     eax: xxxxxxxx   ebx: xxxxxxxx   ecx: xxxxxxxx   edx: xxxxxxxx
3411da177e4SLinus Torvalds     esi: xxxxxxxx   edi: xxxxxxxx   ebp: xxxxxxxx
3421da177e4SLinus Torvalds     ds: xxxx  es: xxxx  fs: xxxx  gs: xxxx
3431da177e4SLinus Torvalds     Pid: xx, process nr: xx
3441da177e4SLinus Torvalds     xx xx xx xx xx xx xx xx xx xx
3451da177e4SLinus Torvalds
3461da177e4SLinus Torvalds   or similar kernel debugging information on your screen or in your
3471da177e4SLinus Torvalds   system log, please duplicate it *exactly*.  The dump may look
3481da177e4SLinus Torvalds   incomprehensible to you, but it does contain information that may
3491da177e4SLinus Torvalds   help debugging the problem.  The text above the dump is also
3501da177e4SLinus Torvalds   important: it tells something about why the kernel dumped code (in
351a6144bb9SMichael Witten   the above example, it's due to a bad kernel pointer). More information
3521da177e4SLinus Torvalds   on making sense of the dump is in Documentation/oops-tracing.txt
3531da177e4SLinus Torvalds
3541da177e4SLinus Torvalds - If you compiled the kernel with CONFIG_KALLSYMS you can send the dump
3551da177e4SLinus Torvalds   as is, otherwise you will have to use the "ksymoops" program to make
356620034c8SJesper Juhl   sense of the dump (but compiling with CONFIG_KALLSYMS is usually preferred).
357620034c8SJesper Juhl   This utility can be downloaded from
358620034c8SJesper Juhl   ftp://ftp.<country>.kernel.org/pub/linux/utils/kernel/ksymoops/ .
3596d12760cSMichael Witten   Alternatively, you can do the dump lookup by hand:
3601da177e4SLinus Torvalds
3611da177e4SLinus Torvalds - In debugging dumps like the above, it helps enormously if you can
3621da177e4SLinus Torvalds   look up what the EIP value means.  The hex value as such doesn't help
3631da177e4SLinus Torvalds   me or anybody else very much: it will depend on your particular
3641da177e4SLinus Torvalds   kernel setup.  What you should do is take the hex value from the EIP
3651da177e4SLinus Torvalds   line (ignore the "0010:"), and look it up in the kernel namelist to
3661da177e4SLinus Torvalds   see which kernel function contains the offending address.
3671da177e4SLinus Torvalds
3681da177e4SLinus Torvalds   To find out the kernel function name, you'll need to find the system
3691da177e4SLinus Torvalds   binary associated with the kernel that exhibited the symptom.  This is
3701da177e4SLinus Torvalds   the file 'linux/vmlinux'.  To extract the namelist and match it against
3711da177e4SLinus Torvalds   the EIP from the kernel crash, do:
3721da177e4SLinus Torvalds
3731da177e4SLinus Torvalds     nm vmlinux | sort | less
3741da177e4SLinus Torvalds
3751da177e4SLinus Torvalds   This will give you a list of kernel addresses sorted in ascending
3761da177e4SLinus Torvalds   order, from which it is simple to find the function that contains the
3771da177e4SLinus Torvalds   offending address.  Note that the address given by the kernel
3781da177e4SLinus Torvalds   debugging messages will not necessarily match exactly with the
3791da177e4SLinus Torvalds   function addresses (in fact, that is very unlikely), so you can't
3801da177e4SLinus Torvalds   just 'grep' the list: the list will, however, give you the starting
3811da177e4SLinus Torvalds   point of each kernel function, so by looking for the function that
3821da177e4SLinus Torvalds   has a starting address lower than the one you are searching for but
3831da177e4SLinus Torvalds   is followed by a function with a higher address you will find the one
3841da177e4SLinus Torvalds   you want.  In fact, it may be a good idea to include a bit of
3851da177e4SLinus Torvalds   "context" in your problem report, giving a few lines around the
3861da177e4SLinus Torvalds   interesting one.
3871da177e4SLinus Torvalds
3881da177e4SLinus Torvalds   If you for some reason cannot do the above (you have a pre-compiled
3891da177e4SLinus Torvalds   kernel image or similar), telling me as much about your setup as
390620034c8SJesper Juhl   possible will help.  Please read the REPORTING-BUGS document for details.
3911da177e4SLinus Torvalds
3926d12760cSMichael Witten - Alternatively, you can use gdb on a running kernel. (read-only; i.e. you
3931da177e4SLinus Torvalds   cannot change values or set break points.) To do this, first compile the
3941da177e4SLinus Torvalds   kernel with -g; edit arch/i386/Makefile appropriately, then do a "make
3951da177e4SLinus Torvalds   clean". You'll also need to enable CONFIG_PROC_FS (via "make config").
3961da177e4SLinus Torvalds
3971da177e4SLinus Torvalds   After you've rebooted with the new kernel, do "gdb vmlinux /proc/kcore".
3981da177e4SLinus Torvalds   You can now use all the usual gdb commands. The command to look up the
3991da177e4SLinus Torvalds   point where your system crashed is "l *0xXXXXXXXX". (Replace the XXXes
4001da177e4SLinus Torvalds   with the EIP value.)
4011da177e4SLinus Torvalds
4021da177e4SLinus Torvalds   gdb'ing a non-running kernel currently fails because gdb (wrongly)
4031da177e4SLinus Torvalds   disregards the starting offset for which the kernel is compiled.
4041da177e4SLinus Torvalds
405