内核代码介绍

上一篇 / 下一篇  2006-12-13 18:07:27

Linux内核源代码是公开的,标准内核可以在以下网站上得到:
ftp://ftp.kernel.org/pub/
http://www.kernel.org/pub/

针对某一类型CPU,同样有相应的patch
ARM:ftp://ftp.arm.linux.org.uk/

Linux内核源代码包含以下子目录:
>>     arch-这个目录包含与体系结构相关的代码。对每个支持的体系结构(MIPS,ARM,386,等等),在"arch"下有一个相应的子目录。每个体系结构的子目录下有四个主要的子目录:
>>     kernel, 包含与体系结构相关的内核代码
>>     mm, 包含体系结构相关的内存管理代码
>>     lib, 包含与体系结构相关的库代码 (vsprintf 等等)
>>     mach- (目标平台目录), 包含基于此体系结构平台相关的代码
>>     documentation-包含内核的文档
>>     drivers-包含设备驱动代码。每类设备有相应的子目录,如char, block, net, 等等
>>     fs-包含文件系统的代码。对每个支持的文件系统(ext2, proc,JFFS2 等等) 有相应的子目录
>>     include-包含内核的头文件,对每一种体系结构,分别有相应的子目录asm-*
>>     init-包含内核的初始化代码
>>     kernel-包含内核代码
>>     lib-包含内核的库代码
>>     mm-包含内核管理代码
>>     net-包含和网络相关代码

内核编译

oldconfig
default configuration
arch/cpu/defconfig
#make oldconfig

config
text based interactive configuration
#make config

menuconfig
Text based menu driven
#make menuconfig

xconfig
X GUI based (tcl/tk)
#make xconfig

save configuration
.config
Source code generation based on new configuration

menu creation
arch/cpu/config.in and other Config.in files

下面是和嵌入式有关的linux操作 我的学业~

编译环境(2.4.x):.config, Makefile,ld脚本
Make dep
Make menuconfig
Make zImage
Make modules

Make dep建立文件的依赖关系
make menuconfig来配置内核(根据各个目录的config.in来决定,最开始的config.in是最顶层的Makefile配置下的ARCH目录下的config.in),config.in生成最顶层的.config,提供给每个目录下的Makefile来决定变异那些文件。

最顶层的Makefile决定总体的一下变量,最重要的有:
ARCH := arm

HOSTCC       = gcc
HOSTCFLAGS     = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

CROSS_COMPILE   = arm-linux-
每个目录下的Makefile来决定哪些模块被编译:
O_TARGET := misc.o

export-objs               := mcp-core.o mcp-sa1100.o ucb1x00-core.o

obj-$(CONFIG_MCP)           += mcp-core.o
obj-$(CONFIG_MCP_SA1100)     += mcp-sa1100.o
obj-$(CONFIG_MCP_UCB1200)     += ucb1x00-core.o
obj-$(CONFIG_MCP_UCB1200_AUDIO) += ucb1x00-audio.o
obj-$(CONFIG_MCP_UCB1200_TS)   += ucb1x00-ts.o

include $(TOPDIR)/Rules.make

Arch/arm/Makefile也很总要,决定一些总要的参数
ifeq ($(CONFIG_CPU_32),y)
PROCESSOR     = armv
TEXTADDR       = 0xC0008000
LDSCRIPT       = arch/arm/vmlinux-armv.lds.in
endif

内核的链接:arch/arm/vmlinux-armv(o).lds.in, vmlinux.lds
/* ld script to make ARM Linux kernel
* taken from the i386 version by Russell King
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
*/
OUTPUT_ARCH(arm)
ENTRY(stext)
SECTIONS
{
    . = TEXTADDR;
    .init : {               /* Init code and data       */
          _stext = .;
          __init_begin = .;
                *(.text.init)
          __proc_info_begin = .;
                *(.proc.info)
http://blog.lupaworld.com/p_w_picpath/code_editor/rm.gif
          __init_end = .;
    }

    /DISCARD/ : {             /* Exit code and data       */
          *(.text.exit)
          *(.data.exit)
          *(.exitcall.exit)
    }

    .text : {               /* Real text segment         */
    …

熟悉内核编译环境

熟悉.config文件
a.最顶层的config.in文件(arch/arm目录下,arm由最顶层的Makefile决定)
b.各级目录下的config.in文件
c.最后生成的.config文件(arch/arm/def-configs/)
熟悉Makefile文件
a.最顶层的Makefile文件
b./arch/arm/Makefile
c.其它目录的Makefile(主要是driver目录下的)
熟悉vmlinux.lds文件 (arch/arm/目录下)

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-09-07  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 5286
  • 日志数: 13
  • 建立时间: 2006-12-13
  • 更新时间: 2008-02-18

RSS订阅

Open Toolbar