ubuntu arm架构内核升级方案
一、Ubuntu ARM架构概述
ARM架构是一种基于精简指令集(RISC)的处理器架构,以其低功耗、高性能和高度可定制化而闻名。在嵌入式系统、移动设备、物联网等多个领域得到了广泛应用。Ubuntu作为一款流行的开源操作系统,也提供了ARM架构的支持。
二、官方源选择
1. 官方源地址
Ubuntu ARM架构的官方源地址如下:
-
传统格式(/etc/apt/sources.list):
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ noble main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ noble-updates main restricted universe multiverse -
ARM64架构(/etc/apt/sources.list):
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ arm64 main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ arm64-updates main restricted universe multiverse
2. 选择官方源的原因
- 官方源提供最稳定、最安全的软件包。
- 官方源更新及时,能够获取最新版本的软件包。
- 官方源支持多种ARM架构,包括ARMv7、ARMv8等。
三、优化技巧
1. 替换官方源
由于官方源可能存在速度较慢的情况,我们可以选择替换为速度更快的国内镜像源。以下以清华大学镜像源为例:
1.1 替换方法
-
备份原始源文件:
cp /etc/apt/sources.list /etc/apt/sources.list.bak -
修改源文件内容:
sudo vim /etc/apt/sources.list -
将以下内容复制到源文件中:
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ arm64 main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ arm64-updates main restricted universe multiverse
1.2 更新源列表
- 运行以下命令更新源列表:
sudo apt update
2. 优化网络配置
为了提高下载速度,我们可以优化网络配置。以下以调整TCP窗口大小为例:
2.1 修改网络配置文件
-
创建或修改文件
/etc/sysctl.conf:sudo vim /etc/sysctl.conf -
在文件末尾添加以下内容:
net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_sack = 1 net.ipv4.tcp_timestamps = 1
2.2 加载网络配置
- 运行以下命令加载网络配置:
sudo sysctl -p
3. 选择合适的内核
根据系统需求,选择合适的内核可以优化性能和功耗。以下以Cortex-A系列为例:
3.1 安装内核
- 运行以下命令安装内核:
sudo apt install linux-image-5.4.0-42-generic
3.2 修改引导菜单
-
编辑引导菜单配置文件
/etc/grub.d/10_linux:sudo vim /etc/grub.d/10_linux -
将
linux选项修改为对应的内核版本:linux /boot/vmlinuz-5.4.0-42-generic root=/dev/mapper/rootfs ro
3.3 重新加载引导菜单
- 运行以下命令重新加载引导菜单:
sudo update-grub
四、方案概述-以及具体实施步骤
-
准备阶段(在线环境):在一台与目标服务器相同架构(ARM64)和相似版本的、可访问互联网的 Ubuntu 机器上,下载所需的内核离线包及其所有依赖。
-
传输阶段:将下载好的离线包文件传输到离线的目标服务器上。
-
安装阶段(离线环境):在目标服务器上安装内核包。
-
验证与收尾阶段:配置启动项,验证新内核,并清理旧内核(可选)。
详细步骤
阶段一:准备离线包(在线机器上操作)
假设您希望升级到最新的 HWE(Hardware Enablement) 内核,这对于LTS版本来说可以获得更新的硬件支持。
-
更新软件包列表:
sudo apt update -
安装下载依赖的工具:
sudo apt install downloadonly或者使用更通用的
apt-get方法:sudo apt install apt-utils -
创建下载目录:
mkdir ~/kernel-offline-packages cd ~/kernel-offline-packages -
下载特定内核版本(推荐方法):
首先,检查可用的内核镜像包版本,选择您需要的版本(如linux-image-generic-hwe-22.04)。sudo apt-cache search linux-image-generic-hwe然后下载该内核包及其所有依赖到当前目录。将
<package-name>替换为您找到的确切包名,例如linux-image-5.15.0-91-generic-hwe-22.04。sudo apt download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends <package-name> | grep "^\w" | sort -u)例如:
sudo apt download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends linux-image-5.15.0-91-generic-hwe-22.04 | grep "^\w" | sort -u)或者,下载元包(更简单,但可能包更大):
如果您想安装当前可用的最新 HWE 内核,可以直接下载元包及其依赖。sudo apt download linux-image-generic-hwe-22.04 linux-headers-generic-hwe-22.04 --download-only然后使用
dpkg -i *.deb安装所有下载的包。 -
验证下载:
ls -la ~/kernel-offline-packages/*.deb您应该看到一堆
.deb文件,主要包括linux-image-*、linux-headers-*、linux-modules-*等。
阶段二:传输离线包
将 ~/kernel-offline-packages/ 目录下的所有 .deb 文件打包,并通过U盘、内网SCP、SFTP等方式传输到目标服务器的某个目录,例如 /tmp/kernel-packages/。
# 在在线机器上打包
tar -czvf kernel-packages.tar.gz -C ~/kernel-offline-packages/ .
# 在目标服务器上解压(假设包已传到 /tmp)
mkdir /tmp/kernel-packages
tar -xzvf /path/to/kernel-packages.tar.gz -C /tmp/kernel-packages
阶段三:安装内核(目标离线服务器上操作)
-
切换到包所在目录:
cd /tmp/kernel-packages -
安装所有下载的 deb 包:
sudo dpkg -i *.debdpkg -i可能会报告一些依赖问题,但由于您已经下载了所有依赖包,通常可以忽略或通过强制选项解决(但建议先检查)。如果遇到依赖错误,可以运行:sudo apt-get install -f但请注意,在离线环境中,
apt-get install -f可能无法从网络获取缺失的包,这就是为什么之前要确保下载了所有依赖。 -
确保 initramfs 已更新:
安装过程通常会自动触发update-initramfs,但为了保险,可以手动执行:sudo update-initramfs -c -k $(uname -r)注意:
$(uname -r)在这里会输出当前运行中的内核版本,不是新安装的。这一步主要是为了确保当前内核的initramfs是最新的。新内核的initramfs在安装linux-image-*包时应该已经创建好了。
阶段四:验证与收尾
-
更新引导程序(GRUB):
这是最关键的一步,确保新内核出现在启动菜单中。sudo update-grub对于UEFI系统,这条命令会更新
/boot/efi/下的配置;对于传统BIOS系统,会更新/boot/grub/下的配置。 -
检查GRUB菜单项:
grep -A100 "menuentry '" /boot/grub/grub.cfg查看输出,确认新安装的内核版本已经存在。
-
重启系统:
sudo reboot -
验证新内核:
系统重启后,登录并检查当前运行的内核版本:uname -r如果输出显示的是您刚安装的新版本号,说明升级成功!
-
(可选)清理旧内核:
强烈建议在确认新内核稳定运行几天后再进行清理。 保留旧内核可以在新内核出现启动问题时从GRUB菜单选择旧内核启动。-
查看系统中已安装的所有内核镜像:
dpkg --list | grep linux-image -
删除特定的旧内核包(确保不要删除当前正在运行的内核):
sudo apt purge linux-image-5.4.0-100-generic # 将版本号替换为你想删除的旧内核版本 -
再次运行
sudo update-grub将其从启动菜单中移除。
-
故障排除与回滚
-
启动失败或新内核有问题:
-
重启服务器。
-
在启动时(通常是屏幕出现制造商Logo时),长按
Shift键(对于某些ARM服务器,可能是ESC或其他特定键,请查阅硬件文档)以调出 GRUB 引导菜单。 -
在“Advanced options for Ubuntu”菜单中,选择之前版本的旧内核启动。
-
启动进入系统后,检查日志(
/var/log/kern.log,dmesg)排查新内核的问题。您可以重新安装旧版本内核包,或者使用apt purge卸载有问题的新内核。
-
-
dpkg -i报依赖错误:
这通常意味着在准备离线包时漏掉了一些依赖。回到在线机器上,根据错误信息提示的缺失包名,使用apt download <package-name>补充下载,然后重新传输和安装。
本文来自博客园,作者:xiaoming zhang,转载请注明原文链接:https://www.cnblogs.com/xmzhang

浙公网安备 33010602011771号