6

私は理解しようと数日を費やしていますが、行き詰まっています。STM32F429I-DISC1 ボードで「bootm 8100000」と入力した後、「Starting kernel...」というメッセージしか表示されません。

uboot を 2011 から 2016 に更新する前は、「Starting Kernel...」+ UNHANDED EXCEPTION HARDFAULT でしたが、現在は「Starting Kernel...」メッセージだけです。

MCU は stm32F429、2MB フラッシュ + ext です。8MBのRAM。

フラッシュ開始アドレスは0x08000000 (uboot addr) で、カーネルを0x08100000の 2 番目のフラッシュ バンクの開始位置に配置しました。

外部 8MB RAM の開始は0xD0000000 です

u-boot-2016.11 はそのボードでかなりうまく動作するようです。

U-Boot > bdi
arch_number = 0x00000000
boot_params = 0xD0000100
DRAM bank   = 0x00000000
-> start    = 0xD0000000
-> size     = 0x00800000
current eth = unknown
ip_addr     = <NULL>
baudrate    = 115200 bps
relocaddr   = 0xD07D6000
reloc off   = 0xC87D6000
irq_sp      = 0xD05D3EE0
sp start    = 0xD05D3ED0
Early malloc usage: e0 / 400

これは私がカーネルを構築する方法です:

make CROSS_COMPILE=arm-none-eabi- ARCH=arm uImage LOADADDR=08100000 -B

そして、これは bootm コマンドの完全な出力です:

U-Boot > bootm 8100000
## Booting kernel from Legacy Image at 08100000 ...
   Image Name:   Linux-4.9.0
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    839872 Bytes = 820.2 KiB
   Load Address: 08100000
   Entry Point:  08100000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK

Starting kernel ...

「robutest」/「emcraft」カーネル/構成ファイルを使用して、同じログを取得しましたが、エントリ ポイントが 08100001 であるためより正確であると思われる場合を除きます。

robutest/emcraft カーネルで、ボードの LCD 画面をアクティブにしようとしましたが、何も起こりません。

すべてのテストで、カーネル構成の「early printk」と「DEBUG_LL_xxx」をアクティブにしました。

これは私の .config ファイルへのリンクです: http://pastebin.com/gBNYx3Gs

PS: uCLinux emcraft/robutest で何が起こっているのかを調べてみましたが、私の主な目標は Linux 4.9 を実行することです。

私を読んでくれてありがとう!!!

編集:dtbを「古い方法」で渡そうとしましたが、同じ結果になりました:

U-Boot > bootm 08100000 - 08040000                                                                            
## Booting kernel from Legacy Image at 08100000 ...                                                           
   Image Name:   Linux-4.9.0                                                                                  
   Image Type:   ARM Linux Kernel Image (uncompressed)                                                        
   Data Size:    805744 Bytes = 786.9 KiB                                                                     
   Load Address: 08100000                                                                                     
   Entry Point:  08100000                                                                                     
   Verifying Checksum ... OK                                                                                  
## Flattened Device Tree blob at 08040000                                                                     
   Booting using the fdt blob at 0x8040000                                                                    
   Loading Kernel Image ... OK                                                                                
   Loading Device Tree to d05ce000, end d05d2a9f ... OK                                                       

Starting kernel ...                                                                                           

私は必死です、どんなアイデアも大歓迎です:'(

EDIT2:u-bootでカーネルを解凍しようとしましたが、同じです:

U-Boot > bootm 8100000 - 8040000
## Booting kernel from Legacy Image at 08100000 ...
   Image Name:   uImage
   Image Type:   ARM Linux Kernel Image (gzip compressed)
   Data Size:    940696 Bytes = 918.6 KiB
   Load Address: d0008000
   Entry Point:  d0008001
   Verifying Checksum ... OK
## Flattened Device Tree blob at 08040000
   Booting using the fdt blob at 0x8040000
   Uncompressing Kernel Image ... OK
   Loading Device Tree to d05ce000, end d05d2a9f ... OK

Starting kernel ...

EDIT3: dtb でメモリ/USART1 アドレスを確認しましたが、問題ありません。カーネルのメッセージがないのはなぜですか?

EDIT4:uxipImageを使用:

U-Boot > bootm 08060000 - 08040000
## Booting kernel from Legacy Image at 08060000 ...
   Image Name:   uxipImage
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1497396 Bytes = 1.4 MiB
   Load Address: 08060000
   Entry Point:  08060041
   Verifying Checksum ... OK
## Flattened Device Tree blob at 08040000
   Booting using the fdt blob at 0x8040000
   Loading Kernel Image ... OK
   Loading Device Tree to d05ce000, end d05d2a9f ... OK

Starting kernel ...

08060000、08060040、08060041 の異なるエントリ ポイントで試しました。

4

2 に答える 2

4

見つけた!

アレキサンダーに感謝します。UART WORKS のトリックは魅力的です!!!! おかげさまで、初めて組み込みシステムのカーネルをハックしようとしましたが、おかげで多くのことを学びました。

この問題を抱えている人にとっては、私にとっては XIP_PHYS_ADDR でした! 64 バイトのヘッダーを忘れないでください!!

XIPカーネル@ 0x08060000をフラ​​ッシュしていたので、XIP_PHYS_ADDR(およびブートエントリbtw)は0x08060040です!!!!

今後ともアレクサンダーをよろしくお願いいたします!!

于 2016-12-26T18:55:23.843 に答える