如何从u-boot引导Linux内核? [英] How to boot Linux kernel from u-boot?

查看:113
本文介绍了如何从u-boot引导Linux内核?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Linux内核映像uImage在我的U盘中.我想从U-Boot引导它.设备树文件am335x-evm.dtb也在我的U盘中. 我的工作如下:

My Linux kernel image uImage is in my U-disk. And I want to boot it from U-Boot. Also the device tree file am335x-evm.dtb is in my U-disk. What I did is below:

U-Boot# usb start
(Re)start USB...
USB0:   scanning bus 0 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found
U-Boot# fatls usb 0:1
  3821960   uimage
            kit3/
  4065280   modules.tar
            my_modules/
            extra/
            system volume information/
      375   uenv.txt
    40474   am335x-evm.dtb

4 file(s), 4 dir(s)

U-Boot# fatload usb 0:1 0xC0700000 uImage
reading uImage
3821960 bytes read in 2375 ms (1.5 MiB/s)
U-Boot# fatload usb 0:1 0xC0e00000 am335x-evm.dtb
reading am335x-evm.dtb
40474 bytes read in 48 ms (823.2 KiB/s)
U-Boot# bootm 0xC0700000 - 0xC0e00000
## Booting kernel from Legacy Image at c0700000 ...
   Image Name:   Linux-3.12.10-ge35dc10-dirty
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3821896 Bytes = 3.6 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at c0e00000
   Booting using the fdt blob at 0xc0e00000
   Loading Kernel Image ... OK
OK
   Using Device Tree in place at c0e00000, end c0e0ce19

Starting kernel ...

它就在这里停止.怎么做?谢谢!

And it stops here. How to do? Thanks!

结果: 感谢所有在这篇文章中回答的人!现在,我可以使用U盘中的映像启动系统.我要做的是:

Result: Thanks for everyone who answered in this post! Now I can boot the system by using the image in U-disk. What I do is:

setenv bootargs "console=ttyO0,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext4 mem=512M coherent_pool=8M loglevel=0 lpj=3317760 rootwait"
usb start; fatls usb 0:1; fatload usb 0:1 0x82000000 uImage-orig-onUSB;fatload usb 0:1 0x80F80000 am335x-evm.dtb;bootm 0x82000000 - 0x80F80000

在没有第一句话的情况下,系统也可以启动和启动将在显示屏中显示的GUI程序.但是调试串口不再有反应!

Without the first sentence, the system can also boot and start the GUI program which will show in a display. But the debug serial port has no reaction any more!

对于第二句话,如果我使用0xC0700000和0xC0e00000的ram地址,如下所示,那么它将停止加载内核.原因应该是锯末在他的回答中提到的东西. @锯木屑

As for the second sentence, if I use the ram address of 0xC0700000 and 0xC0e00000, like this below, then it will stop to load the kernel. The reason should be what sawdust mentioned in his answer. @sawdust

setenv bootargs "console=ttyO0,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext4 mem=512M coherent_pool=8M loglevel=0 lpj=3317760 rootwait"
usb start; fatls usb 0:1; fatload usb 0:1 0xC0700000 uImage-orig-onUSB;fatload usb 0:1 0xC0e00000 am335x-evm.dtb;bootm 0xC0700000 - 0xC0e00000

推荐答案

尽管出现消息正在启动内核..." ,但内核尚未真正开始执行(因为必须首先显示映像)重新定位且未压缩),因此启用 earlyprintk 仍无效.
看起来可疑的是RAM地址.

Despite the message "Starting kernel ...", the kernel has not actually started executing (because the image has to be first relocated and also uncompressed), and consequently enabling earlyprintk will have no effect yet.
What does look suspect are the RAM addresses.

典型的"am33xx-evm"板仅具有512MB RAM,起始于0x80000000. 但是,您正在尝试使用从0xC0700000到0xC0E0CE19的RAM地址,其中不应存在物理内存.
显然,内核和设备树未正确加载.

The typical "am33xx-evm" board only has 512MB of RAM starting at 0x80000000.
Yet you are trying to use RAM addresses from 0xC0700000 to 0xC0E0CE19 where physical memory should not exist.
Obviously the kernel and the device tree are not loaded properly.

代替

fatload usb 0:1 0xC0700000 uImage
fatload usb 0:1 0xC0e00000 am335x-evm.dtb
bootm 0xC0700000 - 0xC0e00000

尝试使用

fatload usb 0:1 0x80200000 uImage 
fatload usb 0:1 0x80e00000 am335x-evm.dtb
bootm 0x80200000 - 0x80e00000 

这篇关于如何从u-boot引导Linux内核?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