资源预览内容
第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
第9页 / 共21页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
内核的移植及编译内核的移植及编译目目 录录Linux内核源代码目录结构内核源代码目录结构Linux内核加载过程内核加载过程Linux内核的配置内核的配置Linux 内核移植的准备工作内核移植的准备工作Linux驱动程序的编译驱动程序的编译一个一个demo驱动程序编译的例子驱动程序编译的例子Linux内核源代码目录结构内核源代码目录结构(1/5)Linux内核源代码目录结构内核源代码目录结构(2/5)Documentation内核的说明文档。内核的说明文档。drivers设备驱动程序,其下细分为不同种类的设备。如设备驱动程序,其下细分为不同种类的设备。如block、char、mtd、net、usb、video等等。等等。fs内核支持的文件系统的实现,如内核支持的文件系统的实现,如ext2、ext3、cramfs、jffs2、nfs等。等。Linux内核源代码目录结构内核源代码目录结构(3/5)include头文件。与系统相关的头文件放在头文件。与系统相关的头文件放在include/linux下,下,与与ARM体系结构相关的头文件放在体系结构相关的头文件放在include/asm-arm下。下。init内核初始化代码。内核初始化代码。ipc进程间通信代码。进程间通信代码。Linux内核源代码目录结构内核源代码目录结构(4/5)kernel内核的核心代码,包括进程调度、定时器等。和内核的核心代码,包括进程调度、定时器等。和arm平平台相关的核心代码在台相关的核心代码在arch/arm/kernel目录下。目录下。lib库文件代码库文件代码mm内存管理代码,和内存管理代码,和arm平台相关的内核管理代码在平台相关的内核管理代码在arch/arm/mm目录下。目录下。Linux内核源代码目录结构内核源代码目录结构(5/5)net网络相关的代码,实现了各种常见的网络协议。网络相关的代码,实现了各种常见的网络协议。scripts包含用于配置内核的各种脚本文件。只在配置时是有意包含用于配置内核的各种脚本文件。只在配置时是有意义的。义的。sound音频设备驱动的通用代码和硬件驱动代码都在这个文件音频设备驱动的通用代码和硬件驱动代码都在这个文件件下面。件下面。Linux内核加载过程内核加载过程(1/2)通常,通常,Linux内核是经过内核是经过gzip压缩之后的映象文件压缩之后的映象文件 bootloader复制压缩内核到内存空间复制压缩内核到内存空间 内核自解压内核自解压 运行内核运行内核编译完成的编译完成的Linux内核在哪里?内核在哪里? ./vmlinux,elf格式未压缩内核格式未压缩内核 arch/arm/boot/compressed/vmlinux,压缩以后的,压缩以后的elf格格式内核式内核 arch/arm/boot/zImage,压缩内核,压缩内核Linux内核加载过程内核加载过程(2/2)这是这是linux编译时所依赖的文件。我们在配置内核时所编译时所依赖的文件。我们在配置内核时所做的任何修改,最终都会在这个文件中体现出来。它是做的任何修改,最终都会在这个文件中体现出来。它是Makefile对内核进行处理的重要依据。对内核进行处理的重要依据。一般来说,内核提供了芯片公司一般来说,内核提供了芯片公司demo板的板的.config文件文件,我们一般找一个近似的进行修改。如,我们一般找一个近似的进行修改。如S3C2410平台上平台上可以选择可以选择s3c2410_deconfig这个文件。这个文件。Linux内核的配置内核的配置(1/6).config文件文件三种配置方式三种配置方式make config基于文本对话的配置方式,比较细致,但是浪费时间。基于文本对话的配置方式,比较细致,但是浪费时间。对专业的内核开发人员比较合适。对专业的内核开发人员比较合适。make xconfig基于图形界面的配置方式。非常直观,但是需要特殊的基于图形界面的配置方式。非常直观,但是需要特殊的软件支持,一般不推荐。软件支持,一般不推荐。make menuconfig推荐的内核配置方式,采用目录的方式,直观,容易使推荐的内核配置方式,采用目录的方式,直观,容易使用。用。Linux内核的配置内核的配置(2/6)关于关于Kconfig在进行在进行make menuconfig时,目录的生成依赖于时,目录的生成依赖于Kconfig文件。文件。一般来说,每个源代码目录下都有一个一般来说,每个源代码目录下都有一个Kconfig文件。文件。config DM9000tristate DM9000 supportdepends on ARM | BLACKFIN | MIPSselect CRC32select MII-help-Support for DM9000 chipset.To compile this driver as a module, choose M here.The module will be called dm9000.Linux内核的配置内核的配置(3/6)关于关于Kconfig在进行在进行make menuconfig时,目录的生成依赖于时,目录的生成依赖于Kconfig文件。文件。一般来说,每个源代码目录下都有一个一般来说,每个源代码目录下都有一个Kconfig文件。文件。config DM9000tristate DM9000 supportdepends on ARM | BLACKFIN | MIPSselect CRC32select MII-help-Support for DM9000 chipset.To compile this driver as a module, choose M here.The module will be called dm9000.Linux内核的配置内核的配置(3/6)Kconfig对对.config文件的影响:文件的影响:CONFIG_DM9000=ymake menuconfig对内核配置所做的修改最终反应在对内核配置所做的修改最终反应在.config文件中。如上所示,在文件中。如上所示,在.config文件中文件中CONFIG_DM9000=y被定义为被定义为y。Linux内核的配置内核的配置(4/6)Kconfig对对Makefile的影响:的影响:.obj-$(CONFIG_DM9000) += dm9000.oCONFIG_DM9000是是tristate类型,有三个可能取值:类型,有三个可能取值:y:编译进内核:编译进内核m:编译成模块:编译成模块n:不进行编译:不进行编译若是若是bool类型,则只有两种可能,类型,则只有两种可能,y或者或者n。Linux内核的配置内核的配置(5/6)关于关于MakefileLinux内核源码的每个目录下都有一个内核源码的每个目录下都有一个Makefile,由该,由该 Makefile 对源代码的编译、链接等操作进行控制。对源代码的编译、链接等操作进行控制。编译完成后,每个源代码目录下都会生成一个名叫编译完成后,每个源代码目录下都会生成一个名叫 built-in.o的文的文件。这个文件由源代码目录下的所以源件。这个文件由源代码目录下的所以源 文件编译后的目标文件链文件编译后的目标文件链接而成;而不同的接而成;而不同的built-in.o 又被上层目录中的又被上层目录中的Makefile链接成更链接成更大的大的builtin. o,直到最后链接成为一个内核,直到最后链接成为一个内核vmlinux.o。Linux内核的配置内核的配置(6/6)关于交叉编译关于交叉编译由于我们的目标平台是由于我们的目标平台是ARM,而在,而在x86平台上进行开发平台上进行开发,故必须进行交叉编译。,故必须进行交叉编译。修改内核的顶层修改内核的顶层Makefile:.ARCH ?= armCROSS_COMPILE ?= arm-linux-表示我们的目标平台是表示我们的目标平台是ARM构架的,而使用的交叉编译构架的,而使用的交叉编译器的前缀是器的前缀是arm-linuxLinux 内核移植的准备工作内核移植的准备工作(1/2)获得获得.config文件文件前面提到,前面提到,.config是内核编译时所依赖的重要文件,与具是内核编译时所依赖的重要文件,与具体的硬件构架和开发板类型相关。我们选择内核提供的体的硬件构架和开发板类型相关。我们选择内核提供的s3c2410_defconfig进行修改。进行修改。cp arch/arm/configs/s3c2410_defconfig .configLinux 内核移植的准备工作内核移植的准备工作(2/2)l 编译进内核编译进内核l 编译成模块编译成模块Linux驱动程序的编译驱动程序的编译(1将将demo.c拷贝到拷贝到./drivers/char目录下目录下(2vi ./drivers/char/Kconfig 添加:添加:config MY_DEMOtristate “ my demo driver”depends on ARMhelpthis is my demo driver(留意:上面(留意:上面4行每行前面都是行每行前面都是tab键)键)一个一个demo驱动程序编译的例子驱动程序编译的例子(1/2)在内核源代码的主目录下在内核源代码的主目录下(3make menuconfig 进入进入character devices,选择,选择my demo driver为内核编译或者模块编译为内核编译或者模块编译(4vi ./drivers/char/Makefile 添加一行添加一行obj-$(CONFIG_MY_DEMO) += demo.o(5make clean & make一个一个demo驱动程序编译的例子驱动程序编译的例子(2/2)
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号