Thinkpad 笔记本电脑上的 FreeBSD 内核

在这个wiki帖子中,公布了Thinkpad笔记本电脑上FreeBSD内核配置和一些基本的设置,目的是为了让更多的初学者能在最短的时间上手FreeBSD。FreeBSD是目前最好的免费OS之一,但愿它在开源之路上不断壮大。

在学习使用FreeBSD的过程中,我受益于网上众多的科普贴和坛子里朋友们的帮助。作为回馈,但愿我的这些小小的心得体会也能对他人有所帮助。

为什么选 Thinkpad?

FreeBSD 似乎比较青睐 Thinkpad, 提供了很多驱动和应用,例如 tpb 等。另外,在 /boot/loader.conf 里加入

acpi_video_load="YES"
acpi_ibm_load="YES"

就可以加载 acpi 支持。众所周知,FreeBSD 对 acpi 的支持一直是其诟病。可见 FreeBSD 对 Thinkpad 的“爱护”。当然,其他品牌的笔记本电脑,FreeBSD 也是相当支持的(我不是 Lenovo 的托儿)。我看 freebsd 对笔记本电脑的支持列表 http://laptop.bsdgroup.de/freebsd/,其中 Thinkpads 较多。而 FreeBSD 对 T42 的支持是 100%(不过休眠待机功能不work。。。)。所以,网上有人问买什么笔记本装 FreeBSD 最合适,一般的回答是 old Thinkpads of T, X, R series.

从做工上看,实话实说,现在的 Thinkpad 大不如从前了。Thinkpad T42 曾数次掉到地上,啥事也没有,捡起来接着用。2011 年底,我刚买了台 X220,看它的样子,我担心摔一次就彻底完蛋。不知 X220 能否像 T42 一样让我从来不为机器和操作系统担心,但愿事遂人愿。

FreeBSD 9.1 内核文件

为了初学者装机方便,我把我的Thinkpad笔记本电脑上的 FreeBSD 9.1 内核文件贴出来。该配置还在Thinkpad X61、X200上试验过,都是没问题的。

#cpu        I486_CPU
#cpu        I586_CPU
cpu     I686_CPU
ident   X200

#makeoptions    DEBUG=-g        # Build kernel with gdb(1) debug symbols
#makeoptions    WITH_CTF=1      # Run ctfconvert(1) for DTrace support

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     QUOTA           # Enable disk quotas for UFS
#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_RAID       # Soft RAID functionality.
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    KDTRACE_HOOKS       # Kernel DTrace hooks
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
options     DDB_CTF         # kernel ELF linker loads CTF data

# 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

# Floppy drives
#device     fdc

# 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
#device     mvs     # Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA
#device     siis        # SiliconImage SiI3124/SiI3132/SiI3531 SATA

# SCSI Controllers
#device     ahb     # EISA AHA1742 family
#device     ahc     # AHA2940 and onboard AIC7xxx devices
#options    AHC_REG_PRETTY_PRINT    # Print register bitfields in debug
                    # output.  Adds ~128k to driver.
#device     ahd     # AHA39320/29320 and onboard AIC79xx devices
#options    AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
                    # output.  Adds ~215k to driver.
#device     esp     # AMD Am53C974 (Tekram DC-390(T))
#device     hptiop      # Highpoint RocketRaid 3xxx series
#device     isp     # Qlogic family
#device     ispfw       # Firmware for QLogic HBAs- normally a module
#device     mpt     # LSI-Logic MPT-Fusion
#device     ncr     # NCR/Symbios Logic
#device     sym     # NCR/Symbios Logic (newer chipsets + those of `ncr')
#device     trm     # Tekram DC395U/UW/F DC315U adapters

#device     adv     # Advansys SCSI adapters
#device     adw     # Advansys wide SCSI adapters
#device     aha     # Adaptec 154x SCSI adapters
#device     aic     # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
#device     bt      # Buslogic/Mylex MultiMaster SCSI adapters

#device     ncv     # NCR 53C500
#device     nsp     # Workbit Ninja SCSI-3
#device     stg     # TMC 18C30/18C50
#device     isci        # Intel C600 SAS controller

# 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

