首页 > 技能分享

D1-H芯片编译和烧写

作者:未知  来源:网络  阅读:807

编译和烧写

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

*编译环境搭建的方法见:Tina 编译环境配置

*源码下载的方法见:Tina SDK源码获取

编译打包

编译打包命令如下:

source build/envsetup.sh
lunch
make -j32
pack 

其中:

image-20210412172230014

*每次打开一个ubuntu终端只需要做一次获取环境变量和选择方案的操作,在这个终端多次编译的时候不需要再做前两步操作,直接 make -j 即可。

烧写

烧写,即将编译打包好的固件下载到设备

烧写方式简介

全志平台为开发者提供了多种多样的烧写方式和烧写工具:

(1) PhoenixSuit:基于Windows的系统的烧写工具,是最常用的烧写工具,通过数据线将PC和开发板连接,把固件烧到开发板上,支持分区烧写,适用于开发和小规模生产使用。建议开发者开发时使用该工具进行固件升级。

(2)LiveSuit:基于Ubuntu的系统的烧写工具,通过数据线将PC和开发板连接,把固件烧到开发板上,即Ubuntu版的PhoenixSuit,适用于Ubuntu系统开发者进行开发烧写。

(3)PhoenixUSBpro:基于Windows的系统的烧写工具,通过数据线将PC和开发板连接,把固件烧到开发板上,一台PC可同时连接8台设备,分别控制其进行烧写,适用于产线批量生产。(如下图)

(4)PhoenixCard:基于Windows的系统的量产SD卡制作工具,可以将普通的.img固件制作成SD卡量产固件,生产时在设备端插入量产SD卡即会自动烧写固件,适用于带SD卡卡槽的设备大规模量产。

(5)存储器件批量烧写生产:用专有设备将提前将固件烧写到未贴片的存储器件(如emmc、nand、nor等)上,再上机贴片,可提高设备生产效率,需要拉通存储器件前才原厂和全志原厂定制设备联调,适用于超大规模产品的量产。

PhoenixUSBpro界面

PhoenixSuit使用简介

下面主要介绍用PhoenixSuit烧写的方法,LiveSuit和PhoenixUSBpro烧写的方法类似。

PhoenixSuit下载地址:固件烧写工具PhoenixSuit

同时需安装全志USB驱动,下载链接:全志USB驱动

*企业开发者在安装APST的同时也会安装全志USB驱动,无需单独再安装

具体步骤如下:

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

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

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

(4)设备重新到boot的时候会自动进行烧写,可以看到PhoenixSuit的进度条在动;

(5)烧写成功,设备重启。

image-20210310195432915

空设备烧写

当设备第一次烧写时(即设备内没有系统),PC打开烧写工具,设备插入USB,烧写工具工具会自动弹出烧写提示,此时按YES按钮即可进行烧写(需提前在固件处选好要烧写的固件)。

按住fel按键烧写

在开发板正面中间位置有一个fel按键,PC打开烧写工具后,按住fel按键再插入USB上电,此时也会如空设备烧写一样进入烧写模式.

*提示:当PC识别到设备弹出提示后,即可松掉fel键,不用一直按着

已有设备固件烧写

对于已经烧过固件的设备,在开发过程中,可以在串口或ADB终端输入烧写重启命令 reboot efex重启设备,此时设备会重启并在启动过程中自动进入烧写模式,后续烧写过程同上 PhoenixSuit使用简介 。

*串口及ADB调试方法见: USB及串口调试

异常设备的烧写

在开发过程中,可能会出现设备烧写了配置错误的固件导致设备启动异常的情况,这个时候无法按照正常启动设备,也就无法正常控制设备烧写,这就需要强制让设备进入烧写模式。常用的方法有两种:

按住PC键盘的“2”键

设备上电过程中,在串口终端按住PC键盘的“2”不停地输入“2”,设备启动的时候如果检查到“2”的输入,则会自动跳到烧写模式。如图(是真的按住键盘的“2”,很多新开发者不理解这个隐藏操作):
input2

短接Nand

设备上电过程中,用镊子或者杜邦线短接Nand的供电脚(右下脚的两根引脚),这样设备在启动过程中,就会检查不到Nand的存在,误以为这是一片空片,这样设备就会按照空片启动的流程,自动进入烧写模式。如图:短接nand

*提示:当PC识别到设备弹出提示后,即可松掉短接的杜邦线,不用一直短接

进阶编译操作

如果不需要完整编译整个系统,也可以对部分模块进行编译,如单独编译boot0、单独编译uboot、单独编译内核和单独编译某个包等,Tina环境都提供了相应的快捷命令

编译第一个程序:Hello Word

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

前要知识储备

编译工具链准备

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

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

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

riscv64-glibc-gcc-thead_20200702下载

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

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

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

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

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

https://occ.t-head.cn/community/download?id=3913221581316624384

代码编写

创建文件

如果只是用编译工具链单独尝试编译一个小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文件,这个就是可以在开发板上运行的可执行文件。

image-20210716170427965

下载 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_20

D1-H芯片编译和烧写
上一篇:生成安装包
下一篇:介绍几个移动web app开发框架 jQuery Mobile
网站首页 | 免责声明 | 自创新品 | 联系我们 


Copyright ©  All Right Reserved.

黑ICP备2021006573号

黑公网安备23100502000059号

著作登记号:黔作登字-2021-F-00321022