下载此文档

嵌入式Linux2.6内核启动流程).doc


文档分类:IT计算机 | 页数:约14页 举报非法文档有奖
1/14
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/14 下载此文档
文档列表 文档介绍
word
word
1 / 14
word
Linux核构成
(国嵌)
1.解压缩
2.初始化
3.启动应用程序
word
word
2 / 14
word
Linux核启动流程

not_relocated: mov r0, #0
1: str r0, [r2], #4 clear bss
str r0, [r2], #4
str r0, [r2], #4
str r0, [r2], #4
cmp r2, r3
blo 1b
然后224行,打开cache,并为后面解压缩设置64KB的临时malloc空间
bl cache_on
mov r1, sp malloc space above stack
add r2, sp, #0x10000 64k max 接下来238行进行检查,确定核解压缩后的Image目标地址是否会覆盖到zImage头,如果是则准备将zImage头转移到解压出来的核后面
cmp r4, r2
bhs wont_overwrite
sub r3, sp, r5 > pressed kernel size
add r0, r4, r3, lsl #2 allow for 4x expansion
cmp r0, r5
bls wont_overwrite
mov r5, r2 depress after malloc space
mov r0, r5
word
word
4 / 14
word
mov r3, r7
bl depress_kernel
真实情况——在大多数的应用中,核编译都会把压缩的zImage和非压缩的Image到同样的地址,s3c2410平台下即是0x30008000。这样做的好处是,人们不用关心核是Image还是zImage,放到这个位置执行就OK,所以在解压缩后zImage头必须为真正的核让路。
在250行解压完毕,核长度返回值存放在r0寄存器里。在核末尾空出128字节的栈空间用,并且使其长度128字节对齐。
add r0, r0, #127 + 128 alignment + stack
bic r0, r0, #127 align the kernel length
算出搬移代码的参数:计算核末尾地址并存放于r1寄存器,需要搬移代码原来地址放在r2,需要搬移的长度放在r3。然后执行搬移,并设置好sp指针指向新的栈(原来的栈也会被核覆盖掉)
add r1, r5, r0 end of depressed kernel
adr r2, reloc_start
ldr r3, LC1
add r3, r2, r3
1: ldmia r2!, {r9 - r14} copy relocation code
stmia r1!, {r9 - r14}
ldmia r2!, {r9 - r14}
stmia r1!, {r9 - r14}
cmp r2, r3
blo 1b
add sp, r1, #128 r

嵌入式Linux2.6内核启动流程) 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数14
  • 收藏数0 收藏
  • 顶次数0
  • 上传人cxmckate6
  • 文件大小338 KB
  • 时间2022-02-08
最近更新