Mini2440組込Linux移植ステップバイステップガイドライン(3)

Mini2440/Mcro2440等開発ボード関連のフォラーム

Mini2440組込Linux移植ステップバイステップガイドライン(3)

投稿記事by dwtechadm » 火 9 10, 2013 4:09 pm

第三章 Linux-2.6.32.2カーネル移植詳しい手順
3.1 序説
Linux-2.6.31からLinuxカーネルはmini2440をサポートする。
Mini2440のコア回路は SMDK2440とほぼ同じで、Linux-2.6.32.2カーネルはSMDK2440に対するサポートは十分であるから、大部分の移植は出来る。ターゲットプラットフォームの差異により調整後、使用出来る。
次は移植の詳しい説明である。

3.2  Linuxカーネルソースコードを取得
Linuxカーネルソースコードを取得する方法は多い、Fedora9プラットフォームはネットと接続、直接にコマンドラインで下記のコマンドを入力直接ダウンロード出来る
#wget http://www.kernel.org/pub/linux/kernel/ ... 2.2.tar.gz
またWindowsシステムでダウンロード後、Fedora9にコピー出来る

画像

3.3 カーネルソースコード解凍
/opt/FriendlyARM/mini2440ディレクトリにダウンロードしたカーネルソースコードを解凍する
コマンド:
#cd /opt/FriendlyARM/mini2440
#tar xvzf linux-2.6.32.2.tar.gz
下図を参照する
画像

3.4 クロスコンパイラの変数を指定
移植目的:Linux-2.6.32.2はmini2440で実行出来る。
まずLinux-2.6.32.2のデフォルトターゲット•プラットフォームをARMのプラットフォームに変更し、メインディレクトリのMakefileの
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
を次のように変更する
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
ARCHはターゲットプラットフォームをarmと指定、CROSS_COMPILEはクロスコンパイラと指定する、フォルトとクロスコンパイラを指定後、他のものを使用する場合、コンパイラパスをここで書き込む。
注:vimエディタを薦め、特殊文字のカラー表示機能がある。下図を参照する
画像
次はlinuxのコンパイルをテスト:

#make s3c2410_defconfig ; デフォルトのカーネルコンフィグレーションファイルを使用する、3c2410_defconfigはSMDK2440のデフォルト設定ファイルである
#make ; コンパイル時間が長い
コンパイル成功



3.5 ターゲットプラットフォームを作成、クローン

3.5.1 マシンコードについて
上記のコンパイルはLinuxカーネルがサポートするターゲットプラットフォーム設定を使用し、SMDK2440と対応する。SMDK2440を参照し、開発ボードにプラットフォームMINI2440を追加する。
Linux-2.6.32.2は mini2440をサポートし、名前は衝突した。ここで、やはりMINI2440という名前を使用し、以後の移植手順にカーネルmini2440のプロトコード部分を削除する。
まず、カーネルが起動する時、bootloaderでマシンコード(MACH_TYPE)を転入、判断し、対応ターゲットプラットフォームで起動を指定する。本章でmini2440のマシンコード1999で、ファイルはlinux-2.6.32.2/arch/arm/tools/mach_typesにある、下図を参照する

画像
カーネルのマシンコードはbootloaderのと一致しない場合、次のエラーが出る

画像

