Linux 内核管理

Linux内核基础:
Linux Kernel:
  Linux内核的体积结构是单内核的,但充分借鉴了微内核设计体系的优点,为内核引入模块化机制,使得虽然是单内核,但工作在模块化的方式下,并且模块可以动态装载或卸载;Linux内核负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。如是我们在了解Linux内核的基础上根据自己的需要量身定制一个更高效更稳定的内核,就需要我们手动去编译和配置内核里的各项相关的参数和信息。
  内核的组成部分:
  1、Kernel:内核核心,一般为bzimage,通常位于/boot目录,名称为vmlinuz-VERSION-release
  2、Kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/;内核模块与内核核心版本一定要严格匹配
    选择编译内核选项标记解释:
    []:N,不编译进内核
    [M]:Module,编译成内核模块
    [*]:Y,直接编译进内核核心(kernel核心文件中)
    注意:有些功能要么编译进内核,要么不编译
  3、ramdisk:辅助性文件,并非必须,这取决于内核是否能直接驱动rootfs所在的设备;是一个简装版的根文件系统;借助ramdisk能够加载的内容:
    目标设备驱动,例如SCCI设备的驱动;
    逻辑设备驱动,例如LVM设备的驱动;
    文件系统,例如xfs文件的系统;

内核信息获取:
  uname命令:uname- print system information
  格式:uname [OPTION]...
  -a 显示所有信息
  -n 显示主机名
  -r 显示内核release号
  -v 显示内核version号

