跟琪露诺一起配置ubuntu开发环境

跟琪露诺一起配置ubuntu的开发环境

有任何问题可以联系作者hcgzfs@163.com

很多同学第一次在ubuntu系统安装显卡驱动的时候总会碰到各种问题:循环重启、开机黑屏,最后只能重装系统。因此,我写了这个连琪露诺都能看懂的教程,在讲解安装显卡驱动的同时,我会顺便把别的难安装的东西也给大家讲解一下,顺便讲一些有用的知识,随手给个收藏吧。

显卡驱动

卸载

首先我们要卸载旧的驱动,清理干净的标志是,输入以下代码

sudo dpkg --list | grep nvidia-*

没有任何输出

一般来说我们可以用这些命令来卸载

sudo /usr/bin/nvidia-uninstall
sudo apt-get --purge remove nvidia-\*  # 有的不需要加-\
sudo apt-get purge nvidia-\*   # 有的不需要加-\
sudo apt-get purge libnvidia-\*  # 有的不需要加-\

如果还有输出的话,就直接用

sudo apt-get --purge remove

把输出的那些东西删掉就行了。

禁用集显

一般来说,ubuntu在安装的时候会安装集显的驱动,但有可能会与独显的驱动冲突,因此我们把集显驱动禁用了。

打开配置文件

sudo gedit /etc/modprobe.d/blacklist.conf

在最后一行增加,并重启电脑。

blacklist nouveau
options nouveau modeset=0 #禁用nouveau第三方驱动

如果输入

lsmod | grep nouveau

没有输出的话,证明禁用成功。

安装显卡驱动

一般来说,安装显卡驱动有四种方法,二进制安装,编译安装,附加驱动安装和ppa安装,后两种方法我并不建议,所以这里只讲前两种。

二进制安装

首先查看一下自己需要安装哪个版本的驱动,这与你的系统版本与显卡型号密切相关,而后面要装的cuda等对显卡驱动的版本并不敏感。

使用

ubuntu-drivers devices

查看推荐的版本,我这里输出的是
在这里插入图片描述
可以看到我这里推荐 版本是525,因此一个简单的方法是直接

sudo apt-get install nvidia-driver-525

然后重启电脑,输入

nvidia-smi

有输出说明你成功了,恭喜你。
但是你可能会遇到循环登录或者直接卡死的情况,这种情况下你可以选择进入文本模式,方法是Ctrl+Alt+F1~F7,登录后卸载显卡驱动,使用编译安装来解决问题吧。

编译安装

首先下载驱动文件链接: 显卡驱动下载地址
在里面找到你需要的版本,不知道的要安装哪个版本的看上一节,具体哪个子版本看你自己的心情任选吧,你需要下载.run文件,可别下载错了,比如我下载的是NVIDIA-Linux-x86_64-525.78.01.run。

然后给下载的文件添加可执行权限

sudo chmod a+x NVIDIA-Linux-x86_64-525.78.01.run

进入文本模式,方法是Ctrl+Alt+F1~F7

sudo ./NVIDIA-Linux-x86_64-525.78.01.run

进行安装。
问你是否继续安装 选择comtimue installation
问你DKMS 选择YES
问你X Configuration 选择No
问你opengl 选择Yes 很多同学跟着一些教程在这里选No,这样的后果是你使用RVIZ这些东西的时候不会使用显卡进行加速,因此当你显示大规模点云的时候会非常非常卡,所以一定要选No。如果遇到循环重启直接卸载显卡驱动重装就行

然后重启电脑,之后输入nvidia-smi看是否有输出,并且去设置/详细信息/About里面看你的图形硬件是不是英伟达显卡

在这里插入图片描述

在这里插入图片描述

注意

某些教程会让你装gdm3或者lightdm。这两者都是显示管理器,直观的区别就是gdm3的登陆窗口在显示器正中间,而lightdm登录窗口在偏左边,正常使用没有区别。需要注意的是,如果你有控制多屏显示的需要,gdm3可能更适合你,使用lightdm设置多屏,可能会出现卡屏,死机,无法动弹情况。而且ubuntu自带gdm3,因此你根本没必要去装lightdm.

禁用内核更新

为了防止内核自动更新后显卡驱动失效,请禁用内核自动更新

sudo apt-mark hold linux-image-generic linux-headers-generic

