【问题标题】:Angstrom kernel - Stuck at "Starting kernel ..."埃内核 - 卡在“正在启动内核...”
【发布时间】:2016-02-27 16:24:56
【问题描述】:

我一直在尝试使用 Angstrom 构建系统为 BeagleBone Black 编译内核。尝试了很多不同的事情,这些事情浮现在我的脑海中,但会描述其中一个我认为最有可能起作用的事情。

我使用了准备好的 Angstrom 映像 (Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.06.20.img),然后编译了内核 (@ 987654321@ - v2014.12 版本),如其网站所述:

MACHINE=beagleboard ./oebb.sh config beagleboard
MACHINE=beagleboard ./oebb.sh update
MACHINE=beagleboard ./oebb.sh bitbake virtual/kernel

我的想法是我将使用 uImage 并复制它而不是 /boot/ 中的原始图像,但它会卡在“正在启动内核...”。我尝试过使用不同的 dtb 文件,这些文件是用这个内核编译的和原来的。

(不是因为控制台输出不好,而是真的卡住了)

这是原始/工作内核的标头:

Booting from mmc ...
## Booting kernel from Legacy Image at 80007fc0 ...
   Image Name:   Angstrom/3.8.13/beaglebone
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4270776 Bytes = 4.1 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 80f80000
   Booting using the fdt blob at 0x80f80000
   XIP Kernel Image ... OK
OK
   Using Device Tree in place at 80f80000, end 80f88e40

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

这是我的卡在启动内核...

Booting from mmc ...
## Booting kernel from Legacy Image at 80007fc0 ...
   Image Name:   Linux-3.14.20
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4279000 Bytes = 4.1 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 80f80000
   Booting using the fdt blob at 0x80f80000
   XIP Kernel Image ... OK
OK
   Using Device Tree in place at 80f80000, end 80f88e40

Starting kernel ...

这里是 u-boot 的 printenv 输出

arch=arm
baudrate=115200
board=am335x
board_name=A335BNLT
board_rev=00C0
bootcmd=gpio set 53; i2c mw 0x24 1 0x3e; run findfdt; mmc dev 0; if mmc rescan ; then echo micro SD card found;setenv mmcdev 0;else echo No micro SD card found, setting mmcdev to 1;setenv mmcdev 1;fi;setenv bootpart ${mmcdev}:2;mmc dev ${mmcdev}; if mmc rescan; then gpio set 54; echo SD/MMC found on device ${mmcdev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;gpio set 55; if run loaduimage; then gpio set 56; run loadfdt;run mmcboot;fi;fi;
bootdelay=1
bootdir=/boot
bootenv=uEnv.txt
bootfile=uImage
bootpart=0:2
console=ttyO0,115200n8
cpu=armv7
dfu_alt_info_emmc=rawemmc mmc 0 3751936
dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;MLO fat 0 1;MLO.raw mmc 100 100;u-boot.img.raw mmc 300 3C0;u-boot.img fat 0 1;uEnv.txt fat 0 1
dfu_alt_info_nand=SPL part 0 1;SPL.backup1 part 0 2;SPL.backup2 part 0 3;SPL.backup3 part 0 4;u-boot part 0 5;kernel part 0 7;rootfs part 0 8
ethact=cpsw
ethaddr=68:c9:0b:da:22:56
fdt_high=0xffffffff
fdtaddr=0x80F80000
fdtfile=am335x-boneblack.dtb
findfdt=if test $board_name = A33515BB; then setenv fdtfile am335x-evm.dtb; fi; if test $board_name = A335X_SK; then setenv fdtfile am335x-evmsk.dtb; fi;if test $board_name = A335BONE; then setenv fdtfile am335x-bone.dtb; fi; if test $board_name = A335BNLT; then setenv fdtfile am335x-boneblack.dtb; fi
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
kloadaddr=0x80007fc0
loadaddr=0x80200000
loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}
loadfdt=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz
loaduimage=load mmc ${bootpart} ${kloadaddr} ${bootdir}/${bootfile}
mmcargs=setenv bootargs console=${console} ${optargs} root=${mmcroot} rootfstype=${mmcrootfstype}
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${kloadaddr} - ${fdtaddr}
mmcdev=0
mmcroot=/dev/mmcblk0p2 ro
mmcrootfstype=ext4 rootwait
mtdids=nand0=omap2-nand.0
mtdparts=mtdparts=omap2-nand.0:128k(SPL),128k(SPL.backup1),128k(SPL.backup2),128k(SPL.backup3),1920k(u-boot),128k(u-boot-env),5m(kernel),-(rootfs)
nandargs=setenv bootargs console=${console} ${optargs} root=${nandroot} rootfstype=${nandrootfstype}
nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; bootm ${loadaddr}
nandimgsize=0x500000
nandroot=ubi0:rootfs rw ubi.mtd=7,2048
nandrootfstype=ubifs rootwait=1
nandsrcaddr=0x280000
netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp
netboot=echo Booting from network ...; setenv autoload no; dhcp; tftp ${loadaddr} ${bootfile}; tftp ${fdtaddr} ${fdtfile}; run netargs; bootm ${loadaddr} - ${fdtaddr}
nfsopts=nolock
ramargs=setenv bootargs console=${console} ${optargs} root=${ramroot} rootfstype=${ramrootfstype}
ramboot=echo Booting from ramdisk ...; run ramargs; bootm ${loadaddr} ${rdaddr} ${fdtaddr}
ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=${rdaddr},64M
ramrootfstype=ext2
rdaddr=0x81000000
rootpath=/export/rootfs
soc=am33xx
spiargs=setenv bootargs console=${console} ${optargs} root=${spiroot} rootfstype=${spirootfstype}
spiboot=echo Booting from spi ...; run spiargs; sf probe ${spibusno}:0; sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; bootm ${loadaddr}
spibusno=0
spiimgsize=0x362000
spiroot=/dev/mtdblock4 rw
spirootfstype=jffs2
spisrcaddr=0xe0000
static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
stderr=serial
stdin=serial
stdout=serial
usbnet_devaddr=68:c9:0b:da:22:56
vendor=ti
ver=U-Boot 2013.04-dirty (Jun 19 2013 - 09:57:14)

