全志D1s开发板软件入门之Hello World演示

news2024/11/25 22:29:21

Hello Word

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

前要知识储备

  • 掌握Linux基本命令行指令及工具
    • 如 git make 以及文件操作等
  • 掌握Linux 简单编程
    • 基本的C语言编程
  • 掌握嵌入式基本知识
    • 嵌入式设备组成
    • 嵌入式外设连接方式
      • 如UART USB 网口 等基本接口
  • 了解开发板开发载资源与对应接口分布

编译工具链准备

在Tina SDK中带有完整的编译工具链,在如下路径:

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

如果您只是想先试玩一下,还没下载完整源码,可以单独下载编译工具链:

下载后放到Linux环境中解压:

tar -zxvf riscv64-glibc-gcc-thead_20200702.tar.gz

解压后可以看到已经解压出来的交叉编译链的文件夹:

*注意:如果是Windows环境下的Ubuntu虚拟机,不要放在共享文件夹下解压,否则会权限报错,要复制到Ubuntu非共享目录下再解压。

*同时可以到平头哥社区下载最新/各版本C900系列编译工具链:

代码编写

创建文件

如果只是用编译工具链单独尝试编译一个小demo,也可以在Ubuntu任意目录下创建文件,比如就放到编译工具链路径下。

# 创建hello_word.c文件
touch hello_word.c

编写 Hello Word 代码

编写打印 Hello Word 代码的小demo,在 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_word hello_word.c

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

在这里插入图片描述

下载 Hello Word 文件

编译完成后需要将编译好的hello_word文件下载到开发板上运行。

传入文件可使用的方法多种多样,仁者见仁智者见智。可用的方法简传单列举:

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

在这里推荐使用我们的ADB工具来进行传输,不需要增加多余的连接,仅仅只需要一根USB线即可。

ADB

ADB的使用及介绍链接就贴在这里了:ADB使用上手连接

确认设备连接正常后:

adb push hello_word ./.

ADB为Windows下工具,所以使用cmd来执行。

确保ADB已经添加进环境变量中

*注意:Windows 下的路径为反斜线 Linux中为斜线

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

赋予它可执行权限

chmod +x hello_word
./hello_word

执行结果:

root@TinaLinux:~# ls
hello_word  main
root@TinaLinux:~# chmod +x hello_word
root@TinaLinux:~# ./hello_word
Hello NeZha

如果你看到 “Hello NeZha” 这行打印,那么恭喜你,你已经开发出在哪吒上的第一个应用了!

进阶:使用makefile编写一个工程

根据Tina开发惯例,建议开发者的应用工程放在package下,在package中创建test文件夹,在test文件夹中创建hello_word.c文件。

为了紧密结合嵌入式开发,此处提供使用Makefile 文件来进行编译Hello word 方法:

在源码目录创建Makefile文件:

touch Makefile

编写Makefile:

#设置编译链路径及工具
CTOOL := riscv64-unknown-linux-gnu-
CCL := /home/kunyao/workspace/d_tina_d1_open_v1.0/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702
CC := ${CCL}/bin/${CTOOL}gcc

#设置编译规则
hello_word:hello_word.c
    ${CC} -o hello_word hello_word.c

#清理规则
clean:
    rm hello_word

保存后在终端make即可生成hello_word文件,用如上ADB方法将其传入开发板即可。

*可选:将交叉编译链设置为当前环境变量

export PATH=**/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/:$PATH

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1493220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript的for循环与双重for循环,聪明人已经收藏了

css盒模型 1&#xff0c;css盒模型基本概念&#xff1f; 2&#xff0c;标准模型和IE模型的区别&#xff1a;计算高度和宽度的不同&#xff0c;怎么不同&#xff0c;高度宽度是怎么计算的&#xff1f; 3&#xff0c;css如何设置这两种模型&#xff1f; 4&#xff0c;js如何设置…

【BUG】Windows状态栏总卡死解决办法

屋漏偏逢连夜雨&#xff0c;正在赶deadline呢&#xff0c;Windows状态老卡死&#xff0c;一时间崩溃。 解决办法&#xff1a; 右键状态栏新闻和咨询关掉 这个烧笔新闻与资讯我真服了

做分析用什么工具

做分析用什么工具 导读 数据分析是数据辅助决策的最后一公里&#xff0c;是最终的数据可视化展示与探索分析的部分&#xff0c;选择使用最适合的数据展示方式&#xff0c;可以帮助分析人员大大提升分析效率。 问题&#xff1a; ● 纠结选择哪个工具 ● 纠结从哪里学起&#x…

Java 学习和实践笔记(27):Object类的基本特性、toString方法以及IDEA的部分快捷键介绍

Object类基本特性&#xff1a; 1.Object类是所有类的父类&#xff0c;所有的Java对象都拥有Object类的属性和方法&#xff08;注意拥有并不等于可以直接使用&#xff09; 2.如果在类的声明中未使用extends&#xff0c;则默认继承Object类。 toString方法是Object类里定义的一个…

连接器中的PI “电源完整性”

【摘要/前言】 在连接器中&#xff0c;我们经常谈论信号完整性&#xff08;SI&#xff09;以及我们为最新应用开发新的高速连接器解决方案的工作。很多厂商在112Gbps PAM4信令领域非常活跃&#xff0c;但我们也经常谈论224Gbps PAM4。在之前对Samtec产品管理总监Keith Guetig的…

26.基于springboot + vue实现的前后端分离-就业管理系统

项目介绍 系统分为管理员、企业、求职者三个角色 管理员&#xff1a; 登录、个人中心、学生信息管理、企业信息管理、岗位分类管理、学历信息管理、友情链接管理、新闻资讯管理、收藏管理、招聘信息管理、应聘信息管理、求职者信息管理 企业&#xff1a; 注册、登录、个人…

