Linux2.6内核启动分析详解

需积分: 9 0 下载量 114 浏览量 更新于2024-07-23 收藏 546KB PDF 举报
"Linux2.6内核启动分析 李枝果" 本文主要探讨Linux 2.6内核的启动过程,作者为李枝果。在Linux操作系统中,内核启动是一个至关重要的环节,它涉及到系统硬件初始化、内存管理、设备驱动加载等一系列复杂的过程。以下是对Linux 2.6内核启动流程的详细分析: 1. **BIOS启动**:当计算机加电后,首先执行的是固件(BIOS或UEFI),它进行基本的硬件检测和初始化,然后将控制权传递给存储在MBR(主引导记录)中的引导加载程序。 2. **引导加载器**:Linux系统通常使用GRUB(Grand Unified Bootloader)或LILO作为引导加载器。GRUB从MBR加载,查找并显示操作系统选择菜单,然后加载内核映像到内存中。 3. **内核加载**:引导加载器将内核映像(如vmlinuz)和initrd(初始RAM磁盘)加载到内存特定位置。initrd是一个临时的RAM文件系统,用于在内核初始化阶段加载必要的模块和驱动程序。 4. **内核解压**:vmlinuz是经过压缩的内核映像,引导加载器将其解压到内存中。 5. **初始化硬件**:内核开始初始化CPU、内存和其他硬件设备,包括时钟、中断控制器、PCI总线等。 6. **内存管理**:内核设置内存管理结构,如页表,并开始识别物理内存。 7. **设备驱动初始化**:内核根据需要加载设备驱动程序,以驱动如硬盘、网卡等硬件设备。 8. **挂载根文件系统**:内核使用initrd中的驱动程序挂载真实的根文件系统,这个过程可能涉及网络启动或从其他媒介加载根文件系统。 9. **启动第一个进程**:内核创建并执行第一个用户空间进程——/sbin/init。这是系统的初始化脚本,负责启动系统服务、配置网络等。 10. **系统服务启动**:根据/etc/inittab或Systemd配置,启动后台服务,如网络服务、守护进程等。 11. **用户登录**:系统进入多用户模式,等待用户登录。用户登录后,shell会话开始,用户可以执行各种命令和程序。 Linux 2.6内核启动过程中涉及的知识点繁多,包括硬件初始化、内存管理、设备驱动、文件系统挂载以及系统服务的启动,这些都是构成操作系统核心功能的关键组成部分。理解这一过程有助于我们更好地了解Linux系统的工作原理,从而进行更有效的系统管理和故障排查。

(1)在内核中实现缺页次数统计: 1.cd /usr/sec/linux-2.6.32.60 // 切换到预编译内核 2.sudo gedit arch/x86/mm/fault.c / /编辑fault.c 3.Unsigned long volatile pfcount //在fault.c中定义缺页次数全局变量. 4.将pfcount加入到do_page_fault中,用以统计缺页次数. 5.sudo gedit include/linux/mm.h //声明全局变量pfcount到头文件mm.h. 6.在extern int page_cluster下面添加代码 Extern unsigned long volatile pfcount; 7.Sudo gedit kernel/kallsym.c // 导出pfcount全局变量,整个内核都可以访问. 8.在最后一行添加代码EXPORT_SYMBOL(pfcount); (2)编译安装新内核: 1.sudo make mrproper //删除原来编译产生的垃圾 2.sudo cp /boot/config-3.2.0-29-generic-pag .config //导入原系统的内核配置 3.sudo make odlconfig; //更改配置 4.Sudo make clean; 5.make bzImage //编译内核 6.make modules //编译内核模块 7.make modules_install //安装内核模块 8.make install //安装内核 9.Sudo reboot //重新启动Linux系统 (3)新建内核模块,通过/proc实现用户态下查看缺页次数: 1.make source //创建source文件,存放编写的模块程序. 2.cd source/ //切换到source目录. 3.gedit pf.c// 新建用于构建模块的代码 4.Gedit Makefile //构建Makefile 5.在Makefile中添加 obj-m := pf.o 6.Sudo make -C /usr/src/linux-2.6.32.60 SUBDIRS=$PWD modules //编译、构建内核模块 7.sudo insmod pf.ko //加载模块到内核 8.sudo lsmod | grep pf //验证pf内核模块是否加载到内核进程中,运行命令出现pf信息说明加载成功 9.cat /proc/pf/pfcount //查看缺页统计次数通过以上步骤,你能帮我解读实验的结果吗

2023-06-08 上传