自编译内核
大多数发行版都有默认的编译好的内核,并且这种内核模块较全,通用性还是很高的。 这些发行版内核往往会比Linux内核主线慢上一些(例如Debian稳定分支)。 需要用一些特别新的内核API依赖或者内核裁剪爱好者才会自己编译内核。 但是Gentoo作为一个全编译的发行版,并不提供二进制内核。
学习内核编译对理解Linux内核工作方式还是很有帮助的。
选择Kernel分支
一般不推荐Kernel的主线分支,它往往不够稳定。 我使用了Gentoo推荐的gentoo-sources的稳定版本。
另一个选项是带有pax补丁的hardened-sources硬化内核。 但是由于pax开发者闭源了该项目,gentoo已经停止支持了。 但是仍然有爱好者对Kernel主线进行pax移植。
配置内核
make menuconfig
通过该命令进入控制台菜单对内核进行配置。
主要可以参考金步国先生的内核配置文档翻译和文末的配置。
http://www.jinbuguo.com/kernel/longterm-linux-kernel-options.html
编译内核
make mrproper # 清理编译文件
make vmlinux modules # 编译内核镜像
make install modules_install # 安装内核
注意安装内核前要挂载好/boot
分区。
使用genkernel工具
genkernel可以快速编译安装内核和内核初始系统。
使用前可修改配置文件/etc/genkernel.conf
。
OLDCONFIG="yes" # 加载旧内配置文件
MENUCONFIG="yes" # 编译前手动修改
CLEAN="no" # 关闭自动清理,可以加快二次编译速度
MRPROPER="no"
SAVE_CONFIG="yes" # 开启自动备份
LVM="yes" # 开启内核lvm支持
LUKS="yes" # 开启内核Luks加密支持
之后genkernel
将自动加载配置
genkernel --kernel-config=<config.file> --install all
启动内核
现在主流的主板都支持EFI启动模式。
在这种模式下Linux一般通过grub
或者内核直接启动。
但是内核直接启动需要将内核启动参数直接编译进内核,所以一般还是以grub
为主。
由于需要内核支持lvm和luks,所以修改grub配置文件/etc/default/grub
GRUB_CMDLINE_LINUX="crypt_root=UUID=xxxx dolvm" # 指定加密跟分区id和启动lvm
grub-mkconfig -o /boot/grub/grub.cfg # 编译配置文件
grub-install --bootloader-id=gentoo --efi-directory /boot/grub/grub.cfg
# 安装efi启动镜像
需要注意的是EFI模式需要ESP启动分区,基于fat16/32格式。常挂载在/boot/efi
。
内核选项
-
Processor type and features
- MTRR support
- intel显卡依赖
- MTRR support
-
Power management and ACPI options
- 电源管理
- Run-time PM core functionality (Remove)
- 运行时电源管理接口
- Device power management core functionality
- USB电源管理集成在此
- ACPI (Advanced Configuration and Power Interface) Support
- Processor
- 处理器ACPI支持
- CPU Frequency scaling
- CPU频率调整
- Processor
-
Networking suuport
- 内核网络支持,基本只需要下列两项
- Networking options
- Packet socket
- 用于包管理、捕获工具
- Packet: sockets monitoring interface
- 监控用
- Unix domain sockets
- Unix套接字工具,系统需要,必选
- UNIX: socket monitoring interface
- 监控用
- TCP/IP networking
- 基本的TCP/IP网络支持,网络必选
- IP: multicasting
- 多播支持,基本无用。不选
- IP: advanced router
- 高级路由,可选
- IP: policy routing
- 路由策略
- IP: equal cost multipath
- 均衡负载
- IP: verbose route monitoring
- IP: policy routing
- 高级路由,可选
- IP: tunneling
- IP隧道支持
- IP: TCP syncookie support
- 用于对抗syn DoS
- INET: socket monitoring interface
- socket监控
- UDP: socket monitoring interface
- UDP监控
- TCP: advanced congesting control
- 高级拥塞控制
- The IPv6 protocol
- Network packet filtering framework (Netfilter)
- 包过滤框架,防火墙需要
- NETLINK: socket monitoring interface
- 包监控
- Packet socket
- Wireless
- Networking options
- 内核网络支持,基本只需要下列两项
-
Device Drivers
- Block devices
- Loopback device support
- docker依赖此项
- Loopback device support
- SCSI device support
- SCSI disk support
- USB硬盘依赖此项
- SCSI disk support
- Input device support
- Event interface
- libinput,鼠标依赖此项
- Mice
- PS/2 mouse
- 鼠标支持
- Elantech PS/2 protocol extension
- Elan鼠标协议扩展,部分触摸板依赖此项
- PS/2 mouse
- Event interface
- Graphics support
- /dev/agpgart
- intel必须开启子选项
- Direct Rendering Manager
- Enable legacy fbdev support for you modesetting driver
- 控制台显示需要
- Enable legacy fbdev support for you modesetting driver
- Nouveau (NVIDIA) cards
- 开源NVIDIA驱动,性能很差
- Intel 8xx/9xx/G3x/G4x/HD Graphics
- Intel集成显卡驱动
- Frame buffer Devices
- Support for frame buffer devices
- Nvidia、OpenGL常用,必须的
- EFI-based Framebuffer Support
- Nvidia可能使用
- Support for frame buffer devices
- /dev/agpgart
- Sound card support
- Advanced Linux Sound Architecture
- HD-Audio
- HD Audio PCI
- 即Intel CPU集成声卡
- HD Audio PCI
- Pre-allocated buffer size for HD-audio driver
- 推荐PulseAudio设置为2048
- USB sound devices
- USB Audio/MIDI driver
- USB 耳机
- USB Audio/MIDI driver
- HD-Audio
- Advanced Linux Sound Architecture
- USB support
- Support for Host-side USB
- 模块核心
- USB runtime power management (autosuspend) and wakeup (Remove in 3.10)
- USB 运行时电源管理
- PCI based USB host interface
- 必须
- Enable USB persist by default
- 持久化USB
- USB Monitor
- 似乎用于USB监控,wireshark啥的
- xHCI HCD support (USB3.0)
- EHCI HCD support (USB2.0)
- USB Mass Storage support
- usb存储设备
- Support for Host-side USB
- HID support
- 人机接口,鼠标键盘啥的
- Generic HID driver
- USB HID support
- USB HID transport layer
- Block devices
-
Kernel hacking
- Filter access to /dev/mem
- 禁止用户空间读写/dev/mem
- Filter access to /dev/mem