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,随后重启系统
Linux 内核管理的更多相关文章
- linux内核管理
一 linux组成:kernel.库.rootfs.程序 1.kernel的功能: 1) kernel提供的功能都通过系统调用给用户接口 2) kernel包括:进程管理 .内存管理 .网络管理 ...
- Linux内核管理子系统和进程管理子系统
内核管理子系统职能:1.管理虚拟地址与物理地址的映射 2.物理内存的分配 程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体. 进程:是一个执行中的程序,它是动态的实体 进程四要素: ...
- 二十七、Linux内核管理
内核组成: uname命令 内核:uname,mkinitrd,dracut 模块: lsmod,modinfo,depmod,modprobe,insmod,rmmod /proc,sysctl,/ ...
- Linux 内核管理类
一个类由一个 struct class 的实例来定义: struct class { char *name; struct class_attribute *class_attrs; struct c ...
- linux内核--内存管理(二)
一.进程与内存 所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内 ...
- 初探Linux内核中的内存管理
Linux内核设计与实现之内存管理的读书笔记 初探Linux内核管理 内核本身不像用户空间那样奢侈的使用内存; 内核不支持简单快捷的内存分配机制, 用户空间支持? 这种简单快捷的内存分配机制是什么呢? ...
- Linux内存管理 【转】
转自:http://blog.chinaunix.net/uid-25909619-id-4491368.html Linux内存管理 摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理 ...
- 2018-2019-1 20189215 《Linux内核原理与分析》第七周作业
<庖丁解牛>第六章书本知识总结 操作系统内个实现操作系统的三大管理功能:进程管理.内存管理.文件系统.分别对应<操作系统原理>中最重要的3个抽象概念是进程.虚拟内存和文件. L ...
- linux物理内存管理
1.为什么需要连续的物理内存: Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k(在i386体系结构中)大小的页,从而分配和回收内存的基本单位便是内存页了.利用分页管理有助 ...
随机推荐
- Hadoop版本:CDH, HDP, MapR
Hadoop版本:CDH, HDP, MapR 学习了:http://dongxicheng.org/mapreduce-nextgen/hadoop-distribution-selection/ ...
- 《随笔》pyqt 获取 TreeWidget 选中项的内容
感谢朋友支持本博客,欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免.欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- Android SQLite服务--创建、增删改查
<pre name="code" class="java">import android.content.Context; import andro ...
- ArcGIS教程:加权总和
摘要 通过将栅格各自乘以指定的权重并合计在一起来叠加多个栅格. 插图 插图中,像元值与其权重因子相乘.两者所得结果相加创建输出栅格.以左上角像元为例.两个输入的值变为 (2.2 * 0.75) = 1 ...
- [ajax 学习笔记] ajax初试
ajax全称是:asynchronous javasctipt and xml. 1.为什么须要ajax? 一般web程序与server的交互是:页面发送请求等待server处理,server处理数据 ...
- PlayerPrefs存储Vector3等结构数据
孙广东 2016.3.31 之前有网友询问这个问题, 当时我仅仅是 提供了一个思路, 使用json序列化.反序列化. 以下就写出两种(都是仅仅能变成字符串) 1.json的序列化.反序列化方 ...
- DeepLearning to digit recognizer in kaggle
DeepLearning to digit recongnizer in kaggle 近期在看deeplearning,于是就找了kaggle上字符识别进行练习.这里我主要用两种工具箱进行求解.并比 ...
- luogu1403 约数研究
题目大意:给出n,求1~n所有数的约数个数的和. 将“1~n所有数的约数”的模板中的factor[i*j].push_back(i)改为FactorCnt[i*j]++,最后再求一次和即可. #inc ...
- php百度翻译类
<?php // +---------------------------------------------------------------------- // | PHP MVC Fra ...
- iOS布局---pch头文件设置和字号适配
由于4s,5s,6,6p,界面尺寸差别过大,如果在界面上,只是用同一个字号,在4s和5s上就会略显偏大,而在6p上就会显小.并且ios9系统原生字体相较于ios8和之前原生字体略粗,在字号上也错了一号 ...