写在前面
如果你也在用Ubuntu做开发,可能都经历过这种事:一次看似平平无奇的系统更新,直接让你的开发环境“翻车”了。
我的故事就是这样开始的。手一抖,把系统从 Ubuntu 22.04.4 升级到了 22.04.5,结果引来两大麻烦:
NVIDIA显卡驱动彻底挂了。 不管怎么卸载、重装,apt 总是报 unmet dependencies (未满足的依赖关系) 和 held broken packages (存在损坏的持有软件包),nvidia-smi 命令敲下去只有心碎的回响。
吃饭的家伙 PetaLinux 也开始闹脾气,启动环境时一直提示 [WARNING] This is not a supported OS。
折腾了很久,总算把这两个问题都解决了。我把整个过程和思路整理下来,希望能帮到同样踩坑的朋友。
第一部分:搞定烦人的NVIDIA驱动依赖问题
出了什么问题?
每次我尝试安装 nvidia-driver-570 时,终端都会报类似的错误:
The following packages have unmet dependencies:
nvidia-persistenced : Depends: libnvidia-cfg1 (= 575.57.08-0ubuntu1)
E: Unable to correct problems, you have held broken packages.
简单说就是,我想装 570 驱动,但系统非要去拉一个 575 版本的依赖包,版本对不上,apt 就直接罢工了。
问题根源在哪?
这其实是 apt 的软件源优先级问题。系统里有两个地方都能提供NVIDIA驱动:
Ubuntu 自己的源:版本比较稳,经过了测试,比如 570。
NVIDIA 官方的源:通常是装CUDA时加上的,版本更新,比如 575。
apt 在找依赖包 nvidia-persistenced 时,默认会选最新的,也就是NVIDIA源里的 575 版本。这就跟我要装的 570 主驱动包冲突了。
怎么解决?
思路很简单:先让 apt “眼瞎”,看不到捣乱的NVIDIA官方源,等装好了再让它“复明”。
第1步:把旧驱动彻底删干净
这一步很重要,一定要清彻底,免得有残留文件捣乱。
# 用通配符一次性删掉所有nvidia相关的包
sudo apt-get purge '*nvidia*' -y
# 清理一下不再需要的依赖
sudo apt autoremove -y
第2步:暂时禁用NVIDIA官方源
我们不删配置文件,只是把它移个地方,方便以后恢复。
# 找到NVIDIA的源配置文件,通常在 /etc/apt/sources.list.d/ 目录下
# 然后把它移动到你的主目录
sudo mv /etc/apt/sources.list.d/cuda-ubuntu2204-x86_64.list ~/
第3步:从Ubuntu官方源安装驱动
现在 apt 的世界里只有Ubuntu官方源了,安装过程会很顺利。
# 先刷新一下软件源列表
sudo apt update
# 用Ubuntu自带的命令自动安装最合适的驱动
sudo ubuntu-drivers autoinstall
第4步:重启电脑,检查结果
装完驱动后必须重启,让新的内核模块生效。
sudo reboot
重启后,打开终端,再次输入 nvidia-smi。如果能看到显卡信息,就说明成功了。你也可以去“软件和更新” -> “附加驱动”里看看,是不是已经选上了正确的驱动。

第5步:恢复NVIDIA源
为了以后还能方便地装CUDA,我们得把之前移走的源文件再请回来。
# 把源文件移回原位
sudo mv ~/cuda-ubuntu2204-x86_64.list /etc/apt/sources.list.d/
# 再刷新一次软件源列表
sudo apt update
好了,驱动问题到此解决。因为驱动已经是手动安装的状态,以后正常的系统更新不会再把它搞坏了。
第二部分:让PetaLinux不再抱怨操作系统版本
出了什么问题?
启动PetaLinux环境时,终端里总有这么一行警告:
[WARNING] This is not a supported OS
问题根源在哪?
PetaLinux这种专业的工具,为了保证稳定,脚本里写死了一个支持的操作系统版本“白名单”。我的系统升级到 22.04.5,这个新版本号不在它的名单里,它就不认了。
怎么解决?
既然是白名单的问题,那我们直接给它“走后门”,把我们的系统版本加进去就行了。
第1步:找到那个检查脚本
用 grep 命令在PetaLinux的安装目录里搜一下,看是哪个文件在报这个警告。
# 把后面的路径换成你自己的PetaLinux安装路径
grep -r "This is not a supported OS" /home/lz/Programs/Xilinx/Petalinux/2024.2/
这个命令会告诉你问题文件的准确路径,比如我这里是:
/home/lz/Programs/Xilinx/Petalinux/2024.2/scripts/bash/petalinux-env-check
第2步:编辑白名单
用文本编辑器打开这个文件。
nano /home/lz/Programs/Xilinx/Petalinux/2024.2/scripts/bash/petalinux-env-check
在文件开头,能找到一个叫 UBUNTUVERSIONS 的变量。
# 原来的白名单
UBUNTUVERSIONS="20.04.2 20.04.3
20.04.5 20.04.6
22.04.1 22.04.2 22.04.3 22.04.4 24.04"
第3步:把自己的系统版本加进去
很简单,在 22.04.4 后面加个空格,再写上 22.04.5。
# 修改后的白名单
UBUNTUVERSIONS="20.04.2 20.04.3
20.04.5 20.04.6
22.04.1 22.04.2 22.04.3 22.04.4 22.04.5 24.04"
保存文件退出。
现在再重新启动PetaLinux环境,那个烦人的警告就再也不会出现了。
总结
这次折腾下来,总结出两条经验:
遇到 apt 依赖冲突,多半是软件源混用搞的鬼。暂时屏蔽掉其中一个源,通常能解决问题。
遇到专业工具报“系统不支持”,别急着重装系统。先去翻翻它的脚本,很可能只是一个写死的版本号白名单在作祟。
希望这篇文章能帮你少走些弯路。















暂无评论内容