# RAID controllers interfaced to the SCSI subsystem
#device     amr     # AMI MegaRAID
#device     arcmsr      # Areca SATA II RAID
#device     asr     # DPT SmartRAID V, VI and Adaptec SCSI RAID
#device     ciss        # Compaq Smart RAID 5*
#device     dpt     # DPT Smartcache III, IV - See NOTES for options
#device     hptmv       # Highpoint RocketRAID 182x
#device     hptrr       # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx
#device     hpt27xx     # Highpoint RocketRAID 27xx
#device     iir     # Intel Integrated RAID
#device     ips     # IBM (Adaptec) ServeRAID
#device     mly     # Mylex AcceleRAID/eXtremeRAID
#device     twa     # 3ware 9000 series PATA/SATA RAID
#device     tws     # LSI 3ware 9750 SATA+SAS 6Gb/s RAID controller

# RAID controllers
#device     aac     # Adaptec FSA RAID
#device     aacp        # SCSI passthrough for aac (requires CAM)
#device     ida     # Compaq Smart RAID
#device     mfi     # LSI MegaRAID SAS
#device     mlx     # Mylex DAC960 family
#device     pst     # Promise Supertrak SX6000
#device     twe     # 3ware ATA RAID

# 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

device      agp     # support several AGP chipsets

# Power management support (see NOTES for more options)
#device     apm
# Add suspend/resume support for the i8254.
device      pmtimer

# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
device      cbb     # cardbus (yenta) bridge
device      pccard      # PC Card (16-bit) bus
device      cardbus     # CardBus (32-bit) bus

# 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     vpo     # Requires scbus and da

#device     puc     # Multi I/O cards and multi-channel UARTs

# PCI Ethernet NICs.
#device     bxe     # Broadcom BCM57710/BCM57711/BCM57711E 10Gb Ethernet
#device     de      # DEC/Intel DC21x4x (``Tulip'')
device      em      # Intel PRO/1000 Gigabit Ethernet Family
#device     igb     # Intel PRO/1000 PCIE Server Gigabit Family
#device     ixgb        # Intel PRO/10GbE Ethernet Card
#device     le      # AMD Am7900 LANCE and Am79C9xx PCnet
#device     ti      # Alteon Networks Tigon I/II gigabit Ethernet
#device     txp     # 3Com 3cR990 (``Typhoon'')
#device     vx      # 3Com 3c590, 3c595 (``Vortex'')

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device      miibus      # MII bus support
#device     ae      # Attansic/Atheros L2 FastEthernet
#device     age     # Attansic/Atheros L1 Gigabit Ethernet
#device     alc     # Atheros AR8131/AR8132 Ethernet
#device     ale     # Atheros AR8121/AR8113/AR8114 Ethernet
#device     bce     # Broadcom BCM5706/BCM5708 Gigabit Ethernet
#device     bfe     # Broadcom BCM440x 10/100 Ethernet
#device     bge     # Broadcom BCM570xx Gigabit Ethernet
#device     cas     # Sun Cassini/Cassini+ and NS DP83065 Saturn
#device     dc      # DEC/Intel 21143 and various workalikes
#device     et      # Agere ET1310 10/100/Gigabit Ethernet
#device     fxp     # Intel EtherExpress PRO/100B (82557, 82558)
#device     gem     # Sun GEM/Sun ERI/Apple GMAC
#device     hme     # Sun HME (Happy Meal Ethernet)
#device     jme     # JMicron JMC250 Gigabit/JMC260 Fast Ethernet
#device     lge     # Level 1 LXT1001 gigabit Ethernet
#device     msk     # Marvell/SysKonnect Yukon II Gigabit Ethernet
#device     nfe     # nVidia nForce MCP on-board Ethernet
#device     nge     # NatSemi DP83820 gigabit Ethernet
#device     nve     # nVidia nForce MCP on-board Ethernet Networking
#device     pcn     # AMD Am79C97x PCI 10/100 (precedence over 'le')
#device     re      # RealTek 8139C+/8169/8169S/8110S
#device     rl      # RealTek 8129/8139
#device     sf      # Adaptec AIC-6915 (``Starfire'')
#device     sge     # Silicon Integrated Systems SiS190/191
#device     sis     # Silicon Integrated Systems SiS 900/SiS 7016
#device     sk      # SysKonnect SK-984x & SK-982x gigabit Ethernet
#device     ste     # Sundance ST201 (D-Link DFE-550TX)
#device     stge        # Sundance/Tamarack TC9021 gigabit Ethernet
#device     tl      # Texas Instruments ThunderLAN
#device     tx      # SMC EtherPower II (83c170 ``EPIC'')
#device     vge     # VIA VT612x gigabit Ethernet
#device     vr      # VIA Rhine, Rhine II
#device     vte     # DM&P Vortex86 RDC R6040 Fast Ethernet
#device     wb      # Winbond W89C840F
#device     xl      # 3Com 3c90x (``Boomerang'', ``Cyclone'')

