Recently, some friends tried to compile a FreeBSD kernel but failed to get the source using CVSup and got stuck... so they asked me how do I do it. Personally, I've never been able to get the sources using CVSup and it may be because I'm used to be behind firewalls.
Since June 2008, development of the base system moved to Subversion, so it might be easier for you to use Subversion if you're having problems to get the source.
The FreeBSD Handbook cites "Building a custom kernel is one of the most important rites of passage for advanced BSD users.", I believe everyone who is really into FreeBSD should do it at some point.
I'll be using the Virtual Machine created in my previous post, you might want to use your own computer with FreeBSD already installed and the only difference is that you might already have the required ports installed.
Preliminaries:
- Install Subversion from ports as you need it to get the sources, use default
options when asked (this will require some time due to the dependencies
needed):
cd /usr/ports/devel/subversion/ sudo make install clean
- Log out and log in again to make the new commands available to your user.
- Use subversion to get the source code:
sudo svn co http://svn.freebsd.org/base/stable/9 /usr/src
- Once installed, use the following commands to update your source:
sudo svn up /usr/src
Let's create a stripped down kernel for VirtualBox, remeber to use capital letters to name it (as it is a tradition :P) and to leave the GENERIC file untouched (as it is not recommended to modify it). If you have a 32 bit Kernel use the directory i386 instead of amd64.
- Start with a copy of the GENERIC Kernel naming it VBOX:
cp /usr/src/sys/amd64/conf/GENERIC
/usr/src/sys/amd64/conf/VBOX
- In the new VBOX file it is important to change the identification changing the line "ident GENERIC" to "ident VBOX". The lines with the options you don't want can be commented or deleted, and you can add options according to your needs. Use the following command to edit the file:
For this example, I used the following content:sudo ee
/usr/src/sys/amd64/conf/VBOX
cpu I686_CPU ident VBOX options SCHED_ULE # ULE scheduler options PREEMPTION # Enable kernel thread preemption options INET # InterNETworking options INET6 # IPv6 communications protocols options SCTP # Stream Control Transmission Protocol options FFS # Berkeley Fast Filesystem options SOFTUPDATES # Enable FFS soft updates support options UFS_ACL # Support for access control lists options UFS_DIRHASH # Improve performance on big directories options UFS_GJOURNAL # Enable gjournal-based UFS journaling options MD_ROOT # MD is a potential root device options NFSCL # New Network Filesystem Client options NFSD # New Network Filesystem Server options NFSLOCKD # Network Lock Manager options NFS_ROOT # NFS usable as /, requires NFSCL options MSDOSFS # MSDOS Filesystem options CD9660 # ISO 9660 Filesystem options PROCFS # Process filesystem (requires PSEUDOFS) options PSEUDOFS # Pseudo-filesystem framework options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Provides labelization options COMPAT_FREEBSD4 # Compatible with FreeBSD4 options COMPAT_FREEBSD5 # Compatible with FreeBSD5 options COMPAT_FREEBSD6 # Compatible with FreeBSD6 options COMPAT_FREEBSD7 # Compatible with FreeBSD7 options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI options KTRACE # ktrace(1) support options STACK # stack(9) support options SYSVSHM # SYSV-style shared memory options SYSVMSG # SYSV-style message queues options SYSVSEM # SYSV-style semaphores options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed. options KBD_INSTALL_CDEV # install a CDEV entry in /dev options HWPMC_HOOKS # Necessary kernel hooks for hwpmc(4) options AUDIT # Security event auditing options MAC # TrustedBSD MAC Framework options INCLUDE_CONFIG_FILE # Include this file in kernel options KDB # Kernel debugger related code options KDB_TRACE # Print a stack trace for a panic # To make an SMP kernel, the next two lines are needed options SMP # Symmetric MultiProcessor Kernel device apic # I/O APIC # CPU frequency control device cpufreq # Bus support. device acpi device eisa device pci # ATA controllers device ahci # AHCI-compatible SATA controllers device ata # Legacy ATA/SATA controllers options ATA_CAM # Handle legacy controllers with CAM options ATA_STATIC_ID # Static device numbering # ATA/SCSI peripherals device scbus # SCSI bus (required for ATA/SCSI) device ch # SCSI media changers device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct ATA/SCSI access) device ses # Enclosure Services (SES and SAF-TE) device ctl # CAM Target Layer # atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc # AT keyboard controller device atkbd # AT keyboard device psm # PS/2 mouse device kbdmux # keyboard multiplexer device vga # VGA video card driver options VESA # Add support for VESA BIOS Extensions (VBE) device splash # Splash screen and screen saver support # syscons is the default console driver, resembling an SCO console device sc options SC_PIXEL_MODE # add support for the raster text mode # Add suspend/resume support for the i8254. device pmtimer # Serial (COM) ports device uart # Generic UART driver # Parallel port device ppc device ppbus # Parallel port bus (required) device lpt # Printer device plip # TCP/IP over parallel device ppi # Parallel port interface device device puc # Multi I/O cards and multi-channel UARTs # PCI Ethernet NICs. device em # Intel PRO/1000 Gigabit Ethernet Family # Pseudo devices. device loop # Network loopback device random # Entropy device device ether # Ethernet support device vlan # 802.1Q VLAN support device tun # Packet tunnel. device pty # BSD-style compatibility pseudo ttys device md # Memory "disks" device gif # IPv6 and IPv4 tunneling device faith # IPv6-to-IPv4 relaying (translation) device firmware # firmware assist module # The `bpf' device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! # Note that 'bpf' is required for DHCP. device bpf # Berkeley packet filter # USB support options USB_DEBUG # enable debug msgs device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface device ehci # EHCI PCI->USB interface (USB 2.0) device xhci # XHCI PCI->USB interface (USB 3.0) device usb # USB Bus (required) device uhid # "Human Interface Devices" device ukbd # Keyboard device umass # Disks/Mass storage - Requires scbus and da device ums # Mouse # Sound support device sound # Generic sound driver (required) device snd_ich # Intel, NVidia and other ICH AC'97 Audio
- To compile and install your Kernel use the following:
cd /usr/src/ sudo make buildkernel KERNCONF=VBOX sudo make installkernel KERNCONF=VBOX
- Reboot to use the new Kernel, you can check it with the following command:
uname -a
Enjoy a faster boot time and a lower memory usage at this point.
I hope this will help someone out there, please feel free to send any comments.
No comments:
Post a Comment