内核移植ppt课件_第1页
内核移植ppt课件_第2页
内核移植ppt课件_第3页
内核移植ppt课件_第4页
内核移植ppt课件_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1LINUX内核移植2 U-Boot分析 lBootloader代码是嵌入式系统复位后进入操作系统前执行的一段代码。l经过Bootloader的代码初始化处置器的各存放器以及其他外部设备,建立存储器映射图以及初始化堆栈,为操作系统提供根本的运转环境。由于嵌入式系统的硬件的多样性,不能够有通用Bootloader,因此需求根据详细硬件特点移植。l本节以目前运用比较广泛的U-Boot为例讲解嵌入式系统Bootloader移植的方法。3获取U-Boot lU-Boot的源代码可以从ftpftp.denx.de/pub/u-boot/上获得。运用匿名用户身份登录到U-Boot的FTP效力器后,进入pu

2、b/u-boot目录,该目录包含了U-Boot一切代码。4U-Boot工程构造分析 l学习一个软件,尤其是开源软件,首先应该从分析软件的工程构造开场。一个好的软件有良好的工程构造,对于读者学习和了解软件的架构以及任务流程都有很好的协助。 lU-Boot的源代码规划和Linux类似,运用了按照模块划分的构造,并且充分思索了体系构造和跨平台问题,其源代码树构造请参考表156U-Boot工程构造分析l表1仅列出了主要的目录,以lib_开头的目录还有很多,分别对应不同体系构造用到的函数操作,这里不一一列出。7board目录 lboard目录存放与开发板有关的文件,每种开发板需求的文件被归纳在board

3、目录的一个目录下。该目录包括每个子目录需求至少提供Makefile和u-boot.lds两个文件,用来设置文件编译的方式以及开发板的硬件资源。如board/samsung/smdk6410目录存放了与smdk6410开发板相关的硬件资源和配置函数。8 common目录 l common目录是与体系构造无关的文件,包括实现各种命令的C言语源代码文件。 9cpu目录l cpu目录存放与CPU相关的文件,每种CPU需求的代码文件存放在以CPU称号命名的子目录下,arm920t存放了arm920t为内核的CPU相关的文件。在每个特定的子目录下都包括cpu.c、interrupt.c和start.S这3

4、个文件,这3个文件是CPU初始化以及配置中断的代码。U-Boot自带了很多CPU相关的代码,用户可以在现有CPU支持的根底上修正本人所需求的配置。 10drivers目录l通用设备的驱动程序存放在drivers目录下。U-Boot自带了许多设备的驱动,包括显示芯片、网络接口控制器、USB控制器、I2C器件等,对于大多数用户而言曾经够用,用户也可以按照本人的需求添加或者修正设备驱动。 11fs目录lfs存放支持的文件系统代码,U-Boot目前支持cramfs、ext2、fat、jffs、reiserfs、yaffs等多种常见的文件系统。12net目录lnet目录是与网络协议有关的代码,比如BOO

5、TP协议、TFTP协议、RARP协议等。 13post目录l post存放与硬件自检有关的代码。 14 rtc目录lrtc目录存放与硬件实时时钟相关的代码。15 tools目录ltools目录存放U-Boot编译过程中用到的一些工具代码。16U-Boot总体任务流程 l与大多数Bootloader类似,U-Boot的启动分成stage1和stage2两个阶段。stage1运用汇编言语编写,通常与CPU体系严密相关,如处置器初始化和设备初始化代码等,该阶段在start.S文件中实现。图1展现了U-Boot中Stage1阶段的启动过程。1718Stage1任务流程 l图1是U-Boot中Stage

6、1任务流程。Stage1的代码都是与平台相关的,运用汇编言语编写占用空间小而且执行速度快。以ARM920为例,Stage1阶段主要是设置各方式程序异常向量表,初始化处置器相关的关键存放器以及系统内存。Stage1担任建立Stage1阶段运用的堆栈和代码段,然后复制Stage2阶段的代码到内存。19Stage2任务流程lStage2阶段普通包括:初始化Flash器件、检测系统内存映射、初始化网络设备、进入命令循环,接纳用户从串口发送的命令然后进展相应的处置。Stage2运用C言语编写,用于加载操作系统内核,该阶段主要是board.c中的start_armboot()函数实现。20U-Boot启动