【Leetcode 2673】使二叉树所有路径值相等的最小代价 —— 贪心法

2673. 使二叉树所有路径值相等的最小代价 给你一个整数n表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从1到n。根节点编号为1&#xff0c;树中每个非叶子节点i都有两个孩子&#xff0c;分别是左孩子2 * i和右孩子2 * i 1。 树中每个节点都有一个值&#xff0c;用下…

虚拟化之内存(Memory)

一 内存的查看方式 free -k/m/h cat /proc/meminfodmesg |grep memory free命令的实质是根据meminfo中的文件来提取信息 二 内存虚拟化 1.概念&#xff1a;由于物理MMU只能通过Host机的物理地址进行寻址&#xff0c;所以实现内存虚拟化&#xff0c;关键是需要将Guest机的…

Unity性能优化篇(二) 静态合批步骤与所有注意事项\游戏运行时使用代码启动静态合批

静态合批步骤: 1.开启Project Settings —>Player–>Other Setting里勾选Static Batching选项(一般情况下unity都是默认勾选状态) 2.勾选需要合批的静态物体上的Batching Static项,勾选后此物体下的所有子物体都默认参与静态合批(勾选后物体不能进行移动/旋转/缩放操作,…

C#,入门教程(06)——解决方案资源管理器,代码文件与文件夹的管理工具

上一篇&#xff1a; C#&#xff0c;入门教程(05)——Visual Studio 2022源程序&#xff08;源代码&#xff09;自动排版的功能动画图示https://blog.csdn.net/beijinghorn/article/details/124675293 大家平时都怎么管理源代码与文件夹呢&#xff1f;世界上最好的集成开发环境…

TinyEMU编译与使用(一)

TinyEMU编译与使用&#xff08;一&#xff09; 1 介绍2 准备工作3 编译TinyEMU3.1 安装依赖库3.2 编译 4 运行TinyEMU4.1 在线运行4.2 离线运行 5 共享目录5.1 修改root_9p-riscv64.cfg5.2 启动TinyEMU5.3 执行挂载命令 6 TinyEMU命令帮助 1 介绍 原名为riscvemu&#xff0c;于…

Oracle 的同义词(Synonym) 作用

Oracle 同义词(Synonym) 是数据库对象的一个别名&#xff0c;Oracle 可以为表、视图、序列、过程、函数、程序包等指定一个别名。同义词有两种类型&#xff1a; 私有同义词&#xff1a;拥有 CREATE SYNONYM 权限的用户(包括非管理员用户)即可创建私有同义词&#xff0c;创建的…

43. 【Linux教程】创建分区

前面小节介绍了文件系统&#xff0c;本小节介绍如何创建分区&#xff0c;创建分区之后就可以用来容纳文件系统。 1. 硬盘分区介绍 Linux 磁盘分区主要分为基本分区&#xff08;primary partion&#xff09;和扩充分区 (extension partion) 两种&#xff0c;基本分区和扩充分区…

Web-Check网站检查工具

Web-Check是一款网站检查工具&#xff0c;通过该工具&#xff0c;能够查看网站的各种关键数据&#xff0c;包括 DNS 记录、服务器位置、SSL 证书等方面的信息 开源地址 https://github.com/Lissy93/web-check 部署 docker run -d --name web-check -p 3000:3000 lissy93/web…

嵌入式系统是什么?Linux应用开发是开发什么的?

第一篇&#xff1a; 原文链接&#xff1a;https://www.zhihu.com/question/464205608/answer/3358027187 一、什么是嵌入式系统 嵌入式系统是以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪&#xff0c;适用于应用系统&#xff0c;对功能、可靠性、…

比较 2 名无人机驾驶员:借助分析飞得更高

近年来&#xff0c;越来越多的政府和执法机构使用无人机从空中鸟瞰。为了高效执行任务&#xff0c;无人机必须能够快速机动到预定目标。快速机动使它们能够在复杂的环境中航行&#xff0c;并高效地完成任务。成为认证的无人机驾驶员的要求因国家/地区而异&#xff0c;但都要求您…

Web组态可视化编辑器 快速绘制组态

随着工业智能制造的发展&#xff0c;工业企业对设备可视化、远程运维的需求日趋强烈&#xff0c;传统的单机版组态软件已经不能满足越来越复杂的控制需求&#xff0c;那么实现Web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说&#xff0c;将单机版软件转变…

易经智慧解码数字化转型:象数理视角下的未来探索

在数字化浪潮席卷全球的今天&#xff0c;我们不禁思考&#xff1a;国学《易经》的智慧如何与现代的数字化转型相结合&#xff0c;为我们提供独特的洞见和启示&#xff1f;今天我们从易经的象、数、理三个层面&#xff0c;浅析数字化转型的内在逻辑和发展趋势。 象&#xff1a;数…

Python打发无聊时光:14.用PyQt创建一个简易的串口调试助手

第一步&#xff1a;装pyqt5和pyserial库 pip install pyqt5 pyserial 第二步&#xff1a;完整代码 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QComboBox, \QGridLayout, QLineEdit, QTextEdit from P…

酷开科技以酷开系统为媒介,打造欢乐生活场景

家人相聚在一起的时光总是那么美好&#xff0c;在欢聚的日子里&#xff0c;我们也总是希望能够让时间变得慢一点&#xff0c;再慢一点&#xff0c;但是随着春节假期的结束&#xff0c;很多人已经开始了新一年的忙碌&#xff0c;大家纷纷回到工作、学习岗位&#xff0c;回归之前…