Manjaroで xhci-pci のファームウェアがないと言われる件。

Manjaro Linuxでpacman -Syuしてカーネルをアップグレードしたら、
==> Building image from preset: /etc/mkinitcpio.d/linux510.preset: 'default'
  -> -k /boot/vmlinuz-5.10-x86_64 -c /etc/mkinitcpio.conf -g /boot/initramfs-5.10-x86_64.img
==> Starting build: 5.10.56-1-MANJARO
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [autodetect]
  -> Running build hook: [modconf]
  -> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: xhci_pci
  -> Running build hook: [filesystems]
  -> Running build hook: [keyboard]
  -> Running build hook: [fsck]
==> Generating module dependencies
などという警告が出てきました。

このxhci_pciは、RenesasのuPD72020xというUSB3コントローラのようで、おそらくそのファームウェアがライセンスの関係で同梱できないためにインストールされない、ということのようです。ぐぐってみるとkernel-5.8以降で話題になっているようなので、そのタイミングで同梱されなくなったのかもしれません。kernel.orgのBugzillaでは、Bug 208911 - Renesas USB controller - FW has invalid version :8224というのが上がっています。

Renesasからはバイナリが提供されているためこれをインストールできればよいのですが、Manjaroではパッケージの提供がありません。このファームウェアなしでもUSBは動作しますが、パフォーマンスが出ないというような書込みも見られます。

一方、ManjaroのベースとなっているArchLinuxではAURにてパッケージが提供されています。ところがManjaroではAURからのインストールはできません。パッケージをダウンロードしてきてオフラインインストールしようとpacman -Uしても「パッケージが破損している」というメッセージが出てきてインストールできません。
mito /home/kats% sudo pacman -U upd72020x-fw.tar.gz 
パッケージをロード...
エラー: upd72020x-fw.tar.gz にパッケージのメタデータが見つかりません
エラー: 'upd72020x-fw.tar.gz': 無効または破損したパッケージ


同じpacmanでも、ArchLinuxとManjaroでは管理方法が違うためにエラーになります。 Manjaroでは、ユーザの自己責任でAURからパッケージをインストールするサポートツールのyayがあり、これを使えばインストールできるようです。

yayはrootやsudoで実行してはいけません。
mito /home/kats% sudo yay -Syua
 -> yay を root や sudo で実行しないでください。
-SyuaはAURのリポジトリのみを更新するためのオプションです。

mito /home/kats% yay -Syua
:: AUR からアップデートを検索...
 -> python2-gobject2: ローカルのパッケージ (2.28.7-7) は AUR (2.28.7-6) よりも新しいバージョンです
 -> 存在しない AUR パッケージ:  geneigothicm  gksu-polkit  gtk-xfce-engine  js52  js60  libnm-glib  libnm-gtk  libopenaptx  linux-latest  linux-latest-headers  linux-latest-r8168  linux59  linux59-headers  linux59-r8168  mhwd-catalyst  mhwd-nvidia-304xx  mhwd-nvidia-340xx  orage  python-sip-pyqt5  python2-gevent  python2-pyqt5  python2-sip-pyqt5  uwsgi-plugin-python2  xf86-input-keyboard  xf86-input-mouse
 -> メンテナが存在しない AUR パッケージ:  idnkit  python-lazr-smtptest  python2-trollius  zinnia
 -> 古いバージョンのフラグが立てられた AUR パッケージ:  moinmoin
:: 9 アップグレードするパッケージ。
9  aur/chrome-remote-desktop  77.0.3865.32-1 -> 92.0.4515.41-1
8  aur/idnkit                 2.3-3          -> 2.3-4
7  aur/makefontpkg            20160320-1     -> 20200526-1
6  aur/nkf                    2.1.5-1        -> 2.1.5-2
5  aur/python-lazr-smtptest   2.0.3-1        -> 2.0.4-1
4  aur/python2-futures        3.3.0-2        -> 3.3.0-3
3  aur/python2-greenlet       1.0.0-1        -> 1.1.0-1
2  aur/tortoisehg-hg          4.9.1.18769-1  -> 5.5.1.19453-1
1  aur/xdg-su                 1.2.3-1        -> 1.2.3-2
==> 除外するパッケージ: (例: "1 2 3", "1-3", "^4" またはリポジトリ名)
==> ^C
mito /home/kats% yay -Ss upd72020
aur/upd72020x-fw 20200826-3 (+38 4.39) 
    Renesas uPD720201 / uPD720202 USB 3.0 chipsets firmware
