基础模块

Posted chenming-1998

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础模块相关的知识,希望对你有一定的参考价值。

Linux 内核初步管理
    单内核体系设计,但充分借鉴了微内核设计体系的优点,微内核引入模块化机制;
        内核组成部分:
            kernel:内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE;
            kernel object:内核对象,一般放置于/lib/modules/VERSION-RELEASE/;
            [ ] N
            [M] M
            [*] Y
            辅助文件:
                initrd:centos 5
                initramfs:centos 6/7
            
        内核是在内存中被加载运行的,放在磁盘中的只是内核文件本身,运行中的内核只是某一内核文件的副本
    运行中的内核的版本:
        uname命令:print system information
            uname [OPTION]...
                -n:显示节点名称
                -r:显示内核的版本号
                -m:显示当前硬件平台
                -p:显示处理器平台
                -o:显示操作系统核心
                -a:显示所有
        模块:
            lsmod:Show the status of modules in the Linux Kernel
                显示由核心已经装载的模块
                显示的内容来自于:/proc/modules文件
            modinfo:Show information about a Linux Kernel module
                显示模块的详细信息(通过查询数据库来实现的,无需填写绝对路径来查询);
                modinfo [-0] [-F field] [-k kernel] [modulename|filename...]
                -n:显示模块文件路径
                -p:显示模块参数
                --help:具体信息查看help
            modprobe:Add and remove modules from the Linux Kernel
                装载或卸载模块,不加参数为装载模块;
                    装载某模块时,如果需要依赖其他模块,则其他模块会一并装载;
                        内核根据/lib/modules/$(uname -r)/modules.dep文件生成的/lib/modules/$(uname -r)/modules.dep.bin这个二进制程序计算依赖关系;
                配置文件:/etc/modprobe/*conf
                -r:卸载模块
            depmod:Generate modules.dep and map files
                生成模块依赖关系,和映射文件;
                可以指定为某一内核来生成依赖关系
            装载或卸载模块的其他方式:
                insmod:装载模块
                    insmod $(modinfo -n module_NAME)
                rmmod:卸载模块
                    装载时不会自动解决依赖关系且,需要填写模块路径
    /proc目录:
        内核把自己的内部信息、统计信息以及可配置参数通过proc这个伪文件系统加以输出;
        参数:
            只读参数:输出信息
            可写参数:可接受用户指定的"新值"来实现对内核某功能或特性的配置;
                位于/proc/sys目录中,可通过sysctl命令查看或设定此目录中的参数,使用echo命令通过重定向的方式也可以修改大多数参数值;
                sysctl:configure kernel parameters at runtime
                    sysctl [options] [variable[=value]] [...]
                    配置文件:/etc/sysctl.conf
                        设置某内核参数:
                            sysctl -w path.to.parameter=VALUE
                                立即生效,但是不会永久有效;
                        通过配置文件设置参数
                            sysctl -p [/path/to/conf_file]
                                写在配置文件中不会立即生效,但会永久有效,可以通过-p选项使之生效;        
                echo:
                    echo "VALUE" > /proc/sys/path/to/file
            内核中的路由转发:
                /proc/sys/net/ipv4/ip_forward
    /sys目录:
        用来输出硬件设备的信息及可配置参数
        sysfs:输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性;
        内核探测硬件信息时,将探测的结果直接就输出了从而就没有记录下来;但是创建设备文件时会用到这些信息,所以当用户空间要用到这些信息时可以通过系统的内建机制触发内核,让它再探测一遍然后将信息输出到/sys目录;
        内核通过驱动程序来访问硬件设备,是不需要设备文件的,所以内核不会创建设备文件,只有用户空间通过系统调用访问硬件时会用到设备文件,所以在内核版本2.4之前所有设备文件都是事先创建完毕的,而在2.6之后的设备文件是通过udev在需要设备文件时才开始创建的;
            udev就是通过读取/sys目录中的硬件设备信息然后在/dev中创建设备文件的;
            udev是运行在用户空间的程序;
            udev的专用工具:udevadmin、hotplug
            udev为设备创建设备文件时,会读取其事先定义好的命名规则文件,一般在/etc/udev/rules.d/及/usr/lib/udev/rules.d/目录下;
    ramdisk文件的制作:
        mkinitrd:is a compat wrapper, which calls dracut to generate an initramfs
            为当前正在使用的内核重新制作ramdisk文件:
                mkinitrd /boot/initramfs-$(uname -r)  $(uname -r)
                或:
                dracut /boot/initramfs-$(uname -r)  $(uname -r)
    解压centos7 的initramfs:
        mkdir initramfs
        cd initramfs
        /usr/lib/dracut/skipcpio /path/to/initramfs-VERSION.img | zcat | cpio -ivd
    编译内核:
        前提:
            准备好开发环境;
                包组(Centos 6)
                    Server Platform
                    Development tools
                openssl-devel.x86_64
                ncurses-devel.x86_64
            获取目标主机上硬件设备的相关信息;
                CPU:
                    cat /proc/cpuinfo
                    x86info:display x86 CPU diagnostics
                        -a:显示所有信息;
                    lscpu :list all PCI devices
                PCI设备:
                    lspci:list all PCI devices
                        -v:显示详细信息;
                        -vv:显示更详细的信息;
                    lsusb:list USB devices
                    lsblk:list block devices
                hal-device:显示所有硬件信息(centos 6)
            获取到目标主机系统功能的相关信息,例如要启动的文件系统;
            获取内核源代码包;
                www.kernel.org
        make menuconfig
            make help:帮助信息
        步骤:
            tar -Jxvf linux-VERSION -C /usr/src
            cd /usr/src
            ln -sv linux-VERSION linux
            cd linux
            cp /boot/config-$(uname -r) ./.config
            make menuconfig
            screen
            make -j #
            make mudoles_install
            make install
            重启系统,测试新内核

以上是关于基础模块的主要内容,如果未能解决你的问题,请参考以下文章

JDK模块化之模块的基础概念

Python基础-第五天-常用模块

python基础五——模块

Python基础(11)_python模块之time模块rando模块hashlibos模块

python基础11 ---函数模块1

Python基础-常用模块