よく知られているようにPENTAX K-30とK-50はハードウエアがほぼ同じです。

 

昔からK-30にK-50のファームウエアを適用する改造ファームウエアが出ています。

これはあくまで改造ファームウエアで次にK-50のファームウエアを適用できません。既に新しいK-50用のファームウエアは出てきませんので問題はないのですがなんとなく気持ち悪いかなと思ってました。

 

そこでK-30を(内部的に)完全にK-50にしてしまう改造ファームウエアを作成しました。これを適用するとその後、公式のファームウエアアップデータを再度適用できるようになります。

 

原理

①まずK-30にどんなファームウエアもノーチェックでアップデートできる改造ファームウエアを適用します。

この時、K-30が読み込めるファームウエアの名前をK-50のファームウエア名(fwdc222b.bin)に変更しておきます。

改造ファームウエア名:KB524B.bin

ファクトリーファームウエア形式です。

②次にK-50の公式ファームウエアを適用します。

ファームウエア名:fwdc222b.bin

これでK-30は内部的に完全にK-50になります。②を実行しないとどんなファームウエアも適応できる状態になっていて起動しないファームウエアも適用できてしまうため必ず②を実行してください。

 

実行方法

KB524B.binをダウンロードしてSDカードのルートにコピーします。

②PENTAX K-30は電源オフの状態にしておきます。

③SDカードをPENTAX K-30に挿入します。カードドアは開けたままにします。画面のメッセージに従い、SDカードを抜きます。

④アップデートが実行されますので完了まで待ちます。

---------------------

⑤公式からダウンロードしたK-50のファームウエアを準備します。ファームウエアの名称はfwdc222b.binになっているはずです。

⑥ファームウエアfwdc222b.binをSDカードのルートにコピーします。この時KB524B.binがあったら削除(またはリネーム)しておきます。(そうしないと再度KB524B.binを自動で実行してしまいます。)

⑦公式の方法(メニューで「バージョン情報」を選択)でファームウエアバージョンアップを実施します。

 

注意事項

①:KB524B.binを実行した直後は改造バージョンK-30 v1.06になっています。そのままでK-30の最新バージョンとして利用できます。しかしバージョンアップ対象はfwdc222b.bin K-50となっています。またエラーを含むファームウエアでもバージョンアップできますので公式のK-50のユーザーファームウエアでバージョンアップしてください。

 

これはリマインダーです。
Pentax K20D ver1.04をもとにしています。
1.μITRON4.0をベースにしています。
 SystemCallの一覧です。表示のアドレスにロケートされています。


2.チェックサムのロジックです。最初に0xFFFFFFFFかどうかチェックし、
 そうであればロジックをスキップします。


3.ファームウエアの複号ロジックです。バッファエリアにファームウエアを
 読み込んで複号しています。

VLensって何ですか。ご存じの方教えてください。

Debug ModeにVLens Control Testというメニューがあります。

 

表示は以下のようになっています。

MPIN 10000100

 

も意味が分かりません。

 



AFボタンを押すと次の画面になります。

 



SDMってレンズ内臓の超音波モーターのことですよね。

 

うーん、謎。















 

Pentax K-3 Mark III Monochromeをお借りする機会がありましたのでdebug modeを試してみました。

 

Pentax K-3 Mark III ノーマル

ProjectNumber = 582

ProductID = 00078420

 

Pentax K-3 Mark III Monochrome

ProjectNumber = 622

ProductID = 00078550

 

です。

さてMonochrome機ではどちらのコードでdebug modeは起動するでしょうか。

予想ではMonochromeのコードで起動と思いましたが、結果はノーマルのコードでした。つまりこの辺(どの辺?)はノーマル仕様だということですね。

 

Ghidra に解凍したFirmwareを読み込ませます。

Language =ProcessorはARM Cortex A7 Little endianです。

最初の自動解析では結構めちゃめちゃな解析をしますので

少しづつ整えていきます。

 

まずはBOOTブロックとRTOSブロックの実行アドレスの設定です。ここはほとんど試行錯誤です。アセンブルリストの固定アドレスなどを頼りに先頭アドレスを探していきます。

 

結果としてBOOTは

0x50b00000

RTOSは

0x52500000

から始まっていることが判明しました。GhidraのMemory Map機能で設定します。

 

以下はBOOTの先頭部分です。ARMのRESET他、割り込みベクターが入っています。

 

 

RTOSのほうの先頭も見ていきましょう。

こちらも先頭は割り込みベクターになっています。

ブランチ先はもちろんBOOTとは違います。

 

 

BOOT中はBOOTの先頭の割り込みベクターが有効でBOOTが終了するとそれぞれのOSの割り込みベクターが使用されるようになるようです。

 

次回からは中身の解析に移ります。