2016-12-25 13 views
4

私は理解しようと数日間過ごしますが、私は立ち往生しています。 STM32F429I-DISC1ボードに「bootm 8100000」と入力しても、「Starting kernel ...」というメッセージが表示されます。Cortex-M4でLinux 4.9を実行するSTM32F4(29I-DISC1)

2011年から2016年にubootを更新する前に "Starting Kernel ..." +無人例外HARDFAULTでしたが、 "Starting Kernel ..."というメッセージが表示されました。

MCUはstm32F429、2MB Flash + extです。 8MBのRAM。

フラッシュ開始addrが0x08000000(uboot addrの)であり、私は0x08100000で第二のフラッシュバンクの先頭に私のカーネルを置きます。

スタート外部8MBのRAMがが0xD0000000

U-ブート2016.11は、そのボード上でかなりよく実行するように思わあるBDI私を与える:

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コマンドの完全な出力です:

「robutest」/「emcraft」カーネル/設定ファイルで
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.

だからエントリポイントがより正しいと思われる場合を除き、私は、同じログを得ましたボードの液晶画面が、何も起こらない。

私のテストではすべて、カーネル設定の "early printk"と "DEBUG_LL_xxx"を有効にしています。

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

PS:私は何が起こっているのを見つけるためにしようとするいくつかは、uClinuxをのemcraft/robutestで試す作られたが、私の主な目標は、Linux 4.9を実行することです。

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

EDIT:歓迎です

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:私はDTBを渡すために、 "古い方法" を試してみましたが、同じ結果とI私はDTBにメモリ/ USART1アドレスをチェックし、私はカーネルのないメッセージを持っていないなぜそれが大丈夫だ

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:U-ブートでカーネルを解凍しようとした、それは同じです。?

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 ... 

私は私が見つけた、別のエントリ・ポイントと0806万、08060040と08060041.

+1

スタックオーバーフローは、プログラミングおよび開発に関する質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。また、[Dev Opsについての質問はどこに投稿しますか?](http://meta.stackexchange.com/q/134306) – jww

+1

@jww組み込みデバイス用であっても、ソフトウェア開発者について言及しています。 出力UARTを設定する方法を教えてください。私はこの接続がdtbによって行われましたが。 「通常」のカーネルは、私が作品をRAMに解凍し、それらを起動をしない理由 – user2629409

答えて

3

を試してみました!

おかげでアレクサンダーは、UARTのためのトリックは魔法のように動作します!!!! おかげさまで、初めて組み込みシステムでカーネルをハックしようとしましたが、あなたのおかげで多くのことを学びました。この問題を持っています人のために

、私にとってそれはXIP_PHYS_ADDRでした! 64バイトのヘッダーを忘れないでください!!

私はそれは0x08060040です0x08060000 @ XIPカーネルを点滅ので(ところで、ブートエントリ)XIP_PHYS_ADDRた!!!!

もう一度アレクサンダーに感謝します!

+1

はところで、私は知らない.....が、私はそれ以降の参照してくださいよ、私は今より多くのRAMを持っている:) による損失をXIPはROMの約500Kです。私は2MoのRAMを節約できます。私は本当にたくさんのRAMを必要としませんが、私たちは決して知らないし、今は動作しています:) – user2629409

+2

嬉しいです、あなたはそれをしました!ハッキングで幸運! – alexander

+1

VFSのRAMディスクに関する知識はありますか? :P http://unix.stackexchange.com/questions/333037/uclinux-linux-4-9-nommu-vfs-cannot-open-root-device-nullアドオンについて – user2629409

1

私は同じ問題に直面していましたが、理由は違っていました。問題はsizeのを格納していました。このフィールドに圧縮されていないサイズのこのフィールドには、linux kernelが後でそのstackのサイズ変更に使用され、システムが未定義ステートになります。 u-bootStarting kernel...メッセージを出力した後のu-bootにカーネルが実行オーバーテイクするために、そして多分kernelはこのフィールドを探しているためSMM Handlerを転送した後

、次のメッセージがUncompressing Linux... done, booting the kernelをする必要があります。あなたはx86ベースのシステム上で作業している場合、解凍には、次のファイルディレクトリに次のようになります。

arch/x86/boot/uncompressed/head_32.S 
arch/x86/boot/uncompressed/piggy.S 

ソリューションは、ここに最新のu-ブートフンを使用することです:https://github.com/andy-shev/u-boot

ただし、場合カスタムu-bootを使用している場合、このフィールドを探す必要があります。

+0

おかげで、誰かを助けることができる:) – user2629409

関連する問題