<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jetson on M1KE BL0G</title><link>https://www.m1ke.org/tags/jetson/</link><description>Recent content in Jetson on M1KE BL0G</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><copyright>mike</copyright><lastBuildDate>Fri, 25 Sep 2026 17:23:00 +0900</lastBuildDate><atom:link href="https://www.m1ke.org/tags/jetson/index.xml" rel="self" type="application/rss+xml"/><item><title>Jetson AGX Orinが再起動後に起動しなくなった問題</title><link>https://www.m1ke.org/p/jetson-agx-orin%E3%81%8C%E5%86%8D%E8%B5%B7%E5%8B%95%E5%BE%8C%E3%81%AB%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%95%8F%E9%A1%8C/</link><pubDate>Fri, 25 Sep 2026 17:23:00 +0900</pubDate><guid>https://www.m1ke.org/p/jetson-agx-orin%E3%81%8C%E5%86%8D%E8%B5%B7%E5%8B%95%E5%BE%8C%E3%81%AB%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%95%8F%E9%A1%8C/</guid><description>&lt;img src="https://www.m1ke.org/p/jetson-agx-orin%E3%81%8C%E5%86%8D%E8%B5%B7%E5%8B%95%E5%BE%8C%E3%81%AB%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%95%8F%E9%A1%8C/jetson.avif" alt="Featured image of post Jetson AGX Orinが再起動後に起動しなくなった問題" /&gt;&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Jetson AGX Orin（rootfs は NVMe、UEFI は 36.5.0）で、CUDA / cuBLAS の初期化失敗を調べていた&lt;/li&gt;
&lt;li&gt;調べると &lt;code&gt;CmaFree&lt;/code&gt; が約 1MB しかなく、CMA（物理的に連続したメモリを確保するための領域）が枯渇していた&lt;/li&gt;
&lt;li&gt;そこで &lt;code&gt;/boot/extlinux/extlinux.conf&lt;/code&gt; の &lt;code&gt;APPEND&lt;/code&gt; 行末に &lt;code&gt;cma=2048M&lt;/code&gt; を追加して再起動した&lt;/li&gt;
&lt;li&gt;すると、Linux が起動しなくなった&lt;/li&gt;
&lt;li&gt;最初は &lt;code&gt;cma=2048M&lt;/code&gt; が原因だと思っていたが、実際はまったく別の原因だった&lt;/li&gt;
&lt;li&gt;原因にたどり着くまでの流れと、復旧手順を残しておく&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="症状"&gt;症状&lt;/h2&gt;
&lt;p&gt;再起動後の挙動は以下の通り。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NVIDIA ロゴと UEFI のメニューまでは出る&lt;/li&gt;
&lt;li&gt;通常起動に進むと、画面が黒いまま再起動を繰り返す&lt;/li&gt;
&lt;li&gt;UEFI Shell から &lt;code&gt;/boot/Image&lt;/code&gt; を直接起動しても、黒画面のまま&lt;/li&gt;
&lt;li&gt;しばらくすると &lt;code&gt;L4TLauncher: Attempting Recovery Boot&lt;/code&gt; と出て、Recovery 用のカーネルでしか起動しなくなる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;UEFI Shell からは、NVMe のパーティションも &lt;code&gt;extlinux.conf&lt;/code&gt; も読めていた。つまり、ストレージは生きていて、UEFI も壊れていない状態。&lt;/p&gt;
&lt;h2 id="最初の仮説cma2048m-が悪い"&gt;最初の仮説：cma=2048M が悪い&lt;/h2&gt;
&lt;p&gt;直前に変えたのは &lt;code&gt;cma=2048M&lt;/code&gt; だけなので、まずはこれを疑った。&lt;/p&gt;
&lt;h3 id="uefi-shell-から直そうとした"&gt;UEFI Shell から直そうとした&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;UEFI Shell の &lt;code&gt;type fs2:\boot\extlinux\extlinux.conf&lt;/code&gt; で、&lt;code&gt;cma=2048M&lt;/code&gt; が残っていることは確認できた&lt;/li&gt;
&lt;li&gt;しかし、UEFI の ext4 ドライバは&lt;strong&gt;読み取り専用&lt;/strong&gt;なので、&lt;code&gt;edit&lt;/code&gt; も &lt;code&gt;cp&lt;/code&gt; も失敗する&lt;/li&gt;
&lt;li&gt;UEFI からは rootfs を直せない&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="uefi-shell-から-cma-なしで直接起動した"&gt;UEFI Shell から cma なしで直接起動した&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;cma=2048M&lt;/code&gt; を外した引数で、カーネルを直接起動してみた。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;\boot\Image initrd=\boot\initrd root=/dev/nvme0n1p1 rw rootwait rootfstype=ext4 console=tty0 console=ttyTCU0,115200 efi=runtime
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;これでも黒画面のまま&lt;/li&gt;
&lt;li&gt;ただし、通常の &lt;code&gt;extlinux.conf&lt;/code&gt; では先頭に &lt;code&gt;${cbootargs}&lt;/code&gt; が入っていて、Shell からはこれを再現しきれない&lt;/li&gt;
&lt;li&gt;なので「cma を外してもダメ」とは言い切れず、この時点では切り分けられなかった&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;画面が黒いままだと、何が起きているのかまったくわからない。ここで、シリアルでログを見ることにした。&lt;/p&gt;
&lt;h2 id="debug-uart-で起動ログを取る"&gt;Debug UART で起動ログを取る&lt;/h2&gt;
&lt;h3 id="接続"&gt;接続&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PC と Jetson の &lt;strong&gt;J26（micro-B、Debug UART）&lt;/strong&gt; を USB ケーブルでつなぐ&lt;/li&gt;
&lt;li&gt;Force Recovery ボタンは押さない&lt;/li&gt;
&lt;li&gt;正しく認識されると、&lt;code&gt;lsusb&lt;/code&gt; に &lt;code&gt;0955:7045 NVIDIA Tegra On-Platform Operator&lt;/code&gt; が出て、&lt;code&gt;/dev/ttyACM0&lt;/code&gt;〜&lt;code&gt;3&lt;/code&gt; ができる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最初は PC 側で何も認識されなかった。原因はケーブル（充電専用）で、データ通信できるケーブルに替えたら認識された。&lt;/p&gt;
&lt;h3 id="ログを見る"&gt;ログを見る&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo usermod -aG dialout &lt;span class="nv"&gt;$USER&lt;/span&gt; &lt;span class="c1"&gt;# ログインし直すと sudo なしで開ける&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;picocom -b &lt;span class="m"&gt;115200&lt;/span&gt; /dev/ttyACM0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/dev/ttyACM*&lt;/code&gt; は &lt;code&gt;root:dialout&lt;/code&gt; の &lt;code&gt;660&lt;/code&gt; なので、グループに入っていないと開けない&lt;/li&gt;
&lt;li&gt;ログは &lt;code&gt;/tmp&lt;/code&gt; 以外に保存する（PC を再起動したら消えてしまった）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ログでわかったこと"&gt;ログでわかったこと&lt;/h3&gt;
&lt;p&gt;通常起動のログに、以下が出ていた。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ 2.328236] Root device found: nvme0n1p1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ 12.875707] ERROR: nvme0n1p1 not found
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ 33.758955] VDD_3V3_PCIE: disabling
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;initrd が rootfs の NVMe を見つけられていない&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VDD_3V3_PCIE: disabling&lt;/code&gt; は、PCIe のドライバが動いていないため、使われていない PCIe の電源が自動で切られたという意味&lt;/li&gt;
&lt;li&gt;つまり、&lt;strong&gt;PCIe と NVMe のドライバが読み込まれていない&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cma=&lt;/code&gt; はメモリの予約量を変えるだけなので、この症状とはつながらない&lt;/li&gt;
&lt;li&gt;さらに、&lt;code&gt;Linux version&lt;/code&gt; が以前の 5.15.185 ではなく &lt;strong&gt;5.15.199&lt;/strong&gt; になっていた&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;いつの間にかカーネルが新しくなっている。ここで原因の見当がついた。&lt;/p&gt;
&lt;h2 id="recovery-環境から-rootfs-を調べる"&gt;Recovery 環境から rootfs を調べる&lt;/h2&gt;
&lt;p&gt;Recovery 用のカーネル（5.15.185）では NVMe が見えるので、そこから rootfs をマウントして調べた。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/nvme0n1p1 /mnt/r
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="裏でアップデートが走っていた"&gt;裏でアップデートが走っていた&lt;/h3&gt;
&lt;p&gt;dpkg のログを見ると、以下がわかった。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当日 09:43 に、ソフトウェア更新（&lt;code&gt;packagekit update-packages&lt;/code&gt;）が自動で動いていた&lt;/li&gt;
&lt;li&gt;L4T が 36.5.0 から 36.5.2 に更新されている途中だった
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nvidia-l4t-kernel&lt;/code&gt;：5.15.185 → 5.15.199&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nvidia-l4t-initrd&lt;/code&gt;、&lt;code&gt;nvidia-l4t-bootloader&lt;/code&gt; など L4T パッケージ一式&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;その途中で、&lt;code&gt;cma=2048M&lt;/code&gt; を反映するために再起動していた&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;304個のパッケージ&lt;/strong&gt;が「展開済み・未設定」（unpacked）のまま止まっていた&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/nv-update-initrd/list.d/&lt;/code&gt; に &lt;code&gt;*.dpkg-new&lt;/code&gt; が残っていた&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="initrd-が空っぽだった"&gt;initrd が空っぽだった&lt;/h3&gt;
&lt;p&gt;本来は、パッケージの設定の工程で &lt;code&gt;nv-update-initrd&lt;/code&gt; が実行され、initrd にカーネルモジュールが組み込まれる。これが実行されていなかった。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gzip -dc /mnt/r/boot/initrd &lt;span class="p"&gt;|&lt;/span&gt; cpio -t &lt;span class="p"&gt;|&lt;/span&gt; grep -c lib/modules
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;新しい &lt;code&gt;/boot/initrd&lt;/code&gt; には、カーネルモジュールが1つも入っていなかった&lt;/li&gt;
&lt;li&gt;そのため、新しいカーネルは &lt;code&gt;pcie-tegra194.ko&lt;/code&gt;、&lt;code&gt;phy-tegra194-p2u.ko&lt;/code&gt;、&lt;code&gt;nvme.ko&lt;/code&gt; を読み込めない&lt;/li&gt;
&lt;li&gt;結果として NVMe が見えず、rootfs をマウントできなかった&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;cma=2048M&lt;/code&gt; は原因ではなく、アップデート後はじめての再起動のきっかけになっただけだった。&lt;/p&gt;
&lt;h2 id="もう一つの問題uefi-が-recovery-で起動し続ける"&gt;もう一つの問題：UEFI が Recovery で起動し続ける&lt;/h2&gt;
&lt;p&gt;initrd を直しても、UEFI が Recovery のカーネルを選び続ける状態になっていた。UEFI 変数を見ると、以下の2つが原因だった。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;UEFI 変数&lt;/th&gt;
&lt;th&gt;値&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;L4TDefaultBootMode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recovery Partition（調査中に自分で設定したもの）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RootfsStatusSlotA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0xFF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unbootable（通常起動に3回失敗したため、UEFI が自動で設定したもの）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;どちらか一方でもこの値だと、L4TLauncher は必ず Recovery のカーネルで起動する&lt;/li&gt;
&lt;li&gt;edk2-nvidia の &lt;code&gt;L4TLauncher.c&lt;/code&gt; と &lt;code&gt;L4TRootfsValidation.c&lt;/code&gt; のソースで確認した&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="復旧手順"&gt;復旧手順&lt;/h2&gt;
&lt;h3 id="1-initrd-を作り直す"&gt;1. initrd を作り直す&lt;/h3&gt;
&lt;p&gt;Recovery 環境の root シェルで、rootfs に chroot して &lt;code&gt;nv-update-initrd&lt;/code&gt; を実行する。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/nvme0n1p1 /mnt/r
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; d in proc sys dev&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; mount --bind /&lt;span class="nv"&gt;$d&lt;/span&gt; /mnt/r/&lt;span class="nv"&gt;$d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp -a /mnt/r/boot/initrd /mnt/r/boot/initrd.bak-before-nvupdate
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chroot /mnt/r /usr/sbin/nv-update-initrd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; d in dev sys proc&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; umount /mnt/r/&lt;span class="nv"&gt;$d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sync&lt;span class="p"&gt;;&lt;/span&gt; umount /mnt/r
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;念のため、&lt;code&gt;extlinux.conf&lt;/code&gt; から &lt;code&gt;cma=2048M&lt;/code&gt; も外しておいた（バックアップは &lt;code&gt;extlinux.conf.bak-before-cma&lt;/code&gt;）。&lt;/p&gt;
&lt;h3 id="2-uefi-の設定を戻す"&gt;2. UEFI の設定を戻す&lt;/h3&gt;
&lt;p&gt;起動時に ESC を押して、&lt;strong&gt;Device Manager → NVIDIA Configuration → L4T Configuration&lt;/strong&gt; を開く。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;L4T Boot Mode&lt;/strong&gt; を &lt;strong&gt;ExtLinux&lt;/strong&gt; にする&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OS chain A status&lt;/strong&gt; を &lt;strong&gt;Normal&lt;/strong&gt; にする&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L4T Boot Mode の &lt;strong&gt;Application Default&lt;/strong&gt; は、edk2-nvidia のソースではいったん GRUB 扱いになる。確実に &lt;code&gt;extlinux.conf&lt;/code&gt; を使いたいなら ExtLinux を選ぶ。&lt;/p&gt;
&lt;p&gt;ここまでで、&lt;code&gt;Ubuntu 22.04.5 LTS ubuntu ttyTCU0&lt;/code&gt; のログインプロンプトまで起動した。&lt;/p&gt;
&lt;h3 id="3-止まっていたアップデートを完了させる"&gt;3. 止まっていたアップデートを完了させる&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dpkg --configure -a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt -f install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dpkg -l &lt;span class="p"&gt;|&lt;/span&gt; grep -c -E &lt;span class="s1"&gt;&amp;#39;^(iU|iF)&amp;#39;&lt;/span&gt; &lt;span class="c1"&gt;# 0 になれば完了&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;エラーなく完了し、再起動しても正常に起動することを確認した。&lt;/p&gt;
&lt;h2 id="ハマりどころ"&gt;ハマりどころ&lt;/h2&gt;
&lt;p&gt;調査中に引っかかったことを並べておく。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;シリアルでコマンドを送ったら、UEFI の設定画面に入力されてしまった
&lt;ul&gt;
&lt;li&gt;Jetson が UEFI メニューを出しているときは、キー操作として受け取られる&lt;/li&gt;
&lt;li&gt;送る前に、ログで今どの画面にいるかを確かめる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Reset ボタンを3回押しても Recovery に切り替わらなかった
&lt;ul&gt;
&lt;li&gt;Reset での再起動は、失敗回数として数えられないようだった&lt;/li&gt;
&lt;li&gt;確実に Recovery で起動したいときは、UEFI で L4T Boot Mode を Recovery Partition にする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;initrd で「Press [ENTER] to start bash」と出ても操作できなかった
&lt;ul&gt;
&lt;li&gt;bash は最後に指定された &lt;code&gt;console=tty0&lt;/code&gt;（HDMI）側で起動する&lt;/li&gt;
&lt;li&gt;表示ドライバが読み込まれていないと画面は真っ黒で、シリアルからも操作できない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;extlinux.conf&lt;/code&gt; に &lt;code&gt;FDT&lt;/code&gt; 行（DTB の指定）を足しても直らなかった
&lt;ul&gt;
&lt;li&gt;原因は DTB ではなく initrd だった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Recovery 環境には &lt;code&gt;od&lt;/code&gt;、&lt;code&gt;hexdump&lt;/code&gt; がない
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;chroot&lt;/code&gt;、&lt;code&gt;cpio&lt;/code&gt;、&lt;code&gt;gzip&lt;/code&gt; はある&lt;/li&gt;
&lt;li&gt;UEFI 変数は &lt;code&gt;mount -t efivarfs none /sys/firmware/efi/efivars&lt;/code&gt; で読める&lt;/li&gt;
&lt;li&gt;efivarfs のファイルは、先頭 4 バイトが属性で、その後に値が続く（例：&lt;code&gt;07 00 00 00 | 03 00 00 00&lt;/code&gt; は値 3）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;参考として、主な UEFI 変数（GUID &lt;code&gt;781e084c-a330-417c-b678-38e696380cb9&lt;/code&gt;）の意味。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;変数&lt;/th&gt;
&lt;th&gt;値の意味&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;L4TDefaultBootMode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0 = GRUB、1 = ExtLinux、2 = Kernel Partition、3 = Recovery、0xFF = Application Default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RootfsStatusSlotA&lt;/code&gt; / &lt;code&gt;RootfsStatusSlotB&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0 = Normal、0xFF = Unbootable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RootfsRetryCountMax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;何回失敗したら Unbootable にするか（今回は 3）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="再発防止"&gt;再発防止&lt;/h2&gt;
&lt;p&gt;同じことを起こさないために、以下をやることにした。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L4T の自動アップデートを止める
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo apt-mark hold 'nvidia-l4t-*'&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;カーネル・initrd・ブートローダの更新は、時間のあるときに手動で行う&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;再起動の前に、アップデート中でないか確認する
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pgrep -a -f 'apt|dpkg|packagekit|unattended'&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dpkg -l | grep -c -E '^(iU|iF)'&lt;/code&gt; が 0 以外なら、先に &lt;code&gt;sudo dpkg --configure -a&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;起動に関わる設定は、1回に1つだけ変える&lt;/li&gt;
&lt;li&gt;CMA を増やすときは、&lt;code&gt;cma=1024M&lt;/code&gt; など控えめな値から試す&lt;/li&gt;
&lt;li&gt;&lt;code&gt;extlinux.conf&lt;/code&gt; に、&lt;code&gt;cma=&lt;/code&gt; なしのバックアップ用の起動エントリを用意しておく&lt;/li&gt;
&lt;li&gt;Debug UART（J26）をすぐ使えるようにしておく
&lt;ul&gt;
&lt;li&gt;データ通信できる micro-B ケーブル&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dialout&lt;/code&gt; グループへの追加&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="残っていること"&gt;残っていること&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OS は 36.5.2 になったが、ファームウェア（ブートローダ）は 36.5.0 のまま
&lt;ul&gt;
&lt;li&gt;今のところ起動も動作も正常&lt;/li&gt;
&lt;li&gt;Capsule Update でのファームウェア更新は後日行う&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dpkg --configure -a&lt;/code&gt; 後の最初の再起動で、&lt;code&gt;Unhandled Exception in EL3.&lt;/code&gt;（SError）が1回出た
&lt;ul&gt;
&lt;li&gt;電源を入れ直したら正常に起動した&lt;/li&gt;
&lt;li&gt;何度も起きるようなら、ファームウェアやハードウェアを疑う&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;元々の問題（CMA 不足と cuBLAS の初期化失敗）の調査はこれから&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;「最後に変えた設定が原因」とは限らない。今回は、裏で動いていた自動アップデートを再起動で中断したことが原因だった&lt;/li&gt;
&lt;li&gt;黒画面で何もわからないときは、まず Debug UART でログを取る。ログを見た時点で原因の見当がついた&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Linux version&lt;/code&gt; が変わっているのに &lt;code&gt;nvme0n1p1 not found&lt;/code&gt; が出たら、initrd にモジュールが入っていないことを疑う&lt;/li&gt;
&lt;li&gt;復旧は、Recovery 環境から chroot して &lt;code&gt;nv-update-initrd&lt;/code&gt;、UEFI の Boot Mode と Rootfs Status を戻す、アップデートを完了させる、の3つ&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>