流れるまにまに。

のんびり人の日々のめも。

infファイルのDriverVerエラー

提出するinfのDriverVerの部分の修正し忘れを発見。
バイスマネージャ上で古い情報が表示されるとまずいので編集。

とりあえずChkinfをかけてみると以下のエラーが。。。

DriverVer=26/09/2016,1.3.255.0
; (E22.1.1066) Bad value for Month in DriverVer.
; (E22.1.1067) DriverVer date is in the future

「DriverVer date is in the future」について調べてみたら、
ビルドする際の時間基準がUTCになっているので、+9時間の時差の間を設定してしまうとまずいらしい。
回避方法は「VSでプロジェクトを右クリック-> プロパティ -> Inf2Cat -> General -> Use Local TIme を「はい」にすればよい。」

[参考]
http://blog.livedoor.jp/cielo_cielo/archives/65844807.html
http://monoist.atmarkit.co.jp/mn/articles/1307/26/news003_3.html

なんだ簡単じゃん!!!



・・・・とか思ったのですが、

・Infの作成は直接エディタ
・そもそももう11月なので、1カ月以上昔の日付を設定してる

これUTC関係ないなぁ。



無駄に悩んだ結果、
DriverVerの書き方は
「DriverVer=MM/DD/YYYY,VERSION」
だった。

26月になってたから、「 Bad value for Month」も出てただけでした。

無駄に時間くった!

visual studioを使わずにドライバにテスト署名する

テスト署名
<ドライバテスト署名の付け方>
(1)ドライバの作成
(2).catファイルの作成
(3).catファイル署名用証明書作成
(4)証明書を信頼する
(5)作成した証明書を使用して署名

**前提**
SDKがインストールされていること


(1)ドライバの作成
 ドライバとINFを作る。
 作ったドライバとinfを同じフォルダに置いておく
   【インストールパッケージのフォルダ構成例】
 C:\InstallPackege\NEOSB.inf
 \amd64\neosb.sys
 \x86\neosb.sys
 
(2).catファイルの作成
 inf2cat.exeを使用。
 (パス:C:\Program Files (x86)\Windows Kits\10\bin\x86\inf2cat.exe)
 (自分がダウンロードしたSDKのバージョンに合わせたパスで)
 
 コマンドプロンプトでinf2catのあるフォルダに移動してから以下を実行
  inf2cat.exe /driver:[(1)で作成したフォルダ] /os:[対象テストOS]
  
  (※対象テストOSの指定の方法は以下。複数指定の場合はカンマ区切りで指定
   ------Windows のバージョン:識別子-------
Windows 8 x64 Edition:8_X64
Windows 8 x86 Edition:8_X86
Windows Server 2012 :Server8_X64
Windows Server 2008 R2 x64 Edition:Server2008R2_X64
Windows Server 2008 R2 Itanium Edition:Server2008R2_IA64
Windows 7 x64 Edition:7_X64
Windows 7 x86 Edition:7_X86
Windows Server 2008 x64 Edition:Server2008_X64
Windows Server 2008 Itanium Edition:Server2008_IA64
Windows Server 2008 x86 Edition:Server2008_X86
Windows Vista x64 Edition:Vista_X64
Windows Vista x86 Edition:Vista_X86
Windows Server 2003 x64 Edition:Server2003_X64
Windows Server 2003 Itanium Edition:Server2003_IA64
Windows Server 2003 x86 Edition:Server2003_X86
Windows XP x64 Edition:XP_X64
Windows XP x86 Edition:XP_X86
Windows 2000:2000
  
 
(3).catファイル署名用証明書作成
 inf2cat.exeと同じフォルダで以下を実行
 (以下の例では「発行先:piyopiyo CA、フォルダ名:piyoStore」として証明書を作成
  makecert /r /n “CN=piyopiyo CA” /ss “piyoStore” /sr LocalMachine
 
 証明書が出来たことを確認
  ファイル名を指定して実行で、「mmc.exe」を実行
  [ファイル]→[スナップインの追加と削除]→[証明書]を指定して[追加]。
  [コンピュータアカウント]→[ローカルコンピューター]→[完了]
  
  コンソールルート以下に「piyoStore」フォルダが表示される。
  表示された証明書を右クリック→「すべてのタスク」→「エクスポート」→.cer形式で証明書をエクスポート
  

(4)証明書を信頼する
(3)で作成した証明書を、「信頼されたルート証明機関」と「信頼された発行元」にコピー


(5)作成した証明書を使用して署名
 inf2Cat.exeと同じフォルダに移動し、以下のコマンドを実行
 SignTool.exe sign /s TrustPublisher /n [発行先名] /t http://timestamp.verisign.com/scripts/timstamp.dll [(2)で作成した.catファイルのフルパス]
 
 署名 \(^o^)/ 完了!!
 

(6)テスト準備
 テスト環境に作成した証明書(.cer)をコピー
 ダブルクリックして「信頼されたルート証明機関」と「信頼された発行元」に登録
 

【C/C++】引数ありコンストラクタの呼び出し

 

MFCアプリで、引数呼びしたのをダイアログの方に渡したかった。

-------AppDlg.cpp-----------------------
//(色々略)
CAppDlg::CAppDlg(const CString FilePath, CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_APP_DIALOG, pParent)
, m_FilePath(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_FilePath = FilePath;
}

void CAppDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_PATH_EDIT, m_FilePath);
}


