2. 开发环境搭建¶
本章的主要目的是搭建驱动章节所需的开发环境。下方为笔者的开发环境示意图。
1 2 3 4 | 编程环境 编译环境 运行环境
PC(i5) SSH 服务器(E5) NFS 鲁班猫板卡
Windows10 ────────── Ubuntu20.04 ────────── Ubuntu22.04
VSCode
|
首先我们要明白程序最终是运行在板卡上,编译环境不一定是板卡,这就涉及了编译结果的 文件传输
;板卡运行环境为arm64架构,而编译环境一般不是这架构,这就涉及了 交叉编译环境搭建
;笔者使用的环境是PC,而服务器不在身边(通常也没人会把服务器放身边),这就需要 远程便携开发
。后面将详细讲解这些环境的搭建。
如果您没有服务器,也没关系,可以用VMWare或者VirtualBox搭建个Ubuntu20.04虚拟机,也可以直接装双系统。这部分内容这里就不详细介绍了。
下面是用户普遍会用到的开发环境示意图。
1 2 3 4 | 编程环境 编程/编译环境 运行环境
PC 虚拟机 NFS 鲁班猫板卡
Windows10 ────────── Ubuntu20.04 ────────── Ubuntu22.04
VSCode VSCode
|
其中多数人可能会选择在虚拟机进行编程和编译,这也是可以的。
2.1. 搭建文件传输环境¶
关于文件传输,可以参考《[野火]LubanCat-H618系列板卡快速使用手册》中的 《文件传输与NFS网络文件系统》 章节。
在Linux驱动开发过程中,推荐使用NFS共享目录,在局域网内,某些小伙伴也需要编译出来的结果,也可以使用SCP传输。关于NFS共享目录可以查看 《NFS搭建》 内容。
具体操作如下:
2.1.1. 鲁班猫服务端操作¶
#安装NFS服务端
sudo apt install -y nfs-kernel-server
#配置/etc/exports,添加共享的目录
sudo vim /etc/exports
#在文件最后一行添加需要共享的目录
/home/cat *(rw,sync,no_root_squash,no_subtree_check)
#重启NFS服务
#重新加载/etc/exports
sudo /etc/init.d/nfs-kernel-server reload
#重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart
#查看挂载点
showmount -e
2.1.2. 服务器端操作¶
如果你的环境是Ubuntu虚拟机/物理机,也可能跟着操作。
#安装NFS客户端
sudo apt install -y nfs-common
#查看鲁班猫共享的目录,IP为鲁班猫板卡IP
showmount -e 192.168.103.120
#使用mount命令挂载鲁班猫共享目录到服务器/mnt目录下
sudo mount -t nfs 192.168.103.120:/home/cat /mnt
#如果不需要挂载,可以运行下面命令取消挂载
sudo umount /mnt
2.2. 搭建编译环境¶
下面的操作需要在编译的主机上进行,笔者的是在服务器上操作。
安装相关库和工具,执行以下命令:
sudo apt update
sudo apt install gcc make git bc libssl-dev liblz4-tool device-tree-compiler bison flex u-boot-tools gcc-aarch64-linux-gnu
#查看aarch64-linux-gnu-gcc版本
aarch64-linux-gnu-gcc -v
注意
aarch64-linux-gnu-gcc版本不能太高,太高可能会导致后续编译内核时报错。
2.2.1. 交叉编译器工具包¶
交叉编译器是后续编译内核时会用到的工具,该工具的选择会直接影响内核编译的结果。虽然上述已经 apt install gcc-aarch64-linux-gnu
了,但不确定安装的gcc-aarch64-linux-gnu交叉编译器会不会因为版本太高等问题导致内核编译失败。
2.2.2. 野火官方推荐的编译器¶
野火官方推荐的是gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu版本的编译工具链。
mkdir gcc-linaro && cd gcc-linaro
#获取编译工具链
git clone https://github.com/LubanCat/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.git
#修改~/.bashrc文件,永久保存环境变量
vim ~/.bashrc
#将下面的环境变量放在文件末尾,需要根据实际指定编译工具链的绝对路径
export PATH=/root/gcc-linaro/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
#重新加载配置
source ~/.bashrc
#查看编译工具链,如果COLLECT_LTO_WRAPPER变量为指定的路径,即配置成功
aarch64-linux-gnu-gcc -v
2.2.3. 其他版本编译器¶
不同版本的交叉编译的工具包,可从官网下载: https://releases.linaro.org/components/toolchain/binaries/
下面以gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz为例。
#进入创建了的gcc-linaro文件夹
cd ~/gcc-linaro/
#将复制的链接拷贝到wget之后。
wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
#解压你下载的tar.xz文件
tar xvJf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
#修改~/.bashrc文件,永久保存环境变量
vim ~/.bashrc
#将下面的环境变量放在文件末尾,需要根据实际指定编译工具链的绝对路径
export PATH=/root/gcc-linaro/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
#重新加载配置
source ~/.bashrc
#查看编译工具链,如果COLLECT_LTO_WRAPPER变量为指定的路径,即配置成功
aarch64-linux-gnu-gcc -v
修改后~/.bashrc文件如下:
aarch64-linux-gnu-gcc版本如下:
2.3. 远程便携开发¶
该部分内容可参考 《VSCode便携开发和GCC编译程序》 。如果你是直接在Ubuntu物理机/虚拟机上进行开发,可以去官网下载Linux版VSCode,后面的内容可以不看。
下面以PC电脑使用VSCode软件SSH远程连接服务器为例。软件和插件的安装在上述参考文档已经说明,下面主要演示免密登录。
注意
下面的演示自动登录的是普通用户。
2.3.1. PC端操作(Windows)¶
1 2 3 4 5 6 7 | #打开PC的命令提示符或者powershell
#输入
ssh-keygen -t rsa
#然后连续回车直到结束
#找到.ssh这个文件夹,打开id_rsa_pub这个文件
|
如下图
可以用记事本打开,打开后把里面的内容复制好。
2.3.2. 服务器端操作¶
1 2 3 4 5 6 7 8 9 10 11 12 13 | #连接Ubuntu服务器/虚拟机
#在命令行上输入
ssh-keygen -t rsa
#然后连续回车直到结束
#可以看到/home/cat目录下会有.ssh文件夹
#然后进入该文件夹,就可以看到生成的公钥和私钥
cd .ssh/
#然后我们可以创建一个文件authorized_keys
vim authorized_keys
#把刚刚从记事本上复制的内容粘贴到里面,然后保存退出
|