安装CUDA

对于搞深度学习的同学来说,CUDA是必要的,因此在这里我一并说明安装方式。
首先我要说明的是,smi中的cuda版本是cuda的driver api版本,而我们安装的cuda一般是指cudatoolkit的版本,大家有时在安装pytorch的时候会发现,安装命令里面依旧有安装cudatoolkit的内容了,因此不装cuda运行gpu版本的pytorch也是可以的,但c++显卡编程以及tensorflow一般是依赖本机的cudatoolkit,因此这一步还是必要的。
首先,cudatoolkit的版本不能高于cuda的driver api版本即smi中的cuda版本,而且一般新版本会向下兼容,所以我建议读者尽量安装旧一点的版本,我的smi中cuda是12.0,综合考虑我打算安装11.3.0,下载地址在这里cuda地址
下载完成后

sudo sh cuda_11.3.0_465.19.01_linux.run

accept后如下选择

在这里插入图片描述

在.bashrc文件中加入

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.3/lib64
export PATH=$PATH:/usr/local/cuda-11.3/bin
export CUDA_HOME=/usr/local/cuda-11.3

并且

source ~/.bashrc

以后卸载可以 run cuda-uninstaller in /usr/local/cuda-11.3/bin

验证安装成功

cd /usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

在这里插入图片描述
如图pass之后说明安装成功了

安装cudnn

cudnn是专为深度学习设计的显卡加速库,nn就是nurel networks的缩写吧。
下载地址在这里,自己注册一个账号就行。
嫌麻烦的话直接下deb安装包安装,当然也可以下tar然后用以下命令安装,说是安装,其实就是复制一下已经编译好的二进制库,

sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include 
sudo cp cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64 
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

验证安装成功

执行命令

sudo cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

在这里插入图片描述

实时内核安装显卡驱动

很多机械臂的控制频率是1000Hz,普通的ubuntu系统的控制频率远远跟不上,必须安装实时内核补丁才可以正常控制真实机械臂,安装实时内核补丁就不再赘述了,这里主要讲如何在实时内核里面安装显卡驱动。首先,确保你非实时内核里面的显卡驱动已经使用上文的方法安装成功(最好是编译安装)。
然后用下面这个脚本安装

#!/bin/bash

BUILD_BASE=`pwd`
NV_FILE="NVIDIA-Linux-x86_64-xxx.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."

然后添加可执行权限

chmod +x ./install_nvidia.sh

运行脚本:

sudo ./install_nvidia.sh

安装Anaconda

anaconda官网下载.sh文件,直接下载最新版就行了,没必要可以去下载旧版。

bash ${name of file}.sh

跟着指示一路确认就行了,最后出现下图说明安装成功
在这里插入图片描述
这是再打开终端,会发现前面多了一个(base),并且输入python后出现的不是ubuntu自带的python版本,如下图说明安装成功。
在这里插入图片描述
最后,考虑到ros依赖的python版本是python2,会跟这里的python3冲突,因此读者可以在.bashrc中加一行

conda deactivate

这样就默认用系统自带的python2运行了,想进conda就

conda activate

常用conda命令

下面给出一些常用的conda命令
创建环境

conda create -n environment_name

创建指定python版本下包含某些包的环境

conda create -n environment_name python=3.7 numpy scipy

进入环境

conda activate environment_name

退出环境

conda deactivate

删除环境

conda remove -n yourname --all

列出环境

conda env list

复制环境

conda create --name new_env_name --clone old_env_name

指定目录下生成环境yml文件

conda env export > 目录/environment.yml

从yml文件创建环境

conda env create -n env_name -f environment.yml

安装包

conda instal package_name

查看当前环境包列表

conda list

查看指定环境包列表

conda list -n environment_name

查看conda源中包的信息

conda search package_name

更新包

conda update package_name

删除包

conda remove package_name

清理无用的安装包

conda clean -p

清理tar包

conda clean -t

清理所有安装包及cache

conda clean -y --all

更新anaconda

conda update annaconda

一个用anaconda创建环境的示例

conda activate
conda create -n start python=3.7
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge

这里安装了一个名为start的虚拟环境,并且安装了pytorch=1.8.0

安装pycharm与clion