# ISA Ethernet NICs.  pccard NICs included.
#device     cs      # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
#device     ed      # NE[12]000, SMC Ultra, 3c503, DS8390 cards
#device     ex      # Intel EtherExpress Pro/10 and Pro/10+
#device     ep      # Etherlink III based cards
#device     fe      # Fujitsu MB8696x based cards
#device     ie      # EtherExpress 8/16, 3C507, StarLAN 10 etc.
#device     sn      # SMC's 9000 series of Ethernet chips
#device     xe      # Xircom pccard Ethernet

# Wireless NIC cards
#device     wlan        # 802.11 support
#options    IEEE80211_DEBUG # enable debug msgs
#options    IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's
#options    IEEE80211_SUPPORT_MESH  # enable 802.11s draft support
#device     wlan_wep    # 802.11 WEP support
#device     wlan_ccmp   # 802.11 CCMP support
#device     wlan_tkip   # 802.11 TKIP support
#device     wlan_amrr   # AMRR transmit rate control algorithm
#device     an      # Aironet 4500/4800 802.11 wireless NICs.
#device     ath     # Atheros NICs
#device     ath_pci     # Atheros pci/cardbus glue
#device     ath_hal     # pci/cardbus chip support
#options    AH_SUPPORT_AR5416   # enable AR5416 tx/rx descriptors
#device     ath_rate_sample # SampleRate tx rate control for ath
#device     bwi     # Broadcom BCM430x/BCM431x wireless NICs.
#device     bwn     # Broadcom BCM43xx wireless NICs.
#device     ipw     # Intel 2100 wireless NICs.
#device     iwi     # Intel 2200BG/2225BG/2915ABG wireless NICs.
#device     iwn     # Intel 4965/1000/5000/6000 wireless NICs.
#device     malo        # Marvell Libertas wireless NICs.
#device     mwl     # Marvell 88W8363 802.11n wireless NICs.
#device     ral     # Ralink Technology RT2500 wireless NICs.
#device     wi      # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device     wl      # Older non 802.11 Wavelan wireless NIC.
#device     wpi     # Intel 3945ABG wireless NICs.

# Pseudo devices.
device      loop        # Network loopback
device      random      # Entropy device
#options    PADLOCK_RNG # VIA Padlock RNG
#options    RDRAND_RNG  # Intel Bull Mountain RNG
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     udbp        # USB Double Bulk Pipe devices (needs netgraph)
#device     uhid        # "Human Interface Devices"
#device     ukbd        # Keyboard
#device     ulpt        # Printer
device      umass       # Disks/Mass storage - Requires scbus and da
#device     ums     # Mouse
#device     urio        # Diamond Rio 500 MP3 player
# USB Serial devices
#device     u3g     # USB-based 3G modems (Option, Huawei, Sierra)
#device     uark        # Technologies ARK3116 based serial adapters
#device     ubsa        # Belkin F5U103 and compatible serial adapters
#device     uftdi       # For FTDI usb serial adapters
#device     uipaq       # Some WinCE based devices
#device     uplcom      # Prolific PL-2303 serial adapters
#device     uslcom      # SI Labs CP2101/CP2102 serial adapters
#device     uvisor      # Visor and Palm devices
#device     uvscom      # USB serial support for DDI pocket's PHS
# USB Ethernet, requires miibus
#device     aue     # ADMtek USB Ethernet
#device     axe     # ASIX Electronics USB Ethernet
#device     cdce        # Generic USB over Ethernet
#device     cue     # CATC USB Ethernet
#device     kue     # Kawasaki LSI USB Ethernet
#device     rue     # RealTek RTL8150 USB Ethernet
#device     udav        # Davicom DM9601E USB
# USB Wireless
#device     rum     # Ralink Technology RT2501USB wireless NICs
#device     run     # Ralink Technology RT2700/RT2800/RT3000 NICs.
#device     uath        # Atheros AR5523 wireless NICs
#device     upgt        # Conexant/Intersil PrismGT wireless NICs.
#device     ural        # Ralink Technology RT2500USB wireless NICs
#device     urtw        # Realtek RTL8187B/L wireless NICs
#device     zyd     # ZyDAS zd1211/zd1211b wireless NICs

