Attribute System

ジャンク奇行。 ときどき ラクガキ。

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

Wacom タブレット、マルチモニタ環境。

2018-08-20 07:55:41 | 研究&TIPS
 おはようございますヌキヲです。
このあいだ迂闊にペンタブのドライバーをアップデートしたら嵌ったので備忘録します。

●症状

マルチモニタ環境で WinTabAPI の描画領域がカーソルとズレる問題です。
詳しく言うと、マッピングがおかしく、デスクトップ全体を強制されます。
ただし、操作パネルは普通に操作できてしまいます。

SAI SAI2 の WinTab モードで確認しました。
クリスタは持ってないのですが、フォーラムにそれっぽい書き込みがありました。


●改善方法

ドライバーを古いものに差し替えます。
普通にアンインストールしただけでは消えませんので手動操作が必要です。

1.タブレットを切断
2.設定→アプリ から ワコムタブレット をアンインストール
3.再起動
4.サービスを停止。
5.C:\Program Files から tablet フォルダを削除
6.AppData\Roming から WTablet フォルダを削除(オプション)
7.タブレットを接続
8.古いドライバーをインストール


サービス停止はタスクマネージャからできます。
TabletServiceWacom、WTabletServicePro などです。実行中でなければ大丈夫でしょう。

ドライバーのバージョンはちょっと古いですが v6.3.21 で正常動作を確認しました。


●考察

私の環境を記しておきます。

Windows10 Pro 1803 x64
Wacom Cintiq 13HD DTK-1301
Lenovo ThinkVison L1423p
Driver v6.3.30-6

どうも ISD(Wacom feel IT Technologies) の方も引っ張られるようで、
v6.3.30 を入れた時点で同症状になりました。

TabletPC API や Windows API で問題が出ないところを考えると、
WinTabAPI 固有のバグか仕様変更だと思われます。
また、Medibang では確認できなかったので、すでに対応した可能性があります。

SAI SAI2 でよく聞く AvoidWacomBug はスケーリングの問題なので今回は関係ありません。

というわけで、皆さんもドライバーのアップデートは本当に必要かよく考えて行いましょう。
コメント

画像を DPI値 に合わせて印刷する

2018-07-04 07:03:00 | 研究&TIPS
 おはようございますヌキヲです。
こんな時間ですが、今回はちょっとかゆいところに手を伸ばすネタです。

絵を描いたり、スキャナーで jpg などにスキャンしたりすると気になるのが、
そのままの実寸や、好きな倍率に設定しての印刷です。
これがまたできるソフトが無いこと!

そりゃね、Photoshop とか持ってれば好き放題できますよ?
でも、どこの環境にもあるものではないので困ってしまいます。

できればフリーソフトで欲しい機能ですよね。
ここからめくるめくフリーソフトショッピングが始まります。
あれもこれも多有名どころはほとんど試しました。
Photoshop 代替を狙っている GIMP も試したけど、
ドキュメントの dpi 値に従い 100% 印刷という点であえなく NG。
惜しいかな、好きなサイズに印刷はできるんですけどね。

で、結論言っちゃうと、Windows の標準アプリ、Windows ペイント でできました!
灯台下暗し!!
枚数たくさんあっても、一枚ずつちまちま開いては印刷~ってのを繰り返さないとならないのが
たまにキズですが、それでもできるだけマシってもんですね。

あぁよかった。
コメント

Chinachu on WSL at 2018.07

2018-07-04 05:40:58 | 研究&TIPS
 こんばんはヌキヲです。
今回は録画鯖のソフトを入れ替えた話です。

ある日 BS の 2K/4K 問題によるチャンネル再編のせいで
BSプレミアム が見れないことに気づきました。
もともと私の環境は PT3+TvRock だったのですが、
かなり古いバージョンで更新の仕方が全然わかりません。
そこで、TvRock の更新にこだわらずに、別ソフトへの乗り換えを考えます。
で、最近流行(?)の Chinachu にしてみようということになりました。
備忘録なので、過度の期待は禁物です。


●条件



Windows10 RS4 上に PT3 + BonRecTest + Mirakurun の環境を作ります。
さらに WSL Ubuntu 18.04 LTS 上に Chinachu を入れました。
リアルタイム視聴は Ubuntu 上の Kodi + Harekaze(pvr.chinachu) から行います。

※この環境には問題点があります。
WSL Ubuntu がストアアプリなため自動起動の手段がありません。
また Ubuntu 自体を起動できたとしても、chinachu の自動起動が確立できていません。
この辺は要研究かな。

解決しました。




●PT3 + BonRecTest の準備



