这么内核是怎样被编译成二补码文件的呢,又是怎样在执行前放入显存。下边将开始介绍编译内核源代码。显存启动源于执行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的官方源代码发布网址是。其源代码目录结构示意图如下:
借助内核配置工具手动生成.config的内核配置文件linux培训班,这是编译的第一步,.config文件坐落源代码目录下,其选项的位置按照它们在内核配置工具中的位置进行排序,我们来瞧瞧一个.config文件的摘录:
#
# Automatically generated make config: don't edit
#
CONFIG_X86=y
CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_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.o
else
KERNELDIR:=/lib/modules/$( uname -r)/build
PWD:=$(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *.mod.c *.mod.o *.ko
endif
首先,因为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编辑:刘遄,审核员:暂无