-------AppDlg.h-------------------------
class CAppDlg : public CDialogEx
{
// コンストラクション
public:
CAppDlg(const CString FilePath, const CString OriginalFilePath, CWnd* pParent = nullptr);

// ダイアログ データ
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_App_DIALOG };
#endif

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート

// 実装(略)
private:
CString m_FilePath;
};

 

-------App.cpp-------------------------
CAppDlg dlg(__targv[0], __targv[2]);
m_pMainWnd = &dlg;
dlg.DoModal();

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

 

オーバーライドって便利\(^o^)/

カーネルデバッグのやり方

ドライバのデバッグやらに。

今回は1394による接続。
通称座薬さん(´∀`)

☆用意するもの☆
◎HostPC
WinDBG
1394のケーブルとポート

◎ClientPC
なんかデバッグしたい環境


1.Client環境の準備
コマンドプロンプトで以下のコマンドを実行
bcdedit /dbgsettings 1394 CHANNEL:20
レジストリに以下を登録(なくても動くけど)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
 DEFAULT REG_DWORD 0xffffffff
・1394ケーブルを接続


2.Host環境の準備
WinDbgを起動
「Kernel Debug」を選択して、1394タブを選択。

Channelに20を設定してOK


繋がらない場合はClient側再起動と、デバッグモードで起動してるかの確認。

breakしてみてマウスカーソルが動かなくなったら繋がってる!!

Windows ロゴ認証(HCK,HLK)でクライアント機の準備をする

ドライバでWindowsロゴを取得する必要がある場合、

ハードウェア認定を受ける必要があります。

 

公式にはここら辺

Windows HLK の概要 - Windows 10 HLK

Windows ハードウェア認定: Windows ハードウェア認定キット (HCK) を使ったハードウェアのテスト方法の説明

 

その途中で、Machine Poolの対象機の準備メモ

↓のStatusがInitializingとか、Not ReadyとかからReadyにできないことがある。

f:id:piyomani:20160827111953p:plain

あと、Machineの一覧に表示されないとか、Readyになって試験設定したのに実行されないとか。

 

 

以下のことを順番に確認!

 

1.DefaultPoolから新しく作ったMachinePoolに移動してるか

初めてロゴテストやった時すごいはまった。

DefaultPoolにいるやつはそもそもStatus変更ができない。

 

2.クライアント機がプライベートネットワークじゃないか

3.クライアント機のリモート接続が許可されているか

プライベートネットワークだったり、リモート接続許可されてなくて、ファイル操作とかができない状態。

ファイル操作できないのでテストもできんわ。

 

5.WindwosFirewallの詳細設定で「WLK Client」(Port1771)が受信許可されているか

参考:Troubleshooting Windows HCK Client - Windows 8.1 HCK

↑の「Client  computers cannnot communicate with the Windows HCK Controller」の部分。

他にもお役立ち情報いっぱいのページ。

 

6.Guestアカウントを有効にしてあるか

 同一グループワークの時(だけ?)はGuestアカウントを有効にしておかないとテストが走らない。

 

7.そもそもping通る?

大抵pingが通らないのなんてFirewallで「ファイルとプリンタの共有」が禁止されてるだけ。

 

 

 

ここら辺やれば大抵はテストできるはず!

 

 

ちなみに今回、本当はAzureでサーバー立ててコントローラにしようと思ってたのですが、色々あって実機でやることに。

その後、MSから電話が電話があって

 

MS:「Azureに登録されましたが、サポートいかがっすか?」

私:「結局実機でやることになったので大丈夫っす」

MS:「参考までにどういう運用予定だったか教えて」

私:「ロゴ認証に使うHLKのサーバーとして使用しようと思った」

MS:「なるほど。・・・ところでHLKとはどんなものですか」

私:「・・・HLKは(ry」

 

というやり取りが。

他会社のサービスをその会社の人に説明するのは初めての経験でした\(^o^)/

知らんのかい\(^o^)/

 

確かに自社製品の説明全部できるかと聞かれると怪しいので、まぁそういうものなのかも。

【C/C++】ビット演算

ビット操作用のメモ。


FLAG1=0x1
FLAG2=0x2
FLAG3=0x4
FLAG4=0x8

フラグ状態はStatus

・フラグ立て(1を立てる)
Status |= FLAG1;

・フラグ落とし(1をおとす)
Status &= ~FLAG1;

・フラグ確認(1があるか確認)
if(Status & FLAG1)

【RaspberryPi】Rasberry Pi3でWindows 10 IoTを動かす!!

RaspberryPi3を買って、RaspbianでちょっとだけScratchしたけど、

やっぱりWindows10IoTを入れたくなりました。

Bluetoothが対応していないと聞いたので、ユニバーサルドライバの練習としてまずドライバを作ろう!と思い立ったのが一番の理由です。

 

てことでRaspberryPi3にWindows10IoTを入れたので、その時のメモ。

 

とりあえずMS公式からWin10IoT落としたりすれば、簡単にできるんしょー!

とか考えてたら、意外とぐるぐるしました。

最終的には何も考えずに適当にやったら動いた。って話です。

このやり方が正しいのかは知りません。

作業はほぼ全部開発用PC(Surface)でやってます。ラズパイはSD挿して起動するだけ。

 

 

要点としてはこんな感じ

  • 勘と力技でなんとかなったよ。
  • 色々対応中なんだろうな、と感じた。
  • Bluetoothもまだ対応・・・・してた!!??

 

 

★目次★-------------------------------------

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

https://developer.microsoft.com/ja-jp/windows/iot/Downloads.htm

とりあえずMS公式に書かれてる通りに色々ダウンロードやらなんやら。

 

1.Build Insiderへの登録。

RaspberryPi3はまだWindows10IoTCoreのInsider Previewn版しか対応してないらしい(2016/7/24現在)

なので、Microsoft Build Insiderへの登録が必須らしいです。

以下から登録。

Home page - Windows Insider Program

Microsoftアカウントでいいらしいので、よかった。

無料らしくて、よかった。

らずぱいさんを迎え入れた為に、しばらくお小遣い節約生活中(´・ω・`)

 

