2.6.38を実行するARMv6ボード(Samsung S3C6410)にカーネル4.6を移植する

2.6.38を実行するARMv6ボード(Samsung S3C6410)にカーネル4.6を移植する

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

特定の質問(およびログ)

コアSDカードリーダーの初期化に失敗しました

それもONENAND 初期化失敗

ONENANDの代わりにNANDを使用しようとするとやはり失敗した

それにもかかわらず、これによりカーネルrootfsをマウントできず、パニックが発生する

これと比較して、2.6.38-GZSDを使用した成功したブートログは次のとおりです。このように

ベストアンサー1

おすすめ記事