From 2e629f764db375fdb9b8fef216e5dd2cb3d41efb Mon Sep 17 00:00:00 2001 From: iosdevlog Date: Fri, 18 Mar 2022 01:35:24 +0800 Subject: [PATCH 1/2] article: D1 --- articles/20220317-nezha-d1.md | 238 ++++++++++++++++++++++++++++++++++ articles/images/d1/uvc.jpeg | Bin 0 -> 67782 bytes 2 files changed, 238 insertions(+) create mode 100644 articles/20220317-nezha-d1.md create mode 100644 articles/images/d1/uvc.jpeg diff --git a/articles/20220317-nezha-d1.md b/articles/20220317-nezha-d1.md new file mode 100644 index 0000000..db11888 --- /dev/null +++ b/articles/20220317-nezha-d1.md @@ -0,0 +1,238 @@ +# D1-H 开发板——哪吒 开发入门 + +> Author: iosdevlog +> Date: 2022/03/17 +> Project: https://gitee.com/tinylab/riscv-linux + +## 背景简介 + +去年 Linux-Lab v0.9 准备添加 RISC-V 的支持,我也申请到了一个 D1 开发板。 + +大概是在 2021年8月,我在 [Notion](https://nosion.so) 记录了一下如何按通官方文档测试 D1 开发板。 + +后期由于多种原因,没有断续参加后面的开发测试。 + +本文准备把之前的笔记整理一下,正式参与到 Linux RISC-V 项目中来。 + +今天我再次下载源码的时候,发现 `repo` 初始化不成功,看到网上留言可能是珠海服务器出问题了。 + +可以去这里 下载完整版 code。 + +## Tina Linux 系统介绍 + +【哪吒】是全志在线基于全志科技 D1-H 芯片定制的 AIoT 开发板,是全球首款支持 64bit RISC-V指令集并支持 Linux 系统的可量产开发板。 + +![D1](https://bbs.aw-ol.com/assets/uploads/files/1619509771886-bd24f754-f0d9-46ef-ac17-0123375c1ef3-image.png) + +D1-H 哪吒开发板默认自带 Tina Linux 系统。 Tina Linux 是全志科技基于 Linux 内核开发的针对智能硬件类产品的嵌入式软件系统。Tina Linux 基于 openwrt-14.07 版本的软件开发包,包含了 Linux 系统开发用到的内核源码、驱动、工具、系统中间件与应用程序包。 + +> openwrt 是知名的开源嵌入式 Linux 系统自动构建框架,是由 Makefile 脚本和 Kconfig 配置文件构成的。使得用户可以通过 menuconfig 配置,编译出一个完整的可以直接烧写到机器上运行的 Linux 系统软件。 + +![系统框图](https://d1.docs.aw-ol.com/assets/img/Tina_Linux_ARCH.png) + +Tina 系统软件架构如图所示。 + +从下至上分别为 Kernel && Driver、Libraries、System Services、Applications 四层。 + +## 开发入门 + +### 源码下载 + +#### 全志客户服务平台官网:[全志客户服务平台](https://open.allwinnertech.com/#/login?cas=true) 注册。 + +V2.0 SDK仓库下载说明 + +1. 上传公钥 +2. 安装repo引导脚本 查看详情 +3. 下载代码 + +下载服务器统一为: + +下载请注意:如有 lichee 和 android 两仓库,务必放在同一级目录 + +#### 上传公钥 + +第一步:生成公钥 + +使用SSH协议下载,通过公钥认证的方式避免输入密码: + +客户在本机上生成公钥私钥对(使用命令“ssh-keygen”,一直回车,不用输入口令)。 + +成功后会在~/.ssh/目录下生成 id_rsa.pub 和id_rsa 两个文件。 + +第二步:上传公钥 + +将 id_rsa.pub 公钥文件内容拷贝,点击 资源下载->公钥管理->创建,上传当前生成的公钥到服务器。公钥上传成功后,即可下载代码。 + +![id_rsa.pub](https://open.allwinnertech.com/guide/yht2/assets/AF1C6995-6057-4b87-A9E9-CB349586F5B1.png) + +注意事项: + +1. 公钥和私钥文件一定要保存好,不能删除。最好备份这两个文件,误删除时可恢复。 + +2. 客户下载代码时,如果命令行前面加了sudo,那么生成公钥的命令ssh-keygen 前 +面也要加 sudo(也就是要么都加 sudo,要么都不加,必须保持一致)。 + +#### 安装 repo 引导脚本 + +不能使用 google 的,需要用全志的。 + +1. 从全志服务器下载安装repo引导脚本,将username替换成客户下载账号的用户名 + +``` +$ git clone ssh://username@sdk.allwinnertech.com/git_repo/repo.git +``` + +2. 修改repo/repo文件中下面一行,将username替换成客户下载账号的用户名 + +``` +REPO_URL='ssh://username@sdk.allwinnertech.com/git_repo/repo.git' +``` + +3. 把repo引导脚本添加到自己计算机环境变量中 + +``` +$ cp repo/repo /usr/bin/repo +$ chmod 777 /usr/bin/repo +``` + +#### 代码下载 + +这里会用到 Python 2,如果默认安装 Python3,需要切回 Python2。 + +``` +$ mkdir tina-d1-h +$ cd tina-d1-h +$ python2.7 /usr/bin/repo init -u ssh://@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 主机环境进行源码编译。 + +我测试在 Ubuntu 20.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 +``` + +其中: + +1. `source build/envsetup.sh` :获取环境变量 +2. `lunch d1_nezha-tina` 选择 d1_nezha-tina 方案,也可以不加参数直接 `lunch`,这样会有选项可以选择,其中 `lunch d1_nezha-tina` 是 `d1_nezha-tina` 的标准方案,`lunch d1_nezha_min-tina` 是只能让系统跑起来的最小系统方案。 +3. `make -j32` :编译,其中 -j 后面的数字参数为编译用的线程数,可根据开发者编译用的 PC 实际情况选择。 +4. `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等)上,再上机贴片,可提高设备生产效率,需要拉通存储器件前才原厂和全志原厂定制设备联调,适用于超大规模产品的量产。 + +![PhoenixSuit](https://d1.docs.aw-ol.com/assets/img/image-20210310195432915.png) + +### 开发板硬件简介 + +D1-H哪吒开发板,宛若一把瑞士军刀,可以连接许多外部设备。 + +![连接示意图](https://d1.docs.aw-ol.com/assets/img/image-20210415171224695.png) + +![](https://d1.docs.aw-ol.com/assets/img/D1-H%E5%93%AA%E5%90%92%E6%A1%86%E5%9B%BE.png) + +### 编译第一个程序:Hello Word + +`hello_world.c` + +``` +#include +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_world.c +``` + +下载 Hello Word 文件 + +编译完成后需要将编译好的 hello_word 文件下载到开发板上运行。 + +传入文件可使用的方法多种多样,仁者见仁智者见智。可用的方法简传单列举: + +1. ADB 工具 +2. nfs 挂载文件系统 +3. 使用 SD 卡挂载 + +``` +adb push hello_word ./. +``` + +![adb](https://s3.us-west-2.amazonaws.com/secure.notion-static.com/c80696d3-3860-4157-b272-41f0a6a88799/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220317%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220317T165734Z&X-Amz-Expires=86400&X-Amz-Signature=bb640411add3a1d36dac84e8e64a26c4d3322bf95ff2b874081f8459522a5bc2&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22&x-id=GetObject) + +### USB摄像头拍照 Demo + +USB Camera demo 代码包,下载地址:[D1-H USB camera demo source code](https://www.aw-ol.com/downloads/resources/43) + +![usb camera](https://s3.us-west-2.amazonaws.com/secure.notion-static.com/ee5671bb-c15e-495a-ac58-035f0a8dc102/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220317%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220317T165912Z&X-Amz-Expires=86400&X-Amz-Signature=4bdf9de0e0887dbea4af8663d5ce72627efe128036cec78ad73d78d4316e654c&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22&x-id=GetObject) + +使用公司的 UVC(webcam) 摄像头测试可以抓取图像。 + +![uvc](images/d1/uvc.jpeg) + +后面还有更多示例,我就没有一一测试了。 + +## 参考文档 + +1. [D1-H 芯片介绍](https://d1.docs.aw-ol.com/) +2. [D1_SDK_Howto](https://linux-sunxi.org/D1_SDK_Howto) +3. [ADB Download - Get the latest version of ADB and fastboot](https://adbdownload.com/) + diff --git a/articles/images/d1/uvc.jpeg b/articles/images/d1/uvc.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a0a5f5f5a63dca645de5f7734c0c56f716e76622 GIT binary patch literal 67782 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 literal 0 HcmV?d00001 -- Gitee From 14754d2dd4ab866d03eb471c44eadd56d485cacb Mon Sep 17 00:00:00 2001 From: iosdevlog Date: Fri, 18 Mar 2022 13:37:59 +0800 Subject: [PATCH 2/2] style: d1.md Chinese & English --- articles/20220317-nezha-d1.md | 85 +++++++++++++++++------------------ 1 file changed, 42 insertions(+), 43 deletions(-) diff --git a/articles/20220317-nezha-d1.md b/articles/20220317-nezha-d1.md index db11888..c655b7e 100644 --- a/articles/20220317-nezha-d1.md +++ b/articles/20220317-nezha-d1.md @@ -1,16 +1,16 @@ -# D1-H 开发板——哪吒 开发入门 - > Author: iosdevlog > Date: 2022/03/17 > Project: https://gitee.com/tinylab/riscv-linux +# D1-H 开发板——哪吒 开发入门 + ## 背景简介 去年 Linux-Lab v0.9 准备添加 RISC-V 的支持,我也申请到了一个 D1 开发板。 大概是在 2021年8月,我在 [Notion](https://nosion.so) 记录了一下如何按通官方文档测试 D1 开发板。 -后期由于多种原因,没有断续参加后面的开发测试。 +后期由于多种原因,没有继续参加后面的开发测试。 本文准备把之前的笔记整理一下,正式参与到 Linux RISC-V 项目中来。 @@ -30,7 +30,7 @@ D1-H 哪吒开发板默认自带 Tina Linux 系统。 Tina Linux 是全志科技 ![系统框图](https://d1.docs.aw-ol.com/assets/img/Tina_Linux_ARCH.png) -Tina 系统软件架构如图所示。 +Tina 系统软件架构如上图所示。 从下至上分别为 Kernel && Driver、Libraries、System Services、Applications 四层。 @@ -40,10 +40,10 @@ Tina 系统软件架构如图所示。 #### 全志客户服务平台官网:[全志客户服务平台](https://open.allwinnertech.com/#/login?cas=true) 注册。 -V2.0 SDK仓库下载说明 +V2.0 SDK 仓库下载说明 1. 上传公钥 -2. 安装repo引导脚本 查看详情 +2. 安装 repo 引导脚本 3. 下载代码 下载服务器统一为: @@ -56,9 +56,9 @@ V2.0 SDK仓库下载说明 使用SSH协议下载,通过公钥认证的方式避免输入密码: -客户在本机上生成公钥私钥对(使用命令“ssh-keygen”,一直回车,不用输入口令)。 +客户在本机上生成公钥私钥对(使用命令 `ssh-keygen`,一直回车,不用输入口令)。 -成功后会在~/.ssh/目录下生成 id_rsa.pub 和id_rsa 两个文件。 +成功后会在 `~/.ssh/` 目录下生成 id_rsa.pub 和 id_rsa 两个文件。 第二步:上传公钥 @@ -70,26 +70,26 @@ V2.0 SDK仓库下载说明 1. 公钥和私钥文件一定要保存好,不能删除。最好备份这两个文件,误删除时可恢复。 -2. 客户下载代码时,如果命令行前面加了sudo,那么生成公钥的命令ssh-keygen 前 -面也要加 sudo(也就是要么都加 sudo,要么都不加,必须保持一致)。 +2. 客户下载代码时,如果命令行前面加了 `sudo`,那么生成公钥的命令 `ssh-keygen` 前 +面也要加 `sudo`(也就是要么都加 `sudo`,要么都不加,必须保持一致)。 #### 安装 repo 引导脚本 不能使用 google 的,需要用全志的。 -1. 从全志服务器下载安装repo引导脚本,将username替换成客户下载账号的用户名 +1. 从全志服务器下载安装 repo 引导脚本,将 username 替换成客户下载账号的用户名 ``` $ git clone ssh://username@sdk.allwinnertech.com/git_repo/repo.git ``` -2. 修改repo/repo文件中下面一行,将username替换成客户下载账号的用户名 +2. 修改 `repo/repo` 文件中下面一行,将 username 替换成客户下载账号的用户名 ``` REPO_URL='ssh://username@sdk.allwinnertech.com/git_repo/repo.git' ``` -3. 把repo引导脚本添加到自己计算机环境变量中 +3. 把 repo 引导脚本添加到自己计算机环境变量中 ``` $ cp repo/repo /usr/bin/repo @@ -98,7 +98,7 @@ $ chmod 777 /usr/bin/repo #### 代码下载 -这里会用到 Python 2,如果默认安装 Python3,需要切回 Python2。 +这里会用到 Python2,如果默认安装 Python3,需要切回 Python2。 ``` $ mkdir tina-d1-h @@ -110,28 +110,27 @@ $ python2.7 /usr/bin/repo start product-smartx-d1-h-tina-stable-v2.0 --all # 全 ### 编译环境配置 -嵌入式产品开发流程中,通常有两个关键的步骤,编译源码与烧写固件。源码编译需要先准备 好编译环境,而固件烧写则需要厂家提供专用烧写工具。本文主要介绍如何搭建环境来实现Tina sdk的编译和打包。 +嵌入式产品开发流程中,通常有两个关键的步骤,编译源码与烧写固件。源码编译需要先准备好编译环境,而固件烧写则需要厂家提供专用烧写工具。本文主要介绍如何搭建环境来实现 Tina sdk 的编译和打包。 一个典型的嵌入式开发环境包括本地开发主机和目标硬件板: -本地开发主机作为编译服务器,需要提供 linux 操作环境,建立交叉编译环境,为软件开发提供代码更新下载,代码交叉编译服务。 +本地开发主机作为编译服务器,需要提供 Linux 操作环境,建立交叉编译环境,为软件开发提供代码更新下载,代码交叉编译服务。 -本地开发主机通过串口或USB与目标硬件板连接,可将编译后的镜像文件烧写到目标硬件板, 并调试系统或应用程序。 +本地开发主机通过串口或 USB 与目标硬件板连接,可将编译后的镜像文件烧写到目标硬件板, 并调试系统或应用程序。 -编译环境要求 -Tina Linux SDK 是在 Ubuntu14.04 开发测试的,推荐使用 Ubuntu 14.04 主机环境进行源码编译。 +**编译环境要求** -我测试在 Ubuntu 20.04 也可以正常使用。 +Tina Linux SDK 是在 Ubuntu14.04 开发测试的,推荐使用 Ubuntu 14.04 主机环境进行源码编译。 ``` -命令一: -sudo apt-get update +$ 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 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 也可以正常使用: -Ubuntu 20.04 -sudo apt-get install libc6-i386 libstdc++6-i386-cross lib32ncurses6 lib32z1 -y +``` +$ sudo apt-get install libc6-i386 libstdc++6-i386-cross lib32ncurses6 lib32z1 -y ``` ### 编译和烧写 @@ -152,36 +151,37 @@ pack 1. `source build/envsetup.sh` :获取环境变量 2. `lunch d1_nezha-tina` 选择 d1_nezha-tina 方案,也可以不加参数直接 `lunch`,这样会有选项可以选择,其中 `lunch d1_nezha-tina` 是 `d1_nezha-tina` 的标准方案,`lunch d1_nezha_min-tina` 是只能让系统跑起来的最小系统方案。 3. `make -j32` :编译,其中 -j 后面的数字参数为编译用的线程数,可根据开发者编译用的 PC 实际情况选择。 -4. `pack` : 打包,将编译好的固件打包成一个.img格式的固件,固件路径 `/out/d1_nezha-tina/tina_d1-nezha_uart0.img`。 +4. `pack` : 打包,将编译好的固件打包成一个 .img 格式的固件,固件路径 `/out/d1_nezha-tina/tina_d1-nezha_uart0.img`。 #### 烧写 烧写,即将编译打包好的固件下载到设备 -烧写方式简介 +**烧写方式简介** + 全志平台为开发者提供了多种多样的烧写方式和烧写工具: -(1) PhoenixSuit:基于Windows的系统的烧写工具,是最常用的烧写工具,通过数据线将PC和开发板连接,把固件烧到开发板上,支持分区烧写,适用于开发和小规模生产使用。建议开发者开发时使用该工具进行固件升级。 +(1) PhoenixSuit:基于 Windows 的系统的烧写工具,是最常用的烧写工具,通过数据线将 PC 和开发板连接,把固件烧到开发板上,支持分区烧写,适用于开发和小规模生产使用。建议开发者开发时使用该工具进行固件升级。 -(2)LiveSuit:基于Ubuntu的系统的烧写工具,通过数据线将PC和开发板连接,把固件烧到开发板上,即Ubuntu版的PhoenixSuit,适用于Ubuntu系统开发者进行开发烧写。 +(2)LiveSuit:基于 Ubuntu 的系统的烧写工具,通过数据线将 PC 和开发板连接,把固件烧到开发板上,即 Ubuntu 版的 PhoenixSuit,适用于 Ubuntu 系统开发者进行开发烧写。 -(3)PhoenixUSBpro:基于Windows的系统的烧写工具,通过数据线将PC和开发板连接,把固件烧到开发板上,一台PC可同时连接8台设备,分别控制其进行烧写,适用于产线批量生产。(如下图) +(3)PhoenixUSBpro:基于 Windows 的系统的烧写工具,通过数据线将 PC 和开发板连接,把固件烧到开发板上,一台 PC 可同时连接 8 台设备,分别控制其进行烧写,适用于产线批量生产。 -(4)PhoenixCard:基于Windows的系统的量产SD卡制作工具,可以将普通的.img固件制作成SD卡量产固件,生产时在设备端插入量产SD卡即会自动烧写固件,适用于带SD卡卡槽的设备大规模量产。 +(4)PhoenixCard:基于 Windows 的系统的量产 SD 卡制作工具,可以将普通的 .img 固件制作成 SD 卡量产固件,生产时在设备端插入量产 SD 卡即会自动烧写固件,适用于带 SD 卡卡槽的设备大规模量产。 -(5)存储器件批量烧写生产:用专有设备将提前将固件烧写到未贴片的存储器件(如emmc、nand、nor等)上,再上机贴片,可提高设备生产效率,需要拉通存储器件前才原厂和全志原厂定制设备联调,适用于超大规模产品的量产。 +(5)存储器件批量烧写生产:用专有设备将提前将固件烧写到未贴片的存储器件(如 emmc、nand、nor 等)上,再上机贴片,可提高设备生产效率,需要拉通存储器件前才原厂和全志原厂定制设备联调,适用于超大规模产品的量产。 ![PhoenixSuit](https://d1.docs.aw-ol.com/assets/img/image-20210310195432915.png) ### 开发板硬件简介 -D1-H哪吒开发板,宛若一把瑞士军刀,可以连接许多外部设备。 +D1-H 哪吒开发板,宛若一把瑞士军刀,可以连接许多外部设备。 ![连接示意图](https://d1.docs.aw-ol.com/assets/img/image-20210415171224695.png) ![](https://d1.docs.aw-ol.com/assets/img/D1-H%E5%93%AA%E5%90%92%E6%A1%86%E5%9B%BE.png) -### 编译第一个程序:Hello Word +### 编译第一个程序:Hello World `hello_world.c` @@ -194,17 +194,17 @@ int main(int argc, char const *argv[]) } ``` -交叉编译 +**交叉编译** -交叉编译是指在我们的PC机上编译可以在开发板上运行的可执行程序文件,因为是在上位机上编译,然后在不同体系结构的开发板上跑,所以叫交叉编译。 +交叉编译是指在我们的 PC 机上编译可以在开发板上运行的可执行程序文件,因为是在上位机上编译,然后在不同体系结构的开发板上跑,所以叫 *交叉编译*。 ``` -./prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gcc -o hello_word hello_world.c +./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 Word 文件 +**下载 Hello World 文件** -编译完成后需要将编译好的 hello_word 文件下载到开发板上运行。 +编译完成后需要将编译好的 hello_world 文件下载到开发板上运行。 传入文件可使用的方法多种多样,仁者见仁智者见智。可用的方法简传单列举: @@ -213,12 +213,12 @@ int main(int argc, char const *argv[]) 3. 使用 SD 卡挂载 ``` -adb push hello_word ./. +$ adb push hello_world ./ ``` ![adb](https://s3.us-west-2.amazonaws.com/secure.notion-static.com/c80696d3-3860-4157-b272-41f0a6a88799/Untitled.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220317%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220317T165734Z&X-Amz-Expires=86400&X-Amz-Signature=bb640411add3a1d36dac84e8e64a26c4d3322bf95ff2b874081f8459522a5bc2&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Untitled.png%22&x-id=GetObject) -### USB摄像头拍照 Demo +### USB 摄像头拍照 Demo USB Camera demo 代码包,下载地址:[D1-H USB camera demo source code](https://www.aw-ol.com/downloads/resources/43) @@ -235,4 +235,3 @@ USB Camera demo 代码包,下载地址:[D1-H USB camera demo source code](ht 1. [D1-H 芯片介绍](https://d1.docs.aw-ol.com/) 2. [D1_SDK_Howto](https://linux-sunxi.org/D1_SDK_Howto) 3. [ADB Download - Get the latest version of ADB and fastboot](https://adbdownload.com/) - -- Gitee