SS928v100远程ubuntu交叉编译开发环境搭建

背景

为了快速入门SS928V100板卡使用,之前用的一直是小组分享的ubuntu虚拟机环境,但是虚拟机在主机上运行占用内存,是的主机运行缓慢,正好手边有一台暂时闲置的ubuntu系统电脑,结合官方的开发环境配置文章,动手搭建、配置并记录下海思Ubutun开发环境的搭建过程,下面是板卡环境联系图。

在 Linux 服务器上建立交叉编译环境,Windows 工作台通过串口和网口与 SS928V100单板连接,开发人员可以在 Windows 工作台中进行程序开发或者远程登录到Linux 服务器进行程序开发。

1、系统基本要求

推荐用户使用 64 位 Linux 服务器,本开发包在 32 位 Linux 服务器、较老版本的 Linux服务器、偏冷门的 Linux 服务器上可能存在未知的兼容性问题。

Windows10,Ubuntu18.04.6(64位),python3.7.6,vscode1.85.2(版本比较重要,高版本因为glic版本不匹配连不上)推荐的配置如下:

2、准备软件:

aarch64-mix210-linux.tgz

cc-riscv32-cfg5-musl-20211008-elf.tar.gz

3、网络环境搭建:

安装 nfs,samba,ssh 等网络组件,命令如下:

c 复制代码
sudo apt update
sudo apt install nfs-kernel-server  samba  openssh-server 

4、软件包安装

步骤 1 配置默认使用 bash

c 复制代码
sudo dpkg-reconfigure dash 选择 no 

步骤 2 安装软件包

c 复制代码
sudo apt-get install make libc6-i386 lib32z1 lib32stdc++6 zlib1g-dev libncurses5-dev
sudo apt-get instal ncurses-term libncursesw5-dev g++ u-boot-tools 	
sudo apt-get instal texinfo texlive gawk libssl-dev openssl bc p7zip-full gperf bison flex diffutils git unzip 

步骤 3 创建/etc/ld.so.preload 文件,并执行以下命令进行清空
echo "" > /etc/ld.so.preload,以解决 64bit linux server 上某些第三方库编译失败的问题。

步骤 4 mtd-utils 依赖以下几个库,以ubuntu为例,安装方式请参考下面命令:

c 复制代码
sudo apt-get install zlib1g-dev liblzo2-dev uuid-dev pkg-config automake 

步骤 5 e2fsprogs 依赖 texlive 库,安装方式请参考如下命令:

c 复制代码
sudo apt-get install texlive 

注意:采用linux系统的可以不用安装6、7步,直接安装编译工具

步骤 6 LiteOS 编译需要安装的工具包括 python、pip 和 kconfiglib

用户可参考《LiteOS 开发指南.pdf》中第 8.2 章节文档进行 LiteOS 编译环境的配置。

步骤 7 optee 模块依赖 python3.x.x、pip3、wheel、pycryptodome、pyelftools 库(蓝色字 体为版本安装包下载链接)

python3.x.x 安装推荐 python3.7.6 版本

下载安装并执行如下指令:

c 复制代码
tar -zxvf Python-3.7.6.tgz 
cd Python-3.7.6/ 
./configure 
make 
make install 

wheel 推荐源码安装, pip 安装可能失败

下载 wheel-0.36.2.tar.gz 安装包

c 复制代码
tar -xzf wheel-0.36.2.tar.gz 
cd wheel-0.36.2 
sudo python2 setup.py install 
sudo pip3 install pycryptodome-3.9.8-cp37-cp37m-manylinux1_x86_64.whl 
sudo pip3 install pyelftools-0.27-py2.py3-none-any.whl 

备注:pycryptodome 依赖于 python3.x.x 环境请先升级至 python3.x.x 版本再安装pycryptodome 库。

5、安装交叉编译工具

使用从网络等渠道得到的交叉编译工具可能存在与使用的内核并不配套,造成开发过程中出现一些不可预料的问题。发布包提供编译工具链 aarch64-mix210-linux- 和 riscv32-cfg5-musl-xxxxxxxx-elf-。aarch64-mix210-linux-为基于 64bit 操作系统 glibc 的工具链,riscv32-cfg5-musl xxxxxxxx-elf- 为 riscv 核提供的工具链。

