S3C6410ボードでカーネル4.6を実行しようとしています。
ポートを完了して完全に起動するには、ボードのNANDフラッシュおよびSDコントローラと連携するようにコアを設定する必要がありました。
カーネルを移植/クロスコンパイルするのは今回が初めてなので、正確な解決策ではなく問題を処理して診断する方法についてのアドバイスを探しています。
私のボードはカーネル4.6を起動できますが、NANDフラッシュやSDカードを見ることはできません(だからrootfsはありません)。
実行できるカーネルの提供
このマザーボードには「2.6.38-GZSD」が付属しており、一般的な2.6.38と比較して以下のものが含まれています。
興味のないいくつかのオーディオ/ビデオ/TV/LCDタッチスクリーンドライバ
ボタン/gpio/pwm/adc用文字デバイスドライバ、関係ありません
yaffs2ファイルシステム(4.6に移植しました)
このボードのマシン
gzsd4610
定義arch/arm/mach/mach-s3c64xx
NANDドライバはにあります
drivers/mtd/nand/s3c_nand.c
。 Kernel 4.6にはそのプラットフォーム用のNANDドライバとONENANDドライバがあるので、2.6.38で以前のドライバを移植する代わりにそれを使用しようとしています。
設定
ボードに組み込まれたブートローダを介してソフトウェアをボードにアップロードしました。 SDカードからNANDフラッシュメモリにu-bootイメージ、カーネルイメージ、rootfsイメージをロードします。
シリアルポートを介してマザーボードと通信しています。
私はGCC 6.1.1を使ってカーネル4.6をコンパイルしています。 2.6.38-GZSDカーネルのコンパイル。直接コンパイルするにはGCC 4バージョンが必要です。
私はソースコードを変更せずに4.6カーネルソースを使用しようとしています。したがって、設定UIを介してのみ可能です(make nconfig
この場合)。プラットフォームを設定し、関連するすべてのドライバを有効にしました(希望)。
GZSD6410がメインラインにないため、マシンはGZSD6410ではなくSMDK6410用に設定されています(2.6.38で移植するには、現在持っているよりカーネルについてのより多くの知識が必要です)。私はこれとおそらくNANDドライバが起動失敗の原因だと思います。
私は現在コマンドラインを使用しています。
init=/linuxrc console=ttySAC0,115200 root=/dev/mtdblock2 loglevel=7 earlyprintk
これに対して動作している 2.6.38-GZSD カーネルのコマンドラインは次のようになります。
init=/linuxrc console=ttySAC0,115200 root=/dev/mtdblock2
特定の質問(およびログ)
それもONENAND 初期化失敗。
ONENANDの代わりにNANDを使用しようとするとやはり失敗した。
それにもかかわらず、これによりカーネルrootfsをマウントできず、パニックが発生する。
これと比較して、2.6.38-GZSDを使用した成功したブートログは次のとおりです。このように。