4790KのPCでWindows11する。

現在のメインPCはCore i9-9900Kなので、すでにWindows11にアップグレード済なのですが、以前使っていた2台のPCはどちらもCore i7-4790Kで、Windows11の対象外になってしまっています。

2015年に購入したものですが、4790Kは今でも十分に使える能力は持っているので、このまま置いておくのはもったいない。ということでなんとかWindows11にできないかとやってみました。

まず、マイクロソフトのWindows 11をインストールする方法のページを参考にレジストリを追加します。こちら(マイナビニュース)にも同様の記事があります。
reg add HKLM\SYSTEM\Setup\MoSetup /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f
を管理者用コマンドプロンプトで実行します。これでCPUがサポート外でもアップグレードが可能になります。

ところが、使用しているマザーボードがAsrock Z97 Extreme 4で、これはTPM2.0に対応していません。これだけだとWindows11セットアップではねられてしまいます。

CPUのほうはこれでスキップできましたが、どうにもTPM2.0のところで引っかかってしまい、先に進みませんでした。

そこで、こうなったらTPM2.0モジュールを購入しようと決心し、ダメでもともと、一番安そうなところを探してみました。Asrockが出しているTPMモジュールが購入できればよいのですが、これがなんと1万円以上しているのです。そもそも出荷数が少ないのか、それともWin11特需でなくなっているのかはわかりませんが、そこまでお金は出せません。このページによれば、Nuvoton NPCT650またはInfineon SLB9665なら使えそうです。

Amazonで購入したのはこちら。Extreme 4のマニュアルを見ればわかる通り、TPMモジュール用ヘッダは18ピンで13ピンが抜けているタイプです。AmazonのページにはType AからType Iまで9種類がありますが、Type Cが当てはまります。もちろん信号名なども照らし合わせて確認しています。注文すると品物は上海から発送されましたが、2週間ほどで手元に届きました。ちなみにチップはInfineon SLB9665TT20です。
ということで早速PCにセットして、起動してみたのですが…。
BIOSのUEFIでIntel Platform Trust Technologyの項目が出てきません。

これもよく調べてみるとBIOSで対応していないようで、最新の2.60でもダメでした。ところが下の方にベータBIOSがあり、そこにある2.60Aで「Support TPM 2.0」とあります。ということで早速Instant FlashでBIOSをアップデートし、TPMモジュールを接続してみました。

…が、それでも出てきません。Win+Rキーで「tpm.msc」と入力してTPMの管理パネルを開いても、モジュールが見つからないというメッセージです。

ここでデバイスマネージャーを見ると不明なデバイスが増えていて、よくよく見てみるとこれはTPMモジュールではなくIntel Smart Connect Technologyデバイスでした。これをBIOSでDisableしてやると、UEFIのAdvancedタブのところにIntel Platform Trust Technology関係の項目が増えていました。

その状態でWindows10を起動し、「tpm.msc」を開いてみると…。
認識されました。これなら勝つる!
ちなみにMBRからGPTへの変更はWindows 11のための準備を整える。の手順ですでに終わっています。
そのままWindows 11のセットアッププログラムを実行してみると…。
おお!
どっこいしょ!
そらきた!
ということで、ずんずん進み、最終的にインストールは完了しました。
CPUはCore i7-4790Kで、OSはWindows 11 Proです。

FFmpeg 5.0をコンパイルしてみる。

ビデオファイルをいじったりエンコードしたり加工したりするのに必須なffmpegの5.0がリリースされたので、コンパイルしてみました。

記事はこちら。「FFmpeg 5.0」が公開 ~大規模なAPIの変更を実施した長期サポート(LTS)リリース

環境はWSL2上にインストールされたArchLinuxを使います。別にUbuntuとか他のディストロでも問題ないと思いますが、うちはArchしかないので…。

まず、ffmpeg-windows-build-helperをcloneします。

$ git clone https://github.com/rdp/ffmpeg-windows-build-helpers

そしたらそのディレクトリに移動します。

$ cd ffmpeg-windows-build-helpers

指定オプションの意味は、

$ ./cross_compile_ffmpeg.sh -h

すれば出てきます。英語のみですけど。

でもってビルドします。

$ ./cross_compile_ffmpeg.sh --build-ffmpeg-shared=y --ffmpeg-git-checkout-version=n5.0 --fdk-aac-git-checkout-version=v2.0.2 --gcc-cpu-count=8 --disable-nonfree=n --build-intel-qsv=y --build-lsw=y --compiler-flavors=win64

すると怒られます。

    windows WSL detected: you must first disable 'binfmt' by running this
        sudo bash -c 'echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop'
        then try again

言われたとおりにします。

$ sudo bash -c 'echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop'

再度ビルドします。

$ ./cross_compile_ffmpeg.sh --build-ffmpeg-shared=y --ffmpeg-git-checkout-version=n5.0 --fdk-aac-git-checkout-version=v2.0.2 --gcc-cpu-count=8 --disable-nonfree=n --build-intel-qsv=y --build-lsw=y --compiler-flavors=win64

しばらく待ちます。
また怒られます。
仕方ないので、cross_compile_ffmpeg.shを編集し、

    config_options+=--enable-libsvthevc

をコメントアウトして、--enable-libbluray --enable-fontconfig --enable-libfreetypeを削除します。たぶんこれは字幕に必要だからだと思いますが、うちでは不要なので問題なしです。
再度ビルドします。
また怒られました・・・QSV関係なので、これはコマンドラインオプションから--build-intel-qsv=yを削除します。

再度ビルドします。

すると、

  Done! You will find 64-bit shared non-redistributable binaries in
  /home/kats/work/ffmpeg-windows-build-helpers/sandbox/win64/ffmpeg_git_with_fdk_aac_n5.0_shared/bin
  

なので、次のようにしてアーカイブし、mntしてるWindowsのフォルダに放り込みます。

  $ cd /home/kats/work/ffmpeg-windows-build-helpers/sandbox/win64/ffmpeg_git_with_fdk_aac_n5.0_shared
  $ 7z a ffmpeg_with_fdk_aac_n5.0_share.7z bin doc include lib presets LICENSE.md README.md
  $ cp ffmpeg_with_fdk_aac_n5.0_share.7z /mnt/c/Users/kats/work
  

でもって、パスの通ったところに展開すれば完了です。

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...