You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

22 KiB

Phytium-Standalone-SDK

v0.1.5 ReleaseNote


1. 介绍

本项目发布了 Phytium 系列 CPU 的 BSP 源码,Baremetal 参考例程及其配置编译工具

title


2. 安装使用

2.1 Windows 10 x86_64 环境下使用 Standalone SDK

2.1.1 在线安装Msys2搭建开发环境

如果不想安装,可以参考 2.1.2 使用已经安装好的Portable开发环境

2.1.1.1 准备安装包
  1. 获取Windows环境安装包

提取码:MGW6

  • msys2, msys2-x86_64-20210725.exe
  • mingw64-arm交叉编译链, gcc-arm-10.3-2021.07-mingw-w64-i686-arm-none-eabi.tar.xz, gcc-arm-10.3-2021.07-mingw-w64-i686-aarch64-none-elf.tar.xz
  • tftp工具,tftp.zip
2.1.1.2 配置开发环境目录
  1. 创建Windows集成开发环境(DEV目录),如D:/phytium-dev, 将DEV目录添加在Windows环境变量中,变量名为PHYTIUM_DEV_PATH,如下图所示,保存环境变量,

对于Windows 10,在桌面左下角系统搜索框中输入“环境变量”即可进入环境变量编辑界面

DEV目录中不要留空格

输入图片说明

  1. 保存DEV环境变量后,打开一个控制台,输入echo %PHYTIUM_DEV_PATH%,检查环境变量是否设置成功,

输入图片说明

2.1.1.3 安装Msys2到开发环境中
  1. 双击msys2-x86_64-20210725.exe,设置Msys2的安装路径在DEV路径下,其余设置按默认安装,注意安装完成后不要马上启动,最后一步取消勾选“马上启动Msys2”

输入图片说明

Msys2安装过程

  1. Msys2安装完成后,需要添加国内软件源,否则下载速度会很慢,进入D:\phytium-dev\msys64\etc\pacman.d目录下,找到以下三个文件,在文件末尾分别添加对应的软件源
  • mirrorlist.mingw32
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
  • mirrorlist.mingw64
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
  • mirrorlist.msys
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
  1. 进入D:\phytium-dev\msys64目录,双击msys2_shell.cmd启动运行Msys2,输入以下命令,更新Msys2软件,安装必要组件

如果执行失败,可以多次尝试,直到没有报错

安装过程全部选用默认方式default或选择y,注意如果没有default = all,需要输入y

$ pacman -Syu
$ pacman -S  mingw-w64-x86_64-toolchain
$ pacman -S  base-devel git python3 python3-pip

更新Msys2软件源

  1. 运行以下命令,检查组件是否安装完全
$ pacman -Q make git wget python3 python3-pip
2.1.1.4 安装SDK和交叉编译链
  • 通过 Gitee 拉取 Standalone SDK 源代码到DEV目录下,如D:\PHYTIUM-DEV\phytium-standalone-sdk
$ git clone https://gitee.com/phytium_embedded/phytium-standalone-sdk.git
 ./phytium-standalone-sdk
$ cd ./phytium-standalone-sdk
  • 将交叉编译链压缩包gcc-arm-10.3-2021.07-mingw-w64-i686-arm-none-eabi.tar.xz, gcc-arm-10.3-2021.07-mingw-w64-i686-aarch64-none-elf.tar.xz放置在D:\PHYTIUM-DEV\phytium-standalone-sdk\tools

  • 创建SDK的profile文件,并添加读写权限

$ touch /etc/profile.d/phytium_standalone_sdk.sh 
$ chmod 666 /etc/profile.d/phytium_standalone_sdk.sh
  • D:\phytium-dev\phytium-standalone-sdk目录下通过Msys2运行./install.py

如果出现安装成功信息[5]: Success!!!表示安装成功,否则根据相应提示信息排查错误

Windows环境不支持使用在线安装,即不支持使用./install.py -online

检查安装需要的组件

SDK安装过程

SDK安装完成

  • 安装完成后重启系统,生效 Standalone SDK 环境, 检查SDK路径是否与环境变量STANDALONE_SDK_ROOT一致

SDK安装完成环境变量

