Linux内核学习 编译Linux内核笔记

参考浙大出版社《边干边学》

第九章 编译Linux内核
         实验目的:学习怎样重新编译Linux内核,理解掌握Linux标准内核和发行版本之间的区别
实验内容:编译Linux内核是一个操作性实验,不需要对内核中的源码有很深奥的理解,也不需要有多少编程技巧。
实验指导:
1.       Linux内核:学习Linux内核,可以体会出一个现代操作系统是如何实现的。内核是操作系统的核心程序,他向外部提供了对计算机设备的核心管理调用。一般来说,OS上运行的代码分为两部分,内核空间和用户空间。通常一个程序会跨越两个空间,即程序处于内核态还是用户态。内核对计算机进行的管理主要表现于,资源抽象,资源分配,资源共享。Linux属于单内核体系架构。
2.       查找并下载一份内核源代码:推荐官网下载 www.kernel.org ,查看自己的Linux版本方法是在终端下输入#uname –r ,这里我用的系统是CentOS,内核版本是2.6.18-164.el5 。这里就不下载了,直接去找我的Linux系统中内核的位置在/usr/src/kernels/2.6.18-164.el5-i686
3.       配置内核:配置内核是精确控制新内核功能的机会,配置过程也控制那些编译到内核的二进制映像中(启动时被载入),那些是需要装入的内核模块(module)。首先进入Makelfile中,修改EXTRAVERSION,改成自己现在需要配置的内核。为了将内核源码树处于一直的状态,有必要使用命令 #make mrproper 清除配置文件中和先前生成的.o文件。然后#make menuconfig 进入基于文本的选单式配置界面。当然还有很多种命令进入这一选项,make xconfig ,make gconfig ,make oldconfig 等等。
4.       编译内核和模块:编译内核,就用#make 这一过程需要较长时间,大概1小时左右吧。产生的二进制内核文件bzImage 在/usr/src/kernels/2.6.18-164.el5-i686/arch/i386/boot下。如果选择了可加载模块的话,就需要对模块进行编译,使用#make modules , #make modules_install
5.       了解Linux内核的启动:通常的Linux系统启动时从系统的/boot中读取内核映像到内存中的,所以我们要把在/usr/src/kernels/2.6.18-164.el5-i686/arch/i386/boot下编译生成的内核文件bzImage和System.map拷贝到/boot下。或者使用命令#make install也可以达到此目的。
6.       应用grub配置启动文件:如果使用grub启动Linux,修改系统引导文件配置需要编辑/boot/grub/grub.conf文件。如果编译完了内核bzImage,重启主机系统。最后完成所有实验后,#make clean清除所有临时文件。
7.       编写制作Linux启动盘的shell脚本程序:四种类型:boot盘,root盘,boot/root盘,utility盘。实际上采用这一方式的可能性已经越来越小了。
8.       Linux源程序的分布目录:Linux的源代码被组成树形结构,内核的核心源代码主要在kernel和arch<体系结构类型>/kernel下,/arch是与处理器的体系结构来划分的,里面有ARM,i386,POWERPC等等。下面介绍一些重要的目录
(1)       kernel目录:这个目录下的文件大多数都是Linux内核中的核心函数,其中最主要和重要的文件当属sched.c。这个文件下,定义了调度程序schedule,为每个CPU定义的运行就绪队列,等待队列,进程在CPU之间迁移等等。个人理解是内核中最关键的进程调度怎么实现的都是在这个文件下。关于进程的文件还有fork.c(创建子进程),exit.c(结束进程),signal.c(信号控制)等等和Linux开发应用息息相关的文件。
(2)       mm目录:内存管理文件几乎都在这里,如分页式内存管理,内核内存分配器等等。几个重要的文件有,swapfile.c是管理交换文件和交换设备的源程序。Page_io.c实现了内存与存储空间底层的数据传输。Mmap.c中包含了虚拟空间映射等函数。
(3)       fs目录:文件处理实现的目录,很多熟悉的系统调用都藏在其中,比如exec.c,open.c,read_write.c,select.c,fifo.c,fcntl.c等等。要是想知道平时系统调用对文件操作的函数,管道的实现等,可以看一下。
(4)       arch目录:前面提过,都是架构。
(5)       include目录:内有Linux源程序下的所有头文件
(6)       net目录:是个和Linux网络有关的C文件目录。
等等,还有ipc,drivers,init等等……
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值