Linux 之内核详解及编译

内核编译原理详解:

单内核体系的设计,但充分的借鉴了微内核设计体系的优点,为内核引入模块化机制

内核的组成部分:

    kernel : 内核核心,一般为 bzImage ,通常在 /boot 目录下,名称为 vmlinuz-VERSION-RELEASE;

    kernel object : 内核对象,一般放置于 /lib/modules/VERSION-RELEASE/ 目录下

                    [] :N      #没有选中

                    [M] : M    #模块化,不放到内核里

                    [*] : Y    #直接打到核心了

    辅助文件 :

                   ramdisk

                    initrd

                    initramfs

运行中的内核:

    uname 命令:

        uname [options]...

            -n :显示节点名称

            -r :显示VERSION-RELEASE;

            -a :显示所有信息

lsmod 命令:

    显示由核心已经装载的内核模块

    显示的内容来自于: /proc/modules 文件

modinfo 命令:

    显示模块的详细描述信息

    modinfo [-k kernel] [modulename | filename ...]

        -n : 只显示模块文件路径

        -p : 显示模块参数

        -a : author

        -d : description

        -l : license

lsmod|grep xfs
modinfo xfs

modprobe 命令:装载或卸载内核模块

modprobe [ -C config-file ] [modulename] [module parame-ters...]

    配置文件: /etc/modprobe.conf  ;  /etc/modprobe.d/*.conf

modprobe [-r] modulename    卸载内核

depmod 命令:

    内核模块依赖关系文件及系统信息映射文件的生成工具

装载或卸载内核模块

insmod 命令: 指定模块文件,不自动解决依赖模块

insmod [filename] [module options...]

insmod `modinfo -n exportfs`

insmod `modinfo -n xfs`

rmmod 命令 :卸载模块

rmmod [modulename]

rmmod xfs

/proc 目录:

    内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出

    参数 : 只读 :输出信息

        可写 : 可接受用户指定'新值'来实现对内核某功能或特性的配置

/proc/sys

(1) sysctl 命令用于查看或设定此目录中诸多参数

sysctl -w path.to.parameter=VALUE

sysctl -w kernel.hostname=nineven.com

(2) echo 命令通过重定向方式也可以修改大多参数的值

echo "VALUE" > /proc/sys/path/to/parameter

echo "websrv" > /proc/sys/kernel/hostname

sysctl 命令:

    默认配置文件: /etc/sysctl.conf

    (1) 设置某参数

sysctl -w parameter=VALUE

    (2) 通过读取配置文件设置参数

sysctl -p [/path/to/conf_file]

内核中的路由转发:

/proc/sys/net/ipv4/ip_forward

常用的几个参数:

net.ipv4.ip_forward 

net.ipv4.icmp_echo_ignore_all 

    

vm.drop_caches #清空缓存

    

若果想永久生效,需要改配置文件 

/etc/systclt.conf #修改并保存配置文件

systctl -p  #重新读取配置文件,使之生效

/sys 目录:

    sysfs : 为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息,有些参数是可以修改的,用于调整硬件工作特性

    udev : 通过此路径下输出的信息动态为各设备创建所需要设备文件,udev 是运行用户空间程序

    专用工具 : udevadmin  hotplug

    udev 为设备创建设备文件时,会读取其事先定义好的规则文件,一般在 /etc/udev/rules.d 及 /usr/lib/udev/rules.d 目录下

ramdisk 文件的制作:

    (1) mkinitrd 命令

        为当前正在使用的内核重新制作 ramdisk 文件

mkinitrd /root/initramfs-`uname -r`.img `uname -r`

    (2) dracut 命令

        为当前正在使用的内核重新制作 ramdisk 文件

dracut /boot/initramfs-$(uname -r).img $(uname -r)

编译内核操作 :

前提:

    (1) : 准备好开发环境

    (2) : 获取目标主机上硬件设备的相关信息

    (3) : 获取目标主机系统功能的相关信息 

        例如 : 需要启用相应的文件系统

    (4) : 获取内核源代码包

        www.kernel.org

开发包组(CentOS 6):

    Service Platform Development

    Development Tools

目标主机硬件设备相关信息:

    CPU :

cat /proc/cpuinfo

lscpu

    PCI :

lspci [-v|-vv]

lsusb [-v|-vv]

lsblk 块设备

了解全部硬件设备信息

hal-device

内核编译安装系统:

  1. 安装开发包组

  2. 下载源码

  3. .config :准备文本配置文件

  4. make menuconfig :配置内核选项

  5. make [-j #]

  6. make modules_install :安装模块

  7. make install :安装内核相关文件

    1. 安装 bzImage 为 /boot/vmlinuz-VERSION-RELEASE

    2. 生成initramfs文件

    3. 编辑grub的配置文件



编译安装内核的实例:

tar xf linux-3.10.67.tar.xz -C /usr/src 

cd /usr/src 

ln -sv linux-3.10.67 linux 

cd /usr/src/linux 

cp /boot/config-$(uname -r)   ./.config 

make help 

make menuconfig 

make -j 2

make modules_install 

make install 

reboot 

若中途出现错误,一定要及时解决,否则可能导致编译失败

操作详解:

(1)配置内核选项    

    支持"更新"模式进行配置:make help

        (a) make config : 基于命令行以遍历的方式去配置内核中可配置的每个选项

        (b) make menuconfig : 基于cruse的文本窗口界面

        (c) make gconfig : 基于GTK(GNOME)环境窗口界面

        (d) make xconfig : 基于QT(KDE)环境的窗口界面

    支持"全新配置"模式进行配置:  

        (a) make defconfig : 基于内核为目标平台提供的"默认"配置进行配置

        (b) make allyesconfig : 所有选项均回答为"yes"

        (c) make allnoconfig : 所有选项均回答为"no"

(2)编译

    全编译: make [-j #] :#指cpu核心数

    编译内核的一部分功能:

        (a) 只编译某子目录中的相关代码:

            cd /usr/src/linux

            make dir/

        (b) 只编译一个特定的模块

            cd /usr/src/linux

            make dir/file.ko

            例如:只为e1000编译驱动

                # drivers/net/ethernet/intel/e1000/e1000.ko

如何交叉编译内核:

    编译的目标平台与当前平台不相同 : make ARCH=arch_name

获取特定目标平台的使用帮助:

    make ARCH=arch_name help

    make ARCH=arm help

如何重新编译内核:

    在已经执行过的编译操作的内核源码重新编译需要事先执行清理操作

        make clean : 清理大多数编译生成的文件,但会保留config文件等

        make mrproper : 清理所有编译生成的文件,config及某些备份文件

        make distclean : mrproper,patches以及编辑器备份文件



        

首先,先去官网下载一个内核,官网 The Linux Kernel Archives

我直接下载的是最新版的,下载链接如下 

https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.7.3.tar.xz

(1)先安装开发包组 Development tools

参数自己可以修改,安装自己的需求,我新增了支持ntfs功能

存储空间还可以,至少预留10G的空间,因为编译会生成好多临时文件

报错了,解决

恩,正在编译中,发现cpu快要爆了

 

竟然消耗了8.2G的存储空间,太占空间了

进入系统查看

查看新增加的功能是否支持ntfs

恩,已经成功实现该功能

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值