2.1.2 使用Portable的开发环境

  • 下载开发环境然后解压,如D:\PHYTIUM-DEV

下载链接

提取码:MGW6

  • 添加Windows环境变量,PHYTIUM_DEV_PATH(环境变量名不能自定义,必须用这个名字,SDK内部会使用)指向D:\PHYTIUM-DEV(可以自定义)

输入图片说明

  • 通过 Gitee 拉取 Standalone SDK 源代码到DEV目录下的D:\PHYTIUM-DEV\phytium-standalone-sdk
$ git clone https://gitee.com/phytium_embedded/phytium-standalone-sdk.git ./phytium-standalone-sdk
$ cd ./phytium-standalone-sdk
  • 将交叉编译链压缩包gcc-arm-10.3-2021.07-mingw-w64-i686-arm-none-eabi.tar.xz, gcc-arm-10.3-2021.07-mingw-w64-i686-aarch64-none-elf.tar.xz放置在D:\PHYTIUM-DEV\phytium-standalone-sdk\tools

  • 创建SDK的profile文件,并添加读写权限

$ touch /etc/profile.d/phytium_standalone_sdk.sh 
$ chmod 666 /etc/profile.d/phytium_standalone_sdk.sh
  • D:\phytium-dev\phytium-standalone-sdk目录下双击run_mingw64.cmd, 启动Msys2控制台,在控制台输入./install.py完成SDK安装

  • 安装完成后关闭shell重新打开,生效 Standalone SDK 环境, 检查SDK路径是否与环境变量STANDALONE_SDK_ROOT一致

2.1.3 卸载开发环境

  • 在SDK目录D:\phytium-dev\phytium-standalone-sdk目录双击run_mingw64.cmd, 启动Msys2控制台,在控制台输入./uninstall.py完成SDK卸载

  • Msys2控制台运行sudo rm /etc/profile.d/phytium_standalone_sdk.sh,删除SDK配置文件

  • 在DEV目录D:\phytium-dev\tftp下以管理员权限打开Windows命令行中断,运行uninstall.cmd完成Tftd卸载

2.2 Ubuntu 20.04 x86_64 环境下使用 Standalone SDK

2.2.1 选择在线方式安装 SDK

  • 通过 Gitee 拉取 Standalone SDK 源代码
$ git clone https://gitee.com/phytium_embedded/phytium-standalone-sdk.git ~/standalone_sdk
$ cd ~/standalone_sdk
  • 检查 install.py 的执行权限, 如果没有执行权限x,需要利用chmod +x ./install.py添加执行权限
$ ls ./install.py  -l
-rwxrwxrwx 1 usr usr 6353 Jul 21 10:13 ./install.py
  • 在线下载源代码和编译环境,创建SDK的profile,并为用户添加读写权限,然后完成 Standalone SDK 安装

注意不要使用'sudo ./install.py',否则环境变量配置可能不正确

$ sudo touch /etc/profile.d/phytium_standalone_sdk.sh 
$ sudo chmod 666 /etc/profile.d/phytium_standalone_sdk.sh
$ ./install.py -online

输入图片说明

  • 安装完成后重启系统,生效 Standalone SDK 环境

请注意使用虚拟机进行开发时不要将sdk安装在挂载的共享文件夹下,否则交叉编译链的部分链接文件可能无法工作

2.2.2 选择离线方式安装 SDK

  • 下载Phytium Standalone SDK源代码

  • 下载AARCH32编译器

  • 下载AARCH64编译器

  • 解压 phytium_standalone_sdk.zip 为~/standalone_sdk(路径名可以自定义)

  • 将 AARCH32、AARCH64 编译器压缩包放置在~/standalone_sdk/tools(必须放置在 tools 路径下)

  • 确保 install.py 有执行权限,~/standalone_sdkStandalone SDK 安装

$ sudo touch /etc/profile.d/phytium_standalone_sdk.sh
$ sudo chmod 666 /etc/profile.d/phytium_standalone_sdk.sh
$ ./install.py
  • 安装完成后重启系统,生效 Standalone SDK 环境

2.2.3 卸载开发环境

  • 在SDK目录运行./uninstall.py完成SDK卸载

  • 运行sudo rm /etc/profile.d/phytium_standalone_sdk.sh,删除SDK配置文件

