石小疯 发表于 2024-12-9 06:22:15

Ubuntu20.04安装实时内核补丁及配置实时内核显卡驱动

系统:Ubuntu20.04
当前非实时内核版本:5.15.0-76-generic
查看当前内核版本命令:uname -r

目录
1、设置开机启动项菜单
2、安装实时内核前先在非实时内核下进行二进制安装保举版本显卡驱动
3、下载驱动对应的.run文件及建立install_nvidia.sh文件
 4、构建文件夹+下载安装包
 5、安装必要的依赖项
 6、解压安装包和补丁
 7、提取源代码并应用补丁
 8、使用当前核的配置作为实时核的默认配置
 9、按照实时内核的配置修改配置文件
10、打开并编辑文档进一步编辑
 11、开始编译内核
12、安装内核
 13、实时内核安装显卡驱动
14、卸载实时内核(在非实时内核中)
 15、安装非实时内核

1、设置开机启动项菜单

sudo gedit /etc/default/grub  假如打不开设置界面可以ctrl+c,然后再次打开即可。打开后将下面2个变量修改为合适的值方便下次启动电脑进入内核选项菜单(防止实时内核损坏而进不去界面,假如实在进不去tty界面可以ctrl+alt+f4,否则就得重装系统)
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5 2、安装实时内核前先在非实时内核下进行二进制安装保举版本显卡驱动

注意:此过程不需要禁用集成显卡一旦禁用大概会导致系统重启失败 
ubuntu-drivers devices 当前内核下保举驱动版本
https://i-blog.csdnimg.cn/direct/73dd2e11a25742a8a402738e1f6c17ef.jpeg
电脑的保举版本是第一个,安装保举版本驱动
sudo apt-get install nvidia-driver-535 等待安装完成后,重新启动电脑查看驱动是否安装成功
nvidia-smi https://i-blog.csdnimg.cn/direct/7dd6ae9cb69548afb91f605c08634b5a.jpeg
我这里安装的是版本是515 
3、下载驱动对应的.run文件及建立install_nvidia.sh文件

 上小节的驱动版本为515.105.01,所以需要下载相应的.run文件NVIDIA-Linux-x86_64-515.105.01.run,各人可以查看各自对应的驱动版本,下载的地址为nvidia显卡驱动下载地址,下载第一个,下载完成放置在家目录~即可
https://i-blog.csdnimg.cn/direct/6454a25b621f4100be40d9faedd03f2c.jpeg
在家目录~下创建install_nvidia.sh文件
touch install_nvidia.sh 将下面脚本代码拷贝到install_nvidia.sh中,并按照提示修改变量“NV_FILE”,完成后保存即可。
#!/bin/bash

BUILD_BASE=`pwd`
NV_FILE="NVIDIA-Linux-x86_64-515.105.01.run"# 这里改成大家自己下载的.run文件名(上面安装过的)
#NV_URL="https://us.download.nvidia.cn/XFree86/Linux-x86_64/430.50/${NV_FILE}"# 之前已经下好了显卡驱动.run文件,就不用从网上下载了,直接注释掉,而且如果要下载的话,则慢
NEED_TO_COMPILE_NV_KO=1

function clean_env() {

    [ -d ./${NV_DIR} ] && rm -rf ./${NV_DIR}
}

function check_env() {
   
    # check if in rt kernel
    uname -r | grep rt 1>/dev/null 2>&1
    if [ $? -ne 0 ]
    then
      echo "Not in rt kernel, Please install apollo kernel and reboot machine first."
      exit 2
    fi

    # check if nv ko already in kernel
    if [ ! -f /lib/modules/`uname -r`/kernel/drivers/video/nvidia.ko ]
    then
      export NEED_TO_COMPILE_NV_KO=1
    fi
}

