Linux开机加载新内核,linux-kernel – 为什么加载内核地址,ramdisk在启动时很重要?...

我正在处理

android boot.img,它是压缩内核,ramdisk和dtb的组合.我从uboot的串行控制台日志中看到了启动过程,这是引发我好奇心的部分

CPU: Freescale i.MX6Q rev1.2 at 792 MHz

CPU: Temperature 27 C

Reset cause: POR

Board: MX6-SabreSD

I2C: ready

DRAM: 1 GiB

PMIC: PFUZE100 ID=0x10

MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2

No panel detected: default to Hannstar-XGA

Display: Hannstar-XGA (1024x768)

In: serial

Out: serial

Err: serial

check_and_clean: reg 0, flag_set 0

Fastboot: Normal

flash target is MMC:1

Net: FEC [PRIME]

Normal Boot

Hit any key to stop autoboot: 3 2 1 0

boota mmc1

kernel @ 14008000 (7272352)

ramdisk @ 15000000 (869937)

fdt @ 14f00000 (44072)

## Booting Android Image at 0x12000000 ...

Kernel load addr 0x14008000 size 7102 KiB

Kernel command line: console=ttymxc0,115200 init=/init video=mxcfb0:dev=hdmi,1920x1080M@60,bpp=32 video=mxcfb1:off video=mxcfb:off video=mxcfb3:off vmalloc=256M androidboot.console=ttymxc0 consolebalank=0 androidboot.hardware=freescale cma=384M

## Flattened Device Tree blob at 14f00000

Booting using the fdt blob at 0x14f00000

Loading Kernel Image ... OK

Using Device Tree in place at 14f00000, end 14f0dc27

switch to ldo_bypass mode!

Starting kernel ...

内核的地址是14008000,ramdisk 15000000,fdt 14f00000.

我发现这些值保存在boot.img标头中,当我手动弄乱这个值时,即使实际内容没有被修改,图像也不会启动.

为什么这个地址如此重要?为什么必须是这些价值观?为什么不是其他价值?

我自己的一个猜测是:

这些加载地址值在内核中是硬编码的,所以如果我在boot.img头中更改它,它将导致副作用.为了阐述我自己的理论,将内核加载到’modified’load addr不会有问题.但是当实际执行这些行时,它将导致严重的问题,因为这些代码被修复以使用正确的“加载器”.

我的理论错了吗?如果是这样,如果你能纠正我,我将不胜感激.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值