7、流程分析 lU-Boot支持多种的处置器和多种开发板,主要是该软件有良好的架构,本节以运用ARM处置器的smdk6410开发板为例分析U-Boot的启动流程,在其他的处置器架构上,U-Boot也执行类似的启动流程。图2是U-Boot在ARM处置器的启动步骤。21图2 U-Boot在ARM处置器的启动步骤22内核移植内核移植LinuxLinux引见引见桌面版本:面向PC用户的桌面发行版本,常见的如redhat、fedora、debian、Ubuntu、SUSE、红旗等。Linux内核内核是一切linux系统的中心软件组件。嵌入式领域所说的linux,普通是指linux内核。移植也是指的移植lin

8、ux内核到目的平台。23LinuxLinux操作系统的开展操作系统的开展24Linux系统构造层次25Linux Linux 之父:李纳斯之父:李纳斯托沃兹托沃兹(Linus Torvalds)(Linus Torvalds)26LinuxLinux的来源的来源From: torvaldsklaava.Helsinki.FI (Linus Benedict Torvalds)Newsgroups: comp.os.minixSubject: What would you like to see most in minix?Summary: small poll for my new opera

9、ting systemMessage-ID:Date: 25 Aug 91 20:57:08 GMTOrganization: University of HelsinkiHello everybody out there using minix - I doing afreeoperating systemjust ahobby,wont be big and professional like gnufor 386486AT clones. This hasbeen brewing since April,and is starting to get ready. I like any f

10、eedback onthings people like /dislike in minix,as my OS resembles practical reasons amongother things.I have currently ported bash1.08and gcc1.40,and things seem to work.This implies that Ill get something practical within a few months,and I like toknow what feathers most people would want. Any sugg

