私の目標は、imx28開発ボードをベースにしたwinkハブ1のメモリにカスタムカーネルとinitramfsをロードし、u-bootシェルからbootmコマンドを使用して起動することです。
そこで、u-boot 2014.01のソースコードをダウンロードし、提供されたパッチを使用して最初からビルドしました。ここ次に、最新のビルドルートをダウンロードし、imx28ボード用のカーネル、ルートファイルシステム、およびinitramfsをビルドしました。
JTAGを使用するとロードできますが、u-boot at 0x40000100, kernel at 0x42000000
このinitramfs at 0x42300000
アドレスをu-bootシェルに渡し、bootmを押すと解凍後にカーネルがフリーズし、何も起こりません...
カーネルに問題があるのではないかと思ったが、カーネルアドレスだけを渡してカスタムアドレスをロードしなくても(つまり、NANDメモリにカーネルをロードします)RAMでは、カーネルはまだフリーズして起動できず、コマンドとしてのみ機能しますboot (bootcmd)
。
これは、メモリアドレスからカーネルを手動でロードしようとしたときの出力です。解凍した後は何も起こりません。
=> bootm 42000000 42300000
## Booting kernel from Legacy Image at 42000000 ...
Image Name: Linux-2.6.35.3-flex-dvt
Created: 2014-04-30 3:15:35 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1928460 Bytes = 1.8 MiB
Load Address: 40008000
Entry Point: 40008000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 42300000 ...
Image Name: Root Filesystem
Created: 2019-01-12 14:23:44 UTC
Image Type: ARM Linux RAMDisk Image (uncompressed)
Data Size: 893637 Bytes = 872.7 KiB
Load Address: 40800000
Entry Point: 40800000
Verifying Checksum ... OK
Loading Kernel Image ... OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
しかし、u-bootシェルでは、boot
コマンドをクリックすると起動し、すべてがうまく機能します。
何が間違っているのかわかりません。/include/configs/mx28evk.h
カーネルのuImage、initramfs、およびfdtアドレスを確認しましたが、すべてが正しいようです。
答え1
問題がどこにあるのか調べました。
低レベルのデバッグを有効にし、すべてのprintkを組み込みのICE UARTポートにリダイレクトして、UARTコンソールに出力が表示されないようにしました。
[ ] Kernel low-level debugging functions
[ ] Early printk (NEW)
[ ] Kernel low-level debugging via EmbeddedICE DCC channel (NEW)
上記のように選択しないでください。
ありがとう、アミット。