Linux内核

内核

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

内核组成部分:
    kernel:内核核心,一般为bzimage,通常在/boot目录下,名称为vmlinuz
    kernel object:内核对象一般有三种选择,一般放置于/lib/modules/VERSION-RELEASE/
        [ ]:N 不选择
        [ ]:M 选择编译为模块
        [ ]:Y 直接选择成为核心组成部分  
    辅助文件:ramdisk有以下两种
        initrd
        initramfs
运行中的内核;
    uname命令
        uname - print system information
        uname [OPTION]...
        
            -a:显示所有信息
            -s:显示内核即操作系统名称
            -n:显示主机节点名称
            -r:内核的版本号和release号
            -v:显示内核的版本制作信息
            -p:显示处理器架构信息
            -m:显示内核所在的硬件平台名称
            -o:显示操作系统名称
    模块:
        lsmod命令
            显示由核心已经装载的内核模块
            lsmod显示的信息来自于cat /proc/modules文件
        
        modinfo:查看模块的详细信息  
            eg:modinfo ext4
            
            modinfo [ -0 ]  [ -F field ]  [ -k kernel ]  [ modulename|filename... ]
                -k:显示指定内核的详细信息
                -p:显示模块参数
                -n:只显示模块文件路径
                -a:只显示模块作者
                -d:显示decription
                -l:license
                 
         modprobe:装载或卸载内核模块
            modprobe  [ -C config-file ] [ modulename ]  [ module parameters... ]
                默认配置文件:/etc/modprobe.conf,/etc/modprobe.d/*.conf 
                    -n:用作测试
                    -q:静默模式
                    -r:移除模块
                    -C:指明读取模块的配置文件路径
            modprobe -r [ modulename... ]  卸载某模块     
        
        depmod:内核模块依赖关系文件及系统信息映射文件的生成工具;
        
        装载或卸载内核模块:
            insmod:装载模块(不解决依赖性关系)
                insmod [ filename ]  [ module options... ]
            rmmod:卸载模块
                rmmod [ modulename ]
/proc目录:内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出
    参数:
        只读:输出信息
        可写:可接受用户指定“新值”来实现对内核某功能或特性的配置
            /proc/sys
            
            (1)sysctl命令用于查看或设定此目录中诸多参数
                sysctl -w path.to.parameter=VALUE
                  sysctl -w kernel.hostname=danran.com  
            (2)echo命令通过重定向的方式也可以修改大多数参数的值
                echo "VALUE" > /proc/sys/path/to/parameter
                 
        sysctl
            配置文件:/etc/sysctl.conf 
                (1)设置参数
                    sysctl -w parameter=VALUE
                (2)通过读取配置文件件设置参数生效
                    sysctl -p [/path/to/conf_file]
        
        内核中的路由转发
            sysctl -w /proc/sys/net/ipv4/ip_forword=1
        
        常用的参数:
            net.ipv4.ip_forword
            kernel.hostname 
            sysctl -w vm.drop_caches=1 清理系统缓存

/sys目录:
    sysfs:输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息,有些参数是可以修改的,用于调整硬件工作特性。
    udev:通过此路径下输出的信息动态为各设备创建所需要设备文件,udev是运行用户空间程序:专用工具:udevadmin,hotplug
    udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下  
  • ramdisk文件的制作
(1) mkinitrd 为当前正在使用的内核重新制作ramdisk文件     
    mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) 由当前系统版本生成相应版本的initramfs文件    
(2) dracut命令 为当前正在使用的内核重新制作ramdisk文件       
    dracut /boot/initramfs-$(uname -r).img $(uname -r)
  • 编译内核
前提:
    (1) 准备好开发环境
    (2) 获取目标主机上硬件设备的相关信息
    (3) 获取到木变主机系统功能的相关信息,例如要启动的文件系统   
准备好开发环境:
    包组(Centos 6)
        Server Platform Development
        Development Tools
目标主机硬件设备的相关信息:
    CPU:
        cat /proc/cpuinfo
        x86info -a
        lscpu   
    PCI
        lspci   查看PCI设备的信息
            -v
            -vv
        lsusb  查看usb设备的信息
        lsblk  查看块设备的信息
    了解全部硬件设备信息
        hal-device

简单依据模板文件的制作过程:
    tar xf liunx-3*.tar.gz -C /usr/src   -C指定指定目录  
    cd /usr/src
    ln -sv linux-3* linux 创建解压文件的软链接linux
    cd linux
    cp /boot/config-$(uname -r) ./.config    复制boot目录下的config-$(uname -r)文件到当前目录下并命名为.config 
    
    make menuconfig  执行编译,配置内核选项  
        .config 文件文件
    make help
    screen 打开一个会话
    make -j #  #可以同内核核心数一致,也可以是核心的两倍,多线程同时编译  
    make modules——install  安装模块   
    make install   安装内核 
        安装bzImage为/boot/vmlinuz-VERSION-RELEASE
        生成initramfs文件
        编辑grub的配置文件
    init 6  重启系统,并测试使用新内核   
  • 编译内核步骤
(1) 配置内核选项
    支持“更新”模式进行配置
        (a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项
        (b) make menuconfig:基于curses的文本窗口界面  
        (c) make gconfig:依赖GTK开发环境的窗口界面
        (d) make xconfig:基于QT开发环境的窗口界面   
    支持“全新配置”模式进行配置
        (a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置;
        (b) make allnoconfig:所有选项均回答为“no”
(2) 编译
    make [-j #] 
    如何只编译内核中的一部分功能:
        (1) 只编译某某子目录中的相关代码
            cd /usr/src/linux
            make dir/ (只能使用相对路径)
        
        (b) 只编译一个特定的模块
            cd /usr/src/linux
            make dir/file.ko
            
            eg:只为e1000编译驱动
                make drivers/net/ethernet/intel/e1000/e1000.ko
        如何交叉编译内核
            编译的目标平台与当前平台不相同  
                make ARCH=arch_name
            
            要获取特定目标平台的使用帮助
                make ARCH=arch_name help  
  • 如何在已经执行过编译操作的内核源码树做重新编译
事先清理操作
    make clean:清理大多数编译生成的文件,但会保留config文件等;
    make mrproper:清理所有编译生成的文件、config及某些备份文件
    make distclen:mrproper、patches以及编辑器备份文件   
  • screen命令
打开新的screen
    screen 
退出并关闭screen
    exit
剥离当前screen
    Ctrla,d
显示所有已经打开的screen
    screen -ls
恢复某screen
    screen -r [SESSION]

你可能感兴趣的:(Linux内核)