3

Raspberry PIで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 は自己再起動します。

  • 同じ結果でファットロードも試しました

  • ./imagetool-uncompressed.py を使用してイメージを作成してから、load または fatload を使用して移動しようとしましたが、喜びはありませんでした

  • bootm で load/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> 
4

2 に答える 2

4

わかりました、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 にロードしました

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
于 2013-06-22T03:29:53.320 に答える
2

arch/arm/config.mk には以下があります:

CONFIG_STANDALONE_LOAD_ADDR = 0xc100000

ファイルexamples/standalone/.hello_world.cmd内

cmd_examples/standalone/hello_world := arm-linux-gnueabi-ld.bfd   -g -Ttext 0xc100000 -o examples/standalone/hello_world -e hello_world examples/standalone/hello_world.o examples/standalone/libstubs.o -L /usr/lib/gcc-cross/arm-linux-gnueabi/4.7 -lgcc

ここで -Ttext は 0xc100000 です。つまり、hello_world エントリ アドレスは 0xc100000 です。そのため、hello.bin をメモリ アドレス 0xc100000 にロードする必要があります。

于 2014-10-23T07:40:12.453 に答える