全志D1-H哪吒开发板开发环境搭建
原文
https://blog.csdn.net/tcjy1000/article/details/125344215
一、更新日志
由于科研项目需要使用全志的D1-H哪吒开发板,而官方文档写得已经非常不错,但在实际搭建开发环境过程中仍然会遇到一些小问题,为此写下本篇环境搭建说明文档。(后续可能会继续更新到项目结束)
本文将一步步带你从0到在开发板上运行自己的第一个应用程序。
二、准备工具
开始阅读之前,请确保您会以下操作
了解linux
用户权限。
linux
基础操作命令:cd、ls、pwd
、sudo
等,
如何vi编辑器使用。常用vi指令,了解vi的三种模式。
作者采用主机win11,虚拟机采用VMware Workstation pro,其他应用有MobaXterm作为调试工具。虚拟机搭载ubuntu 14(官方指定and强烈建议)。目前根据作者和师兄尝试,ubuntu16,18,20,22都需要自己添加包,对新手小白不是非常友好,因此不作介绍。其他工具作者后面会提及。
三、编译环境配置
嵌入式产品开发流程中,通常有两个关键的步骤,编译源码与烧写固件。源码编译需要先准备 好编译环境,而固件烧写则需要厂家提供专用烧写工具。本文将描述如何配置编译环境。
一个典型的嵌入式开发环境包括本地开发主机和目标硬件板:
本地开发主机作为编译服务器,需要提供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分钟源码)
3.ubuntu环境配置
此步对于初学者来说,是搭建开发环境中最耗时,最容易劝退的一步。因为ubuntu14.04的版本相对久远,在安装某些软件时需要手动安装支持包,作者也在此步走了不少弯路。借用师兄的一句话,“嵌入式Linux开发步骤比较繁琐,多一点耐心。”,这一步走好了,走畅了,后面的路就好走多了,遇到困难请坚持下去,不要放弃。
第一步:请确保您的虚拟机能够上网
可以使用快捷键“Ctrl+Alt+T”来快速打开终端。
可以用以下两个命令来查看虚拟机的ip地址和检查是否能够上网。
命令一:
ifconfig
命令二:
ping news.qq.com
- 1
- 2
- 3
- 4
NAT, Network Address Translation, 指网络地址转换。使用 NAT 网卡时, Ubuntu 要访问外网,是委托 Windows 发出数据包, Windows 接收到回应后再转发给 Ubuntu。外界看到的都是 Windows,看不到 Ubuntu。使用 NAT 时,只要 Windows 能上网, Ubuntu 就必定能上网, 无需设置 Ubuntu 的网络。
当看到以上界面时,恭喜你完成了已经迈出了第一步!你现在能通过网络在虚拟机下载任何资源了!
更新一下root密码
第二步:配置编译环境
编译Tina Linux SDK需要的Ubuntu包有:
gcc,binutils,bzip2,flex, python,perl,make,ia32-libs,find,grep,diff,unzip,gawk,getopt,subversion,libz-dev,libc headers
- 1
因为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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
命令如下:
sudo vi /etc/apt/sources.list
- 1
请先删除原本所有内容后再全部替换!
替换完成后,可使用以下命令安装
命令一:
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
对于初学者,在使用每一条命令后一定必须查看有没有error报错,最好学会看懂报错内容,如此才能有所进步。
四、获取SDK
如果您查阅了官方文档,会发现本文与官方文档所用的方法有所不同。如果读者有能力在ubuntu14.04的环境下自行配置“科x上网”请参照官方文档最为便捷。如果您搞不定“科x上网”,可以参照本文的方法。
SDK 使用 Repo 工具管理,拉取 SDK 需要配置安装 Repo 工具。
一、配置ssh
登录全志客户服务平台官网
拉取repo必须到全志官网拉取,所以先登录全志客户服务平台官网。
注册账号
点击“立即注册”进行注册,注册表示同意全志科技相关用户协议。请记住你的用户名,之后需要使用。
生成钥匙对
首先我们需要一个钥匙对作为身份认证。打开之前配置好的Linux环境,这里演示使用的环境为 Ubuntu 14。
注意!! 整个配置钥匙对的过程都不要切换账号,也不要使用sudo,之后下拉源码也不要使用sudo命令切换用户。
首先检查一下虚拟机之前有没有配置过钥匙对,输入
ls ~/.ssh
- 1
找不到文件夹说明之前未配置过钥匙对,请继续往下看。
输入命令生成钥匙对。
ssh-keygen -t rsa
- 1
一路回车,保存在默认路径即可。
让我们检查以下是否成功生成密钥,输入
ls -l ~/.ssh/
- 1
看到前面的-rw-------
了吗,文件权限必须和下图保持一致。如果出现不一致的情况,删除.ssh文件重新生成钥匙对。
其中的 id_rsa.pub
是公钥文件,要上传全志客户服务平台的。密钥文件 id_rsa
本地保留就行了。
使用cat命令查看id_rsa.pub
,
cat ~/.ssh/id_rsa.pub
- 1
复制你自己的密钥,例如这一坨字符就是我自己的密钥。
添加公钥
登录账号,点击上方菜单栏【资源下载】 左侧菜单栏的【公钥管理】找到右上角【创建】添加公钥,将刚才获得的公钥添加到此处(cat
命令输出的全部内容),名称可以随便起一个,不影响其他操作。
确认钥匙对配置
输入以下命令,测试密钥是否添加成功,记得将username
替换成自己的用户名
ssh [email protected]
- 1
没有让输入密码!恭喜你成功配对密钥!
二、安装repo引导脚本
下载Tina前需要使用全志提供的引导脚本和repo仓库,如已安装了google官方引导脚本,请将官方引导脚本替换成全志提供的引导脚本,两者不兼容。
使用 git
命令从全志服务器下载安装repo引导脚本,将 username
替换成账号的用户名
git clone ssh://[email protected]/git_repo/repo.git
- 1
成功!
如果遇到需要输入密码的情况,这是钥匙对配置错误的问题。请检查:
-
ls ~/.ssh/
是否有钥匙对 -
~/.ssh/
文件夹下是否存在多个钥匙对,是否选择了正确的钥匙对 -
ssh
是否应用了钥匙对的设置 -
~/.ssh/
文件夹的权限是否为700
(drwx------
) -
客户服务平台的公钥是否提交并匹配本地密钥
-
用户名大小写是否一致
可以返回第一步重新配置一遍。
一定要牢记:整个配置钥匙对的过程都不要切换账号,也不要使用
sudo
,之后下拉源码也不要使用sudo
命令切换用户,如果配置错误极有可能是你中途使用了sudo
命令。排查一切问题后,
repo
就clone
到本地了,可以使用ls
检查xza@ubuntu:~$ ls Desktop Documents Downloads examples.desktop Music Pictures Public repo Templates Videos xza@ubuntu:~$
- 1
- 2
- 3
修改
repo/repo
文件中下面一行,将username
替换成客户下载账号的用户名,输入命令打开文件
vi repo/repo
- 1
改完后保存退出即可
最后还需将repo引导脚本添加到计算机的环境变量中。输入以下命令,如果报错请使用sudo
cp repo/repo /usr/bin/repo
chmod 777 /usr/bin/repo
- 1
- 2
输入repo help
检查是否安装成功
成功!
三、SDK拉取
如果进行到这一步,恭喜你已经完成了艰难的步骤。下一步就是拉取sdk
,但在拉取sdk
之前,我们还有最后的一点准备工作!
升级论坛等级到Lv2
拉取sdk
需要在全志在线开发者技术论坛中升级到lV2才能有权限拉取,我们使用刚才注册的全志客户服务平台账号登录论坛
论坛链接:主页 | 全志在线开发者论坛 (aw-ol.com)
通过在该贴下回复两条评论,或者点赞,登录签到等方法升级到lv2。(一般管理员认定回贴有效需要一天,请耐心等待)
git环境配置
如果您在以下拉取过程中遇到了这种情况,应该是您的虚拟机没有配置git仓库。
解决办法请参考链接:Ubuntu下进行Github的环境配置_ubtun 安装ssh github-CSDN博客
公钥配置的话请使用复制到全志客户服务平台上的公钥。(参考“配置ssh
”一节)
什么?你没有注册git仓库?无法科x上网?请自行上网解决。
配置保存身份认证
由于新版本git加强了身份认证,在拉取sdk
过程中会需要你多次输入账号密码,不胜其烦,所以可通过该指令一键配置。
git config --global credential.helper store
- 1
新建文件夹保存 SDK
使用 mkdir
命令新建文件夹,保存之后需要拉取的 SDK,然后 cd
进入到刚才新建的文件夹中。
mkdir tina-d1-h
cd tina-d1-h
- 1
- 2
初始化 Repo 仓库
输入
repo init -u https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git -b master -m tina-d1-h.xml
- 1
看到这个即为成功,文件路径可能会有所不同
拉取sdk
输入命令,拉取sdk
repo sync
- 1
由于 SDK 普遍较大,拉取可能需要一定的时间,请耐心等待。
当看到上面的提示时,恭喜你以及搭建好了编译环境!!为自己欢呼,芜湖!
五、编译与烧写
在搭建好编译环境并下载好源码后,即可对源码进行编译,编译打包好后,即可将打包好的固件烧写到设备中去。此处介绍编译和烧写的方法。
编译打包
输入
source build/envsetup.sh
lunch
make -j32
pack
- 1
- 2
- 3
- 4
source build/envsetup.sh
:获取环境变量
lunch
:提供方案供给选择,其中 lunch d1-h_nezha-tina
是 d1-h_nezha-tina
的标准方案,lunch d1-h_nezha_min-tina
是只能让系统跑起来的最小系统方案。作者选择了方案2:标准方案。
make -j32 :编译,其中-j后面的数字参数为编译用的线程数,可根据开发者编译用的PC实际情况选择。作者使用make -j16
。如果虚拟机设置的处理器数量不多,建议不要设置为-j32
,容易导致虚拟机崩溃。
/bin/sh: 1: bison: not found
- 1
编译过程中如果出现这个报错,说明编译过程中缺少bison工具,输入以下命令可解决问题
sudo apt-get update
sudo apt-get install bison
- 1
- 2
看到这个恭喜你!编译成功!
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)烧写成功,设备重启
六、编译并运行第一个程序“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
- 1
代码编写
创建文件
如果只是用编译工具链单独尝试编译一个小demo,也可以在Ubuntu任意目录下创建文件,比如之前tina-d1-h目录下,输入
# 创建hello_word.c文件
touch hello_word.c
- 1
- 2
编写hello_world代码
此处提供代码示例,读者可根据个人爱好自行修改代码
在hello_word.c
中写入
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("Hello NeZha\n");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
交叉编译
交叉编译指在我们的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
- 1
编译完成后会在当前文件夹生成hello_world
的二进制文件,这个就是可以在开发板上运行的可执行文件。
在程序下载到开发板上
传入文件的方式多种多样,简单举例
- ADB工具
- nfs挂载文件系统
- 使用SD卡挂载
下载ADB
1.这里使用ADB工具下载文件,实际上ADB是一个免安装工具,下载下来是一个压缩文件,解压缩后是个文件夹,里面就是 ADB工具所需的文件。
下载链接:ADB工具包(带Fastboot )-安卓adb工具包下载-ADB工具包(带Fastboot )下载 v1.0.32官方版-完美下载 (wmzhe.com)
2.添加环境变量,选择我的电脑,点击右击属性-》高级系统设置-》点击环境变量找到path点击编辑,将ADB文件夹的路径添加进去.
3.确认自己是否安装好,在windows的终端下输入:
adb version
- 1
不报错即成功安装。
调试串口接线如图:
4.将USB链接至电脑上,在windows终端下输入,查看板子是否连接到电脑上。
adb device
- 1
查看到设备已连接后,输入adb push <本地路径\文件或文件夹> <开发板中预下载的路径>
adb push "C:\Users\xza\Desktop\hello_world" ./.
- 1
注:这里我的程序放在桌面,然后push到开发板的根目录上。
恭喜您成功烧录第一个程序!
运行第一个程序
作者采用MobaXterm作为调试工具。
MobaXterm使用教程
1.官网下载后,正常解压安装。
2.打开界面后是这个样子
3.配置串口
4.点击确认后按下回车,如果您出现TINALINUX的logo字样,恭喜您已经能访问开发板了!
如果没有出现logo字样,有可能是烧录固件出了问题,请返回烧录固件页面重新烧录。
以后想要访问开发板,usb连接后,直接点击左侧连接连接,就能访问了,非常方便!
此时在Tina跟文件系统中的/root
目录下就有hello_world
文件。
赋予它可执行权限
chmod +x hello_world
./hello_world
- 1
- 2
当你看到hello NeZha
时,恭喜你,你已经成功在哪吒开发板上运行了自己的第一个程序。
参考文档:
标签:虚拟机,全志,开发板,repo,编译,hello,下载,D1 From: https://www.cnblogs.com/zxdplay/p/18390416