【问题标题】:memory location for linux kernel for u-boot用于 u-boot 的 linux 内核的内存位置
【发布时间】:2019-01-20 05:08:11
【问题描述】:

目前,我有一个使用 U-boot 加载 android OS 的 ARM 设备。我想用linux替换android。所以我所做的是将为 ARM 设备编译的 linux 的副本加载到 sd 卡上,引导到 U-boot 引导加载程序。现在的问题是我告诉 U-boot 启动 vmlinuz linux 内核的内存位置是什么?

我如何找到这个?或者指出一些资源也很好。

谢谢。

以下是当前从连接串口开始的开机顺序

Reg Version:  v1.1.0
Reg Time:     2014-10-115:15:35
Reg Name:     hi3719cdmo1a_hi3719cv100_ddr3_1gbyte_16bitx2_2layers_emmc.reg

Fastboot 3.3.0 (zengzhiliang@server180) (Nov 21 2014 - 13:41:16)

Fastboot:      Version 3.3.0
Build Date:    Nov 21 2014, 13:41:29
CPU:           Hi3719Cv100
Boot Media:    eMMC
DDR Size:      1GB

Check nand flash controller v610. found
Special NAND id table Version 1.36
Nand ID: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
No NAND device found!!!

Check spi flash controller v350. found
Can't find a valid spi flash chip.
Can't find a valid spi flash chip.

MMC/SD controller initialization.
MMC/SD Card:
    MID:         0xfe
    Read Block:  512 Bytes
    Write Block: 512 Bytes
    Chip Size:   3656M Bytes (High Capacity)
    Name:        "P1XXX"
    Chip Type:   MMC
    Version:     4.0
    Speed:       25000000Hz
    Bus Width:   8bit
    Boot Addr:   0 Bytes

*** Warning - bad CRC or eMMC, using default environment


Boot Env on eMMC
    Env Offset:          0x00100000
    Env Size:            0x00010000
    Env Range:           0x00010000


SDK Version: HiSTBAndroidV500R001C01CP0002_v2014070614

[Android_Main,34] begin
[sw_set_gpio,85] ok
[sw_ptable_init,66] begin
partition addr : [0x200000]
[swfastboot_flash_read,31]BaseAddress:0x200000, DataSize:0x100000, offset:0x0, b                         ytes:0xa10
[sw_ptable_check,176]cksum [0x6c94], ptable->checksum[0x6c94]
[sw_ptable_init,79] data at 0x200000 is ok
 0     fastboot 0x00000000 0x00200000
 1    partition 0x00200000 0x00200000
 2     recovery 0x00400000 0x01000000
 3   deviceinfo 0x01400000 0x00200000
 4    baseparam 0x01600000 0x00800000
 5      pqparam 0x01E00000 0x00800000
 6         logo 0x02600000 0x00800000
 7     fastplay 0x02E00000 0x02800000
 8         boot 0x05600000 0x01000000
 9         misc 0x06600000 0x00200000
10       system 0x06800000 0x27000000
11        cache 0x2D800000 0x19000000
12       backup 0x46800000 0x19000000
13         swdb 0x5F800000 0x03000000
14     userdata 0x62800000 0x80000000
ptable info:2M(fastboot),2M(partition),16M(recovery),2M(deviceinfo),8M(baseparam                         ),8M(pqparam),8M(logo),40M(fastplay),16M(boot),2M(misc),624M(system),400M(cache)                         ,400M(backup),48M(swdb),2048M(userdata)
[sw_ptable_init,104] ok
[sw_devinfo_init,25] begin
deviceinfo addr : [0x01400000]
[swfastboot_flash_read,31]BaseAddress:0x1400000, DataSize:0x100000, offset:0x0,                          bytes:0x514
[sw_devinfo_check,166] start...
[sw_devinfo_check,184] ok,checksum:0x9aad
[sw_devinfo_init,44] data at 0x1400000 is ok
[0] count:[4] name:[serialno] value:[xxxxxxxxxxxxxxxx]
[1] count:[4] name:[mac] value:[00:03:63:f4:33:12]
[2] count:[4] name:[standard] value:[1080i_50Hz]
[3] count:[4] name:[secureline] value:[20100]
[sw_devinfo_init,71] ok
[swfastboot_flash_read,31]BaseAddress:0x6600000, DataSize:0x100000, offset:0x0,                          bytes:0x10000
boot normal!!!
[swfastboot_flash_read,31]BaseAddress:0x5602000, DataSize:0x100000, offset:0x0,                          bytes:0x2000
use boot cmdline,disable serial, cmdline:[mem=1G console=NULL,115200 blkdevparts                         =mmcblk0:]
bootargs:[mem=1G console=NULL,115200 blkdevparts=mmcblk0:2M(fastboot),2M(partiti                         on),16M(recovery),2M(deviceinfo),8M(baseparam),8M(pqparam),8M(logo),40M(fastplay                         ),16M(boot),2M(misc),624M(system),400M(cache),400M(backup),48M(swdb),2048M(userd                         ata) androidboot.mac=00:03:63:f4:33:12 androidboot.standard=1080i_50Hz androidbo                         ot.serialno=xxxxxxxxxxxxxxx]
authenticat kernel begin
CA_GetFlashImgInfoByAddr,683: Img has already be encrypted
CA_GetFlashImgInfoByAddr,689: Magic number check right
CA_FlashAuthenticateByAddr,898: CA_FlashAuthenticateByAddr   0x5600000  successe                         d
offset = 0x5600000 KernelImgInDDRAddress = 0x4002000bootimg now: bootm 4002000
[Android_Main,52] ok
stDispParam.enFormat = 6
sw_EdidAll[0] = 10
sw_EdidAll[1] = 5
sw_EdidAll[2] = 9
sw_EdidAll[3] = 8
sw_EdidAll[4] = 7
sw_EdidAll[5] = 6
sw_EdidAll[6] = 5
sw_EdidAll[7] = 1
sw_EdidAll[8] = 0
sw_EdidAll[9] = 101
use baseparam format [6]

