欢迎来到天天文库
浏览记录
ID:5656759
大小:463.00 KB
页数:49页
时间:2017-11-13
《第10章 系统内核的裁剪与编译》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十章系统内核的裁剪与编译Linux作为一个免费、自由软件,内核版本不断升级。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新裁剪、编译内核。10.1系统内核的工作机制如果说Linux的shell是用户或用户应用程序与计算机系统的接口(作业级),则Linux内核可以看成是shell与硬件的接口,它们之间的关系如图10-1所示。图10-1系统层次关系硬件系统内核shell应用程序用户通过shell与计算机硬件打交道,但
2、硬件识别的是二进制,因此由系统内核来充当翻译与解释工作,以便于用户与硬件通信。系统内核的一些核心函数文件在/usr/src/linux-2.4.20-8/kernel目录下。其中有:acct.c、capability.c、context.c、cpufreq.c、dma.c、exec_domain.c、exit.c、fork.c、futex.c、info.c、itimer.c、kallsyms.c、kksymoops.c、kmod.c、ksyms.c、lowlat.c、Makefilemodule.c、pan
3、ic.c、pid.c、pm.c、printk.c、profile.c、ptrace.c、resource.c、sched.c、signal.c、softirq.c、sys.c、sysctl.c、time.c、timer.c、uid16.c、user.cLinux是开放的操作系统,其源代码是免费的。通过学习这些源代码可以学到许多东西;因为在/kernel目录下的关键文件解释了系统内核是如何工作的。例如、了解系统内核的panic、fork和其他一些系统函数,会使你对内核如何与硬件和用户环境交互有更好的理解。当然、
4、要读懂它不但要有C的基础还要查阅大量的文献资料。info.c例程执行sysinfo()系统调用,提供Linux系统的信息,如可用的内存、交换空间和文件系统信息等。内存信息包括物理内存的总量、可用内存的大小和正在使用的缓存;交换空间信息包括总的交换分区的大小和未使用的交换分区的大小。sysinfo()也向程序提供当前的进程号。具体程序如下:/**linux/kernel/info.c**Copyright(C)1992DarrenSenn*//*Thisimplementsthesysinfo()system
5、call*/#include#include#include#include#includeasmlinkagelongsys_sysinfo(structsysinfo*info){structsysinfoval;memset((char*)&val,0,sizeof(structsysinfo));cli();val.uptime=jiffie
6、s/HZ;val.loads[0]=avenrun[0]<<(SI_LOAD_SHIFT-FSHIFT);val.loads[1]=avenrun[1]<<(SI_LOAD_SHIFT-FSHIFT);val.loads[2]=avenrun[2]<<(SI_LOAD_SHIFT-FSHIFT);val.procs=nr_threads-1;sti();si_meminfo(&val)si_swapinfo(&val);{unsignedlongmem_total,sav_total;unsign
7、edintmem_unit,bitcount;/*Ifthesumofalltheavailablememory(i.e.ram+swap)*islessthancanbestoredina32bitunsignedlongthen*wecanbebinarycompatiblewith2.2.xkernels.Ifnot,*well,inthatcase2.2.xwasbrokenanyways...**-ErikAndersen*/mem_total=
8、val.totalram+val.totalswap;if(mem_total9、10、mem_total1){bitcount++;mem_unit>>=1;sav_total=mem_total;mem_total<<=1;if(m
9、
10、mem_total1){bitcount++;mem_unit>>=1;sav_total=mem_total;mem_total<<=1;if(m
此文档下载收益归作者所有