FreeOS.com logo

FreeOS Most Popular
* Most Read stories
* Commented Stories
* Active Categories
* Non Linux Section
* User Submitters
* Top Polls
* Top Authors
* Top Reviews
* Top Rated
* Top Search Terms

Top Articles
* Writing a Linux device driver
* The Linux filesystem explained
* Samba NT Domain Controller
* Setting up Squid as your caching HTTP/FTP proxy
* Web server tutorial - Part 1

FreeOS Highlights
* Howtos (72)
* Reviews (20)
* Opinions (18)
* Interviews (8)
* News (3)

My FreeOS

Nick:
Pass:
Register

Forgot your password?

Contact Us
Contact Us

       

Project: FreeBSD triangle Howtos triangle

Compiling the FreeBSD kernel

By Aditya Kulkarni <aditya@freeos.com>
Posted: ( 2001-03-20 10:49:49 EST by )

As with the Linux kernel, compiling the FreeBSD kernel is something of an essential skill. The newly compiled kernel will give you access to your new hardware. It will be your custom configuration. And finally, it will elevate you a couple of points up the Guru scale. Read on for more on how you can achieve all of the above.

The FreeBSD kernel sources are available in the directory /usr/src/sys.

This directory is also accessible from /sys directory.

If you don't have the kernel sources, you can run the /stand/sysinstall command as root choosing configure, select distribution, src and finally sys to install the sources.

This installs the kernel sources in /usr/src/sys directory. If you have seen the Linux kernel sources, you will see a similar hierarchy of source code of the kernel.

Move to the /usr/src/sys/i386/conf directory where the following files are present: GENERIC and LINT.

GENERIC is the configuration file from which the kernel boots.

LINT is the advanced configuration file for more hardware and device driver support.

The GENERIC is the default file. See also in your "/" directory the file called kernel.GENERIC and kernel. These files are 3MB long (On my FreeBSD 4.1) system. They are the kernel image files.

Configuring your custom kernel

Copy the GENERIC file to a file called NEWKER. This is your new kernel configuration file. Do not remove or delete the GENERIC and LINT files.

You can make changes to the new file by commenting out and removing unnecessary parameters like SCSI controllers ,RAID ,PCI/ISA NIC etc. depending on the hardware you have.

Sample Of my configuration file : NEWKER

/* Configuration File */

machine i386
cpu I386_CPU
cpu I486_CPU
cpu I586_CPU
cpu I686_CPU
ident GENERIC
maxusers 32

#makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols

options MATH_EMULATE #Support for x87 emulation
options INET #InterNETworking
options INET6 #IPv6 communications protocols
options FFS #Berkeley Fast Filesystem
options FFS_ROOT #FFS usable as root device [keep this!]
options SOFTUPDATES #Enable FFS soft updates support
options MFS #Memory Filesystem
options MD_ROOT #MD is a potential root device
options NFS #Network Filesystem
options NFS_ROOT #NFS usable as root device, NFS required
options MSDOSFS #MSDOS Filesystem
options CD9660 #ISO 9660 Filesystem
options CD9660_ROOT #CD-ROM usable as root, CD9660 required
options PROCFS #Process filesystem
options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
options UCONSOLE #Allow users to grab the console
options USERCONFIG #boot -c editor
options VISUAL_USERCONFIG #visual boot -c editor
options KTRACE #ktrace(1) support
options SYSVSHM #SYSV-style shared memory
options SYSVMSG #SYSV-style message queues
options SYSVSEM #SYSV-style semaphores
options P1003_1B #Posix P1003_1B real-time extensions
options _KPOSIX_PRIORITY_SCHEDULING
options ICMP_BANDLIM #Rate limit bad replies
options KBD_INSTALL_CDEV # install a CDEV entry in /dev

# To make an SMP kernel, the next two are needed
#options SMP # Symmetric MultiProcessor Kernel
#options APIC_IO # Symmetric (APIC) I/O
# Optionally these may need tweaked, (defaults shown):
#options NCPU=2 # number of CPUs
#options NBUS=4 # number of busses
#options NAPIC=1 # number of IO APICs
#options NINTR=24 # number of INTs

device isa
device eisa
device pci

# Floppy drives
device fdc0 at isa? port IO_FD1 irq 6 drq 2
device fd0 at fdc0 drive 0
device fd1 at fdc0 drive 1