2.3 Kylin OS/Ubuntu 20.04 AARCH64 环境下使用 Standalone SDK

2.3.1 选择在线方式安装 SDK

参考 2.3.1 选择在线方式安装 SDK

2.3.2 选择离线方式安装 SDK

  • 下载Phytium Standalone SDK源代码

  • 下载AARCH32编译器

  • 下载AARCH64编译器

  • 解压 phytium_standalone_sdk.zip 为~/standalone_sdk(路径名可以自定义)

  • 将 AARCH32、AARCH64 编译器压缩包放置在~/standalone_sdk/tools(必须放置在 tools 路径下)

  • 确保 install.py 有执行权限,~/standalone_sdkStandalone SDK 安装

$ sudo touch /etc/profile.d/phytium_standalone_sdk.sh
$ ./install.py

2.4 新建一个 baremetal 应用工程

2.4.1 选择工程模板

2.4.1.1 Window环境使用工程
  • 复制~/standalone-sdk/example/template-mingw64目录,作为baremetal应用工程

* 表示可选文件/目录

Kconfig       --> 应用工程配置menu文件
makefile      --> makefile
main.c        --> 包含main函数
sdkconfig     --> 配置输出
sdkconfig.h   --> 配置输出
run_mingw64.cmd --> 启动msys-mingw64控制台*
inc           --> 用户头文件*
src           --> 用户源文件*

输入图片说明

  • 双击run_mingw64.cmd,在当前目录启动mingw64控制台
2.4.1.2 Linux环境使用工程
  • 复制~/standalone-sdk/example/template目录,作为 baremetal 应用工程

* 表示可选文件/目录

$ ls
Kconfig       --> 应用工程配置menu文件
makefile      --> makefile
main.c        --> 包含main函数
sdkconfig     --> 配置输出
sdkconfig.h   --> 配置输出
inc           --> 用户头文件*
src           --> 用户源文件*

请注意使用小写makefile,使用Makefile在部分平台不能被识别

2.4.2 选择目标平台

  • 切换目标平台, e.g FT2000/4 AARCH32, 加载默认配置
make config_ft2004_aarch32

使用FT2000-4作为目标编译平台,通过make config_ft2004_aarch32make config_ft2004_aarch64加载默认配置

使用D2000作为目标编译平台,通过make config_d2000_aarch32make config_d2000_aarch64加载默认配置

  • 编译应用工程, 生成*.bin文件用于下载到开发板
$ make
$ ls
template.bin   --> 二进制文件
template.dis   --> 反汇编文件
template.elf   --> ELF文件
template.map   --> 内存布局文件

输入图片说明

2.5 快速使用例程

~/standalone-sdk/example/aarch32_hello_world

输入图片说明

2.6 下载镜像跳转启动

2.6.1 在 host 侧(Ubuntu 20.04)配置 tftp 服务

  • 在开发环境host侧安装tftp服务
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
  • 新建 tftboot 目录, /mnt/d/tftboot, 确保 tftboot 目录有执行权限chmod 777 /**/tftboot

  • 配置主机 tftpboot 服务, 新建并配置文件/etc/xinetd.d/tftp

# /etc/xinetd.d/tftp

server tftp
{
  socket_type = dgram
  protocol = udp
  wait = yes
  user = root
  server =  /usr/sbin/in.tftpd
  server_args = -s /mnt/d/tftboot
  disable = no
  per_source = 11
  cps = 100 2
  flags = IPv4
}
  • 启动主机tftp服务,生成默认配置
$ sudo service tftpd-hpa start
  • 修改主机tftp配置,指向tftboot目录 修改/etc/default/tftpd-hpa
$ sudo nano /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/mnt/d/tftboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
  • 重启主机tftp服务
$ sudo service tftpd-hpa restart
  • 测试主机tftp服务的可用性

    登录tftp服务,获取tftboot目录下的一个文件

$ tftp 192.168.4.50
tftp> get test1234
tftp> q

2.6.2 在 host 侧(Windows)配置 tftp 服务

  • 将2.1.1章下载的tftp.zip解压到开发环境,如D:\phytium-dev\tftp
  • 管理员权限打开Windows cmd,进入D:\phytium-dev\tftp,运行.\reinstall.cmd完成Tftpd服务安装

