[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
D1-H 开发板——哪吒 开发入门
Author: iosdevlog Date: 2022/03/17 Project: RISC-V Linux 内核剖析
背景简介
去年 Linux-Lab v0.9 准备添加 RISC-V 的支持,我也申请到了一个 D1 开发板。
大概是在 2021年8月,我在 Notion 记录了一下如何按通官方文档测试 D1 开发板。
后期由于多种原因,没有继续参加后面的开发测试。
本文准备把之前的笔记整理一下,正式参与到 Linux RISC-V 项目中来。
今天我再次下载源码的时候,发现 repo
初始化不成功,看到网上留言可能是珠海服务器出问题了。
可以去这里 https://pan.baidu.com/s/1v55AKMFripaEu22tJ92lmw?pwd=awol 下载完整版 code。
Tina Linux 系统介绍
【哪吒】是全志在线基于全志科技 D1-H 芯片定制的 AIoT 开发板,是全球首款支持 64bit RISC-V指令集并支持 Linux 系统的可量产开发板。
D1-H 哪吒开发板默认自带 Tina Linux 系统。 Tina Linux 是全志科技基于 Linux 内核开发的针对智能硬件类产品的嵌入式软件系统。Tina Linux 基于 openwrt-14.07 版本的软件开发包,包含了 Linux 系统开发用到的内核源码、驱动、工具、系统中间件与应用程序包。
openwrt 是知名的开源嵌入式 Linux 系统自动构建框架,是由 Makefile 脚本和 Kconfig 配置文件构成的。使得用户可以通过 menuconfig 配置,编译出一个完整的可以直接烧写到机器上运行的 Linux 系统软件。
Tina 系统软件架构如上图所示。
从下至上分别为 Kernel && Driver、Libraries、System Services、Applications 四层。
开发入门
源码下载
全志客户服务平台官网:全志客户服务平台 注册。
V2.0 SDK 仓库下载说明
- 上传公钥
- 安装 repo 引导脚本
- 下载代码
下载服务器统一为:
下载请注意:如有 lichee 和 android 两仓库,务必放在同一级目录
上传公钥
第一步:生成公钥
使用SSH协议下载,通过公钥认证的方式避免输入密码:
客户在本机上生成公钥私钥对(使用命令 ssh-keygen
,一直回车,不用输入口令)。
成功后会在 ~/.ssh/
目录下生成 id_rsa.pub 和 id_rsa 两个文件。
第二步:上传公钥
将 id_rsa.pub 公钥文件内容拷贝,点击 资源下载->公钥管理->创建,上传当前生成的公钥到服务器。公钥上传成功后,即可下载代码。
注意事项:
公钥和私钥文件一定要保存好,不能删除。最好备份这两个文件,误删除时可恢复。
客户下载代码时,如果命令行前面加了
sudo
,那么生成公钥的命令ssh-keygen
前 面也要加sudo
(也就是要么都加sudo
,要么都不加,必须保持一致)。
安装 repo 引导脚本
不能使用 google 的,需要用全志的。
- 从全志服务器下载安装 repo 引导脚本,将 username 替换成客户下载账号的用户名
$ git clone ssh://username@sdk.allwinnertech.com/git_repo/repo.git
- 修改
repo/repo
文件中下面一行,将 username 替换成客户下载账号的用户名
REPO_URL='ssh://username@sdk.allwinnertech.com/git_repo/repo.git'
- 把 repo 引导脚本添加到自己计算机环境变量中
$ cp repo/repo /usr/bin/repo
$ chmod 777 /usr/bin/repo
代码下载
这里会用到 Python2,如果默认安装 Python3,需要切回 Python2。
$ mkdir tina-d1-h
$ cd tina-d1-h
$ python2.7 /usr/bin/repo init -u ssh://<username>@sdk.allwinnertech.com/git_repo/D1_Tina_Open/manifest.git -b master -m tina-d1-h.xml
$ python2.7 /usr/bin/repo sync
$ python2.7 /usr/bin/repo start product-smartx-d1-h-tina-stable-v2.0 --all # 全部下载完成之后,创建分支
编译环境配置
嵌入式产品开发流程中,通常有两个关键的步骤,编译源码与烧写固件。源码编译需要先准备好编译环境,而固件烧写则需要厂家提供专用烧写工具。本文主要介绍如何搭建环境来实现 Tina sdk 的编译和打包。
一个典型的嵌入式开发环境包括本地开发主机和目标硬件板:
本地开发主机作为编译服务器,需要提供 Linux 操作环境,建立交叉编译环境,为软件开发提供代码更新下载,代码交叉编译服务。
本地开发主机通过串口或 USB 与目标硬件板连接,可将编译后的镜像文件烧写到目标硬件板, 并调试系统或应用程序。
编译环境要求
Tina Linux SDK 是在 Ubuntu14.04 开发测试的,推荐使用 Ubuntu 14.04 主机环境进行源码编译。
$ 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
我测试在 Ubuntu 20.04 也可以正常使用:
$ sudo apt-get install libc6-i386 libstdc++6-i386-cross lib32ncurses6 lib32z1 -y
编译和烧写
编译
编译打包命令如下:
source build/envsetup.sh
lunch d1_nezha-tina
make -j32
pack
其中:
source build/envsetup.sh
:获取环境变量lunch d1_nezha-tina
选择 d1_nezha-tina 方案,也可以不加参数直接lunch
,这样会有选项可以选择,其中lunch d1_nezha-tina
是d1_nezha-tina
的标准方案,lunch d1_nezha_min-tina
是只能让系统跑起来的最小系统方案。make -j32
:编译,其中 -j 后面的数字参数为编译用的线程数,可根据开发者编译用的 PC 实际情况选择。pack
: 打包,将编译好的固件打包成一个 .img 格式的固件,固件路径/out/d1_nezha-tina/tina_d1-nezha_uart0.img
。
烧写
烧写,即将编译打包好的固件下载到设备
烧写方式简介
全志平台为开发者提供了多种多样的烧写方式和烧写工具:
(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 等)上,再上机贴片,可提高设备生产效率,需要拉通存储器件前才原厂和全志原厂定制设备联调,适用于超大规模产品的量产。
开发板硬件简介
D1-H 哪吒开发板,宛若一把瑞士军刀,可以连接许多外部设备。
编译第一个程序:Hello World
hello_world.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 文件
编译完成后需要将编译好的 hello_world 文件下载到开发板上运行。
传入文件可使用的方法多种多样,仁者见仁智者见智。可用的方法简传单列举:
- ADB 工具
- nfs 挂载文件系统
- 使用 SD 卡挂载
$ adb push hello_world ./
USB 摄像头拍照 Demo
USB Camera demo 代码包,下载地址:D1-H USB camera demo source code
使用公司的 UVC(webcam) 摄像头测试可以抓取图像。
后面还有更多示例,我就没有一一测试了。
参考文档
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |
Read Album:
- TinyBPT 和面向 buildroot 的二进制包管理服务(3):服务端说明
- TinyBPT 和面向 buildroot 的二进制包管理服务(2):客户端说明
- TinyBPT 和面向 buildroot 的二进制包管理服务(1):设计简介与框架
- RISC-V Linux 内核及周边技术动态第 118 期
- RISC-V Linux 内核及周边技术动态第 117 期