内核中关于启动条件的英文说明整理

内核中关于启动条件的说明

/*
 * Kernel startup entry point.
 * ---------------------------
 *
 * This is normally called from the decompressor code.  The requirements
 * are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0,
 * r1 = machine nr, r2 = atags pointer.
 *
 * This code is mostly position independent, so if you link the kernel at
 * 0xc0008000, you call this at __pa(0xc0008000).
 *
 * See linux/arch/arm/tools/mach-types for the complete list of machine
 * numbers for r1.
 *
 * We're trying to keep crap to a minimum; DO NOT add any machine specific
 * crap here - that's what the boot loader (or in extreme, well justified
 * circumstances, zImage) is for.
 */

上面的英文说明是摘抄自内核的head.S文件,是关于内核启动条件的说明。head.S文件是整个内核的入口,内核的启动顺序和uboot是一样的,先执行汇编语句再跳转到C语言。

启动条件整理

(1)这些代码通常被解压缩代码调用,要求关闭MMU、关闭D-cache、r0 = 0、r1 = 机器码、r2 =uboot传参的地址,I-cache的状态不关心。如果不清楚为什么被解压缩代码调用,参考博客:《vmlinuz/vmlinux、Image、zImage与uImage的区别》
(2)uboot给内核传参是通过r0、r1、r2三个寄存器,其中:r0一般都是填零,r1是传机器码,r2是uboot给内核传参的tags的地址。
(3)内核前期的启动代码必须是位置无关码,如果你内核的链接地址是0xc0008000,那你必须将虚拟地址转换为物理地址,即__pa(0xc0008000)。__pa()是将虚拟地址转换为物理地址的宏。
(4)linux/arch/arm/tools/mach-types文件里是内核支持的机器码,也就是r1寄存器的值要在mach-types进行匹配,如果匹配成功则启动内核;如果匹配不上,则说明内核不支持该机器码,启动失败。
(5)尽量保持内核启动代码的简短,保持内核启动代码都是共用部分的代码,特定CPU部分的代码都放在bootloader(比如uboot)里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值