5.1、安装aarch交叉编译工具

c 复制代码
//解压
tar-xvf aarch64-mix210-linux.tgz  
//安装工具链
cd aarch64-mix210-linux/
sudo./aarch64-mix210-linux.install  

测试:命令行,执行 aarch64-mix210-linux-gcc -v

查看是否有编译环境的版本信息输出,并无报错

5.2、安装riscv交叉编译工具

c 复制代码
//解压
tar-xvf cc-riscv32-cfg5-musl-xxxxxxxx-elf.tar.gz  
//安装工具链
cd cc-riscv32-cfg5-musl-xxxxxxxx-elf
sudo ./install.sh

注:如执行 ./install.sh 报错,可以将 install.sh 顶部修改#!/bin/bash

5.3、配置工具链路径

打开vi ~/.profile文件添加如下内容 使配置生效

c 复制代码
PATH="$HOME/bin:$HOME/cc-riscv32-cfg5-musl-xxxxxxxxelf/toolschain/bin:$PATH"
//刷新环境变量,使之生效
source ~/.profile

6、安装SDK并测试

将 SS928V100_SDK_V2.0.2.1 代码示例及系统源码文件夹拷贝到Ubutun的工作路径下进行cmake和make编译。

7、vscode配置

7.1、ubuntu安装:

系统要安装sssh并开启,命令如下:

c 复制代码
//安装
sudo apt-get install openssh-server
// 检查 SSH 服务状态
sudo systemctl status ssh
//如果未运行,启动 SSH
sudo systemctl start ssh
//设置开机自启
sudo systemctl enable ssh

7.2、vscode配置过程

1、首先点击左下角这个图标,然后要输入ssh liquan@172.16.0.33,然后输入密码

2、打开ubunu系统内的工程文件夹,然后输入密码

3、按"ctrl+shift+P"输入CMake:configure

4、第一次回弹出编译工具:选择64位的上述交叉编译工具即可。

8、安装过程可能遇到的问题及解决方法

8.1、python多版本管理

安装python 版本的时候,因为系统已经有python3.6,python3.7,还有一个默认的python3.10,但是配置过程要求python3.6,所以需要对python版本进行管理:

c 复制代码
//查看已安装Python
ls /usr/bin/python*  
//输入编号选择版本
sudo update-alternatives --config python3 

输出如下:

或者直接类似下面的命令修改优先级:

c 复制代码
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 

但是直接输入python3的时候默认输出的是python3.10.9,不是上面的版本

原因在于此时的用户是anconda用户,因为前面有个(base),要想利用系统内的python,需要退出anconda用户,命令为:

c 复制代码
conda deactivate

此时再利用上面的版本切换命令就可以了。

8.2、cmake错误:

这个错误的原因是CMake 构建失败是因为无法加载缓存文件,解决办法是需要先运行 cmake 配置命令来生成缓存文件,然后再执行构建命令。即需要在vscode下按Ctrl+Shift+P → 输入 "CMake: Configure"让 CMake Tools 重新读取 CMakeCache.txt 并建立正确的缓存连接,然后既可以编译

9、资源链接

交叉工具链下载链接

相关推荐
我爱加班、、2 小时前
new Map()+Array.from()整理elementPlus的级联器数据
linux·前端·javascript
豆是浪个2 小时前
Linux(Centos 7.6)命令详解:top
linux·运维·服务器
历程里程碑2 小时前
Linxu14 进程一
linux·c语言·开发语言·数据结构·c++·笔记·算法
baidu_huihui2 小时前
`sudo DNF` 是 Linux 系统中以管理员权限执行 DNF 包管理命令的标准方式
linux·dnf
峥嵘life3 小时前
Android 16 EDLA测试STS模块
android·大数据·linux·学习
qq_316837753 小时前
docker 运行 cn_clip
运维·docker·容器
代码AC不AC3 小时前
【Linux】进程程序替换
linux·进程·程序替换
Zach_yuan3 小时前
UDP网络编程:从入门到精通
linux·网络·网络协议·udp
_叶小格_3 小时前
cp、scp、rsync命令详解
linux·运维·服务器·ubuntu·centos·运维开发