输入图片说明

输入图片说明

  • 之后每次使用前,进入Windows服务,手动将一下服务打开

输入图片说明

  • 进入SDK,双击D:\phytium-dev\phytium-standalone-sdk目录下的run_tftd.cmd,启动tftp工具,设置tftp目录和ip

输入图片说明

  • 将镜像文件放置在上图所示的%PHYTIUM_IDE_PATH%\tftp目录下,开发板即可通过tftpboot加载镜像

template_mingw64工程中,通过定义USR_BOOT_DIR可以将编译的镜像自动拷贝带tftp目录下

2.6.3 配置开发板 ip,连通 host 下载启动镜像

  • BIN文件或者ELF文件复制到tftpboot目录
$ cp ./baremetal.bin /mnt/d/tftboot
$ cp ./baremetal.elf /mnt/d/tftboot
  • 连通开发板串口,进入u-boot界面,配置开发板iphostip和网关地址
# setenv ipaddr 192.168.4.20
# setenv serverip 192.168.4.50
# setenv gatewayip 192.168.4.1

镜像启动的地址为0x80100000, 对于BIN文件,需要直接加载到0x80100000,对于ELF文件,启动地址会自动获取,需要加载到DRAM中一段可用的地址,这里选择0x90100000

  • 支持使用以下几种方式跳转启动
    1. AARCH32/AARCH64支持加载BIN文件到启动地址,刷新缓存后,通过go命令跳转启动
# tftpboot 0x80100000 baremetal.bin
# dcache flush
# go 0x80100000
    1. AARCH32/AARCH64支持加载ELF文件到DRAM,通过bootelf解析跳转启动
# tftpboot 0x90100000 baremetal.elf
# bootelf -p 0x90100000

3. SDK 源代码结构

.
├── Kconfig                --> 配置定义
├── LICENSE                --> 版权声明
├── README.md
├── standalone.mk
├── baremetal
│   └── example            --> 裸机例程
|         ├── can_test
|         └── i2c_eeprom
|         └── sdci_test ...
├── arch                   --> 架构相关
|    ├── armv8
|    |     ├── aarch32
|    |     └── aarch64
|    └── common
├── common
├── drivers                --> 外设驱动
|    ├── can
|    └── eth
|    └── gic ...
├── board                  --> 目标平台相关
|    ├── d2000
|    └── ft2004
|    └── e2000
├── configs                --> 各目标平台的默认配置
│   ├── d2000_aarch32_defconfig
│   └── d2000_aarch64_defconfig
|   └── e2000_aarch32_defconfig
|   └── e2000_aarch64_defconfig
|   └── ft2004_aarch32_defconfig
|   └── ft2004_aarch64_defconfig
├── doc
│   ├── ChangeLog.md
│   └── checklist.md
├── install.py             --> 环境变量安装脚本
├── lib                    --> 依赖库
│   ├── Kconfiglib
│   ├── libc
│   └── nostdlib
├── make                    --> Makefile文件
├── scripts                --> 相关脚本
├── third-party            --> 第三方库
└── tools                  --> 编译构建相关工具
    ├── README.md
    ├── gcc-arm-10.2-2020.11-x86_64-aarch64-none-elf

4. 硬件平台

4.1 FT2000-4

FT-2000/4 是一款面向桌面应用的高性能通用 4 核处理器。每 2 个核构成 1 个处理器核簇(Cluster),并共享 L2 Cache。主要技术特征如下:

  • 兼容 ARM v8 64 位指令系统,兼容 32 位指令
  • 支持单精度、双精度浮点运算指令
  • 支持 ASIMD 处理指令
  • 集成 2 个 DDR4 通道,可对 DDR 存储数据进行实时加密
  • 集成 34 Lane PCIE3.0 接口:2 个 X16(每个可拆分成 2 个 X8),2 个 X1
  • 集成 2 个 GMAC,RGMII 接口,支持 10/100/1000 自适应
  • 集成 1 个 SD 卡控制器,兼容 SD 2.0 规范
  • 集成 1 个 HDAudio,支持音频输出,可同时支持最多 4 个 Codec
  • 集成 SM2、SM3、SM4 模块
  • 集成 4 个 UART,1 个 LPC,32 个 GPIO,4 个 I2C,1 个 QSPI,2 个通 用 SPI,2 个 WDT,16 个外部中断(和 GPIO 共用 IO)
  • 集成温度传感器

