关于内核的一些配置
- 更新:2019-01-23,增加“单独编译某个模块并加载使用”。
单独编译某个模块并加载使用
比如我想编译r8822be模块(网卡驱动),你需要先找到它的位置:
cd /usr/src/linux
grep -rin "r8822be*" | grep Makefile进入目录并编译模块:
cd /usr/src/linux/drivers/staging/rtlwifi
make CONFIG_R8822BE=m -C /lib/modules/`uname -r`/build/ M=$PWD modules在当前系统中加载模块:
mkdir /lib/modules/`uname -r`/kernel/net/r8822be -p
cp r8822be.{mod.o,ko} /lib/modules/`uname -r`/kernel/net/r8822be -v
depmod
modprobe r8822be不使用initramfs启动系统
进入目录并打开配置界面:
cd /usr/src/linux
make menuconfig
进入 General Setup关掉Initial RAM filesystem and RAM disk (initramfs/initrd) support
如果你的fstab用的是UUID,则建议先改成/dev/sdX的格式
把你所有的modules编译进内核即built-in状态
然后开始编译吧
这里我就不说GRUB相关的配置了,因为我没有尝试过,具体请看这里
用的是接下来要说的efibootmgr启动系统
使用efibootmgr启动系统
进入目录并打开配置界面:
cd /usr/src/linux
make menuconfig
你要确保已启用所有必须的efi相关选项
进入 Processor type and features 搜索 Built-in kernel command line 并启用
然后会出现 Built-in kernel command string
填入 root=/dev/sda2或者root=PARTUUID=xxxx
sda2换成你实际的根目录所在分区或通过blkid查看根分区的PARTUUID
然后开始编译吧
首先确保efibootmgr已安装:
emerge -av efibootmgr
创建目录(可选):
mkdir -p /boot/efi/boot
将你的内核复制到对应目录(或者直接复制到boot):
cp /boot/vmlinuz-* /boot/efi/boot/bootx64.efi
查看是否已挂载efivars:
mount | grep efivars
重新挂载efivars为可读写:
mount -o remount,rw -t efivarfs efivarfs /sys/firmware/efi/efivars
这里说下efibootmgr的参数:
--create (-c) 创建新的启动项
--part (-p) efi分区的的序号,假设是/dev/sda2 则值为2
--disk (-d) efi分区所在的磁盘,例如/dev/sda
--label (-L) 启动项的名称
--loader (-l) 可启动的efi文件所在处(efibootmgr路径用的是\不是/)
示例添加启动项:
efibootmgr --create --disk /dev/sda --part 2 --label "Gentoo" --loader "\efi\boot\bootx64.efi"
这里也简单说下删除启动项的参数:
--bootnum (-b) 启动项的识别号(通过efibootmgr -v查看,例如Boot0001则值为1)
--delete-bootnum (-B) 进行删除
删除示例:
efibootmgr -b 2 -B
将Intel-ucode编译进内核
进入目录并打开配置:
cd /usr/src/linux
make menuconfig
确保在Processor type and features里已选上CPU microcode loading support和你对应的CPU microcode loading support例如Intel CPU选中Intel microcode loading support
然后进入Device Drivers ---> Generic Driver Options启用Include in-kernel firmware blobs in kernel binary
Firmware blobs root directory填入: /lib/firmware/
另开终端安装源文件(注意查看这里的输出):
emerge -av sys-firmware/intel-microcode
查看你的microcode:
dmesg | grep microcode
查看sig值,例如sig=0x306c3
然后查看intel-ucode文件:
ls /lib/firmware/intel-ucode
你就会找到与sig值对应的06-3c-03(前面安装时会输出对应的microcode)
最后按/搜索EXTRA_FIRMWARE并在此选项中填入:
intel-ucode/06-3c-03
如果在编译时无报错就OK了
更新内核重启之后运行dmesg | grep microcode应该看到类似如下的输出:
[ 0.000000] microcode: microcode updated early to revision 0x22, date = 2017-01-27
[ 0.579838] microcode: sig=0x306c3, pf=0x20, revision=0x22
[ 0.579948] microcode: Microcode Update Driver: v2.2.