2023年8月18日金曜日

[備忘録] XilinxのISE 14.7 on VMをインストールできないとき

xsetup.exeを実行してインストールを始めてすぐに、"Installation cannot be performed, please fix the issue before installing. Virtualization is not enabled in BIOS. please enable before installing"と表示されてインストールが進められないときは・・・



 
  • インストールパッケージのbin/validate_virtualization_enabled.ps1スクリプトの3行目あたりを下記のように書き換えておく
    
    # Detect if BIOS is setup to enable virtualization
    #$is_vm_enabled = Get-CimInstance -ClassName win32_processor | select-object -expand VirtualizationFirmwareEnabled
    $is_vm_enabled = $TRUE
    
    if ($is_vm_enabled)
    {
        "Virtualization is enabled"
        $host.SetShouldExit(0)
        exit
    }
    else
    {
        # if hyper-v is enabled windows will report that virtualization is disabled
        # check whether hyper-v is enabled
        $hyperv_enabled = (Get-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V-Hypervisor").State -eq "Enabled"
        if ($hyperv_enabled)
        {
            "Hyper-V is enabled, please disable before installing."
            $host.SetShouldExit(2)
            exit
        }
        else
        {
            "Virtualization is not enabled in BIOS, please enable before installing."
            $host.SetShouldExit(2)
            exit
        }
    }
    
    

BIOS/UEFI上でvirtualizationはenableにしているし、Windowsのtask managerでも仮想化=有効となっている。実際、DockerもWSLも使えている。なのに、XilinxのISEインストーラはVirtualization機能が有効になっていないと言って、インストールが進められなかった。

原因は、PCのWin32_ProcessorクラスにあるVirtualizationFirmwareEnabledが何故かFalseを返していたせい。別のPCで確認しても(もちろん、そのPCも仮想化には対応していて、BIOS/タスクマネージャは有効を示しており、Docker&WSLも使えている)、同様にこの値はFalseを返していた。
ネットで調べると、こういう機種は多く、仮想化機能の有効化をチェックする方法としてVirtualizationFirmwareEnableをチェックする方法は不適切&不確実らしい。このせいで、世界中の多くのISEユーザーは苦しんでいるに違いない。

なので、自己判断で仮想化はちゃんと使えるはず!と思うならば、上記のvalidate_virtualization_enabled.ps1スクリプトファイルを書き換えてしまおう。幸いにも、読めばすぐに理解できるスクリプトファイルで判定しているようなので、書き換えは容易だった。もし、コンパイル済みのバイナリ実行コード中でこのような確認処理が行われていたなら、見つけられなかっただろう。

2023年8月16日水曜日

[備忘録] OpenOCDをLPC18xx(LPC1800系LPC1857)で使う

  • OpenOCDに含まれるコンフィグレーションファイルlpc1xxx.cfgは使えそうに見えるが使えない
  • コンフィグレーションファイル中のflash bankの設定では"auto"ではなく"lpc4300"を明示的に指定する

OpenOCDはLPC18xxをサポートしているが、LPC17xxなどのように各品種を包括的にサポートする(ほぼできそうな)lpc1xxx.cfgのようなコンフィグレーションファイルは存在しないようだ。わずかに、lpc1850.cfgのような一部のみサポートするコンフィグレーションは存在するが、flash bankやworkareaといった定義・設定がないか、不十分だと考えられる。

また、lpc1xxx.cfgで使用されている

# flash bank <name> lpc2000 <base> <size> 0 0 <target#> <variant> <clock> [calc checksum] [iap entry]
set _IAP_ENTRY 0
if { [info exists IAP_ENTRY] } {
    set _IAP_ENTRY $IAP_ENTRY
}
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME lpc2000 0x0 0 0 0 $_TARGETNAME \
    auto $_CCLK calc_checksum $_IAP_ENTRY


というflash romの定義は"auto"とあることからLPC18xxでも使えそうな気がするが、実際には"auto"は機能しない。OpenOCDのソースコードを見て分かったのは、"auto"設定で対応可能なのはIAP(In-Application Programming)のテーブルアドレスが0x1fff1ff1に置かれているLPCデバイスに限られる。
一方、LPC18xxのIAPテーブルアドレスは0x10400100に書いてあるアドレスを読み出すことで得られる。この方式はLPC43xxシリーズと同じ方法で、実際のところflashのバンク構成などもLPC43xxの方が近い。Cortex-m3(LPC18xx)とCortex-m4(LPC43xx)の違いはあるが、どちらかというとLPC43xx用のコンフィグレーションを参考にして、LPC18xx用のコンフィグレーションを一から書いた方が早そうである。

2023年6月2日金曜日

Google日本語入力を止めるべき・・・か?

最近 Google日本語入力を使うと・・・・

  • Windows Terminalを起動したとき、勝手に日本語入力モードになっていて、コマンドを入れようとすると全角文字になってしまう
  • 特に最近、マイクラ(Windows BE版)がピタリとフリーズするようになった
という問題が立て続けに出るようになった。

Windows Terminalの件は、面倒だけど起動するたびに日本語入力をオフにすればよい(半角/全角キーを押すか、無変換キーを押せばよい)。まあ、ターミナルは一度立ち上げてしまえばだいたい開きっぱなしだし、bashなどの新しいタブを開く場合はこの問題は出ないから、まあ許容範囲と思っていた。

しかし、マイクラがいきなりフリーズするのは困ったものだ。いきなりマイクラだけピタリと止まるが、他のアプリは問題ない。そして、フリーズするのは画面表示+操作だけのようで、フリーズしている間もマイクラの時間は進んでいる気がする。そのまましばらく放置していると、どうやら夜になってモブに殺されているようだ。次回起動したとき、持ち物や装備が全部無くなっていた。ダイヤのツルハシとかも・・・。
マイクラを使う際、Google日本語入力ではなくMS-IMEに変更しておくとフリーズしなくなることに先日気がついた。今のところ、MS-IMEに変えてからはフリーズしていない。でも、何でだろう?

原因はよく分からないが、とりあえず回避策は分かった。
そう言えば、MS-IMEが出始めの頃は漢字変換があまりにもヒドかったのでそれ以来「食わず嫌い」のように問答無用で避けてきたが、それから10年以上経ち、もしかすると最近のは「使える」レベルになっているのかも知れない。巷では、Google日本語入力だって漢字変換はバカだと言われているようなので、MS-IMEもそんなに毛嫌いするほどのものではないのかも知れないな、と思い始めている。Google日本語入力の方は、先に書いたような問題が出始めているので、「そろそろMS-IMEに戻れ」との知らせなのかも。