Sam's Notes | Sam Blog

梦想还是要有的,万一实现了呢

0%

1-19~20 源码编译Linux内核, Linux内核模块操作

主要内容

源码编译Linux内核

源码编译的执行步骤:

确认编译软件的基本条件

  • 增加独立分区
    fdisk, mkfs.xfs, mkdir, mount
  • 确认开发工具和库工具
    1
    [root@localhost ~]# rpm -qa | grep make #类似可以检查 gcc 等

下载相应的内核源码包

以下开始所有操作都在新分区下操作(本实验环境是/sdb1)

1
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.3.3.tar.xz

linux-4.3.3.tar.xz 看实际情况。

解压内核源码包

1
2
3
4
[root@localhost sdb1]#xz -d linux-4.3.3.tar.xz
[root@localhost sdb1]#tar -xf linux-4.3.3.tar
[root@localhost sdb1]#du -sh linux-4.3.3 #查看总的源代码为694M
694M linux-4.3.3

配置内核编译参数

保险起见,可以在现有系统的config基础上做修改

1
2
[root@localhost linux-4.3.3]#cp /boot/config-3.10.0-229.el7.x86_64 /sdb1/linux-4.3.3/.config # 现有系统的config
[root@localhost linux-4.3.3]# make menuconfig #通过一个图形界面,来配置内核的参数

扩展:可以在首页上输入 \ ,出现检索页面。


编译内核

1
2
3
[root@localhost linux-4.3.3]#make bzImage -j n #生成内核 ,此内核是经过压缩的内核.这里需要一段时间,取决于你的系统性能。

[root@localhost linux-4.3.3]# make modules -j n 生成新内核的驱动模块

n为 电脑CPU核心数-2 左右合适

安装编译好的内核与模块

1
2
3
[root@localhost linux-4.3.3]#make modules_install #安装模块, 就是把编译好的modules拷贝到/lib/modules/相应的内核目录里面 

[root@localhost linux-4.3.3]#make install #安装新编译的系统内核

查看或修改GRUB菜单

1
[root@localhost ~]# vim /boot/grub2/grub.cfg
  • 设置系统启动时默认的等待时间

  • 配置好的系统内核

  • 配置默认启动的内核方法

    1
    2
    3
    4
    5
    [root@localhost ~]# vim /etc/default/grub
    #设置默认启动项,按menuentry顺序。比如要默认从第四个菜单项启动,数字改为3,若#改为 saved,#则默认为上次启动项。
    GRUB_DEFAULT=saved

    [root@localhost ~]#grub2-mkconfig #重新生成内核参数
  • 使用新内核启动系统后,查看内核版本:

    1
    [root@localhost ~]# uname –r

Linux内核模块操作

模块的作用:把具体功能封装好的程序。存放内核模块的目路径: /lib/modules/版本/kernel

插入模块

模块也有依赖关系,一般使用 modprobe 来安装模块; 如确定无依赖关系,可以用 insmod 命令安装。新添加一个模块后,需要 depmod 通知系统 。

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost fat]# cd /lib/modules/4.2.4/kernel/fs/fat

#依赖安装
[root@localhost fat]# modprobe vfat
[root@localhost fat]# lsmod |grep fat
vfat 20480 0
fat 69632 1 vfat

#非依赖安装
[root@localhost fat]#insmod fat.ko

#安装后通知系统
[root@localhost 4.2.4]# depmod

查看当前系统中加载的模块 lsmod

1
2
[root@localhost fat]#lsmod  | grep fat
fat 69632 0

查看模块信息 modinfo

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost fat]#modinfo vfat
filename: /lib/modules/4.2.4/kernel/fs/fat/vfat.ko
author: Gordon Chaffee
description: VFAT filesystem support
license: GPL
alias: fs-vfat
srcversion: BEF7BA1F8972367DD650AA0
depends: fat
intree: Y
vermagic: 4.2.4 SMP mod_unload modversions
signer: Build time autogenerated kernel key
sig_key: D3:5F:6B:F2:8E:BB:94:CD:66:3F:5C:D7:C6:F5:17:68:E9:30:25:B7
sig_hashalgo: sha256

删除模块 modprobe rmmod

1
2
3
[root@localhost fat]# rmmod fat

[root@localhost fat]# modprobe -r vfat

开机自动加载模块

可以在/etc/rc.local执行命令加载模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]# vim/etc/rc.local

#!/bin/bash
# THIS FILE IS ADDEDFOR COMPATIBILITY PURPOSES
#
# It is highlyadvisable to create own systemd services or udev rules
# to run scripts duringboot instead of using this file.
#
# In contrast to previousversions due to parallel execution during boot
# this script will NOTbe run after all other services.
#
# Please note that youmust run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script willbe executed during boot.

touch /var/lock/subsys/local
modprobe fat #开机自动加载fat模块