全志D1-H哪吒开发板开发环境搭建(图片上传版)

全志D1-H哪吒开发板开发环境搭建

一、更新日志

由于科研项目需要使用全志的D1-H哪吒开发板,而官方文档写得已经非常不错,但在实际搭建开发环境过程中仍然会遇到一些小问题,为此写下本篇环境搭建说明文档。(后续可能会继续更新到项目结束)

​ 本文将一步步带你从0到在开发板上运行自己的第一个应用程序。

在这里插入图片描述

image-20240314203848598

二、准备工具

​ 开始阅读之前,请确保您会以下操作

​ 了解linux用户权限。

linux基础操作命令:cd、ls、pwdsudo等,

​ 如何vi编辑器使用。常用vi指令,了解vi的三种模式。

​ 作者采用主机win11,虚拟机采用VMware Workstation pro,其他应用有MobaXterm作为调试工具。虚拟机搭载ubuntu 14(官方指定and强烈建议)。目前根据作者和师兄尝试,ubuntu16182022都需要自己添加包,对新手小白不是非常友好,因此不作介绍。其他工具作者后面会提及。

三、编译环境配置

​ 嵌入式产品开发流程中,通常有两个关键的步骤,编译源码与烧写固件。源码编译需要先准备 好编译环境,而固件烧写则需要厂家提供专用烧写工具。本文将描述如何配置编译环境。

​ 一个典型的嵌入式开发环境包括本地开发主机和目标硬件板:

​ 本地开发主机作为编译服务器,需要提供linux操作环境,建立交叉编译环境,为软件开发提供 代码更新下载,代码交叉编译服务。

​ 本地开发主机通过串口或USB与目标硬件板连接,可将编译后的镜像文件烧写到目标硬件板, 并调试系统或应用程序。

1、下载虚拟机VMware Workstation pro

下载安装:

官方下载地址:Download VMware Workstation Pro

下载教程:VMware虚拟机安装Linux教程(超详细)_vmware安装linux虚拟机-CSDN博客

​ 安装完成后,建议在csdn上寻找开通pro的密钥,对于后续开发会方便很多,作者使用的VMware是已经输入过密钥的版本。

2、安装Ubuntu14.04到虚拟机上

(1)内存大小设置:建议大于4GB
(2) 虚拟硬盘大小设置:建议至少设置50GB(SDK所需较大空间)
(3) 安装好Ubuntu14.04虚拟机环境后,不要在线升级Ubuntu版本

此处为作者目前虚拟机配置,处理器核数最好调高,否则编译速度令人堪忧(曾经用2核处理器编译了45分钟源码)

image-20240312204432740

3.ubuntu环境配置

​ 此步对于初学者来说,是搭建开发环境中最耗时,最容易劝退的一步。因为ubuntu14.04的版本相对久远,在安装某些软件时需要手动安装支持包,作者也在此步走了不少弯路。借用师兄的一句话,“嵌入式Linux开发步骤比较繁琐,多一点耐心。”,这一步走好了,走畅了,后面的路就好走多了,遇到困难请坚持下去,不要放弃。

第一步:请确保您的虚拟机能够上网

​ 可以使用快捷键“Ctrl+Alt+T”来快速打开终端。

​ 可以用以下两个命令来查看虚拟机的ip地址和检查是否能够上网。

在这里插入图片描述

命令一:
ifconfig
命令二:
ping news.qq.com

NAT, Network Address Translation, 指网络地址转换。使用 NAT 网卡时, Ubuntu 要访问外网,是委托 Windows 发出数据包, Windows 接收到回应后再转发给 Ubuntu。外界看到的都是 Windows,看不到 Ubuntu。使用 NAT 时,只要 Windows 能上网, Ubuntu 就必定能上网, 无需设置 Ubuntu 的网络。

当看到以上界面时,恭喜你完成了已经迈出了第一步!你现在能通过网络在虚拟机下载任何资源了!

​ 更新一下root密码

image-20240312213745175

第二步:配置编译环境

编译Tina Linux SDK需要的Ubuntu包有:

gcc,binutils,bzip2,flex, python,perl,make,ia32-libs,find,grep,diff,unzip,gawk,getopt,subversion,libz-dev,libc headers

因为Ubuntu包的下载服务器在非中国大量地区,所以下载速度会很慢,甚至可能下载不了,所以建议下载前先将apt的下载源改为国内的地址,国内有多家组织提供开源镜像站,如清华、阿里等。

