这么内核是怎样被编译成二补码文件的呢,又是怎样在执行前放入显存。下边将开始介绍编译内核源代码。显存启动源于执行arch/x86/boot/目录中的实模式汇编代码。查看arch/x86/kernel/setup_32.c文件可以看出保护模式的内核如何获取实模式内核搜集的信息。第一条信息来自于init/main.c中的代码,深入挖掘init/calibrate.c可以对BogoMIPS校正理解得更清楚,而include/asm-your-arch/bugs.h则包含体系构架相关的检测。

内核中的时间服务由留驻于arch/your-arch/kernel/中的体系构架相关的部份和实现于kernel/timer.c中的通用部份组成。从include/linux/time*.h头文件中可以获取相关的定义。

jiffies定义于linux/jiffies.h文件中。HZ的值与处理器相关,可以从include/asm-your-arch/param.h找到,显存管理源代码储存在顶楼mm/目录中。

linux内核映像文件_内核映像文件是什么_内核映像文件时

Linux的官方源代码发布网址是。其源代码目录结构示意图如下:

linux内核映像文件_内核映像文件是什么_内核映像文件时

linux内核映像文件_内核映像文件时_内核映像文件是什么

借助内核配置工具手动生成.config的内核配置文件linux培训班,这是编译的第一步,.config文件坐落源代码目录下,其选项的位置按照它们在内核配置工具中的位置进行排序,我们来瞧瞧一个.config文件的摘录:

## Automatically generated make config: don't edit#CONFIG_X86=yCONFIG_MMU=yCONFIG_UID16=yCONFIG_GENERIC_ISA_DMA=y    //这4行位于顶层菜单中
# # Code maturity level options # CONFIG_EXPERIMENTAL=y CONFIG_CLEAN_COMPILE= CONFIG_STANDALONE=y CONFIG_BROKEN_ON_SMP=y  //这4行位于代码成熟度选项菜单中
# # General setup # CONFIG_SWAP=y CONFIG_SYSVIPC=y #CONFIG_POSIX_MQUEUE is not set CONFIG_BSD_PROCESS_ACCT=y  //这4行位于通用设置选项菜单中

最后来简略的介绍一下Linux内核的Makefile文件,也只能简单的介绍一下啦,这个而且重难点,这儿我稍为说一下,之后会具体去学习。Linux内核是一种单体内核linux内核映像文件,并且通过动态加载模块的方法,使它的开发十分灵活便捷。这么,它是怎样编译内核的呢?我们可以通过剖析它的Makefile入手。以下是一个简单的hello内核模块的Makefile.

ifneq ($(KERNELRELEASE),)obj-m:=hello.oelseKERNELDIR:=/lib/modules/$( uname -r)/buildPWD:=$(shell pwd)default:        $(MAKE) -C $(KERNELDIR)  M=$(PWD) modulesclean:        rm -rf *.o *.mod.c *.mod.o *.koendif

首先,因为make前面没有目标,所以make会在Makefile中的第一个不是以.开头的目标作为默认的目标执行。于是default成为make的目标。make会执行$(MAKE)-C$(KERNELDIR)M=$(PWD)modulesshell是make内部的函数,make执行了两次。

第一次执行时是读hello模块的源代码所在目录/home/study/prog/mod/hello/下的Makefile。

第二次执行时是执行/usr/src/linux/下的Makefile时.

这其中很复杂,我也不晓得如何讲了。关于makemodules的更详尽的过程可以在scripts/Makefile.modpost文件的注释中找到。不过我找到了一个大牛写的跟我一下学Makefile的博客,我把博客地址附在下边,供你们参考一下:

小结

本章探究了目标文件的编译,链接过程linux内核映像文件,以及目标文件的结构,便于理解可执行代码的最终方式,建立Linux内核囊括了内核编译所须要的工具,最后还简单的描述了Makefile学linux有前途吗,,=那些都是难点。

本文原创地址://lrxjmw.cn/lnhydmncqdsy.html编辑:刘遄,审核员:暂无