# Sound support
#device     sound       # Generic sound driver (required)
#device     snd_cmi     # CMedia CMI8338/CMI8738
#device     snd_csa     # Crystal Semiconductor CS461x/428x
#device     snd_emu10kx # Creative SoundBlaster Live! and Audigy
#device     snd_es137x  # Ensoniq AudioPCI ES137x
#device     snd_hda     # Intel High Definition Audio
#device     snd_ich     # Intel, NVidia and other ICH AC'97 Audio
#device     snd_uaudio  # USB Audio
#device     snd_via8233 # VIA VT8233x Audio

# VirtIO support
#device     virtio      # Generic VirtIO bus (required)
#device     virtio_pci  # VirtIO PCI Interface
#device     vtnet       # VirtIO Ethernet device
#device     virtio_blk  # VirtIO Block device
#device     virtio_scsi # VirtIO SCSI device
#device     virtio_balloon  # VirtIO Memory Balloon device

/boot/loader.conf 配置

有些硬件的驱动没有写入内核文件,而是通过模块引导,像无线网卡、蓝牙、SD卡等。X61的无线网卡是iwn,X200的无线网卡是ath,用户根据机器的具体情况改写下面的 /boot/loader.conf 配置。

#boot_verbose="-v"        # provide more dmesg information
autoboot_delay="1"        # Set wait time to 1 second
loader_logo="beastie"     # The color logo of FreeBSD
cuse4bsd_load="YES"

############################
## Load necessary modules ##
############################
cpuctl_load="YES"         # CPU Throttling 
coretemp_load="YES"       # Thermal Monitoring
#linprocfs_load="YES"      # Linux proc
#linsysfs_load="YES"       # Linux sysfs
acpi_ibm_load="YES"       # acpi for IBM ThinkPad
acpi_video_load="YES"     # ACPI Video Extensions driver
snd_hda_load="YES"        # sound card, comment out if in kernel
speaker_load="YES"        # console speaker device driver

#####################
### Bluetooth USB ###
#####################
#ubtbcmfw_load="YES       # Firmware loader for Broadcom Bluetooth 
#ng_ubt_load="YES"        # Bluetooth driver

################
### Wireless ###
################
wlan_scan_ap_load="YES"   # Wireless 
wlan_scan_sta_load="YES"  # Wireless 
if_ath_load="YES"         # Internal LAN module
if_ath_pci_load="YES"     # For Thinkpad X61
wlan_wep_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"

####################
## SD card reader ##
####################
#sdhci_load="YES"
#mmcsd_load="YES"
#mmc_load="YES"

##########################
### End of loader.conf ###
##########################

有关声卡的一点小注记

在 /boot/device.hints 里添加

# snd_hda
hint.pcm.0.vol="85"
hint.hdac.0.cad0.nid26.config="as=1"
hint.hdac.0.cad0.nid22.config="as=1 seq=15"
hint.hdac.0.cad0.nid29.config="as=2"
hint.hdac.0.cad0.nid24.config="as=3"

后记

Thinkpad T42(CPU: Intel(R) Pentium(R) M processor 1.70GHz,内存 1G)是我的 workhorse,它是 IBM Thinkpad 被 Lenovo 收购前最后一批机器,我是 2005 年买的,一直用到2011年底才换掉。除了光驱和电池(只能坚持15分钟了)之外,一切都牛X如初。“好马配好鞍”,FreeBSD + T42 非常地争气,它们从来没让我失望过。有人把机器和 OS 看作玩具,有人把它们看作事业,而它们对于我就是养家糊口的工具(有点世俗……),我不知该用什么形容。

题外话:鸡肋是“食之无味,弃之可惜”,光驱连鸡肋都不如。在北美、欧洲,由于对媒体版权的保护,光驱还在残喘,一旦网络媒体发行发生革命,光驱就会被历史淘汰。平时,我几乎不用光驱。考虑到FreeBSD对硬件的支持的滞后性,以及USB安装已经成为FreeBSD的主流安装方式,我建议大家买不带光驱的二手笔记本电脑。当然,事先必须上网调查一下FreeBSD对该款电脑的硬件支持是否好,否则买了后悔。

原文链接:https://wiki.freebsdchina.org/doc/k/kernel