内核模块信息获取和管理:
  lsmod命令:
  lsmod- program to show the status of modules in the Linux Kernel 显示内核已装载的模块
  显示的内容来自于/proc/modules

  modinfo命令:
  modinfo- program to show information about a Linux Kernel module显示指定内核模块的详细信息
  格式:modinfo[-F field] [-k kernel] [modulename|filename...]
  -F field 仅显示指定字段的信息
  -n 显示该模块的详细路径
  -a author显示作者名字
  -d description显示描述信息
  -l license??显示授权信息
  -k 显示指定内核版本对应的模块信息

  modprobe命令:
  modprobe- Add and remove modules from the Linux Kernel?装载和卸载内核模块
  格式:modprobe[ -C confile-file] [modulename] [moduleparame-ters…]
  配置文件:/etc/modprobe.conf??/etc/modprobe.d/*.conf
  模块的动态装载:modprobe module_name
  模块的动态卸载:modprobe -r module_name
  注意:对正在使用的模块不要轻易卸载;此命令可以自动解决模块间的依赖关系;

  depmod命令:
  depmod- program to generate modules.dep and map files. 内核模块依赖关系及系统信息映射文件的生成工具;
 如果模块间的依赖关系文件被损坏(/lib/modules/3.10.0-514.el7.x86_64/modules.dep),可以通过该命令去生成新的模块依赖关系文件,但是该文件不会真正被使用而是将其编译为*.dep.bin的二进制文件方便查询和使用;该命令还会生成/boot/Sys.map-Version-Release文件,该文件是对应版本内核所支持库文件的映射关系
格式:depmod[-Anea]
  -A 主动去分析目前核心的模块,并重新写入 modules.dep
  -n 分析结果不写入modules.dep,而是输出到屏幕
  -e 显示目前已经加载但不可执行的模块名称
  -a 分析所有模块

模块装载卸载的另外一种方式:不会自动解决模块间的依赖关系
  insmod命令:
  insmod - simple program to insert a moduleinto the Linux Kernel
  格式: insmod[ filename ] [ module options... ]
     filename:模块文件的文件路径;(内核模块的绝对路径,一般以.ko文件结尾)
  rmmod命令:
  rmmod- simple program to remove a module from the Linux Kernel
  格式:rmmod [module_name]

ramdisk文件的制作:
  1、mkinitrd命令:为当前使用中的内核重新制作ramdisk文件
  格式:mkinitrd [OPTION...][<initrd-image>] <kernel-version>
  --with=<module> 除了默认的模块之外额外需装载到initramfs中的模块(添加某个模块到initrd中)
  --preload=<module> initramfs所提供的模块需要预先装载的模块
  示例:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

2、dracut命令:
  dracut- low-level tool forgenerating an initramfs image
  格式:dracut [OPTION...][<image> [<kernel version>]]
  示例:dracut /boot/initramfs-$(uname -r).img $(uname-r)??用法和mkinitrd一样

/proc目录:
  内核状态和统计信息的输出接口,以及可配置参数配置接口(/proc/sys/)
  只读:内核状态和统计信息的输出
  只写:可接受用户指定一个“新值”来实现对内核某功能或特性的配置(/proc/sys/)

sysctl命令:用于查看或设定/proc/sys/目录中诸多参数
  格式:sysctl [options] [variable[=value]]
??查看:
    sysctl -a??显示所有参数设置的值
    sysctl Variable??显示指定参数名的值
??修改:
    sysctl -w Variable=value
   示例:sysctl -w kernel.hostname=mail.magedu.com
   说明:红色部分指定的参数名与/proc/sys/目录下文件同名,以点号隔开表示下一级目录
  修改查看还可以通过以下方式实现:
    查看:
    cat /proc/sys/kernel/hostname
    修改:
    echo "mail.magedu.com" > /proc/sys/kernel/hostname

sysctl的配置文件:/etc/sysctl.conf和/etc/sysctl.d/*.conf(通过命令设置只能本次有效,通过配置文件永久有效)
  sysctl -p [/PATH/TO/CONFIG_FILE]??重读配置文件立即生效
  常见内核参数:
  net.ipv4.ip_forward 路由转发
  vm.drop_caches 内存的缓存数据清除,释放内存缓存空间
  kernel.hostname 主机名
  net.ipv4.icmp_echo_ignore_all 忽略所有ping操作

/sys目录:
  输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的可设置参数;对某些参数的修改,用来设置调整硬件设备的工作特性
  udev就是通过读取/sys目录下的硬件设备信息按需为各硬件设备创建设备文件;udev是用户空间程序;专用工具:devadmin,hotplug;udev为设备创建文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d/和/usr/lib/udev/rules.d/目录下

screen命令:
  一个终端下打开多个屏幕,并剥离屏幕与终端的关系,终端关闭也不会影响屏幕下的进程
  打开screen:screen
  拆除screen:Ctrl+a,d
  列出screen:screen -ls
  连接指定screen:screen -r SCREEN_ID
  关闭screen: exit

编译内核:
  1、准备好开发环境
  2、获取目标主机上的硬件设备的相关信息
  3、获取到目标主机系统的功能的相关信息,例如要启用的文件系统
  4、获取内核源代码包:www.kernel.org

开发环境准备:
  Centos6.6:
    包组:Development Tools、Server Platform Development
??Centos 7:
    包组:Development Tools、Server Platform Development
    包:ncures-devel

获取目标主机上硬件设备的相关信息:
  CPU:
    cat /proc/cpuinfo
????lscpu
????x86info -a?x86info需要先手动安装才能使用
  PCI设备:
????lspci
      -v?详细显示pci信息
      -vv
????lsusb
      -v?详细显示usb信息
      -vv
????lsblk
????hal-device?显示全部硬件设备信息

示例1:Centos 6上linux-3.10内核编译过程:
  1、准备好开发环境,安装好“Development Tools”“Server Platform Development”组件;
  yum groupinstall "Development Tools"
  yum groupinstall "Server Platform Development"
  2、从kernel官网上下载内核源代码;
  wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.0/linux-3.10.tar.xz
  3、下载好内核之后将文件解压缩至/usr/src目录;
  tar -Jxvf linux-3.10.tar.xz -C /usr/src/
  4、创建链接文件; (默认内核源码/usr/src/linux,所有要创建linux软链接文件链接到真实文件夹)
  cd /usr/src/
  ln -s linux-3.10 linux
  5、准备.config配置文件;
  cp /boot/config-2.6.32-431.el6.x86_64 /usr/src/linux/.config
 6、配置内核选项;
  cd /usr/src/linux
  make menuconfig
  给内核加一个名称,依次选中Generalsetup-->Local version – append to kernel release;

?

此处填写的名字不能有空格

选择启动的内核模块,在打开这个配置的第一个界面依次选择File systems -->DOS/FAT/NT file systems-->NTFS file systemssupport,如图所示,利用空格键选中,[]表示不编译,[M]表示编译至模块中,[*]表示编译至内核中。本次测试选中NTFS模块;

退出保存,比较配置前后区别;

7、安装编译;
  编译内核,可使用make –j #指定编译线程数量,因为远程编译可能终端断开就前功尽弃了,所以 使用screen命令就可以不用担心编译中断了;
  make -j 4
  安装内核模块
  make modules_install
  安装内核;最后一步在虚拟机里出现报错,为can’tfind modules…可忽略
  make install

8、编辑grub配置文件,将default=1改为default=0,随后重启系统

原文地址:https://www.cnblogs.com/Link-Luck/p/9859074.html

时间: 2024-11-08 08:07:14

Linux 内核管理的相关文章

Linux内核管理风格

内核社区管理是一个很独特很有挑战性的事情, 各系统维护者拥有很大的权利,却又无法命令和管理社区参与者: 一边不停的拒绝人们各种功能提交,一边却希望开发者留在自己的领域继续贡献力量.这篇文章向您揭示,成功的社区维护者如何展示领导力(捣糨糊).祝大家 假期快乐! 这是一个简短的文档,描述了Linux内核的首选(或编造的,取决于您问谁)管理风格. 它的目的是在某种程度上参照 process/coding-style.rst 主要是为了避免反复回答 [1] 相同(或类似)的问题. 管理风格是非常个人化的

Linux内核管理--内存(一)

1)Linux把空闲的物理内存划出一部分用作buffer,cache 2)buffer cache是高速缓存环从,目的是为了解决磁盘读取速度远小于内存这个问题,cpu从内存直接读取最快: 3)但是物理内存有限,不可能所有数据都在物理内存,swap交换分区就出现了,内核会根据""最近经常使用""算法,把不经常使用的内存数据交换到swap: 4)有时可以发现物理内存充足,swap也使用了很多也是正常的,因为linux内存交换是不时在进行的,一个占用内存资源很大的程序开始

二十七、Linux内核管理

内核组成: uname命令 内核:uname,mkinitrd,dracut 模块: lsmod,modinfo,depmod,modprobe,insmod,rmmod /proc,sysctl,/sys,/dev,udevadm,hotplug命令 一.静态视角: Linux内核模块 吸收微内核设计:支持模块化设计: 内核中模块 .ko (kernel object) 程序调用的库 .so (share object) 内核模块相当于程序的库的概念,只是模块只能被kernel调用.库只能被程

Linux内核工程导论——内存管理(一)

Linux内存管理 概要 物理地址管理 很多小型操作系统,例如eCos,vxworks等嵌入式系统,程序中所采用的地址就是实际的物理地址.这里所说的物理地址是CPU所能见到的地址,至于这个地址如何映射到CPU的物理空间的,映射到哪里的,这取决于CPU的种类(例如mips或arm),一般是由硬件完成的.对于软件来说,启动时CPU就能看到一片物理地址.但是一般比嵌入式大一点的系统,刚启动时看到的已经映射到CPU空间的地址并不是全部的可用地址,需要用软件去想办法映射可用的物理存储资源到CPU地址空间.

Linux内存管理 【转】

转自:http://blog.chinaunix.net/uid-25909619-id-4491368.html Linux内存管理 摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法.力求从外到内.水到渠成地引导网友分析Linux的内存管理与使用.在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭Linux内存管理. 前言 内存管理一向是所有操作系统书

linux物理内存管理

1.为什么需要连续的物理内存: Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k(在i386体系结构中)大小的页,从而分配和回收内存的基本单位便是内存页了.利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[3],系统可以东一页.西一页的凑出所需要的内存供进程使用.虽然如此,但是实际上系统使用内存时还是倾向于分配连续的内存块,因为分配连续内存时,页表不需要更改,因此能降低TLB的刷新率(频繁刷新会在很大程度上降低访问速度). 1.物理内存页和p

linux内核内存分配

实验要求: 1.编写一个内核模块,在模块中分配内存并访问 2.理解并验证kmalloc.vmalloc等函数的区别. 背景知识: 1.Linux内存页管理 Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成4K大小页,作为使分配和回收内存的基本单位.在分配内存时尽量分配连续内存,避免TLB的刷新率过高.故此Linux采用了“伙伴“关系来管理空闲页框.因此空闲页面分配时也需要遵循伙伴关系.最小单位是2的幂倍页面大小.内核中分配空闲页框的基本函数是get_free_page/get_

转 Linux内存管理原理

Linux内存管理原理 在用户态,内核态逻辑地址专指下文说的线性偏移前的地址Linux内核虚拟3.伙伴算法和slab分配器 16个页面RAM因为最大连续内存大小为16个页面 页面最多16个页面,所以16/2order(0)bimap有8个bit位两个页框page1 与page2组成与两个页框page3 与page4组成,这两个块之间有一个bit位 order(1)bimap有4个bit位order(2)bimap有4个bit位的2个页面分配过程 当我们需要order(1)的空闲页面块时,orde

#10 Linux硬盘管理

1.存储管理 传统的磁盘分区 RAID技术,软RAID的实现 LVM 文件系统管理 ext,xfs,btrfs(了解) 2.程序包管理 rpm.yum.dnf 3.sed.gawk 4.进程管理 5.网络管理 网络基础只是(Cisco CCNA+CCNP) 网络的属性管理 网络参数监测 6.Linux内核管理 内核编译和安装 内核的裁剪 定制内核 7.Linux系统启动流程 centos5.6.7 8.系统安装 kickstart.dhcp.pxe 9.shell脚本的完善 Linux储存管理