U-Bootの公式ウェブサイト(http://www.denx.de/wiki/U-Boot/WebHome )は2009.06バージョンからmini2440のマシンコードの定義を追加した。他の方法で移植するu-bootは直接移植するカーネルを起動できる。
注:U-boot/include/asm-arm/mach-types.hでmini2440のマシンコード定義を確認できる。
下図を参照する

画像

次に、linux-2.6.32.2/arch/arm/mach-s3c2440ディレクトリ下にmach-mini2440.cファイルがある。これを使用しないため、直接削除する。
linux-2.6.32.2/arch/arm/mach-s3c2440/ディレクトリ下のmach-smdk2440.cをコピーし、mach-mini2440.cと名づけ、MACHINE_START(S3C2440、 "SMDK2440")を検索、MACHINE_START(MINI2440、 "FriendlyARM Mini2440 development board")に変更する。
注:開発ボード起動後、コマンドラインで:cat /proc/cpuinfoを入力する、開発ボード情報を確認できる:

画像

3.5.2 クロックソース周波数の変更
システムクロックソースを変更する。mach-mini2440.c(mach-smdk2440.cをコピーしたもの)の第160行static void __init smdk2440_map_io(void)関数で、中の16934400(元のSMDK2440目標ボードの水晶振動器16.9344MHzを表示する)をmini2440開発ボードに実際使用の12000000(mini2440開発ボードの水晶振動器12MHzを表示し、コンポーネントのラベルはX2)に変更する、下図を参照する

画像

3.5.3 SMDK2440からMINI2440まで
mini2440プラットフォームシステムを作るので、区別するために、mach-mini2440.c内のすべてsmdk2440字形はmini2440に変更する、バッチ処理コマンドを使用できる。
vimのコマンドライン:
%s/smdk2440/mini2440/g  
で変更する。
注:゛smdk2440゛とマッチングする文字列を全部゛mini2440゛に書き換える、前の゛%s゛は文字列マッチング、後の゛g゛は global/グロバル意味で、入力は下記の通り:

画像

また、mini2440_machine_init(void)関数で、smdk_machine_init()関数のコメントを削除、smdk2440のオリジナル関数は必要ない。上図を参照する。

3.5.4 コンバイルテスト
Linuxソースコードのルートディレクトリの下に実行する
#make mini2440_defconfig ; Linux公式mini2440設定を使用する
#make zImage ;カーネル・コンパイル、長時間で、最後にzImageを生成する
再コンパイル、生成したカーネルファイルzImage(arch/arm/boot)はボードにダウンロ—ドし、カーネルは正常に起動できる。そして大部分のハードウエアドライバ、ファイルシステムがインストールされていないため、登録できない。
画像

画像
画像
画像
画像
画像
画像
画像


3.6 カーネル設定メニューのmini2440オプションについて
ドライバを移植する前に、make menuconfig機能は必要である。カーネル設定メニューでmini2440オプションを表示する:
#make menuconfig:前は既にmake mini2440_defconfigを実行し、デフォルト設定がロードされるため、ここで該当コマンドを直接に実行できる。
下図のようにカーネル設定メニューが出る

画像
下キ―で、System Typeに移動し、Enterボタンで、サブメニューに入る、下図を参照する

画像
S3C2440 MachinesでEnterボタンを押し、サブメニューに入る、下図を参照する

画像

Linuxのプロト・カーネルはmini2440開発ボードに対するサポートオプションを選択。
Linux-2.6.32.2/arch/arm/mach-s3c2440/Kconfigファイルをオープンすると、下図の情報を見つける

画像

゛MINI2440 development board゛はこのKconfigファイルに定義され、表示情報を自由に変更できる。
ここの表示情報はカーネル設定メニューに表示するだけで、設定を有効きるまではMakefileを使用し該当のコードファイルを追加する必要がある。該当ディレクトリのMakefileは下図を参照する。

画像

設定ファイルは実際のコードファイルと設定定義で繋がられる。ここの設定定義は゛CONFIG_MACH_MINI2440゛で、カーネルには類似設定定義があり、その一部の設定定義は依頼関係である。

3.7  Nandドライバ移植、パーティション情報変更
3.7.1 Linux-2.6.32.2カーネルはサポートするNand Flashタイプ
Linux2.6.32.2は既に殆どのNand Flashドライバを含め、linux-2.6.32.2/drivers/mtd/nand/nand_ids.cファイルに、Nand Flashタイプを定義され、下図を参照する
画像



3.7.2 Nand Flashパーティションテーブル変更
ここで、システムのデフォルトパーティションを自分で変更する必要がある。そして、システムのNand Flashドライバインタフェースに適合するように、Nand Flashの構造情報は書き込み必要がある。SMDK2440にNand Flashデバイスがレジスタされる情報を参照する
/arch/arm/plat-24xx/common-smdk.cをオープン:
画像
画像
上記はNand Flashのパーティションテーブルで、Linux-2.6.32.2にnandドライバはプラットフォームデバイスとして登録され、/arch/arm/plat-24xx/common-smdk.cファイルにも確認できる、次の通り
画像
上記の構造情報を参照し、mach-mini2440.cに内容を追加し、実現する。同時にMini440出荷時のカーネルのパーティションテーブルを参照する、下図を参照する

画像
そして、mach-mini2440.cに次のコードを追加する。

画像
画像
画像
nand flashデバイスをシステムに登録
画像


3.7.3 起動情報からパーティションテーブルを調べる
ここまでnand flashドライバの移植は完了し、カーネルルート•ディレクトリで゛make zImage゛を実行し、生成するzImageを開発ボードにプログラミングし、起動後、赤字は先追加したNand flashパーティション情報と開発ボード自身nand flashの情報であり、ここでは256Mのnand flashである

画像


3.8 yaffs2を移植
3.8.1 yaffs2ソースコードを取得
画像
YAFFSの公式サイト
http://www.yaffs.net/node/346で最新ソースコードをダウンロードする。gitツールを使用し(インストール方法は本マニュアルの第一章を参照する)、コマンド:#git clone git://www.aleph1.co.uk/yaffs2を実行し、最新のyaffs2ソースディレクトリをダウンロード、また付属DVDにソースコードパッケージもある、(ファイル:yaffs2-src-YYYYMMDD.tar.gz)
画像

3.8.2 カーネルにyaffs2パッチを追加
yaffs2ソースコードディレクトリに入り、
#cd yaffs2
#./patch-ker.sh c /opt/FriendlyARM/mini2440/linux-2.6.32.2を実行し
下図の通り、yaffs2パッチは成功に追加される
画像
linux-2.6.32.2/fsディレクトリに入り、yaffs2ディレクトリを確認出来る:

画像



----------続く
dwtechadm
 
記事: 60
登録日時: 月 2 25, 2013 1:35 pm

Return to ARM9ボード関連

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[0人]

cron