Linux i386 Boot Code HOWTO
Prev |  | Next

# A. Kernel Build Example

Here is a kernel build example (in Redhat 9.0). Statements between "/*" and "*/" are in-line comments, not console output.

    [root@localhost root]# ln -s /usr/src/linux-2.4.20 /usr/src/linux
    [root@localhost root]# cd /usr/src/linux
    [root@localhost linux]# make xconfig
            /* Create .config
             *   1. "Load Configuration from File" ->
             *        /boot/config-2.4.20-28.9, or whatever you like
             *   2. Modify kernel configuration parameters
             *   3. "Save and Exit" */
    [root@localhost linux]# make oldconfig
            /* Re-check .config, optional */
    [root@localhost linux]# vi Makefile
            /* Modify EXTRAVERSION in linux/Makefile, optional */
    [root@localhost linux]# make dep
            /* Create .depend and more */
    [root@localhost linux]# make bzImage
            /* ... Some output omitted */
    ld -m elf_i386 -T /usr/src/linux-2.4.20/arch/i386/vmlinux.lds -e stext arch/i386
    /kernel/head.o arch/i386/kernel/init_task.o init/main.o init/version.o init/do_m
    ounts.o \
            --start-group \
            arch/i386/kernel/kernel.o arch/i386/mm/mm.o kernel/kernel.o mm/mm.o fs/f
    s.o ipc/ipc.o \
             drivers/char/char.o drivers/block/block.o drivers/misc/misc.o drivers/n
    et/net.o drivers/media/media.o drivers/char/drm/drm.o drivers/net/fc/fc.o driver
    s/net/appletalk/appletalk.o drivers/net/tokenring/tr.o drivers/net/wan/wan.o dri
    vers/atm/atm.o drivers/ide/idedriver.o drivers/cdrom/driver.o drivers/pci/driver
    .o drivers/net/pcmcia/pcmcia_net.o drivers/net/wireless/wireless_net.o drivers/p
    np/pnp.o drivers/video/video.o drivers/net/hamradio/hamradio.o drivers/md/mddev.
    o drivers/isdn/vmlinux-obj.o \
            net/network.o \
            /usr/src/linux-2.4.20/arch/i386/lib/lib.a /usr/src/linux-2.4.20/lib/lib.
    a /usr/src/linux-2.4.20/arch/i386/lib/lib.a \
            --end-group \
            -o vmlinux
    nm vmlinux | grep -v '\(compiled\)\|\(\.o$\)\|\( [aUw] \)\|\(\.\.ng$\)\|\(LASH[R
    L]DI\)' | sort > System.map
    make[1]: Entering directory `/usr/src/linux-2.4.20/arch/i386/boot'
    gcc -E -D__KERNEL__ -I/usr/src/linux-2.4.20/include -D__BIG_KERNEL__ -traditiona
    l -DSVGA_MODE=NORMAL_VGA  bootsect.S -o bbootsect.s
    as -o bbootsect.o bbootsect.s
    bootsect.S: Assembler messages:
    bootsect.S:239: Warning: indirect lcall without `*'
    ld -m elf_i386 -Ttext 0x0 -s --oformat binary bbootsect.o -o bbootsect
    gcc -E -D__KERNEL__ -I/usr/src/linux-2.4.20/include -D__BIG_KERNEL__ -D__ASSEMBL
    Y__ -traditional -DSVGA_MODE=NORMAL_VGA  setup.S -o bsetup.s
    as -o bsetup.o bsetup.s
    setup.S: Assembler messages:
    setup.S:230: Warning: indirect lcall without `*'
    ld -m elf_i386 -Ttext 0x0 -s --oformat binary -e begtext -o bsetup bsetup.o
    make[2]: Entering directory `/usr/src/linux-2.4.20/arch/i386/boot/compressed'
    tmppiggy=_tmp_$$piggy; \
    rm -f $tmppiggy $tmppiggy.gz $tmppiggy.lnk; \
    objcopy -O binary -R .note -R .comment -S /usr/src/linux-2.4.20/vmlinux $tmppigg
    y; \
    gzip -f -9 < $tmppiggy > $tmppiggy.gz; \
    echo "SECTIONS { .data : { input_len = .; LONG(input_data_end - input_data) inpu
    t_data = .; *(.data) input_data_end = .; }}" > $tmppiggy.lnk; \
    ld -m elf_i386 -r -o piggy.o -b binary $tmppiggy.gz -b elf32-i386 -T $tmppiggy.l
    nk; \
    rm -f $tmppiggy $tmppiggy.gz $tmppiggy.lnk
    gcc -D__ASSEMBLY__ -D__KERNEL__ -I/usr/src/linux-2.4.20/include -traditional -c
    head.S
    gcc -D__KERNEL__ -I/usr/src/linux-2.4.20/include -Wall -Wstrict-prototypes -Wno-
    trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpref
    erred-stack-boundary=2 -march=i686 -DKBUILD_BASENAME=misc -c misc.c
    ld -m elf_i386 -Ttext 0x100000 -e startup_32 -o bvmlinux head.o misc.o piggy.o
    make[2]: Leaving directory `/usr/src/linux-2.4.20/arch/i386/boot/compressed'
    gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -o tools/build tools/buil
    d.c -I/usr/src/linux-2.4.20/include
    objcopy -O binary -R .note -R .comment -S compressed/bvmlinux compressed/bvmlinu
    x.out
    tools/build -b bbootsect bsetup compressed/bvmlinux.out CURRENT > bzImage
    Root device is (3, 67)
    Boot sector 512 bytes.
    Setup is 4780 bytes.
    System is 852 kB
    make[1]: Leaving directory `/usr/src/linux-2.4.20/arch/i386/boot'
    [root@localhost linux]# make modules modules_install
            /* ... Some output omitted */
    cd /lib/modules/2.4.20; \
    mkdir -p pcmcia; \
    find kernel -path '*/pcmcia/*' -name '*.o' | xargs -i -r ln -sf ../{} pcmcia
    if [ -r System.map ]; then /sbin/depmod -ae -F System.map  2.4.20; fi
    [root@localhost linux]# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20
    [root@localhost linux]# cp vmlinux /boot/vmlinux-2.4.20
    [root@localhost linux]# cp System.map /boot/System.map-2.4.20
    [root@localhost linux]# cp .config /boot/config-2.4.20
    [root@localhost linux]# mkinitrd /boot/initrd-2.4.20.img 2.4.20
    [root@localhost linux]# vi /boot/grub/grub.conf
            /* Add the following lines to grub.conf:
    title Linux (2.4.20)
            kernel /vmlinuz-2.4.20 ro root=LABEL=/
            initrd /initrd-2.4.20.img
             */

Refer to Kernelnewbies FAQ: How do I compile a kernel and Kernel Rebuild Procedure for more details.

To build the kernel in Debian, also refer to Debian Installation Manual: Compiling a New Kernel, The Debian GNU/Linux FAQ: Debian and the kernel and Debian Reference: The Linux kernel under Debian. Check "zless /usr/share/doc/kernel-package/Problems.gz" if you encounter problems.

Prev | Home | Next
SMP Boot |  | Internal Linker Script