AURではManjaroのリポジトリよりも新しいものがあるためアップグレードのメッセージが出ますが、これらは無視します。

mito /home/kats% yay -S upd72020x-fw
:: 衝突を確認...
:: 内部衝突を確認...
[Aur:1]  upd72020x-fw-20200826-3

:: PKGBUILD のダウンロード (1/1): upd72020x-fw
  1 upd72020x-fw                             (ビルドファイルが存在)
==> 差異を表示しますか?
==> [N]なし [A]全て [Ab]中止 [I]インストール済み [No]未インストール または (1 2 3, 1-3, ^4)
==> 1
diff --git /home/kats/.cache/yay/upd72020x-fw/.gitignore /home/kats/.cache/yay/upd72020x-fw/.gitignore
new file mode 100644
index 0000000..62514e8
--- /dev/null
+++ /home/kats/.cache/yay/upd72020x-fw/.gitignore
@@ -0,0 +1,2 @@
+*
+.*
diff --git /home/kats/.cache/yay/upd72020x-fw/PKGBUILD /home/kats/.cache/yay/upd72020x-fw/PKGBUILD
new file mode 100644
index 0000000..bc1a063
--- /dev/null
+++ /home/kats/.cache/yay/upd72020x-fw/PKGBUILD
@@ -0,0 +1,28 @@
+# Maintainer: Jack Chen <redchenjs@live.com>
+
+pkgname=upd72020x-fw
+pkgver=20200826
+pkgrel=3
+pkgdesc="Renesas uPD720201 / uPD720202 USB 3.0 chipsets firmware"
+arch=('any')
+url="https://github.com/denisandroid/uPD72020x-Firmware"
+license=('custom')
+source=(
+  "https://raw.githubusercontent.com/denisandroid/uPD72020x-Firmware/master/UPDATE.mem"
+  "https://raw.githubusercontent.com/denisandroid/uPD72020x-Firmware/master/License.rtf"
+  "remove.hook"
+)
+sha512sums=(
+  '1ea117f9a1a772013fb7509c76d731865e6c05ae3c55a304ff42b31ec8a474e9bf16dd1b05b2e5b666ec5fd301aefed54bfeb6bfd7c3f23dc23faf082cf2a9f7'
+  'f5be9af49a6ec81f77275c6f4092e6675a707a95a33bf37eb9ba84a7226f3310eebffb7699f8b9b12110c9ca2af1a56f528a94f1e4891fd45f297affd8ebb577'
+  '47aa4c4c3a0014df79b7a7998edfbc7b436ae6e966432f3787d9f1655c986591c73165de6fad52ebb5cefd4f8101b9b094d117f0508cd1f8f0d2c7396bbd3f91'
+)
+
+package() {
+  install -Dm644 UPDATE.mem "$pkgdir/usr/lib/firmware/renesas_usb_fw.mem"
+  install -Dm644 License.rtf "$pkgdir/usr/share/licenses/$pkgname/LICENSE.rtf"
+
+  # firmware install & remove hooks
+  install -Dm644 /dev/null "$pkgdir/usr/lib/initcpio/hooks/$pkgname"
+  install -Dm644 remove.hook "$pkgdir/usr/share/libalpm/hooks/$pkgname.hook"
+}
diff --git /home/kats/.cache/yay/upd72020x-fw/remove.hook /home/kats/.cache/yay/upd72020x-fw/remove.hook
new file mode 100644
index 0000000..68e2b20
--- /dev/null
+++ /home/kats/.cache/yay/upd72020x-fw/remove.hook
@@ -0,0 +1,10 @@
+[Trigger]
+Type = Package
+Operation = Remove
+Target = upd72020x-fw
+
+[Action]
+Description = Updating linux initcpios...
+Depends = mkinitcpio
+When = PreTransaction
+Exec = /bin/sh -c "rm -f /usr/lib/firmware/renesas_usb_fw.mem &s;&s; mkinitcpio -P"

