Linux Kernel
但内核体系设计,但充分借鉴了微内核设计体系的优点,为内核引入模块化机制
内核组成部分:
kernel:内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz
kernel object 内核对象,一般放置于/lib/modules/VERSION-RELEASE/
[ ]:N
[M]:M
[*]:Y
辅助文件ramdisk
initrd
initramfs
运行中的内核
uname -r 显示VERSION-RELEASAE
-n显示结点名称
模块
lsmod :显示由内核已经装载的内核模块
显示的内容来自于:/proc/modules 文件
modinfo命令
显示模块的详细描述信息
modinfo [ -k kernel] [modulename|filename...]
-n 只显示模块文件路径
-p 显示模块参数
-a author
-d 描述
-l license
modprobe装载或者卸载内核模块
-r ipv6 卸载ipv6
depmod
内核模块依赖关系及系统信息映射文件的生成工具
装载或卸载内核模块
insmod ..
rmmod ..
/proc目录
内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出
参数
只读:输出信息
可写:(一般/proc/sys) 可接受用户指定“新值”来实现对内核某功能或特性的配置
sysctl用于查看或设定此目录中的诸多参数
-w path.to.parameter=VALUE
eg: # sysctl -w kernel.hostname=mail.meu.com
echo通过重定向的方式也可以修改大多数参数的值
echo "VALUE" > /proc/sys/path/to/parameter
eg: echo "www.mdu.com" > /proc/sys/kernel/hostname
sysctl命令
配置文件:/etc/sysctl.conf
(1)设置参数
sysctl -w parameter=VALUE
(2)通过读取配置文件设置参数
sysctl -p [/path/to/conf_file]
内核中的路由转发
/proc/sys/net/ipv4/ip_forward
常用的几个参数
net.ipv4.ip_forward
vm.drop_caches
kernel.hostname
/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)
(2)dracut
为当前正在使用的内核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
编译内核
前提:
(1)准备好开发环境
(2)获取目标主机上硬件设备的相关信息
(3)获取到目标主机系统功能的相关信息,例如要启用的文件系统
(4)获取内核源代码包
准备好开发环境
包组(centos6)
Server Platform Development
Development Tools
目标主机硬件设备相关信息
CPU:
cat /proc/cpuinfo 查看内核cpu信息
lscpu [-v]
x86info -a
PCI设备:
lscpi [-v] [-vv]
lsusb
lsblk
了解全部硬件设备信息
hal-device
简单依据模板文件的制作过程
tar xf linux-3.10.67.tar.xz -C /usr/src
cd /usr/src
in -sv linux-3.10.67 linux
cd linux
cp /boot/config-$(uname -r) ./.config
make menuconfig
screen
{一个虚拟屏幕执行
make -j 4 screen会一直工作,
只要你不结束
screen -ls
screen -r 数字 删掉
}
make -j #
make modules_install
make install
重启并测试使用新内核