Linux初级运维(十七)——Linux内核编译与系统裁减

一、内核模块

        核心:/boot/vmlinuz-version

        内核模块(ko):/lib/modules/version/

        内核设计:

            单内核

                    模块化设计

            微内核

        装载模块:

            insmod

            modprobe

    1、用户空间访问、监控内核的方式

        /proc   , /sys

         伪文件系统

        /proc/sys: 此目录中的文件很多都是可读写的。

        /sys/: 某些文件是可写


        设定内核参数值的方法:

        echo VALUE > /proc/sys/TO/SOMEFILE

        sysctl -w  kernel.hostname=

        能立即生效,但不能永久有效

        永久有效: /etc/sysctl.conf

        修改文件完成之后,执行如下命令可立即生效:

        sysctl -p

        sysctl-a :显示所有内核参数及其值

    2、内核模块管理

           lsmod:查看

            modprode MOD_NAME :装载某模块

            modprode -r MOD_NAME :卸载某模块

            modinfo MOD_NAME :查看模块的具体信息

            insmod /PATH/TO/MODULE_FILE:装载模块

            rmmod MOD_NAME 

            depmod /PATH/TO/MODILES_DIR

    3、内核功能

        内核中的功能除了核心功能之外,在编译时,大多功能都有三种选择:

        (1)不使用此功能; (2)编译成内核模块;(3)、编译进内核;

    4、如何手动编译内核:

        make gconfig: Gnome桌面环境使用,需要安装图形开发库组:GNOME Software Devel Development

        make Kconfig:KDE桌面环境使用,需要安装图形开发库

        make menuconfig:

        make

        make modules_install

        make install

二、系统启动流程

    POST-->BIOS(Boot Sequence)-->BootLoader(MBR)-->Kernel

        /etc/inittab:

            设定默认运行级别

            系统初始化(/etc/rc.d/rc/sysinit)

            运行指定级别的服务脚本

                /etc/rc.d/init.d/

                    /etc/rc.d/rc#.d

                        rc0.d--rc6.d

                            K*

                            S*

                                   00-99:运行次序

                启动虚拟终端

                启动图形终端

    /etc/rc.d/rc.sysinit:

        检测并以读写方式重新挂载根文件系统;

        设定主机名;

        检测并挂载/etc/fstab中的其他文件系统;

        启动swap分区;

        初始化外围硬件设备的驱动;

        根据/etc/sysctl.conf设定内核参数;

        激活udev和selinux;        

        激活LVM和RAID设备;

        清理过期锁和PID文件;

        装载键映射;

        

    内核初始化:

        硬件探测

        装载驱动

        挂载根文件系统

        启动用户空间中的第一个进程init

三、内核编译

    busybox:

    Kernel+ROOTFS()

    kernel+initrd(ramdisk)

    kernel+

    busybox-->initrd

    kernel+initrd(busybox)-->rootfs(busybox)

    kenrel

    RHEL5.8+busybox(initd)+rootfs(busybox)

    1、查看本地硬件设备信息

        cat /proc/cpuinfo      查看CPU信息

        lsusb     查看usb信息

        lspci      查看pci信息

        hal-device:  hardware abstract layer

    2、编译内核:

        (1)、配置

            make menuconfig

            make gconfig

            make kconfig

            make oldconfig

            make config

        保存为 .config

        make 

        make modules_install

        make install

        模块安装位置: /lib/modules/VERSION/

    3、如何实现部分编译:

        (1)、只编译某子目录下的相关代码;

          make dir/

           make arch/

          make drivers/net/

        (2)只编译部分模块

        make M=drivers/net/

        (3)只编译某一模块

        make drivers/net/pcnet32.ko

        (4)将编译完成的结果放置于别的目录中

        make o=/tmp/kernel

四、编译系统

        kernel+initrd(busybox制作,提供ext3文件系统模块)+ROOTFS(busybox制作)

    

        make arch/

            arch/x86/boot/bzImage

            硬件驱动:initrd

                initrd:仅需要提供内核访问真正的根文件系统所在设备需要的驱动

                        存储设备和文件系统相关的模块

                系统初始化rc.sysinit:初始其他硬件的驱动程序;

            ROOTFS:busybox,init不支持运行级别

                    /etc/inittab:格式也不尽相同

                ash,hush

                bash

  

        

            

        

    

        

        


        


    


    

            

        

        




            

猜你喜欢

转载自blog.51cto.com/5001660/2344434