==> インストールを実行しますか? [Y/n] 
:: (1/1) SRCINFO を解析中: upd72020x-fw
==> パッケージを作成: upd72020x-fw 20200826-3 (2021年08月14日 10時39分13秒)
==> ソースを取得...
  -> ダウンロード UPDATE.mem...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 13012  100 13012    0     0  48578      0 --:--:-- --:--:-- --:--:-- 48734
  -> ダウンロード License.rtf...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 32697  100 32697    0     0   123k      0 --:--:-- --:--:-- --:--:--  123k
  -> remove.hook を見つけました
==> source で sha512sums ファイルを検証...
    UPDATE.mem ... 成功
    License.rtf ... 成功
    remove.hook ... 成功
==> パッケージを作成: upd72020x-fw 20200826-3 (2021年08月14日 10時39分17秒)
==> ランタイムの依存関係を確認...
==> ビルドタイムの依存関係を確認...
==> ソースを取得...
  -> UPDATE.mem を見つけました
  -> License.rtf を見つけました
  -> remove.hook を見つけました
==> source で sha512sums ファイルを検証...
    UPDATE.mem ... 成功
    License.rtf ... 成功
    remove.hook ... 成功
==> 既存の $srcdir/ ディレクトリを削除...
==> ソースを展開...
==> ソースの準備ができました。
==> パッケージを作成: upd72020x-fw 20200826-3 (2021年08月14日 10時39分24秒)
==> ランタイムの依存関係を確認...
==> ビルドタイムの依存関係を確認...
==> 警告: 既存の $srcdir/ ツリーを使用
==> fakeroot 環境を開始します...
==> package() を開始...
==> インストールを整理...
  -> libtool ファイルを削除...
  -> 不要なファイルを削除...
  -> スタティックライブラリファイルを削除しています...
  -> バイナリとライブラリから不要なシンボルを削除...
  -> man と info ページを圧縮...
==> パッケージの問題をチェック...
==> パッケージを作成 "upd72020x-fw"...
  -> .PKGINFO ファイルを生成...
  -> .BUILDINFO ファイルを生成...
  -> .MTREE ファイルを生成...
  -> パッケージの圧縮...
==> fakeroot 環境を終了。
==> 作成完了: upd72020x-fw 20200826-3 (2021年08月14日 10時39分29秒)
==> 清掃...
パッケージをロード...
依存関係を解決しています...
衝突するパッケージがないか確認しています...

パッケージ (1) upd72020x-fw-20200826-3

合計インストール容量:  0.04 MiB

:: インストールを行いますか? [Y/n] 
(1/1) キーリングのキーを確認                                                                [######################################################] 100%
(1/1) パッケージの整合性をチェック                                                          [######################################################] 100%
(1/1) パッケージファイルのロード                                                            [######################################################] 100%
(1/1) ファイルの衝突をチェック                                                              [######################################################] 100%
(1/1) 空き容量を確認                                                                        [######################################################] 100%
:: パッケージの変更を処理しています...
(1/1) インストール upd72020x-fw                                                             [######################################################] 100%
:: トランザクション後のフックを実行...
(1/2) Arming ConditionNeedsUpdate...
(2/2) Updating linux initcpios...
==> Building image from preset: /etc/mkinitcpio.d/linux510.preset: 'default'
  -> -k /boot/vmlinuz-5.10-x86_64 -c /etc/mkinitcpio.conf -g /boot/initramfs-5.10-x86_64.img
==> Starting build: 5.10.56-1-MANJARO
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [autodetect]
  -> Running build hook: [modconf]
  -> Running build hook: [block]
  -> Running build hook: [keyboard]
  -> Running build hook: [keymap]
  -> Running build hook: [resume]
  -> Running build hook: [filesystems]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-5.10-x86_64.img
==> Image generation successful
ちょっと余計な差分表示もありますが、こんな感じでxchi_pciの警告は消えました。

mito /home/kats% lsmod | grep xhci_pci
xhci_pci               20480  0
xhci_pci_renesas       20480  1 xhci_pci
ファームウェアもちゃんとロードされているようです。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...