【问题讨论】:

  • 你的物理控制台是什么?你怎么知道这是为你的 Linux 内核正确设置的?
  • 你尝试过早期的 printk 吗?
  • @AlexHoppus 是的,没有变化,没有额外的输出。
  • 您是否在 U-Boot 中更改了机器 ID?注意@PeterL。的评论,见arch/arm/mach-omap1/include/mach/uncompress.hlast paragraph of this answer
  • "我的想法是,我将使用 uImage 并复制它而不是 /boot/...中的原始图像" -- 一旦你解决了眼前的问题,这可能会导致另一个问题。您尚未将任何内核的可加载模块安装到现有根文件系统中,并且现有模块 (3.8) 与您的内核 (3.14) 不兼容。

标签: linux linux-kernel beagleboneblack


【解决方案1】:
1 : Kernel extract the physical address and link address
2 : machine id
#define MACH_TYPE_PERSONAL_SERVER      17
#define MACH_TYPE_L7200                19
#define MACH_TYPE_PLEB                 20
#define MACH_TYPE_INTEGRATOR           21
#define MACH_TYPE_H3600                22
#define MACH_TYPE_P720T                24
#define MACH_TYPE_ASSABET              25
#define MACH_TYPE_LART                 27
#define MACH_TYPE_GRAPHICSCLIENT       29
#define MACH_TYPE_XP860                30
#define MACH_TYPE_CERF                 31
#define MACH_TYPE_NANOENGINE           32
#define MACH_TYPE_JORNADA720           48
#define MACH_TYPE_EDB7211              50
#define MACH_TYPE_PFS168               52
3:configuration of uart


1 : 

config NEED_MACH_MEMORY_H
    bool 
    help
      Select this when mach/memory.h is required to provide special
      definitions for this platform.  The need for mach/memory.h should
      be avoided when possible.

config PHYS_OFFSET
    hex "Physical address of main memory" if MMU
    depends on !ARM_PATCH_PHYS_VIRT && !NEED_MACH_MEMORY_H
    default DRAM_BASE if !MMU
    help
      Please provide the physical address corresponding to the
      location of main memory in your system.

【讨论】:

  • 为了其他用户的利益,请编辑以包含此答案的一小段描述。
猜你喜欢
  • 2016-07-07
  • 1970-01-01
  • 2015-10-27
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多