一、内核模块
核心:/boot/vmlinuz-version
内核模块(ko):/lib/modules/version/
内核设计:
单内核
模块化设计
微内核
装载模块:
insmod
modprobe
1、用户空间访问、监控内核的方式
/proc , /sys
伪文件系统
/proc/sys: 此目录中的文件很多都是可读写的。
/sys/: 某些文件是可写
设定内核参数值的方法:
echo VALUE > /proc/sys/TO/SOMEFILE
sysctl -w kernel.hostname=
能立即生效,但不能永久有效
永久有效: /etc/sysctl.conf
修改文件完成之后,执行如下命令可立即生效:
sysctl -p
sysctl-a :显示所有内核参数及其值
2、内核模块管理
lsmod:查看
modprode MOD_NAME :装载某模块
modprode -r MOD_NAME :卸载某模块
modinfo MOD_NAME :查看模块的具体信息
insmod /PATH/TO/MODULE_FILE:装载模块
rmmod MOD_NAME
depmod /PATH/TO/MODILES_DIR
3、内核功能
内核中的功能除了核心功能之外,在编译时,大多功能都有三种选择:
(1)不使用此功能; (2)编译成内核模块;(3)、编译进内核;
4、如何手动编译内核:
make gconfig: Gnome桌面环境使用,需要安装图形开发库组:GNOME Software Devel Development
make Kconfig:KDE桌面环境使用,需要安装图形开发库
make menuconfig:
make
make modules_install
make install
二、系统启动流程
POST-->BIOS(Boot Sequence)-->BootLoader(MBR)-->Kernel
/etc/inittab:
设定默认运行级别
系统初始化(/etc/rc.d/rc/sysinit)
运行指定级别的服务脚本
/etc/rc.d/init.d/
/etc/rc.d/rc#.d
rc0.d--rc6.d
K*
S*
00-99:运行次序
启动虚拟终端
启动图形终端
/etc/rc.d/rc.sysinit:
检测并以读写方式重新挂载根文件系统;
设定主机名;
检测并挂载/etc/fstab中的其他文件系统;
启动swap分区;
初始化外围硬件设备的驱动;
根据/etc/sysctl.conf设定内核参数;
激活udev和selinux;
激活LVM和RAID设备;
清理过期锁和PID文件;
装载键映射;
内核初始化:
硬件探测
装载驱动
挂载根文件系统
启动用户空间中的第一个进程init
三、内核编译
busybox:
Kernel+ROOTFS()
kernel+initrd(ramdisk)
kernel+
busybox-->initrd
kernel+initrd(busybox)-->rootfs(busybox)
kenrel
RHEL5.8+busybox(initd)+rootfs(busybox)
1、查看本地硬件设备信息
cat /proc/cpuinfo 查看CPU信息
lsusb 查看usb信息
lspci 查看pci信息
hal-device: hardware abstract layer
2、编译内核:
(1)、配置
make menuconfig
make gconfig
make kconfig
make oldconfig
make config
保存为 .config
make
make modules_install
make install
模块安装位置: /lib/modules/VERSION/
3、如何实现部分编译:
(1)、只编译某子目录下的相关代码;
make dir/
make arch/
make drivers/net/
(2)只编译部分模块
make M=drivers/net/
(3)只编译某一模块
make drivers/net/pcnet32.ko
(4)将编译完成的结果放置于别的目录中
make o=/tmp/kernel
四、编译系统
kernel+initrd(busybox制作,提供ext3文件系统模块)+ROOTFS(busybox制作)
make arch/
arch/x86/boot/bzImage
硬件驱动:initrd
initrd:仅需要提供内核访问真正的根文件系统所在设备需要的驱动
存储设备和文件系统相关的模块
系统初始化rc.sysinit:初始其他硬件的驱动程序;
ROOTFS:busybox,init不支持运行级别
/etc/inittab:格式也不尽相同
ash,hush
bash