gpt4 book ai didi

raspberry-pi - 树莓派 u-boot 从 sd 卡加载镜像和运行镜像

转载 作者:行者123 更新时间:2023-12-04 04:57:30 26 4
gpt4 key购买 nike

我已经从https://github.com/gonzoua/u-boot-pi/tree/rpi编译并安装了u-boot|在树莓派上。效果很好。它可以很好地启动并且工作得很好(参见 http://arrizza.org/wiki/index.php/RPI_U-boot )。我可以使用可执行文件的 s-rec 版本加载示例应用程序。

现在我想创建一个镜像,将它放在 sd 卡上(与 u-boot 镜像所在的同一张 sd 卡),然后加载并执行该镜像。这与 s-rec 过程相同:通过 s-rec 加载图像,然后使用“go”执行,但不是通过串口加载,而是从 sd 卡上获取图像。

我试过使用:

load mmc 0 0x0100000 hello_world.bin

然后

go 0x0100000

加载正常:

U-Boot> fatload mmc 0 0x01000000 hello_world.bin
reading hello_world.bin
594 bytes read in 27222 ms (0 Bytes/s)
U-Boot> go 0x01000000
## Starting application at 0x01000000 ...

但 rPI 会自动重启。

  • 我也试过 fatload 也有同样的结果

  • 我尝试使用 ./imagetool-uncompressed.py 创建图像,然后使用 load 或 fatload 然后继续,但没有成功

  • 我尝试用 bootm 加载/fatload,但还是不行

我还有什么可以尝试的吗?

约翰

更新:@microMolvi 指出我使用了错误的地址。我重新运行它:

U-Boot> load mmc 0 0x01001000 hello_world.bin 
reading hello_world.bin
594 bytes read in 27200 ms (0 Bytes/s)
U-Boot> go 0x01001000
## Starting application at 0x01001000 ...
<snip>about 100 garbage characters<snip>
<I pressed Enter here>
## Application terminated, rc = 0x0
U-Boot>

这是 printenv 的输出:

U-Boot> printenv
arch=arm
baudrate=115200
board=rpi_b
board_name=rpi_b
bootargs=dma.dmachans=0x7f35 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2708.boardrev=0xe bcm2708.serial=0x4e82105a smsc95xx.macaddr=B8:27:EB:82:10:5A sdhci-bcm2708.emmc_clock_freq=100000000 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000 dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
bootcmd=if mmc rescan ${mmcdev}; then if run loadbootenv; then run importbootenv; fi; if run loadbootscript; then run bootscript; fi; fi
bootenv=uEnv.txt
bootscript=echo Running bootscript from mmc${mmcdev} ...; source ${loadaddr}
cpu=arm1176
filesize=0x252
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
loadaddr=0x00200000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
loadbootscript=fatload mmc ${mmcdev} ${loadaddr} boot.scr
mmcdev=0
soc=bcm2835
stderr=serial,lcd
stdin=serial
stdout=serial,lcd
usbethaddr=B8:27:EB:82:10:5A
vendor=raspberrypi

Environment size: 1092/16380 bytes
U-Boot>

最佳答案

好的,看来您不能随处加载 bin 文件。

这是我所做的:1) 我重新加载了 s-rec 版本

U-Boot> loads
## Ready for S-Record download ...

## First Load Addr = 0x0C100000
## Last Load Addr = 0x0C100251
## Total Size = 0x00000252 = 594 Bytes
## Start Addr = 0x0C100000
U-Boot>

注意“起始地址”,它是 0x0C10-00000

2) 我重置了 rPI 然后在 0x0C10-0000 加载了 bin

U-Boot> load mmc 0 0x0C100000 hello_world.bin
reading hello_world.bin
594 bytes read in 15644 ms (0 Bytes/s)

3) 并从同一个地址运行它:

U-Boot> go 0x0C100000
## Starting application at 0x0C100000 ...
Example expects ABI version 6
Actual U-Boot ABI version 6
Hello World
argc = 1
argv[0] = "0x0C100000"
argv[1] = "<NULL>"
Hit any key to exit ...

## Application terminated, rc = 0x0
U-Boot>

我不确定默认地址 0x0C10-0000 来自哪里,所以此时我还不知道如何在编译/链接期间更改它,但它记录在这里:

u-boot-pi-rpi/doc/README.standalone

这表示像 rPI 这样的基于 ARM 的板被加载并从 0x0C10-0000 开始: 应用程序的默认加载和起始地址如下:

                    Load address    Start address
x86 0x00040000 0x00040000
PowerPC 0x00040000 0x00040004
ARM 0x0c100000 0x0c100000
MIPS 0x80200000 0x80200000
Blackfin 0x00001000 0x00001000
NDS32 0x00300000 0x00300000
Nios II 0x02000000 0x02000000

关于raspberry-pi - 树莓派 u-boot 从 sd 卡加载镜像和运行镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17205949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com