function prepare_nv() {

    ## download nv install file from nvidia home page
    #if [ ! -f ./${NV_FILE} ]
    #then
    #   echo "Downloading ${NV_FILE} from nvidia website..."
    #    wget ${NV_URL} -O ${NV_FILE}
    #    if [ $? -ne 0 ]
    #    then
    #      echo "Downloading ${NV_FILE} failed, please check your network connection!"
    #      rm -rf ./${NV_FILE}
    #      exit 1
    #    fi
    #fi
    ###########上面是下载驱动的代码,我们已经提前下载好了,就不需要这段代码了,直接注释掉############

    # +x
    chmod +x ./${NV_FILE}
    echo "Extracting nvidia install run file..."
    ./${NV_FILE} -x 1>/dev/null 2>&1
    NV_DIR="`echo ${NV_FILE} | awk -F '.run' '{print $1}'`"
    NV_VERSION="`echo ${NV_FILE} | awk -F '-' '{print $4}' | awk -F '.run' '{print $1}'`"

    export NV_DIR
    export NV_VERSION
    export NVIDIA_SOURCE="${NV_DIR}/kernel"
}

function install_lib() {
   
    NV_LIB_OUTPUT_PATH="/usr/lib/x86_64-linux-gnu/"
    NV_BIN_OUTPUT_PATH="/usr/bin/"

    [ -f ./${NV_DIR}/libnvidia-ml.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libnvidia-ml.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
    [ -f ./${NV_DIR}/libnvidia-fatbinaryloader.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libnvidia-fatbinaryloader.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
    [ -f ./${NV_DIR}/libnvidia-ptxjitcompiler.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libnvidia-ptxjitcompiler.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
    [ -f ./${NV_DIR}/libcuda.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libcuda.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
    [ -f ./${NV_DIR}/nvidia-modprobe ] && /bin/cp -f ./${NV_DIR}/nvidia-modprobe ${NV_BIN_OUTPUT_PATH}
    [ -f ./${NV_DIR}/nvidia-smi ] && /bin/cp -f ./${NV_DIR}/nvidia-smi ${NV_BIN_OUTPUT_PATH}

    chmod +x /usr/bin/nvidia*
    chmod +s /usr/bin/nvidia-modprobe

    # link for nvidia
    /bin/rm -rf /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1/usr/lib/x86_64-linux-gnu/libnvidia-ml.so
    /bin/ln -s /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.${NV_VERSION} /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1
    /bin/ln -s /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so

    /bin/rm -rf /usr/lib/x86_64-linux-gnu/libcuda.so/usr/lib/x86_64-linux-gnu/libcuda.so.1
    /bin/ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.${NV_VERSION} /usr/lib/x86_64-linux-gnu/libcuda.so.1
    /bin/ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.1 /usr/lib/x86_64-linux-gnu/libcuda.so

    # take effect
    /sbin/ldconfig 1>/dev/null 2>&1
}

function build_nv() {

    if [ ${NEED_TO_COMPILE_NV_KO} == 0 ]
    then
      return
    fi

    NVIDIA_MOD_REL_PATH='kernel/drivers/video'
    NVIDIA_OUTPUT_PATH="/lib/modules/`uname -r`/${NVIDIA_MOD_REL_PATH}"
    CPUNUM=`cat /proc/cpuinfo | grep processor | wc | awk -F " " '{print $1}'`

    export IGNORE_PREEMPT_RT_PRESENCE=true
    cd ${NVIDIA_SOURCE} && make -j ${CPUNUM} module
    cd ${BUILD_BASE}

    unset IGNORE_PREEMPT_RT_PRESENCE

    mkdir -p ${NVIDIA_OUTPUT_PATH}

    [ -f ${NVIDIA_SOURCE}/nvidia.ko ] && cp ${NVIDIA_SOURCE}/nvidia.ko ${NVIDIA_OUTPUT_PATH}
    [ -f ${NVIDIA_SOURCE}/nvidia-modeset.ko ] && cp ${NVIDIA_SOURCE}/nvidia-modeset.ko ${NVIDIA_OUTPUT_PATH}
    [ -f ${NVIDIA_SOURCE}/nvidia-drm.ko ] && cp ${NVIDIA_SOURCE}/nvidia-drm.ko ${NVIDIA_OUTPUT_PATH}
    [ -f ${NVIDIA_SOURCE}/nvidia-uvm.ko ] && cp ${NVIDIA_SOURCE}/nvidia-uvm.ko ${NVIDIA_OUTPUT_PATH}

    depmod -a
}

# check environment
check_env

# prepare for nvidia
prepare_nv

# build nvidia.ko
build_nv

# install user lib
install_lib

# clean environment
clean_env

echo "Done to install nvidia kernel driver and user libraries."
 4、构建文件夹+下载安装包

mkdir Franka_env
cd Franka_env
curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.15.119.tar.gz
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.15/older/patch-5.15.119-rt65.patch.gz
 5、安装必要的依赖项

sudo apt-get install build-essential bc curl ca-certificates gnupg2 libssl-dev lsb-release libelf-dev bison flex dwarves zstd libncurses-dev  6、解压安装包和补丁

tar xvzf linux-5.15.119.tar.gz
gunzip patch-5.15.119-rt65.patch.gz  7、提取源代码并应用补丁

cd linux-5.15.119
patch -p1 < ../patch-5.15.119-rt65.patch  8、使用当前核的配置作为实时核的默认配置

make olddefconfig  9、按照实时内核的配置修改配置文件

make menuconfig 这个命令会打开一个终端界面,你可以在其中配置抢占模型。使用箭头键导航到 General Setup > Preemption Model 并选择 Fully Preemptible Kernel (Real-Time) 。
之后导航到 Cryptographic API > Certificates for signature checking (在列表的最底部)> Provide system-wide ring of trusted keys > Additional X.509 keys for default system keyring。从提示符中移除 “debian/canonical-certs.pem”,然后按OK。将此配置保存到 .config 并退出 TUI。其他选项保留默认值。
10、打开并编辑文档进一步编辑

gedit .config  将如下指令
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
CONFIG_DEBUG_INFO_BTF=y 替换成
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
CONFIG_DEBUG_INFO_BTF=n  为了防止编译过程保存log信息占用大量磁盘空间,注释如下部门
# CONFIG_DEBUG_INFO=y  11、开始编译内核

fakeroot make -j40 deb-pkg  -j 后面数字取决于你自身电脑配置,-j数字=终端输入nproc后输出的数字*2。编译需要大量的时间约莫30min,出现选项直接回车
12、安装内核

sudo dpkg -i ../linux-headers-*.deb ../linux-image-*.deb  查看内核是否存在
find /boot/vmli*  将新内核加入到启动项
sudo update-grub 重新启动电脑系统
sudo reboot  13、实时内核安装显卡驱动

注意:需要在实时内核的规复项启动(Ubuntu,with Linux 5.15.119-rt65(recovery mode)),实时内核的一般项通常由于没有安装驱动进不去界面而卡死在电脑自检步调
为install_nvidia.sh添加可实行权限并运行 
cd ~
chmod +x ./install_nvidia.sh
sudo ./install_nvidia.sh 禁用内核更新
sudo apt-mark hold linux-image-generic linux-headers-generic  重启后进入实时内核的一般项,到此实时内核的显卡驱动安装完成;然后再次禁用内核更新(再次运行上面的命令行)即可。后续的步调为安装完成后出现相应题目的补充说明,并非实时内核的安装步调
14、卸载实时内核(在非实时内核中)

为防止安装的实时内核不能用大概出现故障,可以通过如下命令卸载实时内核
sudo apt --purge autoremove linux-headers-5.15.119-rt65 linux-image-5.15.119-rt65
sudo rm -rf /lib/modules/5.15.119-rt65/  15、安装非实时内核

假如非实时内核版本不是5.15.0-76-generic,可以通过如下命令安装非实时内核
sudo apt-get install linux-image-5.15.0-76-generic linux-headers-5.15.0-76-generic linux-modules-5.15.0-76-generic linux-modules-extra-5.15.0-76-generic 并将新内核加入到启动项 
sudo update-grub

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Ubuntu20.04安装实时内核补丁及配置实时内核显卡驱动