ToB企服应用市场:ToB评测及商务社交产业平台

标题: Ubuntu20.04安装实时内核补丁及配置实时内核显卡驱动 [打印本页]

作者: 石小疯    时间: 2024-12-9 06:22
标题: 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、设置开机启动项菜单

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

注意:此过程不需要禁用集成显卡一旦禁用大概会导致系统重启失败 
  1. ubuntu-drivers devices
复制代码
当前内核下保举驱动版本

电脑的保举版本是第一个,安装保举版本驱动
  1. sudo apt-get install nvidia-driver-535
复制代码
等待安装完成后,重新启动电脑查看驱动是否安装成功
  1. nvidia-smi
复制代码

我这里安装的是版本是515 
3、下载驱动对应的.run文件及建立install_nvidia.sh文件

 上小节的驱动版本为515.105.01,所以需要下载相应的.run文件NVIDIA-Linux-x86_64-515.105.01.run,各人可以查看各自对应的驱动版本,下载的地址为nvidia显卡驱动下载地址,下载第一个,下载完成放置在家目录~即可

在家目录~下创建install_nvidia.sh文件
  1. touch install_nvidia.sh
复制代码
将下面脚本代码拷贝到install_nvidia.sh中,并按照提示修改变量“NV_FILE”,完成后保存即可。
  1. #!/bin/bash
  2. BUILD_BASE=`pwd`
  3. NV_FILE="NVIDIA-Linux-x86_64-515.105.01.run"  # 这里改成大家自己下载的.run文件名(上面安装过的)
  4. #NV_URL="https://us.download.nvidia.cn/XFree86/Linux-x86_64/430.50/${NV_FILE}"  # 之前已经下好了显卡驱动.run文件,就不用从网上下载了,直接注释掉,而且如果要下载的话,则慢
  5. NEED_TO_COMPILE_NV_KO=1
  6. function clean_env() {
  7.     [ -d ./${NV_DIR} ] && rm -rf ./${NV_DIR}
  8. }
  9. function check_env() {
  10.    
  11.     # check if in rt kernel
  12.     uname -r | grep rt 1>/dev/null 2>&1
  13.     if [ $? -ne 0 ]
  14.     then
  15.         echo "Not in rt kernel, Please install apollo kernel and reboot machine first."
  16.         exit 2
  17.     fi
  18.     # check if nv ko already in kernel
  19.     if [ ! -f /lib/modules/`uname -r`/kernel/drivers/video/nvidia.ko ]
  20.     then
  21.         export NEED_TO_COMPILE_NV_KO=1
  22.     fi
  23. }
  24. function prepare_nv() {
  25.     ## download nv install file from nvidia home page
  26.     #if [ ! -f ./${NV_FILE} ]
  27.     #then
  28.     #   echo "Downloading ${NV_FILE} from nvidia website..."
  29.     #    wget ${NV_URL} -O ${NV_FILE}
  30.     #    if [ $? -ne 0 ]
  31.     #    then
  32.     #        echo "Downloading ${NV_FILE} failed, please check your network connection!"
  33.     #        rm -rf ./${NV_FILE}
  34.     #        exit 1
  35.     #    fi
  36.     #fi
  37.     ###########上面是下载驱动的代码,我们已经提前下载好了,就不需要这段代码了,直接注释掉############
  38.     # +x
  39.     chmod +x ./${NV_FILE}
  40.     echo "Extracting nvidia install run file..."
  41.     ./${NV_FILE} -x 1>/dev/null 2>&1
  42.     NV_DIR="`echo ${NV_FILE} | awk -F '.run' '{print $1}'`"
  43.     NV_VERSION="`echo ${NV_FILE} | awk -F '-' '{print $4}' | awk -F '.run' '{print $1}'`"
  44.     export NV_DIR
  45.     export NV_VERSION
  46.     export NVIDIA_SOURCE="${NV_DIR}/kernel"
  47. }
  48. function install_lib() {
  49.    
  50.     NV_LIB_OUTPUT_PATH="/usr/lib/x86_64-linux-gnu/"
  51.     NV_BIN_OUTPUT_PATH="/usr/bin/"
  52.     [ -f ./${NV_DIR}/libnvidia-ml.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libnvidia-ml.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
  53.     [ -f ./${NV_DIR}/libnvidia-fatbinaryloader.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libnvidia-fatbinaryloader.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
  54.     [ -f ./${NV_DIR}/libnvidia-ptxjitcompiler.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libnvidia-ptxjitcompiler.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
  55.     [ -f ./${NV_DIR}/libcuda.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libcuda.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
  56.     [ -f ./${NV_DIR}/nvidia-modprobe ] && /bin/cp -f ./${NV_DIR}/nvidia-modprobe ${NV_BIN_OUTPUT_PATH}
  57.     [ -f ./${NV_DIR}/nvidia-smi ] && /bin/cp -f ./${NV_DIR}/nvidia-smi ${NV_BIN_OUTPUT_PATH}
  58.     chmod +x /usr/bin/nvidia*
  59.     chmod +s /usr/bin/nvidia-modprobe
  60.     # link for nvidia
  61.     /bin/rm -rf /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1  /usr/lib/x86_64-linux-gnu/libnvidia-ml.so
  62.     /bin/ln -s /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.${NV_VERSION} /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1
  63.     /bin/ln -s /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so
  64.     /bin/rm -rf /usr/lib/x86_64-linux-gnu/libcuda.so  /usr/lib/x86_64-linux-gnu/libcuda.so.1
  65.     /bin/ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.${NV_VERSION} /usr/lib/x86_64-linux-gnu/libcuda.so.1
  66.     /bin/ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.1 /usr/lib/x86_64-linux-gnu/libcuda.so
  67.     # take effect
  68.     /sbin/ldconfig 1>/dev/null 2>&1
  69. }
  70. function build_nv() {
  71.     if [ ${NEED_TO_COMPILE_NV_KO} == 0 ]
  72.     then
  73.         return
  74.     fi
  75.     NVIDIA_MOD_REL_PATH='kernel/drivers/video'
  76.     NVIDIA_OUTPUT_PATH="/lib/modules/`uname -r`/${NVIDIA_MOD_REL_PATH}"
  77.     CPUNUM=`cat /proc/cpuinfo | grep processor | wc | awk -F " " '{print $1}'`
  78.     export IGNORE_PREEMPT_RT_PRESENCE=true
  79.     cd ${NVIDIA_SOURCE} && make -j ${CPUNUM} module
  80.     cd ${BUILD_BASE}
  81.     unset IGNORE_PREEMPT_RT_PRESENCE
  82.     mkdir -p ${NVIDIA_OUTPUT_PATH}
  83.     [ -f ${NVIDIA_SOURCE}/nvidia.ko ] && cp ${NVIDIA_SOURCE}/nvidia.ko ${NVIDIA_OUTPUT_PATH}
  84.     [ -f ${NVIDIA_SOURCE}/nvidia-modeset.ko ] && cp ${NVIDIA_SOURCE}/nvidia-modeset.ko ${NVIDIA_OUTPUT_PATH}
  85.     [ -f ${NVIDIA_SOURCE}/nvidia-drm.ko ] && cp ${NVIDIA_SOURCE}/nvidia-drm.ko ${NVIDIA_OUTPUT_PATH}
  86.     [ -f ${NVIDIA_SOURCE}/nvidia-uvm.ko ] && cp ${NVIDIA_SOURCE}/nvidia-uvm.ko ${NVIDIA_OUTPUT_PATH}
  87.     depmod -a
  88. }
  89. # check environment
  90. check_env
  91. # prepare for nvidia
  92. prepare_nv
  93. # build nvidia.ko
  94. build_nv
  95. # install user lib
  96. install_lib
  97. # clean environment
  98. clean_env
  99. echo "Done to install nvidia kernel driver and user libraries."
复制代码
 4、构建文件夹+下载安装包

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

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

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

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

  1. make olddefconfig
复制代码
 9、按照实时内核的配置修改配置文件

  1. 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、打开并编辑文档进一步编辑

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

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

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

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

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

假如非实时内核版本不是5.15.0-76-generic,可以通过如下命令安装非实时内核
  1. 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
复制代码
并将新内核加入到启动项 
  1. sudo update-grub
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4