linux kernel decompress_kernel 启动解压

linux 解压后会跳转到,kernel执行地址: head.S中入口执行。解压之前的操作流程呢?


1. linux kernel 被uboot load到内存后的入口函数

arch/arm/boot/compressed/vmlinux.lds.in中定义了linux 入口:

OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{

....

这里的start定义在 arch/arm/boot/compressed/head.s中

start:
        .type    start,#function
        .rept    7
        mov    r0, r0
        .endr
   ARM(        mov    r0, r0        )
   ARM(        b    1f        )
 THUMB(        adr    r12, BSYM(1f)    )
 THUMB(        bx    r12        )
 THUMB(        bx    r12        )

        .word    0x016f2818        @ Magic numbers to help the loader
        .word    start            @ absolute load/run zImage address
        .word    _edata            @ zImage end address
 THUMB(        .thumb            )
1:        mov    r7, r1            @ save architecture ID
        mov    r8, r2            @ save atags pointer

......

*
 * The C runtime environment should now be setup sufficiently.
 * Set up some pointers, and start decompressing.
 *   r4  = kernel execution address
 *   r7  = architecture ID
 *   r8  = atags pointer
 */
        mov    r0, r4
        mov    r1, sp            @ malloc space above stack
        add    r2, sp, #0x10000    @ 64k max
        mov    r3, r7
        bl    decompress_kernel
        bl    cache_clean_flush
        bl    cache_off
        mov    r0, #0            @ must be zero
        mov    r1, r7            @ restore architecture number
        mov    r2, r8            @ restore atags pointer
        mov    pc, r4            @ call kernel


decompress_kernel实现在misc.c中,可以看到,misc中同样定义了

unsigned int __machine_arch_type; 这个在kernel的setup.c中已经有定义了?unsigned int __machine_arch_type __read_mostly;

因此, 可以看到arch\arm\boot\compressed中代码编译是独立于kernel image的
---------------------
作者:thegameisfives
来源:CSDN
原文:https://blog.csdn.net/thegameisfives/article/details/9019503
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值