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 替换方法

  1. 备份原始源文件:

    cp /etc/apt/sources.list /etc/apt/sources.list.bak
  2. 修改源文件内容:

    sudo vim /etc/apt/sources.list
  3. 将以下内容复制到源文件中:

    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 更新源列表

  1. 运行以下命令更新源列表:
    
    sudo apt update

2. 优化网络配置

为了提高下载速度,我们可以优化网络配置。以下以调整TCP窗口大小为例:

2.1 修改网络配置文件

  1. 创建或修改文件 /etc/sysctl.conf

    sudo vim /etc/sysctl.conf
  2. 在文件末尾添加以下内容:

    net.ipv4.tcp_window_scaling = 1
    net.ipv4.tcp_sack = 1
    net.ipv4.tcp_timestamps = 1

2.2 加载网络配置

  1. 运行以下命令加载网络配置:
    
    sudo sysctl -p

3. 选择合适的内核

根据系统需求,选择合适的内核可以优化性能和功耗。以下以Cortex-A系列为例:

3.1 安装内核

  1. 运行以下命令安装内核:
    
    sudo apt install linux-image-5.4.0-42-generic

3.2 修改引导菜单

  1. 编辑引导菜单配置文件 /etc/grub.d/10_linux

    sudo vim /etc/grub.d/10_linux
  2. 将 linux 选项修改为对应的内核版本:

    linux /boot/vmlinuz-5.4.0-42-generic root=/dev/mapper/rootfs ro

3.3 重新加载引导菜单

  1. 运行以下命令重新加载引导菜单:
    
    sudo update-grub

 

四、方案概述-以及具体实施步骤

  1. 准备阶段(在线环境):在一台与目标服务器相同架构(ARM64)和相似版本的、可访问互联网的 Ubuntu 机器上,下载所需的内核离线包及其所有依赖。

  2. 传输阶段:将下载好的离线包文件传输到离线的目标服务器上。

  3. 安装阶段(离线环境):在目标服务器上安装内核包。

  4. 验证与收尾阶段:配置启动项,验证新内核,并清理旧内核(可选)。


详细步骤

阶段一:准备离线包(在线机器上操作)

假设您希望升级到最新的 HWE(Hardware Enablement) 内核,这对于LTS版本来说可以获得更新的硬件支持。

  1. 更新软件包列表

    bash
    sudo apt update
  2. 安装下载依赖的工具

    bash
    sudo apt install downloadonly

    或者使用更通用的 apt-get 方法:

    bash
    sudo apt install apt-utils
  3. 创建下载目录

    bash
    mkdir ~/kernel-offline-packages
    cd ~/kernel-offline-packages
  4. 下载特定内核版本推荐方法):
    首先,检查可用的内核镜像包版本,选择您需要的版本(如 linux-image-generic-hwe-22.04)。

    bash
    sudo apt-cache search linux-image-generic-hwe

    然后下载该内核包及其所有依赖到当前目录。将 <package-name> 替换为您找到的确切包名,例如 linux-image-5.15.0-91-generic-hwe-22.04

    bash
    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)

    例如:

    bash
    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 内核,可以直接下载元包及其依赖。

    bash
    sudo apt download linux-image-generic-hwe-22.04 linux-headers-generic-hwe-22.04 --download-only

    然后使用 dpkg -i *.deb 安装所有下载的包。

  5. 验证下载

    bash
    ls -la ~/kernel-offline-packages/*.deb

    您应该看到一堆 .deb 文件,主要包括 linux-image-*linux-headers-*linux-modules-* 等。

阶段二:传输离线包

将 ~/kernel-offline-packages/ 目录下的所有 .deb 文件打包,并通过U盘、内网SCP、SFTP等方式传输到目标服务器的某个目录,例如 /tmp/kernel-packages/

bash
# 在在线机器上打包
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

阶段三:安装内核(目标离线服务器上操作)

  1. 切换到包所在目录

    bash
    cd /tmp/kernel-packages
  2. 安装所有下载的 deb 包

    bash
    sudo dpkg -i *.deb

    dpkg -i 可能会报告一些依赖问题,但由于您已经下载了所有依赖包,通常可以忽略或通过强制选项解决(但建议先检查)。如果遇到依赖错误,可以运行:

    bash
    sudo apt-get install -f

    但请注意,在离线环境中,apt-get install -f 可能无法从网络获取缺失的包,这就是为什么之前要确保下载了所有依赖。

  3. 确保 initramfs 已更新
    安装过程通常会自动触发 update-initramfs,但为了保险,可以手动执行:

    bash
    sudo update-initramfs -c -k $(uname -r)

    注意:$(uname -r) 在这里会输出当前运行中的内核版本,不是新安装的。这一步主要是为了确保当前内核的initramfs是最新的。新内核的initramfs在安装linux-image-*包时应该已经创建好了。

阶段四:验证与收尾

  1. 更新引导程序(GRUB)
    这是最关键的一步,确保新内核出现在启动菜单中。

    bash
    sudo update-grub

    对于UEFI系统,这条命令会更新 /boot/efi/ 下的配置;对于传统BIOS系统,会更新 /boot/grub/ 下的配置。

  2. 检查GRUB菜单项

    bash
    grep -A100 "menuentry '" /boot/grub/grub.cfg

    查看输出,确认新安装的内核版本已经存在。

  3. 重启系统

    bash
    sudo reboot
  4. 验证新内核
    系统重启后,登录并检查当前运行的内核版本:

    bash
    uname -r

    如果输出显示的是您刚安装的新版本号,说明升级成功!

  5. (可选)清理旧内核
    强烈建议在确认新内核稳定运行几天后再进行清理。 保留旧内核可以在新内核出现启动问题时从GRUB菜单选择旧内核启动。

    • 查看系统中已安装的所有内核镜像:

      bash
      dpkg --list | grep linux-image
    • 删除特定的旧内核包(确保不要删除当前正在运行的内核):

      bash
      sudo apt purge linux-image-5.4.0-100-generic # 将版本号替换为你想删除的旧内核版本
    • 再次运行 sudo update-grub 将其从启动菜单中移除。


故障排除与回滚

  • 启动失败或新内核有问题

    1. 重启服务器。

    2. 在启动时(通常是屏幕出现制造商Logo时),长按 Shift 键(对于某些ARM服务器,可能是 ESC 或其他特定键,请查阅硬件文档)以调出 GRUB 引导菜单。

    3. 在“Advanced options for Ubuntu”菜单中,选择之前版本的旧内核启动。

    4. 启动进入系统后,检查日志(/var/log/kern.log, dmesg)排查新内核的问题。您可以重新安装旧版本内核包,或者使用 apt purge 卸载有问题的新内核。

  • dpkg -i 报依赖错误
    这通常意味着在准备离线包时漏掉了一些依赖。回到在线机器上,根据错误信息提示的缺失包名,使用 apt download <package-name> 补充下载,然后重新传输和安装。

posted @ 2025-09-19 11:30  小明123_123  阅读(108)  评论(0)    收藏  举报