网站大量收购独家精品文档,联系QQ:2885784924

Linux内核及移植.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux内核及移植

Linux内核 内核是所有linux系统的中心软件组件。嵌入式领域所说的linux,一般是指linux内核。移植也是指的移植linux内核到目标平台。 Linux的版本号:以2.6.24为例,其中,2是主版本号,6是次版本号,24是修订版本号。如果次版本号是偶数,说明是稳定版本。如果次版本号是奇数,则是开发版本。我们一般使用稳定版本。 Linux内核源代码目录结构: arch 包含和硬件体系结构相关的代码,每种平台占一个相应的目录。如arm、avr32、blackfin、mips等。 ●block 块设备驱动程序的IO调度。 ●crypto 常用的加密和离散算法,还有一些压缩和CRC校验算法 ●Documentation 内核的说明文档。 ●drivers 设备驱动程序,其下细分为不同种类的设备。如block、char、mtd、net、usb、video等等。 ●fs 内核支持的文件系统的实现,如ext2、ext3、cramfs、jffs2、nfs等。 ●include 头文件。与系统相关的头文件放在include/linux下,与ARM体系结构相关的头文件放在include/asm-arm下。 ●init 内核初始化代码。 ●ipc 进程间通信代码。 ●kernel 内核的核心代码,包括进程调度、定时器等。和arm平台相关的核心代码在arch/arm/kernel目录下。 ●lib 库文件代码 ●mm 内存管理代码,和arm平台相关的内核管理代码在arch/arm/mm目录下。 ●net 网络相关的代码,实现了各种常见的网络协议。 ●scripts 包含用于配置内核的各种脚本文件。只在配置时是有意义的。 ●sound 音频设备驱动的通用代码和硬件驱动代码都在这个文件件下面。 Linux内核有两种映像:非压缩内核Image和压缩内核zImage。 由于嵌入式系统存储容量有限,因此通常选择压缩内核zImage。要使用压缩内核zImage,需要在映像开头加入解压缩代码,将zImage解压后,才可以执行。这个加入解压缩代码的工作由UBOOT完成。 内核编译完成后,会在arch/arm/boot目录下生成zImage文件。zImage文件的由下面3个部分组成: pggy.o:压缩后的内核文件 head.o:系统初级初始化代码文件 misc.o:解压缩代码文件 Linux内核启动简析(汇编部分) 对于ARM处理器来讲,Linux内核zImage的第一段代码入口位于arch/arm/boot/compressed/head.S文件中。它依次完成如下功能: 初始化Cache、Mmu等设置 跳转到C语言内核解压函数decompress_kernel中,指令:bl decompress_kernel 跳转到非压缩内核启动汇编段,指令:b call_kernel arch/arm/boot/compressed/head.S的内容: start: …………………………………… 1: mov r7, r1 @保存machine id mov r8, r2 @保存参数地址 …………………………………… mrs r2, cpsr @确定不是在USER模式下 tst r2, #3 bne not_angel …………………………………… not_angel: mrs r2, cpsr @强制转换到SVC模式 orr r2, r2, #0xc0 msr cpsr_c, r2 Bss段清零: not_relocated: mov r0, #0 1: str r0, [r2], #4 @R2,BSS开始 str r0, [r2], #4 str r0, [r2], #4 str r0, [r2], #4 cmp r2, r3 @R3,BSS结束 blo 1b 跳转到C语言实现的解压内核代码: mov r5, r2 @ decompress after alloc space mov r0, r5 mov r3, r7 bl decompress_kernel 实现代码在arch/arm/boot/compressed/misc.c中 解压代码: 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 = a

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档