




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
获取Linux内核源码:/内核配置结果:生成.config举例:配置项:CONFIG_DM9000 1)C源码: CONFIG_DM9000 宏定义。 2)子目录下Makefile :drivers/net/Makefile 内核子目录Makefile: Obj-y +=xxx.o obj-m +=yyy.o 3)include/config/auto.conf 4)include/linux/autoconf.h .config-autoconf.h-auto.conf内核源码结构:目录名描述arch体系结构相关的代码,对于每个架构的CPU,arch目录下有一个对应的子目录,比如:arch/arm/,arch/i386/block块设备的通用函数crypto常用加密和散列算法(如AES、SHA等)drivers所有的设备驱动程序,里面每一个子目录对应一类驱动程序,比如drivers/block/为块设备驱动程序,drivers/char/为字符设备驱动程序,drivers/mtd/为NOR Flash、NAND Flash等存储设备的驱动程序。fsLinux支持的文件系统的代码,每个子目录对应一种文件系统,比如fs/jffs2/、fs/ext3/include内核头文件,有几本头文件(存放在include/linux/目录下)、各种驱动功能部件的头文件(比如include/media/,include/mtd/、include/net/),各种体系相关的头文件(如include/asm-arm/,include/asm-i386/)。当配置内核后,include/asm/是某个include/asm-xxx/(比如include/asm-arm/)的链接。Init内核的初始化代码(不是系统的引导代码),其中的main.c文件中的start_kernel函数是内核引导后运行的第一个函数ipc进程间通信的代码kernel内核管理的核心代码,与处理器相关的代码位于arch/*/kernel/目录下lib内核用到的一些库函数代码,比如crc32.c、string.c,与处理器相关的库函数代码位于arch/*/lib/目录下mm内存管理代码,与处理器相关的内存管理代码位于arch/*/kernel/目录下net网络支持代码,每个子目录对应于网络的一个方面security安全、密钥的驱动程序sound音频设备的驱动程序usr用来制作一个压缩的cpio归档文件:initrd的镜像,它可以作为内核启动后挂接(mount)的第一个文件系统(一般用不到)Documentation内核文档scripts用于配置、编译内核的脚本文件Linux 内核Makefile文件分类名称描述顶层Makefile它是所有Makefile文件的核心,从总体上控制着内核的编译、连接.config配置文件、在配置内核时生成。所有Makefile文件(包括顶层目录及各级子目录)都是根据.config来决定使用哪些文件Arch/$(ARCH)/Makefile对应体系结构的Makefile,它用来决定哪些体系结构相关的文件参与内核的生成,并提供一些规则来生成特定格式的内核映像Scripts/makefile.*Makefile共用的通用规则、脚本等Kbuild Makefiles各级子目录下的Makefile,它们相对简单,被上一层Makefile调用来编译当前目录下的文件。内核文档Documentation/kbuild/makefiles.txt对内核中Makefile的作用、用法讲解的很透彻。Linux 内核的编译过程从顶层Makefile开始,然后递归地进入各级子目录调用它们的Makeifle,分3个步骤。1) 顶层Makefile决定内核根目录下哪些子目录将被编译进内核。Init-y :=init/drivers-y :=drivers/sound/net-y :=net/Libs-y :=lib/core-y :=usr/2) arch/$(ARCH)/Makefile决定arch/$(ARCH)目录下哪些文件,哪些目录将被编写进内核。内核 1)处理uboot传入的参数2) 最终目的:应用程序,挂接根文件系统Makefile的3大作用:(1)决定编译哪些文件1) obj-y用来定义哪些文件被编进(built-in)内核 Obj-y中定义的.o文件由当前目录下的.c或.s文件编译生成,它们连同下级子目录的built-in.o文件一起被组合成(使用“$(LD)-r”命令)当前目录下的built-in.o文件。这个built-in.o文件将被它的上一层Makefile使用。2) obj-m用来定义哪些文件被编译成可加载模块(Loadable module)。 obj-m中定义的.o文件由当前目录下的.c或.s文件编译生成,它们不会被编进built-in.o中,而是被编成可加载模块。一个模块可以由一个或几个.o文件组成。对于只有一个源文件的模块,在obj-m中直接增加它的.o文件:obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o对于有多个源文件的模块,除在obj-m中增加一个.o文件外,还要定义一个-objs变量来告诉Makefile这个.o文件由哪些文件组成。obj-$(CONFIG_ISDN) +=isdn.o isdn-objs :=isdn_net_lib.o isdn_v110.o isdn_common.o3) lib-y用来定义哪些文件被编成库文件。lib-y中定义的.o文件由当前目录下的.c或.s文件编译生成,它们被打包成当前目录下的一个库文件:lib.a同时出现在obj-y, lib-y中的.o文件,不会被包含进lib.a中要把这个lib.a编进内核中,需要在顶层Makefile中libs-y变量中列出当前目录,要编成库文件的内核代码一般都在这两个目录下:lib/ , arch/$(ARCH)/lib/。4) obj-y、obj-m还可以用来指定要进入的下一层子目录。Linux中一个Makefile文件只负责生成当前目录下的目标文件,子目录下的目标文件由子目录的Makefile生成。Linux的编译系统会自动进入这些子目录调用它们的Makefile,只是在这之前指定这些子目录。Obj-$(CONFIG_JFFS2_FS)+=jffs2/(2) 怎样编译这些文件1) 即编译选项、连接选项是什么。这些选项分3类: 1、 全局的(适用于整个内核代码树) 全局选项在顶层Makefile和arch/$(ARCH)$/Makefile中定义,这些选项的名称为:CFLAGS、AFLAGS、LDFLAGS、ARFLAGS、它们分别是编译C文件的选项、编译汇编文件的选项、连接文件的选项、制作库文件的选项。2、 局部选项,它们在各个子目录中定义,名称为:EXTRA_CFLAGS、EXTRA_AFLAGS、EXTRA_LDFLAGS、EXTRA_ARFLAGS。3、 如果想针对某个文件定义它的编译选项,可以使用CFLAGS_$,AFLAGS_$。前者用于编译某个C文件,后者用于编译某个汇编文件。如:(3) 怎样连接这些文件,它们的顺序如何。顶层Makefile中:libs-y :=lib/Libs-y 等都是目录名,在顶层Makefile中,这些目录名的后面直接加上built-in.o或lib.a,表示要连接进内核的文件。Init-y:=$(patsubst %/, %/built-in.o,$(init-y)Init-y 初值为:init/ 经过交换后,init-y 变为 init/built-in.o。总结:1)配置文件.config中定义了一系列的变量,makefile将结合它们来决定哪些文件被编进内核、哪些文件被编成模块,涉及哪些子目录。2) 顶层Makefile和arch/$(ARCH)/Makefile决定根目录下哪些子目录、arch/$(ARCH)目录下哪些文件和目录将被编进内核。3) 最后,各级子目录下的Makefile决定所在目录下哪些文件将被编进内核,哪些文件将被编成模块(即驱动程序),进入哪些子目录继续调用它们的makefile。4) 顶层Makefile和arch/$(ARCH)/Makefile设置了可以影响所有文件的编译、连接选项:CFLAGS、AFLAGS、LDFLAGS、ARFLAGS。5) 各级子目录下的Makefile中可以设置能够影响当前目录下所有文件的编译、连接选项:EXTRA_CFLAGS、EXTRA_AFLAGS、EXTRA_LDFLAGS、EXTRA_ARFLAGS;还可以设置可以影响某个文件的编译选项:CFALGS_$, AFLAGS_$。6) 顶层Makefile按照一定的顺序组织文件,根据连接脚本arch/$(ARCH)/kernel/vmlinux.lds生成内核影响文件vmlinux。Kconfig分析所有配置工具都是通过读取arch/$(ARCH)/Kconfig文件来生成配置界面,这个文件是所有配置文件的总入口,它会包含其他目录的Kconfig文件。Kconfig用于配置内核,它就是各种配置界面的源文件。内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config。Kconfig文件的语法可以参考Documentation/kconfig-language.txt文件。config条目bool表示变量类型,即CONFIG_JFFS2_FS_POSIX_ACL的类型。有5中类型:bool、tristate、string、hex和int。其中的tristate和string是基本的类型。其他类型是它们的变种。bool变量取值有两种:y和n。tristate取值有3中:y、n、m 。String变量取值为字符串。Hex变量取值为十六进制的数据。Int变量取值为十进制的数据。Choice条目Prompt“ARM system type”给出提示信息“ARM system type”,光标选中它后按回车键进入,就可以看到多个config条目定义的配置选项。Choice条目中定义的变量类型只能有两种:bool和tristate,不能同时有这两种类型的变量。对于bool类型的choice条目,只能在多个选项中选择一个;对于tristate类型的choice条目,要么就把多个(可以是一个)选项都设为m;要么就像bool类型的choice条目一样,只能选一个。Comment条目Comment条目用于定义一些帮助新,它在配置过程中出现在界面的第一行,并且这些帮助信息会出现在配置文件中(作为注释)。source 条目Source条目用于读入另一个Kconfig文件。如:source “net/Kconfig”Linux 内核配置选项配置内核一般的做法是在某个默认配置文件的基础上进行修改,比如我们可以先加载配置文件arch/arm/configs/s3c2410_defconfig,再增加、去除某些配置选项。配置界面主菜单描述Code maturity level options一般不设置Genenal setup常规设置,一般使用默认设置Loadable module support可加载模块支持Block layer块设备层:用于设置块设备的一些总体参数System type系统类型,选择CPU的架构,开发板类型等与开发板相关的配置选项Bus supportPCMCIA/CardBus总线的支持Kernel features用于设置内核的一些参数,比如是否支持内核抢占Boot options启动参数,一般不用理会Floating point emulation浮点运算仿真功能,一般选择“NWFPE math emulation”Userspace binary formats可执行文件格式:一般都选择支持ELF、a.out格式Power management options电源管理选项Networking 网络协议选项,通常可以在选择“networking suppot”后,使用默认配置Device divers 设备驱动程序File systems文件系统:可以在里面选择要支持的文件系统,如EXT2、JFF2等Profiling support 对系统的活动进行分析,仅供内核开发者使用Kernel hacking调试内核时的各种选项Security options安全选项,一般使用默认配置Cryptographic option加密选项Library routines库子程序System type 菜单在顶层Makefile中修改“ARCH ?=arm”,执行“make menuconfig”后就可以看到system Type菜单,进入它将得到另一个界面。“ARM system type”用来选择体系结构S3C2410 Machines-表示这又是一个菜单,用来选择开发板类型对于开发板“SMDK2410/A9M2410”它的配置项为CONFIG_ARCH_SMDK2410,在arch/arm/mach-s3x2410/Makefile中可以看到如下一行Obj-$(CONFIG_ARCH_SMDK2410) +=mach-smdk2410.oDevice drivers 菜单Device drivers 子菜单描述Generic driver options对应drivers/base目录,这是设备驱动程序中的一些基本和通用的配置选项Connetctor-unified userspacekernerlspace linker对应drivers/connector 目录Memory technology device(MTD)support对应drivers/mtd目录,它用于支持各种新型的存储设备,比如NOR Flash NAND FLASH 等Parallel port support对应drivers/parport目录,它用来支持各种并口设备,在一般嵌入式开发板中用不到Plug and play support对应于drivers/pnp目录,支持各种”即插即用”的设备Block devices 对应drivers/block目录,包括回环设备,RAMDISK等驱动ATA/ATAPI/MFM/RLL support对应drivers/ide目录,它用来支持ATA/ATAPI/MFM/RLL接口的硬盘、软盘、光盘SCSI device support对应drivers/scsi目录,支持SCSI接口设备Network device support对应drivers/net目录,用来支持各种网络设备,CS8900,DM9000等Input device support对应drivers/input目录,用来支持各类输入设备,如键盘、鼠标等Character devices 对应于drivers/char目录,它包含各种字符设备的驱动程序。I2C supportDrivers/i2c目录Misc devices对应drivers/misc目录,用来支持一些不好分类的设备,成为杂项设备Multifunction device driversDrivers/mfd Led devicesDrivers/leds目录,包含各种LED驱动程序USB supportDrivers/usbMMC/SD card supportFrivers/mme 用于支持各种MMC/SD卡Real time clock对应drivers/rtc目录,用来支持各种实时时钟设备。修改内核以支持S3C2410开发板1) 先修改顶层Makefile,如下所示:ARCH?=armCROSS_COMPILE?=arm-linux-2) 使用arch/arm/configs/smdk2410_defconfig文件来配置内核,它生成.config配置文件,以后就可以直接使用“make menuconfig”修改配置了Make smdk2410_defconfig3) 最后是变异生成内核,执行“make”命令将在顶层目录下生成内核映像文件vmlinux;执行make uImage 除生成vmlinux外,还在arch/arm/boot/目录下生成u-boot格式的内核映象文件uImage。内核启动分析1)引导阶段Arch/arm/kernel/head.s中mrcp15, 0, r9, c0, c0 get processor idbl_lookup_processor_type r5=procinfo r9=cpuid/调用函数,输入参数r9=cpuid返回值r5=procinfomovsr10, r5 invalid processor (r5=0)?beq_error_p yes, error pbl_lookup_machine_type r5=machinfo/判断是否支持当前开发 板movsr8, r5 invalid machine (r5=0)?beq_error_a yes, error abl_vet_atagsbl_create_page_tables_lookup_processor_type、_ _lookup_machine_type这两个函数都是在arch/arm/kernel/head-common.S中定义了的。内核映象中,定义了若干个proc_info_list结构(它的结构体原型在(include/asm-arm/procinfo.h中定义),表示它支持的CPU。对于ARM架构的CPU,这些结构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林省白城市工厂消防安全测试题八(含答案)
- 殡葬专业考试试题及答案
- 专业课的试题及答案
- 学位英语历真题及答案
- 2025年药剂师执业考试试题及答案
- 初二英语期末试卷及答案
- 公共卫生考试题及答案
- 电力安全生产知识竞赛考试试题有答案
- 水产品加工工技术考核试卷及答案
- 焊工技师考试试题及答案
- 基础电工安全培训课件
- 2025年财会类资产评估师资产评估基础-资产评估基础参考题库含答案解析(5卷)
- 法律顾问合同协议书模板
- 2025年淮南市潘集区公开招聘社区“两委”后备干部10名考试参考试题及答案解析
- 河北省琢名小渔名校联考2025-2026学年高三上学期开学调研检测数学(含答案)
- (2025)防溺水知识竞赛题库含答案(完整版)
- 2025年校招:财务岗试题及答案
- 项目工程审计整改方案(3篇)
- 2025年医院心理测试题范文(附答案)
- 2025年民政行业技能鉴定考试-墓地管理员考试历年参考题库含答案解析(5套典型题)
- 小学数学命题培训课件
评论
0/150
提交评论