Reserve Memory
    Start Addr:          0xFFFF000
    Bound Addr:          0x8D3B000
    Free  Addr:          0xF2FA000
    Alloc Block:  Addr        Size
                  0xF2FA000       8192
                  0xF2FD000       2764800
                  0xF5A1000       3686400
                  0xF926000       1658880
                  0xFABC000       3686400
                  0xFE41000       12288
                  0xFE45000       1048576
                  0xFF46000       212992
                  0xFF7B000       8192
                  0xFF7E000       524288

Press Ctrl+C to stop autoboot

Found Initrd at 0x04E00000 (Size 535422 Bytes), align at 2048 Bytes

## Booting kernel from Legacy Image at 04002800 ...
   Image Name:   Linux-3.10.0_s40
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    8925824 Bytes = 8.5 MiB
   Load Address: 02000000
   Entry Point:  02000000
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

【问题讨论】:

  • 在您为其构建内核的地址。好吧,有一个解压缩器在其他地方运行并解压缩到您运行内核的地址。解压器/初始二进制文件可能与位置无关。
  • 你尝试的时候发生了什么?
  • 其实我没试过。但是在尝试让 OpenWrt 在另一台设备上运行之后,我认为你是对的。引导加载程序尝试引导内核的特定内存位置。
  • 为了从内核获取更多信息,请尝试将参数earlyprintk添加到内核命令行,该参数来自bootargs U-Boot环境变量。

标签: arm embedded-linux u-boot


【解决方案1】:

所以我所做的是将为 ARM 设备编译的 linux 副本加载到 sd 卡上...

与 x86 不同,没有一种 Linux 内核版本可以在所有“ARM 设备”上执行。
较旧的 ARM Linux 内核(即前设备树)是专门为每个 SoC/板变体配置和构建的。
可以为一个或多个 SoC 构建现代 ARM Linux 内核,并使用设备树 blob 引导内核以描述正在使用的板。

您没有提供任何详细信息来说明您拥有的内核是否足以启动您的“ARM 设备”。

现在的问题是我告诉 U-boot 启动 vmlinuz linux 内核的内存位置是什么?

ARM Linux 应该使用 zImage 文件而不是 vmlinuz 文件引导。

您设备上物理 RAM 的起始地址是什么?

约定是 ARM Linux 内核将在物理 RAM 加上 0x8000 (32K) 的偏移量的基础上执行。有关详细信息,请参阅this answer

zImage 文件是自解压的,并且可以(通过 U-Boot 从您的 SD 卡)加载到内核加载/执行地址之上的任何合适的内存地址(同时为DT blob 而不是破坏 U-Boot)。

或者指出一些资源也很好。

试试 Russel King 的 Booting ARM Linux 和 Vincent Sanders 的 Booting ARM Linux

【讨论】:

  • 感谢您抽出宝贵的时间和链接。我已经为设备添加了启动顺序。自发布此问题以来,我还没有查看 ARM 设备但是在尝试让 OpenWRT 在另一个 MIPS 设备上运行时,我发现 uboot 引导加载程序在 binwalking 固件更新和 MTD 的 0x9f000000 (256k) 偏移量的 0x9fe80000 处启动内核分区。所以在这个 ARM 设备上,如果我想在上面安装 linux,我需要刷一个新的 uboot 引导加载程序吗?我想 ARM 设备也一样?
  • "我需要刷一个新的 uboot ..." -- 除非 U-Boot 可执行文件配置错误,否则加载的内容可以通过以下方式配置环境变量。使用 U-Boot 命令行,在提示时按 Ctrl+C 停止自动启动。
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 2017-03-23
  • 2018-09-27
  • 2016-05-22
相关资源
最近更新 更多