Ubuntu下/etc/apt/sources.list 的内容全部替换成如下内容:(修改需sudo

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse    
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse    
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse    
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse    
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted 
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse    
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse    
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse    

# 预发布软件源,不建议启用   
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse  
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse  

命令如下:

sudo vi /etc/apt/sources.list

请先删除原本所有内容后再全部替换!

替换完成后,可使用以下命令安装

命令一:    
sudo apt-get update

命令二:
sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6 -y

命令三:
sudo apt-get install libc6:i386 libstdc++6:i386 lib32ncurses5 lib32z1

对于初学者,在使用每一条命令后一定必须查看有没有error报错,最好学会看懂报错内容,如此才能有所进步。

四、获取SDK

​ 如果您查阅了官方文档,会发现本文与官方文档所用的方法有所不同。如果读者有能力在ubuntu14.04的环境下自行配置“科学上网”请参照官方文档最为便捷。如果您搞不定“科学上网”,可以参照本文的方法。

​ SDK 使用 Repo 工具管理,拉取 SDK 需要配置安装 Repo 工具。

一、配置ssh

登录全志客户服务平台官网

​ 拉取repo必须到全志官网拉取,所以先登录全志客户服务平台官网。

img

注册账号

​ 点击“立即注册”进行注册,注册表示同意全志科技相关用户协议。请记住你的用户名,之后需要使用。

img

生成钥匙对

首先我们需要一个钥匙对作为身份认证。打开之前配置好的Linux环境,这里演示使用的环境为 Ubuntu 14。

注意!! 整个配置钥匙对的过程都不要切换账号,也不要使用sudo,之后下拉源码也不要使用sudo命令切换用户

首先检查一下虚拟机之前有没有配置过钥匙对,输入

ls ~/.ssh

image-20240313203023566

找不到文件夹说明之前未配置过钥匙对,请继续往下看。

输入命令生成钥匙对。

ssh-keygen -t rsa

image-20240313203256686

一路回车,保存在默认路径即可。

让我们检查以下是否成功生成密钥,输入

ls -l ~/.ssh/

看到前面的-rw-------了吗,文件权限必须和下图保持一致。如果出现不一致的情况,删除.ssh文件重新生成钥匙对。

image-20240313203554144

其中的 id_rsa.pub 是公钥文件,要上传全志客户服务平台的。密钥文件 id_rsa 本地保留就行了。

使用cat命令查看id_rsa.pub

cat ~/.ssh/id_rsa.pub 

复制你自己的密钥,例如这一坨字符就是我自己的密钥。

image-20240313204142961

添加公钥

登录账号,点击上方菜单栏【资源下载】 左侧菜单栏的【公钥管理】找到右上角【创建】添加公钥,将刚才获得的公钥添加到此处(cat命令输出的全部内容),名称可以随便起一个,不影响其他操作。

image-20240313204502042

image-20240313204705798

确认钥匙对配置

输入以下命令,测试密钥是否添加成功,记得将username替换成自己的用户名

ssh username@sdk.allwinnertech.com 

image-20240313205251871

没有让输入密码!恭喜你成功配对密钥!

二、安装repo引导脚本

​ 下载Tina前需要使用全志提供的引导脚本和repo仓库,如已安装了google官方引导脚本,请将官方引导脚本替换成全志提供的引导脚本,两者不兼容。

​ 使用 git 命令从全志服务器下载安装repo引导脚本,将 username 替换成账号的用户名

git clone ssh://xza20030921@sdk.allwinnertech.com/git_repo/repo.git

image-20240313205730117

​ 成功!

​ 如果遇到需要输入密码的情况,这是钥匙对配置错误的问题。请检查:

  • ls ~/.ssh/ 是否有钥匙对

  • ~/.ssh/ 文件夹下是否存在多个钥匙对,是否选择了正确的钥匙对

  • ssh 是否应用了钥匙对的设置

  • ~/.ssh/ 文件夹的权限是否为 700 (drwx------)

  • 客户服务平台的公钥是否提交并匹配本地密钥

  • 用户名大小写是否一致

    可以返回第一步重新配置一遍。

    一定要牢记:整个配置钥匙对的过程都不要切换账号,也不要使用sudo,之后下拉源码也不要使用sudo命令切换用户如果配置错误极有可能是你中途使用了sudo命令。

    排查一切问题后,repoclone到本地了,可以使用ls检查

    xza@ubuntu:~$ ls
    Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  repo  Templates  Videos
    xza@ubuntu:~$ 
    

    修改repo/repo 文件中下面一行,将username替换成客户下载账号的用户名,

    输入命令打开文件

vi repo/repo

改完后保存退出即可

最后还需将repo引导脚本添加到计算机的环境变量中。输入以下命令,如果报错请使用sudo

cp repo/repo /usr/bin/repo
chmod 777 /usr/bin/repo

输入repo help检查是否安装成功

image-20240313211504775

成功!

三、SDK拉取

​ 如果进行到这一步,恭喜你已经完成了艰难的步骤。下一步就是拉取sdk,但在拉取sdk之前,我们还有最后的一点准备工作!

升级论坛等级到Lv2

​ 拉取sdk需要在全志在线开发者技术论坛中升级到lV2才能有权限拉取,我们使用刚才注册的全志客户服务平台账号登录论坛

论坛链接:主页 | 全志在线开发者论坛 (aw-ol.com)

image-20240313212533277

​ 通过在该贴下回复两条评论,或者点赞,登录签到等方法升级到lv2。(一般管理员认定回贴有效需要一天,请耐心等待)

git环境配置

如果您在以下拉取过程中遇到了这种情况,应该是您的虚拟机没有配置git仓库。

image-20240313213230330

解决办法请参考链接:Ubuntu下进行Github的环境配置_ubtun 安装ssh github-CSDN博客

公钥配置的话请使用复制到全志客户服务平台上的公钥。(参考“配置ssh”一节)

什么?你没有注册git仓库?无法科学上网?请自行上网解决。

配置保存身份认证

​ 由于新版本git加强了身份认证,在拉取sdk过程中会需要你多次输入账号密码,不胜其烦,所以可通过该指令一键配置。

git config --global credential.helper store
新建文件夹保存 SDK

使用 mkdir 命令新建文件夹,保存之后需要拉取的 SDK,然后 cd 进入到刚才新建的文件夹中。

mkdir tina-d1-h
cd tina-d1-h
初始化 Repo 仓库

输入

repo init -u https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git -b master -m tina-d1-h.xml

看到这个即为成功,文件路径可能会有所不同
在这里插入图片描述

拉取sdk

输入命令,拉取sdk

repo sync

由于 SDK 普遍较大,拉取可能需要一定的时间,请耐心等待。

image-20240314174424746

当看到上面的提示时,恭喜你以及搭建好了编译环境!!为自己欢呼,芜湖!

五、编译与烧写

​ 在搭建好编译环境并下载好源码后,即可对源码进行编译,编译打包好后,即可将打包好的固件烧写到设备中去。此处介绍编译和烧写的方法。

编译打包

输入

source build/envsetup.sh
lunch
make -j32
pack

source build/envsetup.sh:获取环境变量

lunch:提供方案供给选择,其中 lunch d1-h_nezha-tinad1-h_nezha-tina 的标准方案,lunch d1-h_nezha_min-tina 是只能让系统跑起来的最小系统方案。作者选择了方案2:标准方案。

image-20240314180224598

make -j32 :编译,其中-j后面的数字参数为编译用的线程数,可根据开发者编译用的PC实际情况选择。作者使用make -j16。如果虚拟机设置的处理器数量不多,建议不要设置为-j32,容易导致虚拟机崩溃。

/bin/sh: 1: bison: not found

编译过程中如果出现这个报错,说明编译过程中缺少bison工具,输入以下命令可解决问题

sudo apt-get update
sudo apt-get install bison

image-20240314184620831

看到这个恭喜你!编译成功!

pack:打包,将编译好的固件打包成一个.img格式的固件,固件路径 /out/d1-h_nezha-tina/tina_d1-h-nezha_uart0.img

注:每次打开终端只需输入前两个命令一次即可。在这个终端多次编译时,不需要输入前两步操作。

​ 如果您使用的是虚拟机编译,在pack好固件后将固件传输到windows端上,方便后续的烧写。关于虚拟机与windows之间互传文件的方法有很多种,这里采用FileZilla Client互传文件。

烧写

烧写,即将编译打包好的固件下载到板子上。

推荐使用PhoenixSuit进行烧写,下面先介绍PhoenixSuit的使用方法

PhoenixSuit下载地址:https://www.aw-ol.com/downloads/resources/13

同时需安装全志USB驱动,下载链接:https://www.aw-ol.com/downloads/resources/15

连接示意图

在这里插入图片描述

PhoenixSuit具体使用步骤如下:

(1)打开PhoenixSuit,当设备上电启动并插入USB与PC相连的时,PhoenixSuit会提示识别到设备;

(2)点击 一键刷机-浏览选择要烧写的固件;

(3)点击 立即升级,此时会通过USB给设备发送重启命令,设备会带着烧写标识重启,并在重启阶段进入烧写模式;

(4)烧写成功,设备重启

image-20240314191733742

六、编译并运行第一个程序“hello,world”

​ 本章节将讲解如何使用电脑(上位机)交叉编译一个打印 hello word 的小应用,并将其push到开发板(下位机)上运行起来,打印出 hello word。这是嵌入式应用开发的最基础步骤。

编译工具链准备

​ 在之前下载的Tina SDK中已经包含完整的编译工具链。在tina-d1-h中具体路径如下,路径会因个人原因有所差异。

/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702

代码编写

创建文件

如果只是用编译工具链单独尝试编译一个小demo,也可以在Ubuntu任意目录下创建文件,比如之前tina-d1-h目录下,输入

# 创建hello_word.c文件
touch hello_word.c
编写hello_world代码

此处提供代码示例,读者可根据个人爱好自行修改代码

hello_word.c中写入

#include <stdio.h>
int main(int argc, char const *argv[])
{
    printf("Hello NeZha\n");
    return 0;
}

交叉编译

交叉编译指在我们的pc上位机中编译可运行在目标板上的二进制文件。因为是在上位机编译,放在不同架构的板子上跑,所以称为交叉编译。

输入编译命令:

/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gcc -o hello_world hello_world.c

编译完成后会在当前文件夹生成hello_world的二进制文件,这个就是可以在开发板上运行的可执行文件。

在程序下载到开发板上

传入文件的方式多种多样,简单举例

  1. ADB工具
  2. nfs挂载文件系统
  3. 使用SD卡挂载

下载ADB

1.这里使用ADB工具下载文件,实际上ADB是一个免安装工具,下载下来是一个压缩文件,解压缩后是个文件夹,里面就是 ADB工具所需的文件。

下载链接:ADB工具包(带Fastboot )-安卓adb工具包下载-ADB工具包(带Fastboot )下载 v1.0.32官方版-完美下载 (wmzhe.com)

image-20240314200520218

2.添加环境变量,选择我的电脑,点击右击属性-》高级系统设置-》点击环境变量找到path点击编辑,将ADB文件夹的路径添加进去.

image-20240314200823483

image-20240314200951404

3.确认自己是否安装好,在windows的终端下输入:

adb version

在这里插入图片描述

不报错即成功安装。
调试串口接线如图:
在这里插入图片描述

4.将USB链接至电脑上,在windows终端下输入,查看板子是否连接到电脑上。

adb device

image-20240314201505647

查看到设备已连接后,输入adb push <本地路径\文件或文件夹> <开发板中预下载的路径>

adb push "C:\Users\xza\Desktop\hello_world" ./.

注:这里我的程序放在桌面,然后push到开发板的根目录上。

恭喜您成功烧录第一个程序!

运行第一个程序

作者采用MobaXterm作为调试工具。image-20240314202516979

MobaXterm使用教程

1.官网下载后,正常解压安装。

2.打开界面后是这个样子

image-20240314202717521

3.配置串口

image-20240314203028906

4.点击确认后按下回车,如果您出现TINALINUX的logo字样,恭喜您已经能访问开发板了!

image-20240314203101014

如果没有出现logo字样,有可能是烧录固件出了问题,请返回烧录固件页面重新烧录。

以后想要访问开发板,usb连接后,直接点击左侧连接连接,就能访问了,非常方便!

image-20240314203330664

此时在Tina跟文件系统中的/root目录下就有hello_world文件。

image-20240314203709552

赋予它可执行权限

chmod +x hello_world
./hello_world

image-20240314203848598

当你看到hello NeZha时,恭喜你,你已经成功在哪吒开发板上运行了自己的第一个程序。

参考文档:

D1-H (aw-ol.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值