11、estions are welcome,but I wontpromise Il implement them:-)Linustorvaldskruuna.helsinki.fiPs. Yes - its free of any minix code,and it has a multi-threaded fs. It is NOTportableuses 386 task switching etc. and it probably never will supportanything other than AT-hard-disks,as thats all I have:-(27Linu

12、xLinux内核的版本号内核的版本号.24其中,其中,2 2是主版本号,是主版本号,6 6是次版本号,是次版本号,2424是修订版本号。是修订版本号。假设次版本号是偶数,阐明是稳定版本。假设次版本号是偶数,阐明是稳定版本。假设次版本号是奇数,那么是开发版本。假设次版本号是奇数,那么是开发版本。我们普通运用稳定版本。我们普通运用稳定版本。28LinuxLinux内核源代码目录构造内核源代码目录构造arch包含和硬件体系构造相关的代码,每种平台占一个相应的目录。如arm、avr32、blackfin、mips等。block块设备驱动程序的IO调度。crypto常用的加密和离散算法

13、,还有一些紧缩和CRC校验算法29LinuxLinux内核源代码目录构造内核源代码目录构造Documentation内核的阐明文档。drivers设备驱动程序,其下细分为不同种类的设备。如block、char、mtd、net、usb、video等等。fs内核支持的文件系统的实现,如ext2、ext3、cramfs、jffs2、nfs等。30LinuxLinux内核源代码目录构造内核源代码目录构造include头文件。与系统相关的头文件放在include/linux下,与ARM体系构造相关的头文件放在include/asm-arm下。init内核初始化代码。ipc进程间通讯代码。31LinuxL

14、inux内核源代码目录构造内核源代码目录构造kernel内核的中心代码,包括进程调度、定时器等。和arm平台相关的中心代码在arch/arm/kernel目录下。lib库文件代码mm内存管理代码,和arm平台相关的内核管理代码在arch/arm/mm目录下。32LinuxLinux内核源代码目录构造内核源代码目录构造net网络相关的代码,实现了各种常见的网络协议。scripts包含用于配置内核的各种脚本文件。只在配置时是有意义的。sound音频设备驱动的通用代码和硬件驱动代码都在这个文件件下面。33Linux内核启动方案Linux内核有两种映像:非紧缩内核Image紧缩内核zImage嵌入式系

15、统存储容量有限,因此通常选择紧缩内核zImage.要运用紧缩内核zImage,需求在映像开头参与解紧缩代码,将zImage解压后,才可以执行。34zImage的构成内核编译完成后,会在arch/arm/boot目录下生成zImage文件。zImage文件的组成:pggy.o:紧缩后的内核文件head.o:系统初级初始化代码文件misc.o:解紧缩代码文件35LinuxLinux内核启动简析内核启动简析( (汇编部分汇编部分对于ARM处置器来讲,Linux内核zImage第一段代码入口位于arch/arm/boot/compressed/head.S文件中。它依次完成如下功能:初始化Cache、

16、Mmu等设置跳转到C言语内核解压函数中 bl decompress_kernel跳转到非紧缩内核启动汇编段 b call_kernel36LinuxLinux内核启动简析内核启动简析( (汇编部分汇编部分arch/arm/boot/compressed/head.S:start:1: mov r7, r1 保管machine idmov r8, r2 保管参数地址mrs r2, cpsr 确定不是在USER方式下tst r2, #3bne not_angelnot_angel:mrs r2, cpsr 强迫转换到SVC方式orr r2, r2, #0 xc0msr cpsr_c, r237Li

17、nuxLinux内核启动简析内核启动简析( (汇编部分汇编部分Bss段清零:not_relocated: mov r0, #01: str r0, r2, #4 R2,BSS开场str r0, r2, #4str r0, r2, #4str r0, r2, #4cmp r2, r3 R3,BSS终了blo 1b38LinuxLinux内核启动简析内核启动简析( (汇编部分汇编部分跳转到C言语实现的解压内核代码:.mov r5, r2 decompress after alloc spacemov r0, r5mov r3, r7bl decompress_kernel实现代码在arch/arm

18、/boot/compressed/misc.c中39LinuxLinux内核启动简析内核启动简析( (汇编部分汇编部分解压代码:ulg decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulgfree_mem_ptr_end_p, int arch_id)output_data = (uch *)output_start;free_mem_ptr = free_mem_ptr_p;free_mem_ptr_end = free_mem_ptr_end_p;_machine_arch_type = arch_id;arch_decom

19、p_setup();makecrc();putstr(Uncompressing Linux.);gunzip();putstr( done, booting the kernel.n)return output_ptr;前往后跳转到call_kernel(b call_kernel)函数,调用内核解压后函数入口。40LinuxLinux内核启动简析内核启动简析( (汇编部分汇编部分call_kernel:bl cache_clean_flush 去除cachebl cache_off 封锁cachemov r0, #0mov r1, r7 machine IDmov r2, r8 参数地址m

20、ov pc, r4r4存放内核解压后地址跳转到arch/arm/kernel/head.S 中。41LinuxLinux内核启动简析汇编部分内核启动简析汇编部分arch/arm/kernel/head.S跳转到此处时处置器的形状:MMU封锁D-cache封锁I-cache能否封锁不重要R0中是0R1中是machine IDR2中是启动参数地址42LinuxLinux内核启动简析汇编部分内核启动简析汇编部分ENTRY(stext)msr cpsr_c, #PSR_F_BIT | PSR_I_BIT |SVC_MODEmrc p15, 0, r9, c0, c0bl _lookup_process

21、or_typemovs r10, r5beq _error_pbl _lookup_machine_typemovs r8, r5beq _error_abl _vet_atagsbl _create_page_tables这一段汇编代码的主要作用,是检查cpu id,architecture number,初始化页表、cpu、bbs等操作,并跳到start_kernel函数43LinuxLinux内核启动简析汇编部分内核启动简析汇编部分lookup_processor_type作用是从硬件中读出CPU的ID,与编译内核时选择的CPU的ID进展比较。假设不一样,那么不能胜利启动。比如,假设在a

22、rm920t的CPU上运转为其他CPU编译的内核,这里就通不过。44LinuxLinux内核启动简析汇编部分内核启动简析汇编部分lookup_machine_type将R1的内容machine ID与编译内核时选择的machine ID比较,假设不同,那么内核不能胜利启动。vet_atags检查tag内核的启动参数的合法性。45LinuxLinux内核启动简析汇编部分内核启动简析汇编部分create_page_tables首先将内核启动地址前0 x4000共16KB的内存空间清零,以便作为内核页表运用。然后,去除I-cache、D-cache,使能MMU,为跳转到C言语实现部分做预备。之后跳转

23、到C函数部分,在arch/arm/kernel/head-common.S中跳转。b call_kernel46LinuxLinux内核启动简析内核启动简析(c(c言语部分言语部分) )C言语入口在init/main.c中:asmlinkage void _init start_kernel(void)early_boot_irqs_off();page_address_init();printk(KERN_NOTICE);printk(linux_banner);setup_command_line(command_line);printk(KERN_NOTICE Kernel comman

24、d line: %sn,boot_command_line);init_IRQ();mem_init();rest_init();47LinuxLinux内核的配置内核的配置(1/6)(1/6).config文件这是linux编译时所依赖的文件。我们在配置内核时所做的任何修正,最终都会在这个文件中表达出来。它是Makefile对内核进展处置的重要根据。 普通来说,内核提供了芯片公司demo板的.config文件,我们普通找一个近似的进展修正。如S3C2410平台上可以选择s3c2410_deconfig这个文件。48LinuxLinux内核的配置内核的配置(2/6)(2/6)三种配置方式mak

25、e config基于文本对话的配置方式,比较细致,但是浪费时间。对专业的内核开发人员比较适宜。make xconfig基于图形界面的配置方式。非常直观,但是需求特殊的软件支持,普通不引荐。make menuconfig引荐的内核配置方式,采用目录的方式,直观,容易运用。49LinuxLinux内核的配置内核的配置(3/6)(3/6)关于Kconfig在进展make menuconfig时,目录的生成依赖于Kconfig文件。普通来说,每个源代码目录下都有一个Kconfig文件。config DM9000tristate DM9000 supportdepends on ARM | BLACKF

26、IN | MIPSselect CRC32select MII-help-Support for DM9000 chipset.To compile this driver as a module, choose M here.The module will be called dm9000.50LinuxLinux内核的配置内核的配置(4/6)(4/6)Kconfig对.config文件的影响:CONFIG_DM9000=ymake menuconfig对内核配置所做的修正最终反响在.config文件中。如上所示,在.config文件中CONFIG_DM9000=y被定义为y。51Linux

27、Linux内核的配置内核的配置(5/6)(5/6)Kconfig对Makefile的影响:.obj-$(CONFIG_DM9000) += dm9000.oCONFIG_DM9000是tristate类型,有三个能够取值:y:编译进内核m:编译成模块n:不进展编译假设是bool类型,那么只需两种能够,y或者n。52LinuxLinux内核的配置内核的配置(6/6)(6/6)关于MakefileLinux内核源码的每个目录下都有一个Makefile,由该Makefile对源代码的编译、链接等操作进展控制。编译完成后,每个源代码目录下都会生成一个名叫built-in.o的文件。这个文件由源代码目录

28、下的所以源文件编译后的目的文件链接而成;而不同的built-in.o又被上层目录中的Makefile链接成更大的builtin.o,直到最后链接成为一个内核vmlinux.o。53LinuxLinux内核移植内核移植交叉编译交叉编译关于交叉编译由于我们的目的平台是ARM,而在x86平台上进展开发,故必需进展交叉编译。修正内核的顶层Makefile:.ARCH ?= armCROSS_COMPILE ?= arm-linux-表示我们的目的平台是ARM构架的,而运用的交叉编译器的前缀是arm-linux54LinuxLinux内核移植内核移植.config.config获得.config文件前面

29、提到,.config是内核编译时所依赖的重要文件,与详细的硬件构架和开发板类型相关。我们选择内核提供的s3c2410_defconfig进展修正。cp arch/arm/configs/s3c2410_defconfig .config55LinuxLinux内核移植内核移植demodemo板选择板选择选择相近的demo板三星公司针对s3c6410芯片推出了smdk6410 smdk6410 demo板,Linux内核对该开发板的支持非常完善。为了移植方便,并最大能够地实现代码重用,我们选择该开发板作为原始目的板,在它的根底上进展必要的修正。在include/asm-arm/mach-type

30、s.h中#define MACH_TYPE_SMDK2410 193与我们的Bootloader中运用的machine ID是一致的。对我们有用的是 /linux/include/asm-arm/mach-types.h文件,但是我们在编译内核时此文件时没有的,在编译的时候才会生成 .修正的文件为:linux/arch/arm/tools/mach-types 56LinuxLinux内核移植内核移植NANDNAND经典2410的NAND Flash经典2410平台上配置一片K9F1208U NAND Flash,容量大小为64M。为了使内核能正常运用NAND Flash,需求在内核中正确地配

31、置NAND Flash驱动支持。57LinuxLinux内核移植内核移植NANDNAND添加NAND Flash支持在arch/arm/plat-s3c24xx/common-smdk.c中:static struct mtd_partition smdk_default_nand_part = 0 = .name = Bootloader,.size = 0 x80000, / 512KB.offset = 0,1 = .name = Linux Kernel,.offset = 0 x80000,.size = 0 x200000, / 2MB,2 = .name = Root File

32、System,.offset = 0 x280000,.size = 0 x400000, / 4MB,3 = .name = User Space,.offset = 0 x680000,.size = 0 x3980000, / 57.5MB, ;58LinuxLinux内核移植内核移植NANDNAND将NAND驱动参与初始化列表struct platform_device s3c_device_nand = .name = s3c2410-nand,.id = -1,.num_resources = ARRAY_SIZE(s3c_nand_resource),.resource = s3c_nand_resource,;static struct platform_device _initdata *smdk_devs = &s3c_device_nand,;void _init smdk_machine_init(void)s3c_device_nand.dev.platform_data = &smdk_nand_info;platform_a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论