2.Windows10 IoT Core Dashboardを入れる

さっきのページから[Get IoT Core Dashboard]でなにやらダッシュボードをダウンロード。

インストールしたらこんなUIが出現。

f:id:piyomani:20160724210037p:plain

左下の「Sign in」からさっきBuild Insiderに登録したMSアカウントでサインイン。

アカウント情報入れても表示とか特に変わらないけど、サインインできているのだろうか。

 

色々不安になりながら、とりあえず「新しいデバイスのセットアップ」とあったので、ターゲットを[RaspberryPi3]と[Insider Preview]にしてみた!

 

特に何もおこらなかった!!!!

 

Raspberry Pi 3にWindows 10 IoT Core Insider Previewをインストールしています」

 

「はい。そうです」

思わず声に出して答えます。

とりあえずクリックできるので、導かれるままにリンク先へ。

 

 

4.Windows 10 IoT Core Insider Previewのイメージをダウンロード

飛ばされた先

http:// https://developer.microsoft.com/ja-jp/windows/iot/Downloads.htm

 

ここでSDに書き込むデータを落とせるらしいです。

最新版はBuild 14376らしいです。

RaspberryPiのバージョンとか選べないけど、知りません。

とにかく私が使ってるのはRaspberry Pi 3なんです!!

f:id:piyomani:20160724210039p:plain

