<HTML ><HEAD ><TITLE >Kernel Build Example</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="HOME" TITLE="Linux i386 Boot Code HOWTO" HREF="index.html"><LINK REL="PREVIOUS" TITLE="SMP Boot" HREF="smpboot.html"><LINK REL="NEXT" TITLE="Internal Linker Script" HREF="internel_lds.html"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Linux i386 Boot Code HOWTO</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="smpboot.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="internel_lds.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="kbuild" ></A >A. Kernel Build Example</H1 ><P > Here is a kernel build example (in <A HREF="http://www.redhat.com" TARGET="_top" >Redhat</A > 9.0). Statements between "/*" and "*/" are in-line comments, not console output. <TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" ><B CLASS="command" >[root@localhost root]# ln -s /usr/src/linux-2.4.20 /usr/src/linux</B > <B CLASS="command" >[root@localhost root]# cd /usr/src/linux</B > <B CLASS="command" >[root@localhost linux]# make xconfig</B > <EM >/* 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" */</EM > <B CLASS="command" >[root@localhost linux]# make oldconfig</B > <EM >/* Re-check .config, optional */</EM > <B CLASS="command" >[root@localhost linux]# vi Makefile</B > <EM >/* Modify EXTRAVERSION in linux/Makefile, optional */</EM > <B CLASS="command" >[root@localhost linux]# make dep</B > <EM >/* Create .depend and more */</EM > <B CLASS="command" >[root@localhost linux]# make bzImage</B > <EM >/* ... Some output omitted */</EM > 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' <B CLASS="command" >[root@localhost linux]# make modules modules_install</B > <EM >/* ... Some output omitted */</EM > 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 <B CLASS="command" >[root@localhost linux]# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20</B > <B CLASS="command" >[root@localhost linux]# cp vmlinux /boot/vmlinux-2.4.20</B > <B CLASS="command" >[root@localhost linux]# cp System.map /boot/System.map-2.4.20</B > <B CLASS="command" >[root@localhost linux]# cp .config /boot/config-2.4.20</B > <B CLASS="command" >[root@localhost linux]# mkinitrd /boot/initrd-2.4.20.img 2.4.20</B > <B CLASS="command" >[root@localhost linux]# vi /boot/grub/grub.conf</B > <EM >/* 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 */</EM ></PRE ></FONT ></TD ></TR ></TABLE > </P ><P > Refer to <A HREF="http://kernelnewbies.org/faq/index.php3#compile" TARGET="_top" > Kernelnewbies FAQ: How do I compile a kernel</A > and <A HREF="http://www.digitalhermit.com/linux/kernel.html" TARGET="_top" > Kernel Rebuild Procedure</A > for more details. </P ><P > To build the kernel in <A HREF="http://www.debian.org" TARGET="_top" >Debian</A >, also refer to <A HREF="http://www.debian.org/releases/stable/i386/ch-post-install.en.html#s-kernel-baking" TARGET="_top" >Debian Installation Manual: Compiling a New Kernel</A >, <A HREF="http://www.debian.org/doc/manuals/debian-faq/ch-kernel.en.html" TARGET="_top" >The Debian GNU/Linux FAQ: Debian and the kernel</A > and <A HREF="http://www.debian.org/doc/manuals/reference/ch-kernel.en.html" TARGET="_top" >Debian Reference: The Linux kernel under Debian</A >. Check "<B CLASS="command" >zless /usr/share/doc/kernel-package/Problems.gz</B >" if you encounter problems. </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="smpboot.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="internel_lds.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >SMP Boot</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Internal Linker Script</TD ></TR ></TABLE ></DIV ></BODY ></HTML >