# ATA and ATAPI devices
device ata0 at isa? port IO_WD1 irq 14
device ata1 at isa? port IO_WD2 irq 15
device ata
device atadisk # ATA disk drives
device atapicd # ATAPI CDROM drives
device atapifd # ATAPI floppy drives
device atapist # ATAPI tape drives
options ATA_STATIC_ID #Static device numbering
#options ATA_ENABLE_ATAPI_DMA #Enable DMA on ATAPI devices

# atkbdc0 controls both the keyboard and the PS/2 mouse
device atkbdc0 at isa? port IO_KBD
device atkbd0 at atkbdc? irq 1 flags 0x1
device psm0 at atkbdc? irq 12

device vga0 at isa?

# splash screen/screen saver
pseudo-device splash

# syscons is the default console driver, resembling an SCO console
device sc0 at isa? flags 0x100

# Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver
#device vt0 at isa?
#options XSERVER # support for X server on a vt console
#options FAT_CURSOR # start with block cursor
# If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines
#options PCVT_SCANSET=2 # IBM keyboards are non-std

# Floating point support - do not disable.
device npx0 at nexus? port IO_NPX irq 13

# Power management support (see LINT for more options)
device apm0 at nexus? disable flags 0x20 # Advanced Power Management

# Serial (COM) ports
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
device sio2 at isa? disable port IO_COM3 irq 5
device sio3 at isa? disable port IO_COM4 irq 9

# Parallel port
device ppc0 at isa? irq 7
device ppbus # Parallel port bus (required)
device lpt # Printer
device plip # TCP/IP over parallel
device ppi # Parallel port interface device
#device vpo # Requires scbus and da

# PCI Ethernet NICs that use the common MII bus controller code.
device miibus # MII bus support
device rl # RealTek 8129/8139

# Pseudo devices - the number indicates how many units to allocated.
pseudo-device loop # Network loopback
pseudo-device ether # Ethernet support
pseudo-device sl 1 # Kernel SLIP
pseudo-device ppp 1 # Kernel PPP
pseudo-device tun # Packet tunnel.
pseudo-device pty # Pseudo-ttys (telnet etc)
pseudo-device md # Memory "disks"
pseudo-device gif 4 # IPv6 and IPv4 tunneling
pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)

# The `bpf' pseudo-device enables the Berkeley Packet Filter.
pseudo-device bpf #Berkeley packet filter

/* End of File */

By default FreeBSD does not detect sound cards. For sound card parameters, refer to the file LINT and copy the details of the sound device from LINT and put it in your new configuration file.

For example, add the following lines in the configuration file.

device snd0
device pcm
device opl0 at isa? port 0x388

For more sound specific documentation related to your sound card look at the following file sound.doc present in /usr/src/sys/i386/isa/sound/sound.doc

Now do the following:

# cd /usr/src/sys/i386/conf
# cp GENERIC NEWKER

Configuring the kernel using the config command :

# config NEWKER

After this step you will get the following message

Don't forget to do make depend

If you get any errors in this step, then there is a problem in your configuration file. Check the file again and edit it. Refer to GENERIC and LINT for more details regarding device drivers.

Go to the following directory and compile the kernel.

# cd /usr/src/sys/compile/NEWKER

Compiling the kernel

Do the following steps to compile the kernel:

# make depend
# make
# make install

The make depend stage executes a set of Perl scripts to gather all the source code files and checks for kernel dependencies.

Now the make stage actually compiles the kernel along with device drivers for sound, ethernet, usb and supported file systems etc.

This is a fairly long process.

After the make stage, follows make install which installs the new kernel and links it to the / directory.

By default FreeBSD renames the new kernel in a file called kernel and the old kernel that is either the kernel or kernel.GENERIC as kernel.old in the same root directory.

Now shutdown your system and reboot using your new kernel.

If you have added sound support, you will have to add device nodes in your /dev directory .

For sound cards, the following command creates the appropriate entries:

# sh MAKEDEV snd0

As always, the FreeBSD handbook is a great reference. In case of any problems, look there or just send me an e-mail.

Other articles by Aditya Kulkarni

Current Rating: [ 7.78 / 10 ] Number of Times Rated: [ 85 ]

More Howtos
* Fast & dirty way for dualbooting FreeBSD & Linux
* Getting started with FreeBSD
* Compiling the FreeBSD kernel
* Configure a NIS and NFS client on a FreeBSD box

Contents
  Howtos
Links
  Articles
  Howtos
  Interviews
  Reviews
  Websites
News

FreeBSD
About FreeBSD

Print It!
Printer Friendly Version