とやってたらisoイメージゲット。

ダブルクリックマウントで実行したら「C:Program Files (x86)Microsoft IoTFFURaspberryPi2」以下にマイクロSD書き込み用イメージの「flush.ffu」が!!

だから私のは2じゃなくて3です!

 

あと展開中に管理ツールが云々とか出てきたけど、どこにも入っていませんでした。

噂では「Windows IoT Core Image Helper」「Windows Iot Core Watcher」というツールがインストールされるらしいのですが、

 

どこにもありませんでした。

 

本来「Windows IoT Core Image Helper」というツールでマイクロSDにWin10IoTCoreを書き込むらしいのですが。

 

どこにもありませんでした。

 

 

 

こっからなんだか色々迷って、ここに飛ばされたり

Get Started - Windows IoT

色々やって結局ダメだったりしたけど、

以下の方法でできました。

 

5.IoT Core DashboardからSDへの書き込み

「新しいデバイスのセットアップ」で「RaspberryPi3」を選んでも埒が明かないので、

汎用性の神様「カスタム」さんにお願いしました。

f:id:piyomani:20160724235539p:plain

 ダッシュボードの「新しいデバイスのセットアップ」から「デバイスの種類」を「カスタム」にして、落としたflush.ffuを指定。

あとはカードリーダー越しにラズパイ用マイクロSDにフラッシングするだけ。

 

f:id:piyomani:20160724210038j:plain

 

おお!認識した…!!

起動が終わって、ネットワークもWi-Fiで設定して(Wi-Fi使えるってのも初めて知った)…

f:id:piyomani:20160726011617j:plain

無事Raspberry Pi 3でWindows 10 IoT Coreが動きました\(*´ω`*)/

 

f:id:piyomani:20160726003736p:plain

その後、「自分のデバイス」からIPアドレスをコピーしようとしたら、ダッシュボード死んだけど、ping打ったらちゃんと返答あったから、OK!

ようこそ我が家のネットワークへ!Win10IoTさん!!

 

6.Bluetooth…うごくじゃん!!

さて、Bluetoothのユニバーサルドライバ作るか!

その前にWindows10IoTってどこにBluetoothの機構あるんだ…。

とか思っていじってたら、

  

f:id:piyomani:20160726011618j:plain

 

あれ、これBluetooth表示されてない…?

キーボードとペアリングできるんじゃない…??

コマンドラインBluetoothキーボードで文字打てちゃうんじゃない…???

 

f:id:piyomani:20160726003737j:plain

 

ガッデム!!!!!!

Bluetoothキーボード使えたよ!!!

 

ドライバ作る必要ないじゃん!!!!!!!!!!!!!!!!!

 

なんだかちょっとやる気が凹んだ(・ω・`)

 

※公式フォーラムの14393のリリースノートでは

・RPi3は、内蔵でBluetoothドライバー現在、低帯域幅のデバイスをサポートしています。

 とあるらしいです。

私のは14376だったり、低帯域幅だけだったり、詳しくは謎ですが、

とりあえず入力にBluetoothキーボードは使えました。

 なんかRPi3買ったタイミングと、Win10IoT入れたタイミングがすごい良かったみたいです!