MojaveでAVR環境構築 ~5/5~

Atmel ICEを使用できるようにする

AtmelICEダミーkextを設定しCrosspackのテンプレートを編集する

1.AtmelICE.kextをダウンロード

atmel-ice-mac-driverを提供してくれている
https://github.com/jakeh12/atmel-ice-mac-driver
からAtmelICE.kext.zipをダウンロードし解凍する
ただし記述に誤りがあり,そのままでは使えないため編集が必要

2.AtmelICE.kextを編集する

AtmelICE個別のIDに合わないことがあるのでプロパティリスト
AtmelICE.kext/Contents/Info.plistを編集する

Contents内のInfo.plist~[チルダ]は製作者が参考にしたプロパティリストの
バックアップコピーと思われるので混同するなら削除しても問題ない

ここで,時系列や順番を無視してもらって
実際の書き込み時に以下のようなエラーが出る場合
Did not find any device matching VID 0x03eb and PID list: 0x2141


最後まで設定したInfo.plistと書き込み器のID一致していないことになるので
以下の手順でInfo.plistが編集を行う

当方のAtmelICEと同じIDではない場合
全ての設定が終わった後の書込みで出た上記のエラーを参考にこの段階に戻る必要がある
一周するつもりで臨んだ方が精神的ダメージは少ない

PIDはidProductに, VIDはidVendorに置き換えて進める
Info.plistを見るとinteger(整数)に統一されていたのでそれぞれ十進法に変換する
どちらにしてもダウンロードしてくると,ここが16進法になっているので修正が必要
編集せずに全ての設定を一度終わらせ,わざとエラーを出してIDを調べると確実かも
当方の場合は0x2141=8513, 0x03eb=1003

Info.plistの38~41行目

すでにエディタから構文エラーを指摘されている部分を以下のように書き換える

<key>idProduct</key>
<integer>8513</integer>
<key>idVendor</key>
<integer>1003</integer>

3.リカバリモードで起動しRootlessを一時的に無効にする

この後の作業では/Systemに変更を加えるため
ElCapitan以降のシステムファイルを書き換えるマルウェア対策を一時的に解除する
[command]+[R]を押しながらMacをリカバリモードで再起動
起動したらユーティリティからターミナルを開き

$ csrutil disable

を実行し成功したらターミナルを終了しMacを通常で再起動
ターミナルを起動しRootlessが無効になっているか確認する

$ csrutil status
System Integrity Protection status: disabled.

disabled.(無効)になっていたら次の作業に

4.AtmelICE.kextをコピーする

ターミナルのroot権限で/System/Library/Extensionsにフォルダをコピーする

コピー元が/Users/[ホームフォルダ名]/Downloadsの場合は以下のようにする

$ sudo cp -r /Users/[ホームフォルダ名]/Downloads/AtmelICE.kext /System/Library/Extensions/AtmelICE.kext

もしくはコピー元のディレクトリに移動し

$ sudo cp -r AtmelICE.kext /System/Library/Extensions/AtmelICE.kext

AtmelICE.kextがコピーできたか確認する

$ ls /System/Library/Extensions/AtmelICE.kext

Contentsが出てきたら成功

5.権限の変更する

続いて所有者変更chown(change owner)

$ sudo chown -R root:wheel /System/Library/Extensions/AtmelICE.kext

アクセス権(パーミッション)の変更chmod(change mode)

$ sudo chmod -R 755 /System/Library/Extensions/AtmelICE.kext

最後にカーネル拡張(kext)のキャッシュをリセットする

$ sudo kextcache -system-caches

少し時間がかかるが正常に完了したらセキュリティを元に戻す作業に

6.再びリカバリモードで起動しRootlessを有効に戻す

[command]+[R]を押しながらMacをリカバリモードで再起動
ユーティリティからターミナルを開き

$ csrutil enable

を実行し成功したらターミナルを終了しMacを通常で再起動
ターミナルを起動しRootlessが有効になっているか確認する

$ csrutil status
System Integrity Protection status: enabled.

enabled.(有効)となっていたら完了

7.Makefileを編集する

crosspack-avrコマンドで生成されたmakefileのPROGRAMMERを
atmelice_ispに変更し書き込みテスト行う

PROGRAMMER = -c atmelice_isp -P usb

成功したらAVRISP Mk2もしくはAtmel ICEがすぐに使用できるように
Makefileテンプレートを編集するのもよい

8.Makefileテンプレートを編集する

CrossPackのテンプレートfirmwareディレクトリに移動しエディタAtomで編集する

$ cd /usr/local/CrossPack-AVR-20131216/etc/templates/TemplateProject/firmware
$ atom .

MakefileのPROGRAMMERのデフォルトをavrispmkIIatmelice_ispにしておく
例えば以下のように#(ハッシュ)を入れ替えるだけで選択できるようにする
合わせてFUSEなどはよく使用する設定に書き換えるのもよい

DEVICE     = attiny2313
CLOCK      = 8000000
PROGRAMMER = -c avrispmkII -P usb
#PROGRAMMER = -c atmelice_isp -P usb
OBJECTS    = main.o
FUSES      = -U hfuse:w:0xd9:m -U lfuse:w:0xcc:m

9.確認

再びデスクトップに移動し再びdemoフォルダを作成し

$ cd /Desktop
$ avr-project demo2
$ cd demo2/firmware
$ atom .

でMakefileテンプレートが編集されているか確認し完了

今までのデータが使用できることも確認できた
AVRISP Mk2が壊れても開発を続けることができるようになってひと安心