第4章 付録A 新フラッシュメモリ適用品向けアップデートの差分の適用例

ここでは、以下のWebページからダウンロードできるパッチファイルの中から、例として hermit-at-2.1.5にパッチを適用する例を紹介します。

一連の操作はATDEのGNOME端末上で行います。また、ATDEや関連するソフトウェア(シリアル通信ソフトウェアなど)については、設定が完了している前提で説明しています。各製品の製品マニュアル、ソフトウェアマニュアルをご覧いただき、関連ソフトウェアの設定を完了してから操作を行ってください。

4.1. ソースコードのバックアップ

後でパッチを当てたことによって、実際にどのような変更が行われたのかを把握しやすくするため、ソースコードのバックアップします。

[ATDE ~]$ cp -r hermit-at-2.1.5-source hermit-at-2.1.5-source.backup

図4.1 hermit-at-2.1.5-sourceのバックアップ


4.2. パッチの適用

4.2.1. パッチコマンドの実行

パッチファイルの適用にはpatchコマンドを使用します。まずは以下のようにpatchコマンド実行します。

[ATDE ~]$ ls
hermit-at-2.1.5-source         new_flash_memory_hermit-at-2.x.x.patch
hermit-at-2.1.5-source.backup
[ATDE ~]$ cd hermit-at-2.1.5-source
[ATDE ~/hermit-at-2.1.5-source]$ patch -p 1 < ../new_flash_memory_hermit-at-2.x.x.patch
patching file configs/armadillo4x0_boot_defconfig
patching file configs/armadillo4x0_defconfig
patching file include/target/flash.h
patching file include/target/machine.h
Hunk #1 FAILED at 12.
1 out of 1 hunk FAILED -- saving rejects to file include/target/machine.h.rej
patching file src/target/armadillo4x0/Kconfig
patching file src/target/armadillo4x0/board.c
Hunk #2 succeeded at 370 (offset -3 lines).
Hunk #3 succeeded at 572 (offset -3 lines).
Hunk #4 succeeded at 674 (offset -3 lines).
Hunk #5 succeeded at 772 (offset -3 lines).
patching file src/target/armadillo4x0/board.h
Hunk #1 succeeded at 38 with fuzz 1 (offset -1 lines).
patching file src/target/driver/flash_amd.c
patching file src/target/driver/flash_core.c

図4.2 hermit-at-2.1.5へのパッチの適用


図4.2「hermit-at-2.1.5へのパッチの適用」ではpatchコマンドが失敗していることがわかります。

4.2.2. パッチを適用できなかった箇所の確認

patchコマンドが失敗した場合、パッチを適用できなかった箇所を、テキストエディタで適切に修正する必要があります。

パッチを適用できなかった箇所は、「パッチが適用されるファイル名」.rej というファイルに記述されています。

[ATDE ~/hermit-at-2.1.5-source]$ cat include/target/machine.h.rej
--- include/target/machine.h
+++ include/target/machine.h
@@ -12,5 +12,7 @@
 #define MACH_ARMADILLO440	(2374)
 #define MACH_ARMADILLO460	(3270)
 #define MACH_ARMADILLO410	(4636)
+#define MACH_ARMADILLO441	(5135)
+#define MACH_ARMADILLO411	(5136)
 
 #endif /* _HERMIT_TARGET_MACHINE_H_ */

図4.3 include/target/machine.h.rejの内容


図4.3「include/target/machine.h.rejの内容」とinclude/target/machine.hを見比べると、 "#define MACH_ARMADILLO410 (4636)" の行が無かった(Armadillo-410対応前のソースコードだった)ため、パッチを適用できなかったことがわかります。

4.2.3. パッチを適用できなかった箇所のソースコードの修正

パッチを適用できなかった箇所がある場合、生成されたrejファイルに記述された差分を確認し、ソースコードに適用すべきかを判断する必要があります。

hermit-at-2.1.5-sourceは、Armadillo-410対応前のソースコードです。そのため、"#define MACH_ARMADILLO410 (4636)"が存在しなくても問題はありません。したがって、include/target/machine.hを以下のように修正します。

[ATDE ~/hermit-at-2.1.5-source]$ vi include/target/machine.h
#ifndef _HERMIT_TARGET_MACHINE_H_
#define _HERMIT_TARGET_MACHINE_H_

#define MACH_ARMADILLO		(83)
#define MACH_ARMADILLO9		(386)
#define MACH_ARMADILLOJ		(416)
#define MACH_ARMADILLO300	(473)
#define MACH_ARMADILLO500	(1260)
#define MACH_ARMADILLO500FX	(1918)
#define MACH_ARMADILLO420	(2373)
#define MACH_ARMADILLO440	(2374)
#define MACH_ARMADILLO460	(3270)
#define MACH_ARMADILLO441	(5135) // 追加
#define MACH_ARMADILLO411	(5136) // 追加

#endif /* _HERMIT_TARGET_MACHINE_H_ */

図4.4 include/target/machine.hの修正


4.3. 変更内容の確認

patchコマンドが成功していたとしても、意図したとおりにソースコードが変更されているかはわかりません。そのため、パッチ適用後のソースコードが「新フラッシュメモリ適用に伴うソフトウェア変更箇所」および使用したパッチファイルの意図したとおりになっているか確認してください。

[ティップ]

変更されたファイルは図4.2「hermit-at-2.1.5へのパッチの適用」に表示されています。

[ティップ]

パッチ適用前後のソースコードの差分は、diffコマンドで確認できます。patchコマンドにより、実際のソースコードには .orig ファイルと .rej ファイルが含まれていますが、ビルドには影響しないため無視してください。

[ATDE ~/hermit-at-2.1.5-source]$ cd ../
[ATDE ~]$ diff -ur hermit-at-2.1.5-source.backup hermit-at-2.1.5-source

図4.5 パッチ適用前後のソースコードの差分


正しく適用されたのかどうか判断ができない場合は、ソースコードのバージョンと図4.5「パッチ適用前後のソースコードの差分」の実行結果を添付してArmadilloフォーラムへお問い合せください。

4.4. イメージファイルのビルド

ビルド方法については、各製品の製品マニュアル、ソフトウェアマニュアルをご覧ください。

新フラッシュメモリ対応のイメージをビルドする上で、手順の追加はありません。ただし、次の点にご注意ください。

4.4.1. デフォルトコンフィギュレーションを適用してからビルドする

新フラッシュメモリ対応のイメージをビルドする際は、必ずデフォルトコンフィギュレーションを適用してからmakeを実行してください。

新フラッシュメモリ対応ではデフォルトコンフィギュレーションの変更を行っています。そのため、ソースコードの修正後、デフォルトコンフィギュレーションを適用せずにイメージをビルドすると、新フラッシュメモリ非対応のイメージが生成されてしまいます。