4.2 D2000

D2000 是一款面向桌面应用的高性能通用 8 核处理器。每 2 个核构成 1 个处理器核簇(Cluster),并共享 L2 Cache。存储系统包含 Cache 子系统和 DDR,I/O 系统包含 PCIe、高速 IO 子系统、千兆位以太网 GMAC 和低速 IO 子系统,主要技术特征如下,

  • 兼容 ARM v8 64 位指令系统,兼容 32 位指令
  • 支持单精度、双精度浮点运算指令
  • 支持 ASIMD 处理指令
  • 集成 2 个 DDR 通道,支持 DDR4 和 LPDDR4,可对 DDR 存储数据进行实时加密
  • 集成 34 Lane PCIE3.0 接口:2 个 X16(每个可拆分成 2 个 X8),2 个 X1
  • 集成 2 个 GMAC,RGMII 接口,支持 10/100/1000 自适应
  • 集成 1 个 SD 卡控制器,兼容 SD 2.0 规范
  • 集成 1 个 HDAudio,支持音频输出,可同时支持最多 4 个 Codec
  • 集成 SM2、SM3、SM4、SM9 模块
  • 集成 4 个 UART,1 个 LPC,32 个 GPIO,4 个 I2C,1 个 QSPI,2 个通用 SPI,2 个 WDT,16 个外部中断(和 GPIO 共用 IO)
  • 集成 2 个温度传感器

5. 支持情况

5.1 外设驱动支持情况

Hardware Interface Platform Supported Platform Developing Component
Generic Intrrupt Controller v3 FT2000/4
E2000
D2000
gic/gicv3
Generic Timer FT2000/4
E2000
D2000
generic_timer
UART (PrimeCell PL011) FT2000/4
E2000
D2000
usart/pl011_uart
10/100/1000MB-ETHERNET FT2000/4
D2000
E2000 eth/f_gmac
CAN FT2000/4 E2000 can/ft_can
GPIO FT2000/4
E2000
D2000
gpio/f_gpio
I2C FT2000/4
D2000
E2000 i2c/dw_i2c
IOMUX FT2000/4
D2000
iomux/f_iomux
QSPI (Nor Flash) FT2000/4
D2000
E2000 qspi/nor_qspi
SPI FT2000/4
D2000
E2000 spi/f_spi
TIMER & TACHO E2000 timer/hw_timer_tacho
SDMMC FT2000/4
D2000
mmc/f_sdmmc
PCIE FT2000/4 E2000
D2000
pcie/fpcie
GDMA E2000 dma/gdma
WDT FT2000/4
D2000
E2000
watchdog/fwdt
NAND E2000 nand/fnand
Third-Party Platform Supported Platform Developing Component
LWIP 2.1.2 FT2000/4
D2000
E2000 lwip-2.1.2
Letter shell 3.1 FT2000/4
D2000
E2000 letter-shell-3.1
Libmetal 1.0.0 FT2000/4
D2000
E2000 libmetal-1.0.0
Sdmmc FT2000/4
D2000
E2000 sdmmc
Yaffs2 E2000

6. 参考资源

  • ARM Architecture Reference Manual
  • ARM Cortex-A Series Programmer’s Guide
  • Programmer Guide for ARMv8-A
  • ARM System Developers Guide Designing and Optimizing System Software
  • FT-2000/4 软件编程手册-V1.4
  • D2000 软件编程手册-V1.0
  • Bare-metal programming for ARM —— A hands-on guide
  • Using the GNU Compiler Collection
  • Using ld, The GNU Linker
  • Using as, The GNU Assembler
  • Armv8-A memory model guide

7. 贡献方法

请联系飞腾嵌入式软件部

huanghe@phytium.com.cn

zhugengyu@phytium.com.cn

wangxiaodong1030@phytium.com.cn


8. 许可协议

Apache-2.0