feat(doc/appdev): add 3 articles

add 1 start from scratch and 2 debug articles, add a class debug
This commit is contained in:
Liu Yongkai 2021-04-30 18:51:50 +08:00
parent 51ec4d6fdd
commit 929cac59e4
7 changed files with 398 additions and 0 deletions

View File

@ -29,6 +29,7 @@ const sidebar = {
],
'appdev': [
'/doc/appdev/start_from_scratch/',
'/doc/appdev/debug/'
],
'demo': [
'/doc/demo/dashengda',

View File

@ -3,3 +3,5 @@
---
* [从零开始构建矽璓工业物联操作系统](/doc/appdev/start_from_scratch)
* [调试XiUOS的技巧](/doc/appdev/debug)

View File

@ -0,0 +1,87 @@
# 调试XiUOS的技巧使用JLink调试KD233开发板
# 调试环境
**操作系统:** ubuntu18.04 [ https://ubuntu.com/download/desktop](https://ubuntu.com/download/desktop)
调试工具JLink实物如图
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210427215116310.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70" /></div>
</br>
调试开发板KD233实物如图
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210427215138289.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70" /></div>
# 调试步骤
## 步骤一
1.下载JLink驱动Ubuntu下载DEB包
下载地址:[SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace](https://www.segger.com/downloads/jlink),[推荐下载地址 http://101.36.126.201:8011/JLink_Linux_V720_x86_64.deb](http://101.36.126.201:8011/JLink_Linux_V720_x86_64.deb)
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210427214025688.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70#pic_center" /></div>
</br>
2.安装JLink驱动
```bash
$ dpkg -i JLink_Linux_V632i_x86_64.deb
```
V后面为版本号以下载的为准安装完成后将JLink连接到计算机运行JLinkExe检查其驱动是否已经正确安装如果是将看到以下信息
```bash
$ JLinkExe
SEGGER J-Link Commander V7. 0a (Compiled Apr 16 2021 15:36:25)
DLL version V7.00a, compiled Apr 16 2021 15:36:09
Connecting to J-Link via USB...O.K.
Firmware: J-Link OB-K22-SiFive compiled Mar 3 2021 14:13:05
Hardware version: V1.00
S/N: 979015641
VTref=3.300V
Type "connect" to establish a target connection, '?' for help
J-Link>
```
## 步骤二
1.安装openocd下载Ubuntu版本64位
下载地址:[Releases · kendryte/openocd-kendryte (github.com)](https://github.com/kendryte/openocd-kendryte/releases),推荐下载地址为:[http://101.36.126.201:8011/kendryte-openocd-0.2.3-ubuntu64.tar.gz](http://101.36.126.201:8011/kendryte-openocd-0.2.3-ubuntu64.tar.gz)
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210427214045491.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70#pic_center" /></div>
</br>
2.安装openocd
```bash
$ sudo apt install libusb-dev libftdi-dev libhidapi-dev
$ sudo mv kendryte-openocd-0.2.3-ubuntu64.tar.gz /opt
$ cd /opt
$ sudo tar -zxvf kendryte-openocd-0.2.3-ubuntu64.tar.gz
```
3.修改openocd的配置文件
```bash
$ sudo vim /opt/kendryte-openocd/tcl/openocd.cfg
```
<div align=center><img src="https://img-blog.csdnimg.cn/20210427214102777.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70#pic_center" /></div>
</br>
序列号从JLink的背面标签可以查看也可以在JLink连接计算机后敲击JLinkExe命令看到。
4.打开openocd执行以下命令开始调试
```bash
$ cd /opt/kendryte-openocd
$ ./bin/openocd -f ./tcl/openocd.cfg
```
注意这一步如果报出Error重新插拔JLink解决
## 步骤三
1.步骤二打开openopcd后继续运行gdb
```bash
$ riscv-none-embed-gdb (workspace)/build/XiUOS_kd233.elf --eval-command="target remote 127.0.0.1:3333"
```
其中workspace为实际操作的XiUOS项目的绝对路径XiUOS_kd233.elf是编译生成的文件。
127.0.0.1表示本地IP地址也可以指定远程地址。
3333是openocd监听的端口号。成功连接openocd后就可以使用load、break、continue等gdb命令来调试了。

View File

@ -0,0 +1,124 @@
# 调试XiUOS的技巧使用Qzone调试stm32f407-st-discovery开发板
# 调试XiUOS的技巧使用JLink调试STM32F407-discovery开发板
<!-- TOC -->
- [调试XiUOS的技巧使用Qzone调试stm32f407-st-discovery开发板](#调试xiuos的技巧使用qzone调试stm32f407-st-discovery开发板)
- [调试XiUOS的技巧使用JLink调试STM32F407-discovery开发板](#调试xiuos的技巧使用jlink调试stm32f407-discovery开发板)
- [调试环境](#调试环境)
- [Ozone简介](#ozone简介)
- [调试步骤](#调试步骤)
- [步骤一 (Windows环境下)](#步骤一-windows环境下)
- [步骤二Ubuntu环境下](#步骤二ubuntu环境下)
- [步骤三Ubuntu环境下](#步骤三ubuntu环境下)
<!-- /TOC -->
## 调试环境
操作系统ubuntu 18.04,windows 10
调试工具JLink已集成于开发板
调试开发板STM32F407-discovery实物如图
<div align= "center"><img src = https://i.loli.net/2021/04/30/RWE86qzhKJmtkoS.png></div>
## Ozone简介
Ozone是SEGGER公司开发的用于配合J-Link使用的调试工具可以在运行期间查看内存变量、调用栈及其他信息支持指令断点、内存断点、单步调试、内存监控等多种调试方式。使用Ozone调试stm32f407-st-discovery开发板须先使用SEGGER公司的工具ST-Link Reflash Utility将其板载ST-Link芯片刷成J-Link固件该工具后续也可将板载ST-Link固件恢复为ST-Link。下述Ozone与ST-Link Reflash Utility均可以在SEGGER官网下载到。
## 调试步骤
### 步骤一 (Windows环境下)
切换板载STLink芯片固件至JLink固件:
下载安装stlink驱动及烧录软件[STM32 ST-LINK Utility v3.9.0](http://101.36.126.201:8011/STM32%20ST-LINK%20Utility%20v3.9.0.exe)。链接:`http://101.36.126.201:8011/STM32%20ST-LINK%20Utility%20v3.9.0.exe`
将开发板连接至计算机
</br>
<div align= "center"><img src = https://i.loli.net/2021/04/30/JWtnpyfYRo19ulH.jpg></div>
</br>
开发板默认配置为stlink在设备管理器中可以看到连接的stlink设备
</br>
<div align= "center"><img src = https://i.loli.net/2021/04/30/az6bd34KoFG5hJI.png></div>
</br>
下载SEGGER官方工具下载地址[SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace。](https://www.segger.com/downloads/jlink/#STLink_Reflash)链接:`https://www.segger.com/downloads/jlink/#STLink_Reflash`
</br>
<div align= "center"><img src = https://i.loli.net/2021/04/30/pMUCvseKZ6ncoJq.png></div>
</br>
将下载得到的zip压缩包解压运行STLinkReflash.exe。接受相关协议后进入以下界面
</br>
<div align= "center"><img src = https://i.loli.net/2021/04/30/QnRMP8DOv4AemgC.png></div>
</br>
四个选项分别为:
>[0].退出工具;
>[1].将固件切换至JLink
>[2].升级JLink固件
>[3].将固件切换至STLink。
此处须选择1成功后得到以下输出
Selection>1
Preparing for FW update (can take up to 10 seconds)...O.K.
Identifying ST-LINK variant...O.K.: ST-LINK/V2-1
Performing firmware update...O.K.
此时在设备管理器中可以看到连接了jlink设备
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/img_convert/61fcaba001f96575abfd4a7ca4ab0906.png" /></div>
### 步骤二Ubuntu环境下
下载JLink驱动Ubuntu下载DEB包
下载地址:[SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace](https://www.segger.com/downloads/jlink)
</br>
<div align= "center"><img src = https://i.loli.net/2021/04/30/KaQ9mtVMru8IJsZ.jpg></div>
</br>
安装JLink驱动
dpkg -i JLink_Linux_V632i_x86_64.deb
V后面为版本号以下载的为准安装完成后将JLink连接到计算机运行JLinkExe检查其驱动是否已经正确安装如果是将看到以下信息
$ JLinkExe
SEGGER J-Link Commander V7. 0a (Compiled Apr 16 2021 15:36:25)
DLL version V7.00a, compiled Apr 16 2021 15:36:09
Connecting to J-Link via USB...O.K.
Firmware: J-Link OB-K22-SiFive compiled Mar 3 2021 14:13:05
Hardware version: V1.00
S/N: 979015641
VTref=3.300V
Type "connect" to establish a target connection, '?' for help
J-Link>
### 步骤三Ubuntu环境下
下载OzoneUbuntu下载DEB包下载地址[SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace](https://www.segger.com/downloads/jlink#Ozone)
</br>
<div align= "center"><img src = https://i.loli.net/2021/04/30/jRzep4yWn2IkwUX.png></div>
</br>
安装Ozone:
dpkg -i Ozone_Linux_V322e_x86_64.deb
安装完成后使用运行“Ozone”命令启动Ozone图形界面按照下图设置调试项目期间需要选择XiUOS elf文件位置
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/img_convert/649e26c071b88d85a3c3c73a1c0020ba.png" /></div>
</br>
选中设备:
<div align= "center"><img src ="https://i.loli.net/2021/04/30/r6LXpVtfy4zojUl.png" /></div>
</br>
选择XiaoShanOS_stm32f407-st-discovery.elf
- 注意是elf文件
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/img_convert/59bde30e98b6e8de3162ab7b482ecb67.png" /></div>
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/img_convert/7d650d8840e90cbd27a6001e33c802c0.png" /></div>
</br>
项目建立完成后点击左上角Download and reset program即可将elf下载至开发板并开始调试。此时左上角各按钮即可实现程序暂停、程序重启、单步跳过或单步陷入。注意Ozone下载完固件后会默认在main函数处暂停。
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/img_convert/367fbeb0ffc8be346ea115f298695dd2.png" /></div>

View File

@ -0,0 +1,11 @@
# 调试XiUOS的技巧
---
## 使用ARM架构的开发板
* [STM32F407-ST-DISCOVERY](/doc/appdev/debug/Qzone-stm32f407-st-discovery.md)
## 使用risc-v架构的开发板
* [KD233](/doc/appdev/debug/JLink-KD233.md)

View File

@ -0,0 +1,171 @@
# 从零开始构建矽璓工业物联操作系统使用risc-v架构的HiFive1 Rev B 开发板
[XiUOS](http://xuos.io/) (X Industrial Ubiquitous Operating System) 矽璓工业物联操作系统是一款面向工业物联场景的泛在操作系统,来自泛在操作系统研究计划。所谓泛在操作系统(UOS: Ubiquitous Operating Systems)是支持互联网时代人机物融合泛在计算应用模式的新型操作系统是传统操作系统概念的泛化与延伸。在泛在操作系统技术体系中不同的泛在计算设备和泛在应用场景需要符合各自特性的不同UOSXiUOS即是面向工业物联场景的一种UOS主要由一个极简的微型实时操作系统(RTOS)内核和其上的智能工业物联框架构成,支持工业物联网(IIoT: Industrial Internet of Things)应用。
## 开发环境搭建
### 推荐使用
**操作系统:** ubuntu18.04 [https://ubuntu.com/download/desktop](https://ubuntu.com/download/desktop)
**开发工具推荐使用 VSCode VScode下载地址为** VSCode [https://code.visualstudio.com/](https://code.visualstudio.com/),推荐下载地址为 [http://vscode.cdn.azure.cn/stable/3c4e3df9e89829dce27b7b5c24508306b151f30d/code_1.55.2-1618307277_amd64.deb](http://vscode.cdn.azure.cn/stable/3c4e3df9e89829dce27b7b5c24508306b151f30d/code_1.55.2-1618307277_amd64.deb)
### 依赖包安装
```bash
sudo apt install build-essential pkg-config
sudo apt install gcc make libncurses5-dev openssl libssl-dev bison flex libelf-dev autoconf libtool gperf libc6-dev git
```
**源码下载:** XiUOS [https://forgeplus.trustie.net/projects/xuos/xiuos](https://forgeplus.trustie.net/projects/xuos/xiuos)
新建一个空文件夹并进入文件夹中,并下载源码,具体命令如下:
```bash
mkdir test && cd test
git clone https://git.trustie.net/xuos/xiuos.git
```
打开源码文件包可以看到以下目录:
| 名称 | 说明 |
| -- | -- |
| application | 应用代码 |
| board | 板级支持包 |
| framework | 应用框架 |
| fs | 文件系统 |
| kernel | 内核源码 |
| resources | 驱动文件 |
| tool | 系统工具 |
使用VScode打开代码具体操作步骤为在源码文件夹下打开系统终端输入`code .`即可打开VScode开发环境如下图所示
<div align=center><img src = https://img-blog.csdnimg.cn/20210429154839715.jpg width =1000></div>
### 裁减配置工具的下载
裁减配置工具:
**工具地址:** kconfig-frontends [https://forgeplus.trustie.net/projects/xuos/kconfig-frontends](https://forgeplus.trustie.net/projects/xuos/kconfig-frontends)
```bash
mkdir kfrontends && cd kfrontends
git clone https://git.trustie.net/xuos/kconfig-frontends.git
```
下载源码后按以下步骤执行软件安装:
```bash
cd kconfig-frontends
./xs_build.sh
```
### 编译工具链
RISC-V: riscv-none-embed-默认安装到Ubuntu的/opt/,下载源码并解压。[下载网址 http://101.36.126.201:8011/gnu-mcu-eclipse.tar.bz2](http://101.36.126.201:8011/gnu-mcu-eclipse.tar.bz2)
```bash
tar -xjf gnu-mcu-eclipse.tar.bz2 -C /opt/
```
将上述解压的编译工具链的路径添加到board/hifive1-rev-B/config.mk文件当中例如
```bash
export CROSS_COMPILE ?=/opt/gnu-mcu-eclipse/riscv-none-gcc/8.2.0-2.1-20190425-1021/bin/riscv-none-embed-
```
若已存在`export CROSS_COMPILE ?=xxxx` 应该将原有的语句注释,再写入上面的语句。
# 在HiFive1 Rev B board 上创建第一个应用
## 1.HiFive1 Rev B board 简介
| 硬件 | 描述 |
| -- | -- |
|芯片型号| FE310-G002 |
|架构| RV32IMAC |
|主频| 320+MHz |
|片内SRAM| 16KB |
| 外设 | UART、SPI、I2C |
XiUOS板级当前支持使用UART。
## 2. 代码编写与编译说明
编辑环境:`VScode`
编译工具链:`riscv-none-embed-gcc`
使用`VScode`打开工程的方法有多种,本文介绍一种快捷键,在项目目录下将`code .`输入终端即可打开目标项目
修改`applications`文件夹下`main.c`
在输出函数中写入 Hello, world! \n running on Hifive1 Rev B board完成代码编辑。
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210429102958428.jpg" /></div>
</br>
编译步骤:
1.在VScode终端下执行以下命令生成配置文件
```bash
make BOARD=hifive1-rev-B menuconfig
```
2.在menuconfig界面配置需要关闭和开启的功能按回车键进入下级菜单按Y键选中需要开启的功能按N键选中需要关闭的功能配置结束后选择Exit保存并退出
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210429100605107.png?x-oss-process=none,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70" /></div>
</br>
3.继续执行以下命令,进行编译
```bash
make BOARD=hifive1-rev-B
```
4.如果编译正确无误build文件夹下会产生XiUOS_hifive1-rev-B.elf、XiUOS_hifive1-rev-B.bin文件。其中XiUOS_hifive1-rev-B.bin需要烧写到设备中进行运行。
>注:最后可以执行以下命令,清除配置文件和编译生成的文件
```bash
make BOARD=hifive1-rev-B distclean
```
## 3. 烧写及执行
hifive1-rev-B支持J-Link可以通过J-Link进行烧录和调试。
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210429100749914.png?x-oss-process=none,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70" /></div>
</br>
首先电脑需要安装J-Link Software and Documentation Pack这里以Ubuntu18.04为例,下载 [JLink_Linux_V700_x86_64.deb](https://www.segger.com/downloads/jlink/JLink_Linux_V700_x86_64.deb),推荐使用[http://101.36.126.201:8011/JLink_Linux_V700_x86_64.deb](http://101.36.126.201:8011/JLink_Linux_V700_x86_64.deb)下载,然后执行以下命令安装到电脑上
```bash
sudo apt install ./JLink_Linux_V700_x86_64.deb
```
使用 Micro USB 线将开发板与电脑连接终端执行以下命令进入J-Link控制台并通过J-Link连接设备
```bash
JLinkExe -device FE310 -if jtag -jtagconf -1,-1 -speed 4000
```
命令执行成功后终端如下图:
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210429101023483.png?x-oss-process=none,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70" /></div>
</br>
在J-Link控制台输入connect连接设备如下图
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/202104291011027.png?x-oss-process=none,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70" /></div>
</br>
接着输入erase命令擦除FLASH如图
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210429101126585.png" /></div>
</br>
输入loadbin命令并指定烧录的bin文件和烧录地址将bin文件烧录到开发板中如图
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210429101148844.png?x-oss-process=none,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70" /></div>
### 3.1 运行结果
如果编译 & 烧写无误可以通过screen工具打开串口终端hifive1-rev-B连接电脑后在/dev 目录下会多出/dev/ttyACM0、/dev/ttyACM1两个串口设备一般串口输出为/dev/ttyACM0通过screen命令打开串口
```bash
sudo apt install screen
screen /dev/ttyACM0 115200
```
按下开发板Reset按钮将会在串口终端上看到信息打印输出
</br>
<div align=center><img src="https://img-blog.csdnimg.cn/20210429103145361.jpg?x-oss-process=none,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FJSVRfVWJpcXVpdG91cw==,size_16,color_FFFFFF,t_70" /></div>

View File

@ -11,3 +11,5 @@
* [KD233](/doc/appdev/start_from_scratch/kd233.md)
* [hifive1 emulator](/doc/appdev/start_from_scratch/hifive1-emulator.md)
* [HiFive1 REV B](/doc/appdev/start_from_scratch/HiFive1-Rev-B.md)