zhugengyu
b0afbe0411
|
3 years ago | |
---|---|---|
.gitee | 3 years ago | |
.vscode | 3 years ago | |
arch | 3 years ago | |
baremetal/example | 3 years ago | |
board | 3 years ago | |
common | 3 years ago | |
configs | 3 years ago | |
doc | 3 years ago | |
drivers | 3 years ago | |
lib | 3 years ago | |
make | 3 years ago | |
scripts | 3 years ago | |
third-party | 3 years ago | |
tools | 3 years ago | |
.gitattributes | 3 years ago | |
.gitignore | 3 years ago | |
Kconfig | 3 years ago | |
LICENSE | 3 years ago | |
README.md | 3 years ago | |
install.py | 3 years ago | |
install.sh | 3 years ago | |
requirements.txt | 3 years ago | |
run_mingw64.cmd | 3 years ago | |
run_tftd.cmd | 3 years ago | |
standalone.mk | 3 years ago | |
uninstall.py | 3 years ago |
README.md
Phytium-Standalone-SDK
v0.1.5 ReleaseNote
1. 介绍
本项目发布了 Phytium 系列 CPU 的 BSP 源码,Baremetal 参考例程及其配置编译工具
2. 安装使用
2.1 Windows 10 x86_64 环境下使用 Standalone SDK
2.1.1 在线安装Msys2
搭建开发环境
如果不想安装,可以参考 2.1.2 使用已经安装好的Portable开发环境
2.1.1.1 准备安装包
提取码: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 配置开发环境目录
- 创建Windows集成开发环境(DEV目录),如
D:/phytium-dev
, 将DEV目录添加在Windows环境变量中,变量名为PHYTIUM_DEV_PATH
,如下图所示,保存环境变量,
对于Windows 10,在桌面左下角系统搜索框中输入“环境变量”即可进入环境变量编辑界面
DEV目录中不要留空格
- 保存DEV环境变量后,打开一个控制台,输入
echo %PHYTIUM_DEV_PATH%
,检查环境变量是否设置成功,
2.1.1.3 安装Msys2
到开发环境中
- 双击
msys2-x86_64-20210725.exe
,设置Msys2
的安装路径在DEV路径下,其余设置按默认安装,注意安装完成后不要马上启动,最后一步取消勾选“马上启动Msys2”
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
- 进入
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
- 运行以下命令,检查组件是否安装完全
$ 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
- 安装完成后重启系统,生效 Standalone SDK 环境, 检查SDK路径是否与环境变量
STANDALONE_SDK_ROOT
一致
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
-
下载AARCH32编译器
-
下载AARCH64编译器
-
解压 phytium_standalone_sdk.zip 为
~/standalone_sdk
(路径名可以自定义) -
将 AARCH32、AARCH64 编译器压缩包放置在
~/standalone_sdk/tools
(必须放置在 tools 路径下) -
确保 install.py 有执行权限,
~/standalone_sdk
Standalone 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
-
下载AARCH32编译器
-
下载AARCH64编译器
-
解压 phytium_standalone_sdk.zip 为
~/standalone_sdk
(路径名可以自定义) -
将 AARCH32、AARCH64 编译器压缩包放置在
~/standalone_sdk/tools
(必须放置在 tools 路径下) -
确保 install.py 有执行权限,
~/standalone_sdk
Standalone 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_aarch32
和make config_ft2004_aarch64
加载默认配置
使用
D2000
作为目标编译平台,通过make config_d2000_aarch32
和make 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
界面,配置开发板ip
,host
侧ip
和网关地址
# setenv ipaddr 192.168.4.20
# setenv serverip 192.168.4.50
# setenv gatewayip 192.168.4.1
镜像启动的地址为
0x80100000
, 对于BIN
文件,需要直接加载到0x80100000
,对于ELF
文件,启动地址会自动获取,需要加载到DRAM
中一段可用的地址,这里选择0x90100000
- 支持使用以下几种方式跳转启动
-
AARCH32/AARCH64
支持加载BIN
文件到启动地址,刷新缓存后,通过go
命令跳转启动
# tftpboot 0x80100000 baremetal.bin
# dcache flush
# go 0x80100000
-
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. 贡献方法
请联系飞腾嵌入式软件部
wangxiaodong1030@phytium.com.cn
8. 许可协议
Apache-2.0