Pycharm与Clion是相同的安装方法,我就只讲pycharm了
去{官网}(https://www.jetbrains.com/pycharm/download/other.html)下载pycharm,下最新的专业版就行,用学校的邮箱注册一个账号就可以啦,因为网上的盗版插件更新都很慢,只能用在旧版上,所以还是直接用正版的比较方便。
下载完之后直接解压即可,进入pycharm/bin文件夹,输入

./pycharm.sh 

即可运行。
然后登录你的账号,去 设置/插件 里面下载一个中文插件,然后重启pycharm就可以用中文版了。
现在每次命令行启动太麻烦,我们直接点击 工具/创建桌面条目 就有pycharm图标了

当然Clion也同理,这里不再赘述

接下来用这段代码验证一下吧

# 验证gpu版本pytorch是否安装成功
import torch
print(torch.cuda.is_available())
# 验证能否使用gpu
print(torch.cuda.device_count())
# 查看gpu名称
print(torch.cuda.get_device_name(0))

中文输入框无法跟随

中文输入框无法跟随是因为jet开发ide前端用的java版本太过老旧导致的,我们可以通过编译一个高版本的java来解决这个问题。我这里已经编译好了一个jdk,下载 密码: hgcb 大家自取。直接解压,然后在pycharm.sh 中加一句话
在这里插入图片描述

再./pycharm.sh 运行发现报错,这是因为ubuntu的Glibc版本太低,我们直接编译安装一个高版本的即可
查看当前glibc版本,发现版本确实过低

ldd --version

下载glibc-2.29到指定目录,这里的所有命令都要sudo权限,不在赘述

cd /usr/local
wget http://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz

解压并创建相应文件夹:

tar -zxf glibc-2.29.tar.gz
cd glibc-2.29
mkdir build
cd build/
sudo apt-get install gawk bison -y
../configure --prefix=/usr/local --disable-sanity-checks
(一般如果系统没有提示GNU的问题的话,直接运行这个就可以 ../configure --prefix=/usr/local,如果有提示GNU问题,
会弹出提示是否在命令中加入--disable-sanity-checks参数。)

安装:

make -j18
make install

软链接建立:

cp /usr/local/lib/libm-2.29.so /lib/x86_64-linux-gnu/
cd /lib/x86_64-linux-gnu
sudo ln -sf libm-2.29.so libm.so.6

如果关机重启之后发现pycharm又不能打开了,直接

cd /lib/x86_64-linux-gnu
sudo ln -sf libm-2.29.so libm.so.6

Clion同理

安装pcl1.12与vtk8.2

编者极度建议读者先安装,因为安装pycharm时修改了ubuntu系统的glibc版本,会让这一部分的编译安装不通过
首先需要指出的是,我们编程都是写的高级程序语言,而机器最高只能识别汇编,所以编译器会将我们的代码转换成机器能懂的代码。python是解释型语言,你点击运行的时候开始编译,编译完成才运行,这意味着你每一次运行都需要编译。c++就不同了,你可以将c++源码编译成可执行文件(windows中一般是.exe文件),然后./+${文件名}来运行,而clion和vs这些只不过不显式地体现这一过程。综上,python免去了编译的过程,因此运行过程及其依赖python解释器,而c++需要你写cmakelists来说明编译逻辑。这两种方法各有优劣,网上的各种争论甚嚣尘上,这里就不深入探讨了。

本节的重点在c++,所以我会尽量将所有过程涉及的源码与cmakelists全部放出来以供读者学习。

下载pcl1.12与vtk8.2,我还是用百度网盘共享。安装opencv4.5的操作与这两个的很类似,所以我就不单独写了,再写下去琪露诺要累死了。opencv密码: ggj9 pcl 密码: usv9 vtk 密码: 3fvq

由于pcl依赖vtk,opencv也依赖vtk,所以必须先安装vtk8.2将所有东西解压。
安装cmake-gui

sudo apt-get install cmake-gui

在解压后的vtk文件夹中

mkdir build
cd build
cmake-gui

如图设置
在这里插入图片描述

点击configure
再点击generate
关闭窗口

make -j18
sudo make install

pcl的安装方式跟这个是一样的,重点在cmake-gui中如何选择编译选项 大家可以选择的有GPU CUDA VTK等等选项,按需选取即可
这里可能出现缺vtk包,那是因为你在编译vtk的时候有些包没有选上,你重新选上那些包编译就行,记得勾选advanced,否则显示不全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值