一、回顾
1、CentOS启动流程
POST --> Bootloader(BIOS,MBR) --> Kernel(initrd) --> rootfs(readonly)--> switch_root --> /sbin/init
root (hd0,0)
kernel
initrd
2、ldd命令:打印一个二进制应用所依赖的库
ldd [OPTION]... FILE...
a、我们查看我们ls依赖哪些库文件
[root@node1 ~]# ldd /bin/ls linux-vdso.so.1 => (0x00007ffc857d4000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fbd9c63d000) libcap.so.2 => /lib64/libcap.so.2 (0x00007fbd9c438000) libacl.so.1 => /lib64/libacl.so.1 (0x00007fbd9c22e000) libc.so.6 => /lib64/libc.so.6 (0x00007fbd9be6b000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fbd9bc09000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fbd9ba04000) /lib64/ld-linux-x86-64.so.2 (0x000055758c083000) libattr.so.1 => /lib64/libattr.so.1 (0x00007fbd9b7ff000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbd9b5e3000)
左侧是库文件名称,右侧是库文件路径,而对于vdso这个库文件和ld-linux-x86-64这两个库文件而言你可以认为这是整个系统调用库的入口,尤其是ld-linux-x86-64对于64位系统来讲这是各应用程序调用其他库文件的入口。
b、我们来取出这个应用程序依赖的各库文件的文件路径
二、Linux内核
1、内核设计体系:单内核,微内核
2、Linux:单内核设计,但充分借鉴了微内核体系的设计的优点;为内核引入了模块化机制;
3、内核的组成部分
a、kernel:内核核心,一般为bzimage,通常位于/boot目录下,但是你在/boot目录下看到这个文件时他已经没用了,因为在系统启动时他已经被加载过了。当系统启动起来的时候他不会再去读取这个内核文件。之所以我们要把他放在/boot目录下是为了便于后期管理。其名称为vmlinuz-VERSION-release;
b、kernel object:内核对象,即内核模块,一般放置于/lib/modules/,无论你是32位系统还是64位系统他们都放在lib目录下而不是lib64,在/lib/modules目录下有一个以VERSION-release(内核 版本号和release号)共同命名的目录,他一定是和内核版本号完全匹配,即内核模块和内核核心版本必须严格匹配。我们内核编译时相应的参数项如下:
(1)、[ ]:N
(2)、[M]:Module,把它编译成模块,用到时我们就可以临时装载,不用就可以不装载,最多占用磁盘空间而不占用内核内存空间。
(3)、[*]:Y,编译进内核核心,也就是说只要内核在,这个功能就在