詳しくはたくさんのページが存在するので割愛します(笑
かいつまんで解説です。

PT3 のドライバーと SDK を入れます。
必要があれば FPGA の回路更新もしておいてください。

次に必要なものの収集です。
BonRecTest.exe は自分でビルドするか、どっかのアプロダから入手します。
B25Decoder.dll も同様に。
BonDriver は github だったかな。

これらを同一フォルダに展開します。
32bit 64bit 問題ですが、必ず同じ bit 数のモノをそろえてくださいね。
OS が 32bit なら 32bit のモノ一択です。
OS が 64bit なら どちらでも動作しますが、混在はできません。

BonDriver の dll をチューナーの枚数分だけコピーし、リネームします。

さて、ここでコマンドプロンプトか PowerShell を起動し動作確認します。

> ./BonRecTest --decoder B25Decoder.dll --driver BonDriver_PT3-T0.dll --log --output test.ts --channel 11


とかやれば動くはずなのです。
エラーが出る場合は vc_redist が足りないことが多いようです。
また、IB25Decoder の初期化に失敗する場合は、
B-CAS カードが取り付けられているか確認してください。

次に BSチャンネル のアップデートもしてしまいましょう。

「PT3のチャンネル移動対策方法/アースソフト」解説 ~半自動編~

を参考に BonDriver_PT3-S.ChSet.txt を差し替えます。

・・・結構やることありますね(汗



●Node.js + Mirakurun



入れるのは Windows ネイティブ版です。

まずは Node.js ですね。
奇数のバージョンは開発版ですので、必ず偶数のバージョンを入れます。
今現在ですと 8.11.3 LTS とかかな?

次に Mirakurun ですが、README.md を読むと、

# Win32 (Windows PowerShell as Admin)
npm install winser@1.0.3 -g
npm install mirakurun -g --production


とすればいいようです。
Node.js をインストールしたことにより、
PowerShell の管理者権限で npm が使えるようになってると思うので実行します。

Mirakurun の設定ファイルが問題ですよね。
ここでは tunners.yml server.yml はスルーします。
そんなに難しくないので、自分の環境に合わせてください。

cahnnels.yml です。
地上波(GR) はチャンネルスキャンができますが、
Windows 環境に Curl が無いので後回しです。

BS が混沌としている原因ですが、チャンネル番号は Linux とは別で、
BonDriver 上のチャンネルを指定する必要があるからです。
また、BonDriver 側でも、チャンネルが連番でないとダメとか制約があります。

記述の仕方は、総務省の pdf 等を見ながら目的のチャンネルの BS01/TS0 の部分を探します。
例えば、新しく配置された NHK BSプレミアム では BS3/TS1 です。
次にご自分の BonDriver_PT3-S.ChSet.txt から BS3/TS1 の行の、
BonDriver 上のチャンネルを見ます。私の環境では '4' でした。

ServiceId については変更ありません。
BS について検索すれば ch番号 などの名目で出てきます。
先の例では 103ch ですので、'103' と書きます。

一応私の作った一例を紹介します。
ただし、無料放送の本チャンネルのみで、
サブチャンネルや有料放送、CS放送 はスルーします。
CS については私がまだ勉強不足です。

- name: NHK BS1
  type: BS
  channel: '17'
  serviceId: 101
- name: NHK BSプレミアム
  type: BS
  channel: '4'
  serviceId: 103
- name: BS日テレ
  type: BS
  channel: '14'
  serviceId: 141
- name: BS朝日
  type: BS
  channel: '0'
  serviceId: 151
- name: BS-TBS
  type: BS
  channel: '1'
  serviceId: 161
- name: BSジャパン
  type: BS
  channel: '2'
  serviceId: 171
- name: BSフジ
  type: BS
  channel: '15'
  serviceId: 181
- name: BS11
  type: BS
  channel: '8'
  serviceId: 211
- name: TwellV
  type: BS
  channel: '10'
  serviceId: 222
- name: 放送大学BS1
  type: BS
  channel: '13'
  serviceId: 231
- name: D-Life
  type: BS
  channel: '27'
  serviceId: 258


mirakurun の動作確認は、mirakurun-ui で行います。
といっても、確認できるのはチューナーが正しく認識しているか・・・のみですが。



●WSL + chinachu



はい、ここが一番知りたい人が多いのではないでしょうか?
難しいことはありません、順番にインストールしていくだけです。
Mirakurun と同じマシンでも違うマシンでも可能です。
今回は同じマシンで行いました。

Windows の コントロールパネル>Windowsの機能の有効化 から WSL を有効にします。
ストアから Ubuntu 18.04 をインストールします。
起動し、ユーザー名とパスワードを入力しましょう。

> sudo apt install build-essential curl git-core vainfo

> git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
> cd ~/chinachu/
> ./chinachu installer


メニュー画面でフルインストール(Auto?)を選べばすべて入ります。
※Node.js も内包しているみたいで、別途インストールしなくても動きました。

> echo "[]" > rules.json
> cp config.sample.json config.json


設定ファイルをコピーしテキストエディタで編集します。
今回は実行ユーザーは現在のユーザーとします。
uid 欄には Ubuntu の初回起動時に入力したユーザー名を入れます。
mirakurunPath に、"http://録画鯖のIP:40772/", を設定します。

recordedDir に保存フォルダを指定します。
もし、Windows 側のファイルシステムを使う場合は /mnt/c などとすれば
Cドライブにアクセスできます。

ネットワークドライブは少々めんどくさくて、
まず、Windows 側でネットワークドライブを接続します。Zドライブとかね。
次に WSL 側でマウントポイントを作ります。

> sudo mkdir /mnt/z


そして、マウントします。

> sudo mount -t drvfs Z: /mnt/z


再起動してもマウントしないとまずいので、/etc/fstab に記述します。

> sudo vi /etc/fstab
Z:	/mnt/z	drvfs	default	0	0


最初からある行を消さないようにしましょう。



さて、そろったら起動してみます。

> ./chinachu update
> ./chinachu service operator execute
> ./chinachu service wui execute


もし pm2 を使いたい場合は別途 Node.js npm pm2 が必要です。

> sudo apt install nodejs npm
> sudo npm pm2


入った Node.js のバージョンは 8.10.0 でした。
ちょっと古いけど、偶数系だし OK ってことで。
起動には次のようにします。

> cd ~/chinachu
> sudo pm2 start processes.json


うまく起動したら pm2 を保存するのですが、

> sudo pm2 save


マシンを再起動してくると忘れてくれるので問題です。
この辺の解決方法が、私が浅学のためわかりません。
誰か教えてー。


●運用のために



最後に運用のための一押しです。
まず、ポートを開放しましょう。
開放するのは 3 つです。

chinachu 20772 TCP
mirakurun 40772 TCP,UDP

設定>ネットワーク>ファイアウォール>詳細設定>受信の規則
から、新しい規則 を押し、ポートを追加してください。

mirakurun については TCP だけでいいような記述もあるのですが、
逆に UDP だけでもつながるので、両方にしました。

また mirakurun のチャンネルスキャンです。
Ubuntu に curl を入れたのでこちらから行います。

> curl -X PUT "http://鯖IP:40772/api/config/channels/scan"


mirakurun のチャンネル設定を変更したら、chinachu にも教えてあげます。

> ./chinachu update


最後の行で WRITE で書き出していれば OK です。

EPG 取得は結構時間がかかるようです。
30分から1時間くらい放置して、ダメだったら何か手段を考えてみてください。



現在、再起動のたびに WSL と chinachu の起動を手動でしなくてはなりません。
WSL の自動起動とバックグラウンドタスク化が行えるようになるとかなり助かるんですけどね。


●Kodi + Harekaze(pvr.chinachu)



こちらも簡単です。
まず、インストールする前に、
設定 > システム > アドオン
から 不明なソース を オン にしましょう。

マルチプラットフォームのバイナリーが zip で頒布されているので拾ってきます。
kodi > アドオン > zip からインストール

もし、kodi のホーム画面に アドオン がなかったら?
おそらく消してしまったのでしょう。
そういうときもあせらず、
設定 > スキン > メインメニューアイテム
から復活できます。


●自動起動



□2018.07.13 追記
先日 subdiox さんよりコメントいただき、
自動起動について意外に簡単にできそうだったのでまとめます。
ただし、subdiox さんの方法では動かなかったので独自の方法にしています。
コメントの原文は残してありますので、気になる方はそちらからお読みください。

Windows 側。
WSL Ubuntu を自動起動します。

デスクトップか、好きな場所にバッチファイルを作ります。
名前は自由に、拡張子も .bat でも .cmd でも動きます。
内容は以下の通りです。

@echo off
start %USERPROFILE%\AppData\Local\Microsoft\WindowsApps\ubuntu1804.exe
rem pause


これをダブルクリックして実行してみます。
うまく起動しない場合は2行目のスペルミスだと思います。

3行目の rem を外すとコマンドプロンプト終了前に一時停止するので、
エラー文を読むことができるようになります。
最後に rem つけなおしておきます。

Win+R キーを押して、ファイル名を指定して実行 より

shell:startup


と入力します。
開いたフォルダに作ったバッチファイルをコピーすれば OK です。



次に WSL Ubuntu 側。
pm2 で chinachu を自動起動します。
Ubuntu 内で作業します。

ホームフォルダに .bashrc を配置し、ここに記述します。

> vi ~/.bashrc


などとすれば編集できるでしょう。
内容は以下の通りです。

cd chinahu
echo <password> | sudo -S pm2 start processes.json


<password> には各自のパスワードを記述してください。
保存して終わりです。
パスワードを平文で埋め込んでしまうというかなり危険な設定ですが、
まぁ良しとしましょうか。
コメント (2)

MPLAB XC32 v2.05 のクロスビルド。

2018-06-14 23:23:47 | 研究&TIPS
 こんばんはヌキヲです。
今日は表題の通り、MPLAB XC32 の野良ビルドについてです。
動作確認まで取れたので、忘れないうちにさっさとブログにまとめてしまおうと思います。
モノだけ欲しい人は、いつも通り 置き場 に置いておきますので使ってください。
最後のマージだけは自分でやってください。

※この情報は、ビルドした成果物を頒布するために必要なものです。
 ご自分で使うだけの場合は野良ビルドを再現する必要はありません。

●条件



今回は Ubuntu 18.04 マシンを用意して作業しました。
WSL で実行してみたのですが、x64 Kernel に x86 実行ランドがなかったため、
Configure で失敗します。これはかなり悲しいお話で、
クロスコンパイル系には WSL は使い物にならないことがわかりました。
MinGW+MSYS も試したのですが、ビルドスクリプト側にはじかれました。

ビルドするのは実行バイナリーのみで、ライブラリー類は完全無視とします。

今回のバージョンから内部構造が pic32m と pic32c に分かれました。
pic32c とは何ぞ?と思ったら、Atmel 由来の ARM コア PIC32CX シリーズのようです。
まだモノが出てきてないので、需要もないだろうしということで、
こちらのビルドも今回はスルーします。


●環境構築



必要なものを入れます。

> apt update
> apt install build-essential
> apt install mingw-w64
> apt install fossil
> apt install gcc-multilib g++-multilib
> apt install unzip
> apt install m4 bison flex texinfo



●ソースとスクリプトの展開



ソースとスクリプトを取得し展開します。
ソースは MicrochipArchive から、スクリプトは改造したので、
私の 置き場 からダウンロードしてください。

詳しくは割愛しますが、最終的に次のようなフォルダ構造にします。

+--mplabxc32-205
   |
   +--pic32m
   |  \--build-pic32m-common.sh
   |  \--build-pic32m-prerequisites.sh
   |  \--build-pic32m-toolchain.sh
   |  \--checkout-pic32m-source.sh
   |
   +--builddir
   |  +--pic32m_source
   |     +--src48x
   |        +--...
   |
   \--xc32-build-all.sh


なお、今回はソースの変更はありません。
すみません、ありませんとか言ってすっかり失念しておりました。

gcc/gcc/cp の中で cfns.gperf がうんちゃらかんちゃらのエラーです。
ビルドする側の gcc のバージョンによって出るらしいです。
昔はワーニングだったけど、最近の gcc はエラーを出すそうですね。

https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=ec1cc0263f156f70693a62cf17b254a0029f4852

ここの変更を適用します。



●ビルド



ではドキドキのビルドタイムです。

mplabxc32-205 > ./xc32-build-all.sh --skip_steps=checkout,pic32c,source_tar


マシンにもよりますが、30分程度で完成するのではないでしょうか?
成果物は次の通りです。

builddir/install-linux-nolm
builddir/install-mingw


圧縮などして持ち出してください。


●マージ



このままでは、ライブラリやヘッダー類も何もないので、Free版とマージします。
Free のままインストールしたファイル群を別フォルダにコピーし、
その上に成果物を上書きします。
フォルダ構造が一段違うので、注意してリネームしてくださいね。

MPLAB X IDE にも統合できます。v4.15 で確認しました。

Tool > Options > Embedded > Build tools

から Add ボタンを押して、該当フォルダ/bin を指定すれば OK です。


●最後に



駆け足でしたが、ビルドできましたでしょうか?
どんどん -Os や -mpis16 -micromips 等を使って、
楽しい PIC32M ライフを送っていただければ幸いです。

pic32c の方はもう少し流通したら考えますね。

ご精読ありがとうございました。
コメント (2)

SSHA ダイジェストを Windows で作る。

2017-01-26 23:42:46 | 研究&TIPS
 こんばんはヌキヲです。
今回は OpenLDAP のパスワードなどで使われる SSHA 方式のダイジェストを
Windows 上のコマンドプロンプトのみで生成するお話です。

背景から言うと PukiWiki でユーザアカウントを切ってもらうのに
パスワードのダイジェストもくれと言われたので、なんだそりゃ?となって調べました。

BugTrack/709 パスワードのフォーマットを選択可能に(LDAP互換に)


かみ砕いていうと SHA1 に SALT を付けた 24byte を base64 でエンコードすればいいらしいですね。
Windows 環境で手軽に生成できないものか調べたところ、
OpenSSL コマンドが Windows10 にも入っており、
また CertUtil が Base64 のエンコードに対応していましたので、バッチファイルにしてみました。

@echo off


IF %1 == "" GOTO END

openssl rand 4 > salt.temp
echo %1 > temp.$1
cat salt.temp >> temp.$1

cat temp.$1 | openssl dgst -sha1 -binary > temp.$2
cat salt.temp >> temp.$2
certutil -f -encode temp.$2 result.txt
cat result.txt

del -f salt.temp temp.$1 temp.$2


:END


です。
これを 適当な名前.cmd でフォルダに入れて、引数にパスワードを入れれば、
画面と result.txt に結果が出ます。
テンポラリファイルとか使うので結構危なげ?(笑



以下のサイト様を参考にしました。
素敵な情報ありがとうございます!

notepad.wiki > SSHA (Salted SHA-1) 形式のパスワードを生成したい

Eiji James Yoshidaの記録 > [メモ] Windowsでbase64エンコード・デコードする方法


□2017.02.05 追記。
上のままでは、SALT を毎回ランダムで生成してしまうので、
salt.bin ファイルが残っていれば、それを使うようにバージョンアップします。

@echo off


IF %1 == "" GOTO END

IF EXIST salt.bin GOTO DGST

openssl rand 4 > salt.bin

:DGST

echo %1 > temp.$1
cat salt.bin >> temp.$1

cat temp.$1 | openssl dgst -sha1 -binary > temp.$2
cat salt.bin >> temp.$2
certutil -f -encode temp.$2 result.txt
cat result.txt

del -f temp.$1 temp.$2


:END



はい、実際は 3行 増えて、ファイル名を変えただけです。
これで同じ SALT で何度も生成を試せます。

また、Base64 のデコードの方も作りました。

@echo off


IF %1 == "" GOTO END

echo %1 > temp.txt
certutil -f -decode temp.txt decode.bin
del temp.txt

:END


デコードされた decode.bin の先頭 20byte を削除すれば SALT が復元できますね。
で、これらを使って無事にログインできたか?
というのが一番重要だと思うのですが、実は失敗しています(笑
うーん、どっか間違ってるのかなぁ?

□2017.02.08 追記。
朗報!問題点がわかりました!!

Windows cmd.exe の echo は空白と改行を足してしまうのです。

@echo off


IF %1 == "" GOTO END

IF EXIST salt.bin GOTO DGST

openssl rand 4 > salt.bin

:DGST

SET /P XXX=%1<NUL > temp.$1
cat salt.bin >> temp.$1

openssl dgst -sha1 -binary -out temp.$2 temp.$1
cat salt.bin >> temp.$2
certutil -f -encode temp.$2 result.txt
cat result.txt

del -f temp.$1 temp.$2


:END


何ともマニアックなコマンドですね!
あと変更点は openssl の使い方をちょっと調べたところです。
断然すっきりしました。


さて、メデタシメデタシで終わろうと思ったのですが、
実はもっと簡単な生成方法があったのでお知らせします。

自身の Pukiwiki の TOP から index.php?cmd=md5 というページにアクセスすると、
なんとダイジェスト生成ページが現れます。
ディフォルトで SLAT 長は 8byte になるみたいですね。
なんて簡単なんだ!



参考は以下のサイト様です。

[Tips] Pukiwikiでパスワード設定

Qiita > 【バッチファイル】文字列を改行なしで表示【備忘録】
コメント

NAS4Free(ZFS) の HDD交換

2016-10-24 23:06:04 | 研究&TIPS
 こんばんはヌキヲです。
今年は色々な物が次々に壊れる!
実はこの間 A3 プリンタの iX7000 が死んだばっかりなのですが、
今度は鯖の HDD が逝きましたとさ。
それはもう、異音がしてスピンダウンするまであっという間でしたよ!?

今年の初めに NAS鯖 を FreeNAS7 から NAS4Free10 に新調したのですが、
実は HDD は新調せず、今までのモノを使ってしまったのですね。

その HDD は 2009 年ぐらいから使っているみたいなのでもう7年選手ですか?
Seagate の firmware をアップデートしないと読めなくなる不良のモデルでした。
あの頃は大変でしたね、私もあわててアップデートした覚えがあります。

構成はずっと2台で ZFS のミラーリングでした。
ここはよく頑張ったと褒めてあげるべきでしょうね。

さて、交換作業を始めるのですが、
現在は3台で RAID-Z 構成です。
ですが、ミラーでも RAID-Z でも作業にはあまり違いはありません。
なんと今回は WebGUI 画面ですべてできてしまいますよ!




まず、ディスク→マネジメント から死んだディスクを確認します。
同じディスクを複数台使っている場合はシリアル番号を確認しておきましょう。
確認したら電源を落とし交換してしまいます。


交換できたら起動し、同じく ディスク→マネジメント を開きます。
交換したポートでディスクが違うと文句を言われますので削除します。
次にディスクの追加で交換したディスクを指定します。
SMART や省電力設定のスピンダウンなどはほかのディスクと揃えておきましょう。


これで WebGUI からディスクを認識するようになるので、
ディスク→ZFS→プール→ツール を開きます。
コマンドを replace に設定し、交換元・交換先のディスクを選びます。

ホットスペアがある場合は交換先にそちらを指定すればいいわけですが、
ディスクを同じポートに交換した場合は、交換元・交換先に同じディスクを選びます。
指定ディスクを間違えるとデータを完全にロストするので注意して行ってください。
確認したらコマンド送信!押します。

リプレース作業が始まります。
途中経過は ディスク→ZFS→プール→情報 から確認できます。
私の環境ではデータ容量が 500GB 未満でしたので約1時間程度で終了しました。




以上で終わりです、簡単でしょ?
備忘録なので画像がないのが申し訳ありません。

えっと、実はミラーで使用していたディスクの2台ともダメそうなので交換しました。
その場合も1台ずつ行います。

今回交換に使用した HDD は WD Red です。
ウェスタン・デジタルなんて Win95 の頃に散々壊して以来の使用なので、
どのくらいで壊れるかとても怖いものがあります。
コメント

ruby-processing on windows

2016-10-03 06:09:15 | 研究&TIPS
 こんばんはヌキヲです。
今日はデータ可視化言語とも謂われている Processing について取り上げます。
といっても、備忘録ですけど。

今回は素の Processing ではなく、いつも使ってる Ruby 風に書けたらいいなとか考えました。
またヌキヲさんのちょっとニッチな感じのモノが好きな悪い癖ですね。
表題にもある通り ruby-processing の環境を入れていきます。
Windows です MacOSX も Linux にも目もくれません。

今回用意するものをあげます。

(1) Ruby(2.3.1)
(2) Ruby-DevKit
(3) Ruby-processing(2.7.1)
(4) JDK/JRE
(5) Processing(3.2.1)
(6) JRuby-Complete(1.7.26)

お、多い(汗
依存関係がやばすぎますね。

(1) Ruby
言わずと知れた純 Ruby 環境です。
インストーラ一発なので詳細は割愛。
ただし、インストール先はスペースや日本語を含まないフォルダがいいのではないでしょうか?
私は C:\Devz に入れました。PATH は通しておいたほうが便利です。


(2) Ruby-DevKit
Processing を動かすには必要ないとおもいますが、
もしこれから Ruby をもう少し使う方は一緒に入れてしまいましょう。
こちらは展開後にスクリプトを走らせます。

ruby dk.rb init
ruby dk.rb install


Ruby の方に PATH が通っていれば問題なく完了します。




(3) Ruby-processing
今回の本命ですね。
キモの部分なのでよく読んで確認してください。

gem install ruby-processing


その後、rp5 というコマンドが使えるようになるので設定していきます。

rp5 setup install


ただし、Windows 環境では JRuby のダウンロードでまずコケます。
仕方ないので、(6) の JRuby-Complete を手動でアタッチしましょう。(後述)

次に .rp5rc ファイルを設定します。

RP5_HOME: C:\Devz\Ruby23-x64\lib\ruby\gems\2.3.0\gems\ruby-processing-2.7.1
PROCESSING_ROOT: C:\Devz\Processing-3.2.1


内容は上記の様にしました。
PROCESSING_ROOT に (5) でインストールする Processing 本体のフォルダ位置を設定します。
注意点はパスを絶対にクォーテーションでくくらないことです。

で、(4)(5)(6) すべてできたら

rp5 setup check


で確認します。
エラーが出なければ完了です。





(4) JDK/JRE
普通に入れます。


(5) Processing
こちらも普通に入れますが、先の (3) の .rp5rc でクォーテーションが使えないので、
空白や日本語を含まないフォルダに入れるといいと思います。
私は C:\Devz にまとめてます。



(6) JRuby-Complete

JRuby-complete-1.7.26.jar

というやつで、これ一つに JRuby がパックされています。
展開する必要はありません、このまま

C:\Devz\Ruby23-x64\lib\ruby\gems\2.3.0\gems\ruby-processing-2.7.1\vendors


に置き、もう一度セットアップコマンドを入れます。

rp5 setup install


するとちゃんとした場所にコピーしてくれます。





いかがでしたでしょうか。
ちょっと読みずらくなってますが、備忘録なのでこんなもんかな?
実は昨年ぐらいにも試していて挫折しています。
今年は成功してよかったよかった。
Windows での動作報告がないみたい(?)なので、
これから試される方は参考にしいただけると幸いです。
コメント

トランジスタとMOSFETのゲート駆動とブリッジ回路。

2016-08-29 18:30:02 | 研究&TIPS
 こんばんはヌキヲです。
今回はロボコン等で自作モータドライバーを作る方向けの資料です。

まずは前回までのあらすじです。

(1) トランジスタとMOSFETの駆動の仕方。

第一回目はトランジスタや MOSFET をスイッチとして使う際の考え方を解説しました。
結局スイッチを操作する部分が違うだけで、
どれも同じようにスイッチとして使えることがわかると思います

(2) トランジスタとMOSFETの極性と使い方。

第二回目は極性について解説しました。
電流吸い込みと型と電流吐出し型の説明とブリッジ回路の考え方まで突っ込みました。

(3) トランジスタとMOSFETのゲート駆動とブリッジ回路。

第三回目はいよいよトランジスタを実際に駆動する方法を解説します。
そして MOSFET によるブリッジ回路での例も紹介したいと思います。
乞うご期待!!





・トランジスタのベース駆動。

ではトランジスタの駆動方法から解説します。

(1) よりトランジスタのベースはダイオードでした。
ダイオードの駆動は LED の駆動とよく似ているので、
電子工作初心者でも割とわかる方が多いのではないでしょうか?

LED


電源電圧 Vcc を抵抗と Vf で分圧しました。
LED の例ではこのような図になりますよね。
それをそのままトランジスタのベースに突っ込みます。

トランジスタのベース駆動


つまり、LED が光る代わりにスイッチ(コレクタ-エミッタ)がオンになるのです。
トランジスタのベースにも Vf があり、これはおよそ 0.7V 程度と言われています。

あまり大きいトランジスタで、ベースに流す電流も大きいと Vf も大きい傾向になるので、
気になる方は個別のデータシートで確認してください。

では定数を入れてみます。

トランジスタのベース駆動


(5-0.7) / 1000 = 0.0043 [A]

ということで、ベースには 4.3mA の電流を流すことになります。
では、この時にコレクタ-エミッタに 150mA の電流を流したいとします。
するとベース比で 34.9倍 になり、増幅率 hFE と呼びます。

このように小さい電力(4.3mA)で大きな電力(150mA)を駆動することを専門用語増幅といいます。
増幅といっても、見ての通り動作はコピーに近いですね。

さて、今回の駆動に必要な Ib Ice hFE が求まりましたね!
データシートと見比べて、すべてが範囲内に収まるデバイスを探すことになります。
また、R を大きくすと hFE が上がりますが、Ib + Ice の合計値が減り、
省電力な回路になることがわかると思います。

トランジスタの増幅率は無限ではないので、hFE の限界はよく確認してください。
特にバッテリーの小さいハーフマウスなどでは省電力にしたくなるのでなおさらです。

トランジスタはベースのターンオフがターン音に比べて遅い傾向にあり、
どうしてもスイッチングを高速化したい場合は R に並列に C を入れることがあります。
が、今度は C の放電用ダイオードが必要になったりして部品点数が多くなることから
あまり使われません。素直に MOSFET を使う方が高速になるようです。




・MOSFET の ゲート駆動。

次は MOSFET のゲート駆動に行きたいと思います。

(1)より MOSFET のゲートは コンデンサ でした。
ゲート-ソースがコンデンサになっており、これを充電してあげればスイッチがオンします。

MOSFETのゲート駆動


しかしこの図の状態では問題が二つあります。
一つ目は突入電流が大きい(この場合無限である)ことです。

これは電流制限用の抵抗をつけてあげれば解決です。
あまり大きいと充電スピードが制限され、スイッチのオンが遅れてしまいます。
RCフィルターによる遅延回路になってしまうので当然です。
MOSFET の大きさにもよりますが 10~100Ω くらいが一般的じゃないでしょうか?

二つ目は放電を考えないといことです。
ここがトランジスタとちょっと違うところで、気を付けないといけないです。

コップに水を注いだと考えてみましょう。
注ぐのを止めても、コップの水は減りませんよね?
コップの水をどうにかして捨てないとスイッチがオフしてくれないのです。
電気も同じで放置しても理論的には減りません。
ま、実際には数秒でなくなりますが、モータや LED のオフに数秒もかけていたら遅すぎるというわけです。

実際は、マイコンや FPGA などの IO ピンで駆動することが多いと思います。
この IO はよくできていて、電流の吐出し、吸い込みの両方ができるようになっています。

充電と放電


このような IO を CMOS といいますが、動作的にはハーフブリッジと一緒です。
図のようにハイサイド駆動でゲートの充電を、ローサイド駆動でゲートの放電をします。

というわけで、マイコンからの制御はとても楽なのですが注意点もあります。
マイコンはリセット時リセット中ともに IO が入力モード、すなわちハイインピーダンスです。
ゲートのコンデンサは充放電されませんので、後述するハーフ・ブリッジ、フル・ブリッジ回路で
問題が起きる(燃える)こともあります。

プルダウンを足す


図のようにプルダウン・プルアップ抵抗を足しましょう。




・ブリッジ回路。

いよいよ MOSFET でブリッジ回路を組みます。

ブリッジ回路


まず避けたいのが、上段下段の MOSFET が同時にオンしてしまうことです。
電源の短絡(ショート)と同じ状態になり MOSFET は燃えますが、
バッテリーにまで影響することもあります。

貫通電流


図はオンオフの交差の波形です。
MOSFET のオン・オフは理想通りとはいかず、台形な波形になります。
上下を同時に切り替えたのでは図のように重なる部分が出てきますよね。
これが貫通電流で、MOSFET が燃えたり、熱くなったりします。

そこで出てくるのがデットタイムです。

デットタイムを足した


図のように上下段の切り替わりの際にどちらもオフの状態を作ります。
古くは ロジックIC と RCフィルタ で作りました。
最近はマイコンの PWM にこの機能がついてることも増えましたね。

私はまだ RCフィルタ を使っています。
ここが知りたい方も多いみたいなので掘り下げます。

RCフィルタ


図に示すのが RCフィルタ による遅延回路です。
よく言う時定数というのは R と C の値をかけたもので、
充電量でいうと 36% 程度のことらしいです。
コンデンサをフル充電するにはさらに 2π (約6.28倍)が必要です。

このまま ロジックIC + RCフィルタ で組んでもいいのですが、
部品点数が多くて小さくするのが難しいですよね?
そこで私は MOSFET のゲート容量 Ciss に注目しました。

すでに C があり、どうせ R もつける必要があります。
これでデットタイムを作れないだろうか?

デットタイムの実験


まだ問題があります。そう放電です。
このままではオフの時も遅延してしまいます。

ダイオード追加


オフの時は遅延する必要がないのでダイオードでバイパスさせます。
おおお??ゲート駆動回路できた??

というわけで、私のハーフブリッジ回路を載せます。

ハーフブリッジ


電圧シフトと電流増幅をかけてゲート駆動としました。
電流増幅のトランジスタはデジトラでもできます。

では定数を決めましょう。
といっても決めなきゃいけないのは R だけですね。
私の現在のデバイスである IRFU5505PBF + IRLU3410PBF で解説します。

データシートより、Ciss と tOFF を読みます。
Ciss はゲートのコンデンサ容量で、tOFF はターンオフにかかる時間です。

IRFU5505PBF 650pF 20ns
IRLU3410PBF 800pF 30ns

Pch のデットタイムは、Nch の tOFF より大きくないといけないことがわかると思います。
逆に Nch のデットタイムは Pch の tOFF ・・・と、相手の tOFF で判断します。
では実際に CRフィルタ の時定数をどのくらいに設定したらいいでしょうか?
私の感覚だと tOFF の 4倍~6倍程度 は必要なようです。
これは、フル充電に 2π かかることからも納得できます。

デットタイムは余裕をもって 300ns くらいに設定してみましょう。

Pch 470[Ω] * 650[pF] = 305.5[ns]
Nch 390[Ω] * 800[pF] = 312[ns]

完成


あとはプルアップ・プルダウンを適当に入れれば完成です!
私はこれを PWM 周波数 62.5KHz で使用しています。
62.5KHz は 16us ですね。
設定したデットタイム 300ns は 16us 中の 2% 未満です。
まだまだ上の周波数も行けそうですね。

部品点数を少なくできたので、秋月C基板に 4ch のフルブリッジ回路が入ってしまいますよ!?

※この回路にはモータのフリー動作がなく、オン-ブレーキ動作のみです。
また、ハイサイドブレーキ、ローサイドブレーキどちらも動作可能です。






・ハイサイドに Nch MOSFET を使いたい。

最後に将来への展望で、ハイサイド Nch の解説です。
(2)よりハイサイド Nch は駆動が安定しないことがわかっていますね。

別電源


しかし、これはVppより高い電圧があれば駆動できます。
別電源を用意できれば問題ないのですが、そうはいかない場合が多いですよね。
そこで、コンデンサを使います。

ブートストラップ回路


コンデンサをチャージポンプ動作で使います。
これをブートストラップ回路といいます。
毎回コンデンサの充電が必要なので、PWM duty 100% 付近は使えません。



・おわりに

以上、このシリーズはこれにて完結です。
いつも通りトンデモ理論だったりする可能性があるので、ご使用は自己責任でお願いします。
また、ツッコミがある方はコメかメールでお願いします。
それでは、ご精読ありがとうございました。
コメント

NAS4Free & Samba4 AD

2016-03-08 23:20:52 | 研究&TIPS
 こんばんはヌキヲです。
今回はお家のサーバーをリプレースしたのでその備忘録を記します。

Samba で ActiveDirectry の DC ができるようになったこと、
それを NAS4Free の WebGUI から設定できるようになったこと、
いやはやいい時代になったものですね。

今回使用したバージョンは NAS4Free 10.2.0.2-2332 x64 です。
いままでは FreeNAS 7.2 を使用していたのでかなりのバージョンアップで浦島太郎です。


● 事前準備

初期設定やストレージの設定を済ませますが、詳細は割愛。
私は zfs オンリーな環境です。

samba4 の sysvol が zfs に対応していないので、ufs 領域を作ります。
これは zfs 上の volume 機能で比較的簡単に実現できます。

zfs の volume タブにて追加します。
参考文献では容量は 2GB でしたが、余裕を見て 64GB 割り当てました。

その後コンソールに入りパーティションとフォーマットを行います。
WebGUI からできないのは残念な限りですね。

コマンドの意味とかいまいちよく分からないのですが、参考文献の通りに入力しました。
プール名とボリューム名を適宜読み替えて実行します。


# gpart create -s gpt /dev/zvol/zp/samba4
zvol/zp/samba4 created

# gpart add -a4m -t freebsd-ufs /dev/zvol/zp/samba4
zvol/zp/samba4p1 added

# gpart show /dev/zvol/zp/samba4
=>     34  4194237  zvol/zp/samba4  GPT  (2.0G)
       34     8158                  - free -  (4.0M)
     8192  4177920               1  freebsd-ufs  (2.0G)
  4186112     8159                  - free -  (4.0M)

# newfs -U /dev/zvol/zp/samba4p1


WebGUI に戻ってマウントします。
タイプの欄にカスタムデバイスを選ぶとパスを聞かれるので、
ボリュームのパスを指定します。


● Samba4 AD 初期化

前提条件で ntp が有効である必要があります。
また、CIFS/SMB を無効にし、IP を固定にします。

サービスの Samba AD から初期化タブを開きます。

・DNS フォワーダ
 上位の DNS アドレスです。
 ディフォルトゲートウェイになっている NAT ルータのアドレスでも平気でした。
 ※参考文献ではダメって書いてあります。

・DNS ドメイン
 フルドメインで書きます。
 多くの場合は domain.local の形式かな。

・Netbios ドメイン
 ドメイン名のみです、.local ナシ。

・管理者パスワード
 ディフォルトでは複雑である程度長くないとダメなやつです。
 空欄や簡単なのだと再設定されるそうです。

・パス
 事前準備で用意した volume のマウントポイントを指示します。

・ファイルサーバ
 s3fs
 特に理由がなければディフォルトで OK

・ユーザー共有
 NAS 機能を有効にするならチェックします。
 後で変更できます。

入力がよろしければ 初期化 ボタンを押しましょう。
上手くいくと最後に DOMAIN SID が表示されます。
また、パスワードが再設定された場合もここに表示されます。

システム→基本 ページの DNS アドレスが 127.0.0.1 に変更されます。


● CIFS/SMB の設定

初期化できたら有効にしましょう。
次に NAS 側の設定をします。
サービス→CIFS/SMB ページを開きます。
特に気を付ける点だけ列挙します。

・認証
 Active Directry です。

・最大プロトコル
 win8 以降のマシンがあるのなら SMB3 を推奨。

・NetBIOS 名
 サーバーの名前

・ワークグループ
 ドメイン名と同じにする。

・タイムサーバ
 Yes の必要あり

・パスワードサーバー
・WINS サーバー
 これらは空欄でも動きそうな気がしますが、
 私はサーバーの IP を入れました。


・信頼するドメイン
 ドメインを複数連携する場合にチェックを入れるのかな?

入力したら 保存して再起動 します。
その後、共有フォルダの設定もしましょう。
私は profile public user の3構成にしました。

終わったら一度サーバーの再起動をしておきます。


● ドメイン参加

いよいよドメインに参加するのですが、ここでかなり嵌りました。
ポイントは次の通りです。

・サーバー、クライアントとも IPv6 を無効にしておく。

・クライアントの DNS を DHCP から サーバーの IP に変更する。

・参加ドメイン名は NetBIOS 名で、.local ナシです。

どおしてもつながらない場合はコマンドプロンプトから

# ping server.local
# ping server.domain.local


を打ってみましょう。
上手く DNS が動いていれば両方とも応答があります。

特に、サーバーコンソールで OK なのに、クライアントで NG な場合は、
クライアントの設定がおかしいことがほとんどです。

つながったら管理ツールをインストールします。

Samba wiki に Windows のバージョンごとのダウンロードリンクがあります。




● パスワードポリシー

パスワードを簡単にするには、サーバーコンソールで次のようにします。

# samba-tool domain passwordsettings set --complexity=off
# samba-tool domain passwordsettings set --min-pwd-length=3
# samba-tool domain passwordsettings set --min-pwd-age=0
# samba-tool domain passwordsettings set --max-pwd-age=0


ザルですね(汗 おすすめはしません。
設定の確認は次のコマンドです。

# samba-tool domain passwordsettings show



ここまででサーバーの設定は終了です。
以降はクライアントの設定で、必要な方のみ行ってください。




● ドライブマップ


前提条件で、プロファイルとフォルダリダイレクトは
別のフォルダもしくは共有フォルダで行います。

Windows10 では %UserName%.V5 というプロファイルフォルダができました。
Windows7 や Vista では %UserName%.V2 となるそうですね。

一方グループポリシーで行うフォルダリダイレクトは %UserName% なので
同じ名前にはできません。
また、アクセス許可も適切に設定しなければなりません。
この辺が深淵の一端なのですね。

さて、当初ログオンスクリプトにてネットワークドライブを
マウントしようと思っていたのですが、どうもちゃんとマウントされません。

エクスプローラから右クリックしてネットワークドライブの割合て
ではちゃんとマウントされるのに、コマンドプロンプトから net use
とやっても全然マウントされないのです。

そこで、google 先生よりグループポリシーでも
ネットワークドライブが割り当てられるらしいと聞いて試してみました。


グループポリシーを編集するには

すべてのプログラム→Windows管理ツール→グループポリシーの管理

フォレスト: domain.local→ドメイン→グループポリシー
→Default Domain Policyを右クリック→編集

で開きます。↑これかなり探しました。

ユーザーの構成→基本設定→Windowsの設定→ドライブマップ

ドライブマップの右ペインの中で

右クリック→新規作成→マップされたドライブ

から追加できます。
これもまた使い方がよく分かりませんが、詳細は参考文献を読んでください。

・アクション
 更新

・場所
 \\server\user

・再接続
 (お好みでどうぞ)

・ドライブ文字
 次の文字を使用>U:

・このドライブの表示/非表示
 このドライブを表示する




● ログオンスクリプト


一応ログオンスクリプトの設定手順も記しておきます。
マップされたドライブとどちらか片方で OK です。

ユーザーの構成→ポリシー→Windowsの設定→スクリプト(ログオン/ログオフ)

で設定します。
スクリプトの例を表示します。
まずログオン

set Drive=U:
set Mount=\\server\user

if not exist %Drive% goto Set1
net use %Drive% /delete

:Set1
net use %Drive% %Mount%


次にログオフ

set Drive=U:

if not exist %Drive% goto END
net use %Drive% /delete

:END



これを logon.cmd logoff.cmd として設定しました。




● フォルダリダイレクト


\\server\user フォルダをルートとしてリダイレクトしました。
ネットワークドライブをアタッチしておくと楽です。

ログオンスクリプトからの続きで

ユーザーの構成→ポリシー→Windowsの設定→フォルダ リダイレクト

で設定できます。

・設定
 基本ー全員のフォルダを同じ場所にリダイレクトする

・対象フォルダーの場所
 ルートパスの下にユーザーのフォルダを作成する

で、ルートパスは参照ボタンを押し、ネットワークドライブを指定すると
自動的に共有名に直して認識してくれます。

ここで OK を押さず、適用にします。
次に設定タブで、非排他設定としました。
バックアップとか管理がめんどくさいですからね。

リダイレクトが行われたかはイベントビューアで、
グローバルポリシーが適用されたかは gpresult /z コマンドで見れます。


○ 2016.03.21(mon) 追記。

ネットワークドライブやフォルダリダイレクトが正しく動作しない原因は、
ACL、アクセス制御リストが正しくないことが多いようです。

かくいう私もどっぷりハマってしまって大変でした。
まっさらな状態で始める場合には、新しくファイル群が作成されるだけですので
さほど問題ないかと思います。
しかし既にデータがあり、バックアップ環境等からリストアをするなら
ACL についても正しく設定しなおす必要があります。


・ACL で必要なのは次の二つで、共有のトップに設定し継承させます。

 CREATOR OWNER - 特殊
 SYSTEM - フルコントロール

・そのうえで、\\server\user\%UserName% は所有者を %UserName% に変更し、特殊をつけます。

・最後に属性の変更をします。
 \\server\user\%UserName% のプロパティを開くと、読み取り専用
 部分チェックが入っていると思います。
 これをクリアすることで ACL をリセットしたことを通知できるようです。


どの作業もファイル数によってはかなり時間がかかりますので気長に行ってください。

特殊を付ける際に、当初灰色になっててチェックできなかったのですが、
一度フルコントロールを付け、そのしばらく後、気づいたら特殊に変わってました。
必要要件はいまいちわかってないのですが、サーバーのリブートなど、いろいろ試してみてください。

○ 2016.03.21(mon) 追記ここまで。



● 移動プロファイル

移動プロファイルは一番最後の設定をお勧めします。
また、一度ログオンし、プロファイルの初期値を作ってから移動したほうがいい様です。

現在移動プロファイルを使うと Edge などのユニバーサルアプリの一部と、
マイクロソフトアカウントを追加が使えなくなる不具合を確認しています。


ユーザアカウントの変更は次の管理ツールです。

すべてのプログラム→Windows管理ツール→ADユーザーとコンピューター

新しいユーザーを作ったら、プロファイルを変更します。

\\server\profile\%UserName%

としました。



● 参考文献

[HOW TO] Samba Active Directory Domain Controller

Active Directoryドメインコントローラー構築(Samba)

Active Directory ログオンスクリプト

「アクセスが拒否されました」とエラーが出てファイルやフォルダへアクセスできない問題への対処

ADからログオンスクリプトにて割り当てたネットワークドライブが上手く適用されない

マップされたドライブを構成するには
コメント

わかる人向け MPLAB XC16 野良ビルド資料。

2016-02-16 23:06:01 | 研究&TIPS
 こんばんはヌキヲです。
今日は Microchip 16bit マイコン向けコンパイラ MPLAB XC16 の野良ビルドについて紹介します。
が、すみません、古い資料が出てきたのでそれの開示だけです。
自分で何とかできる人向けの資料とさせてください。

できた成果物はいつも通り 置き場 に置いておきます。
が、今回の成果物は問題点があります。なんと MPLAB X IDE に統合できません。
IDE を使わずに Makefile を自作する方向けとなります。

うーん、我ながらなんてニッチな情報なんだ(笑

ビルドの仕方の詳細については MPLAB XC32 をビルドした記事でも行ってますので
そちらも参考にしてください。

MPLAB XC32 をクロスビルドした。
MPLAB XC32 v1.33 をビルド。



●事前情報

作業は Ubuntu 12.04 LTS で行い。ビルドする MPLAB XC16 のバージョンは v1.23 です。
開発ツール類は各自インストールし、ソースを展開してください。
ビルド自体はおなじみのシェルスクリプトにて自動で行います。
置き場よりダウンロードし実行してください。
ずっとメンテナンスしていない古いままなのでかなり怪しいですが(汗


●ソースの編集

重要なソースの変更情報を記します。
成果物を頒布するのにこれをするのが必須なので GPL はめんどくさいですね(笑

・pic30.h


-147 #define ASM_SPEC   "%{mpartition=*:--partition %*} %{!.s:%{!.S:--relax}} %{mcpu=*:-p%*} -omf=" OMF
+147 #define ASM_SPEC   "%{mpartition=*:--partition %*} %{!.s:%{!.S:--relax}} %{mcpu=*:-p%*} "

-155   -mresource=%I-../../c30_device.info -omf=" OMF
+155   -mresource=%I-../../c30_device.info "

-157 #define LINK_SPEC   "%{mpartition=*:--partition %*} {mcpu=*:-p%*} -omf=" OMF
+157 #define LINK_SPEC   "%{mpartition=*:--partition %*} %{mcpu=*:-p%*} "



ここらはオプションの編集です。
-omf を指定すると -o が2回指定されているというエラーになる部分ですね。




-245 #define STANDARD_BINDIR_PREFIX "/bin/bin/"
+245 #define STANDARD_BINDIR_PREFIX "/bin"



バイナリファイルのフォルダ構成を変更します。



・gcc.c


-2987  info.name = xmalloc(sizeof("xc16-")+strlen(name)+1);
-2988 if (info.name)
-2989 sprintf(info.name, "xc16-%s", name);
+2987 info.name = xmalloc(sizeof("xc16-")+strlen(name)+16);
+2988 if (info.name)
+2989 sprintf(info.name, "xc16-" OMF "-%s", name);



ツールの呼び出しファイル名を変更します。
オプション -omf の代わりにファイル名で切り替えるわけですね。


・pic30.c


-3972   eds_ptr_type = make_node(POINTER_TYPE);
+3972 eds_ptr_type = make_node(INTEGER_TYPE);



これを忘れると cc1 がセグメントフォルトします。
エラーチェックで INTEGER_TYPE かどうか確認しているので当然です。



・acme > bfd > cpu-pic30.c


-229     tool_name = xmalloc(strlen(resource) + 4 + 40);
+229 tool_name = xmalloc(strlen(resource) + 512 );



こっちは binutiles の方です。
リソースファイルを開く際のパス長が短すぎるので伸ばしました。




●まとめ
変更は以上です。
最後に成果物とフリー版とのマージが必要です。
IDE と統合できないので別フォルダで行うことを推奨いたします。


さて、今回は資料なのでこんなもので終わりです。
もしかしたら xc16-gcc.exe というラッパーアプリを作れば
IDE 統合もできるのではないか?と画策中なのですが、まだできていません。
-omf オプションだけチェックしてその後 xc16-coff-gcc.exe と xc16-elf-gcc.exe を
呼び分けるだけですので意外に簡単に作れるのかな?とは思います。(誰か作ってー)
進展したらまた記事を書きたいと思います。

何か質問意見、叱咤激励等ありましたらコメかメールか Twitter でお願いします。
ご精読ありがとうございました。



□ 2016.02.18 (thu) 追記。
 えー、そもそも野良ビルドって何?という意見をもらいました!
需要をあんまり感じないと思ったら、それ以前に認知度が低すぎたのですね!
というわけで簡単に解説。

MPLAB XC16 XC32 はもともと GCC をベースに作られています。
GCC のライセンスは GPL ですので、
成果物を頒布するにはそのソースをビルド可能な状態で入手可能にする必要があります。
MPLAB XC16 XC32 も例外にもれずソースが公開されています。

さてもう一方、GPL は商用非商用問わず好きに使えるという側面があります。
Microchip ではライセンスマネージャというプログラムで機能を制限し高価な価格を設定しています。
その制限されている項目は GCC に元からついている機能ですので、
ライセンスマネージャが有効でなければ当然制限なく使えてしまいます。

そこで、公開されているソースから、無制限版をビルドして活用しようというのが野良ビルドです。
これが蔓延してしまうと Microchip としては商売あがったりなのですが、ライセンス上は問題ありません。
ただ注意点として、野良ビルドの成果物を頒布する場合、その変更点を記すなりして、
やはり再現可能な状態でソースを公開する必要があります。

私は皆様のマイコンライフが少しでも幸せになれるようにと思い公開します。
コメント (3)