R128 S2 是全志提供的一款 M33(ARM)+C906(RISCV-64)+HIFI5(Xtensa) 三核異構(gòu) SoC,同時芯片內(nèi)部 SIP 有 1M SRAM、8M LSPSRAM、8M HSPSRAM 以及 16M NORFLASH。
本文檔作為 R128 FreeRTOS SDK 開發(fā)指南,旨在幫助軟件開發(fā)工程師、技術(shù)支持工程師快速上手,熟悉 R128 FreeRTOS SDK 的開發(fā)流程。
SDK 架構(gòu)
R128 包含 3 個核,需要編譯 M33+C906+HIFI5 共3 個核的鏡像。啟動時同時運(yùn)行三個 RTOS 系統(tǒng)。其中 M33 與 C906 使用的是 FreeRTOS v10.4.3,從 [https://www.freertos.org/RTOS.html] 獲取,HIFI5 使用的 FreeRTOS 是根據(jù)Cadence Support 的推薦的 [https://github.com/foss?xtensa/amazon?freertos](tag:v1.7?xtensa)版本
開發(fā) HIFI5 需要 Cadence Xtensa 的 IDE 工具, DSP 的 XCC 工具鏈包。Cadence Xtensa 的授權(quán) License,用于服務(wù)器代碼編譯和 Xplorer 仿真使用。 這些工具需要向 Cadence 申請授權(quán) ,鏈接:[https://www.cadence.com/en_US/home/tools/ip/tensilica-ip/technologies.html],Xplorer 下載鏈接:[https://www.cadence.com/en_US/home/tools/ip/tensilica-ip/sdk-download.html]
SDK 軟件框架
R128 軟件框架如上圖所示,一共4 層,分別為硬件層、內(nèi)核層、組件層、應(yīng)用層。
- Hardware。硬件層包括處理器、內(nèi)存、存儲介質(zhì)、無線網(wǎng)卡、總線以及外設(shè)等。
- Kernel。內(nèi)核層包括FreeRTOS 核心系統(tǒng)、文件系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、BSP 驅(qū)動等。
- Component。組件層包括控制臺、多媒體、功耗管理、OTA、音頻系統(tǒng)、顯示系統(tǒng)、圖像采集等。
- APP。應(yīng)用層包括各種應(yīng)用demo。
SDK 目錄結(jié)構(gòu)
以R128-S2芯片為例,SDK 目錄結(jié)構(gòu)如下,重點(diǎn)目錄進(jìn)行了展開處理
.
├── board # 板級配置目錄
│ ├── common # 公共板級配置目錄
│ │ ├── configs # 公共板級配置
│ │ └── data # 公共數(shù)據(jù)
│ │ ├── reserve # Wi-Fi & BT 固件
│ │ ├── secret # 公共安全區(qū)
│ │ └── UDISK # 公共 UDISK 分區(qū)
│ └── r128s2 # R128 S2 芯片配置目錄
│ ├── 86panel # R128 S2 86面板開發(fā)板 板級配置目錄
│ │ ├── bin # 86面板開發(fā)板固件,引導(dǎo)等bin
│ │ ├── configs # 86面板開發(fā)板配置文件,引腳復(fù)用,分區(qū)表等配置文件
│ │ │ └── ota # 86面板開發(fā)板配置文件,OTA相關(guān)配置文件
│ │ └── data # 86面板開發(fā)板數(shù)據(jù)
│ │ ├── reserve
│ │ ├── secret
│ │ └── UDISK
│ └── module # R128 S2 Module 模塊板級配置目錄
│ ├── bin # R128 S2 Module 固件,引導(dǎo)等bin
│ ├── configs # R128 S2 Module 配置文件,引腳復(fù)用,分區(qū)表等配置文件
│ │ └── ota # R128 S2 Module 配置文件,OTA相關(guān)配置文件
│ └── data # R128 S2 Module 數(shù)據(jù)
│ ├── reserve
│ ├── secret
│ └── UDISK
├── lichee # 系統(tǒng)源碼目錄
│ ├── brandy-2.0 # 啟動相關(guān)目錄
│ │ ├── tools # U-Boot 使用的工具鏈
│ │ └── u-boot-2018 # U-Boot 啟動代碼
│ ├── rtos # M33/C906 FreeRTOS 系統(tǒng)、組件、應(yīng)用
│ │ ├── arch # 處理器架構(gòu)相關(guān)代碼
│ │ │ ├── arm # ARM 處理器初始化、中斷處理、異常處理、內(nèi)存映射相關(guān)功能的實(shí)現(xiàn)
│ │ │ │ ├── armv8m
│ │ │ │ └── common
│ │ │ ├── common
│ │ │ └── risc-v # RISC-V 處理器初始化、中斷處理、異常處理、內(nèi)存映射相關(guān)功能的實(shí)現(xiàn)
│ │ │ ├── c906
│ │ │ ├── common
│ │ │ ├── includes
│ │ │ └── sun20iw2p1
│ │ ├── build # 編譯臨時文件輸出目錄
│ │ ├── components # 應(yīng)用組件,libc、多媒體、lvgl等
│ │ │ ├── aw # Allwinner 提供的組件
│ │ │ │ ├── blkpart
│ │ │ │ ├── bluetooth
│ │ │ │ ├── ...
│ │ │ │ └── wireless_video
│ │ │ ├── common - > ../../rtos-components
│ │ │ └── thirdparty # 第三方提供的組件
│ │ │ ├── common
│ │ │ ├── console
│ │ │ ├── ...
│ │ │ └── vfs
│ │ ├── drivers # RTOS 驅(qū)動
│ │ │ ├── drv
│ │ │ │ ├── bluetooth
│ │ │ │ ├── ...
│ │ │ │ └── wireless
│ │ │ ├── osal
│ │ │ │ └── src
│ │ │ └── rtos-hal - > ../../rtos-hal/
│ │ ├── include # RTOS 頭文件目錄
│ │ │ ├── arch # 架構(gòu)相關(guān)頭文件
│ │ │ │ ├── arm
│ │ │ │ └── riscv
│ │ │ ├── drivers # 驅(qū)動相關(guān)頭文件
│ │ │ ├── FreeRTOS_POSIX
│ │ │ ├── ...
│ │ │ └── sys
│ │ ├── kernel # FreeRTOS 內(nèi)核
│ │ ├── projects # 方案工程目錄,后文有詳細(xì)介紹
│ │ ├── scripts # 編譯腳手架腳本
│ │ └── tools # RTOS 使用的工具鏈
│ ├── rtos-components # 公共應(yīng)用組件,libc、多媒體、lvgl等
│ │ ├── aw # Allwinner 提供的公共應(yīng)用組件
│ │ └── thirdparty # 第三方提供的公共應(yīng)用組件
│ └── rtos-hal # RTOS HAL驅(qū)動
│ ├── hal # HAL 驅(qū)動
│ ├── include # HAL 頭文件
│ └── tools # HAL 相關(guān)工具
├── out # 打包輸出的臨時文件與最終鏡像文件
│ └── r128s2
│ └── pro
└── tools # 用于存放打包相關(guān)的腳本、工具
├── image-file
├── scripts
├── tool
│ └── cppcheck
├── win-tools
└── xradio-tools
├── data
├── HcidumpXr
├── NLink
├── NTest
└── sdd_editor
R128 SDK 目錄結(jié)構(gòu)如上所示,主要包括如下幾個關(guān)鍵目錄:
board
:板級配置目錄,用于存放芯片方案的配置文件,主要包括env
配置、分區(qū)表配置、sys_config.fex
引腳復(fù)用配置等。lichee/brandy?2.0
:主要存放uboot 等代碼。lichee/rtos
:存放 M33/C906 FreeRTOS 系統(tǒng)、組件、應(yīng)用。lichee/rtos?components
:公共組件目錄。lichee/rtos?hal
:HAL BSP 驅(qū)動目錄。用于存放各種驅(qū)動代碼。out
:用于保存打包時輸出的臨時文件與最終鏡像文件。打包時自動生成此目錄。tools
:工具目錄,用于存放打包相關(guān)的腳本、工具等。
lichee/rtos 目錄
lichee/rtos
├── arch # 處理器架構(gòu)相關(guān)
├── build # 編譯臨時文件輸出目錄
├── components # 組件
├── drivers # 驅(qū)動
├── include
├── kernel # FreeRTOS內(nèi)核
├── projects # 方案工程
├── scripts
└── tools # 工具鏈
lichee/rtos 目錄主要包括arch(架構(gòu)相關(guān))、components(組件)、drivers(驅(qū)動)、include(頭文件)、kernel(內(nèi)核)、projects(工程)、toos(工具鏈) 幾個目錄。
arch 目錄
arch 目錄主要放置跟SoC 架構(gòu)相關(guān)的內(nèi)容,每個SoC 單獨(dú)目錄管理,主要包括跟R128 處理器相關(guān)的ARCH 初始化、中斷處理、異常處理、內(nèi)存映射相關(guān)功能的實(shí)現(xiàn)。
drivers 目錄
drivers 目錄包含R128 所需的外設(shè)驅(qū)動,主要包括各外設(shè)控制器驅(qū)動的具體實(shí)現(xiàn)(rtos?hal 軟連接)以及OSAL 層接口實(shí)現(xiàn)(osal)。
kernel 目錄
kernel 目錄主要包含F(xiàn)reeRTOS 的kernel 源碼,ARMv8M 的portable 源碼以及全志實(shí)現(xiàn)的系統(tǒng)功能相關(guān)代碼。
.
├── FreeRTOS
│ ├── Makefile
│ └── Source
├── FreeRTOS-orig
│ ├── License
│ ├── Makefile
│ └── Source
├── Kconfig
├── Makefile
├── objects.mk
└── Posix
├── CMakeLists.txt
├── include
├── Makefile
└── source
projects 目錄
projects 目錄下的每一個子目錄代表一個SoC 類別,每個 SoC 類別下面存放對應(yīng)的方案,每個方案都有 m33 與c906 目錄,在這些目錄下面實(shí)現(xiàn)各處理器上第一個任務(wù),選擇不同的 project 編譯出來的 bin 具有不同功能。每個 project
有獨(dú)立的 FreeRTOSConfig
配置。
.
├── config.h # 公共配置頭文件
├── Kconfig # Kconfig 引索文件
├── Makefile # Makefile
├── objects.mk # Makefile 構(gòu)建腳本
└── r128s2 # R128 S2 平臺方案
├── bt.lds.S # 藍(lán)牙協(xié)議棧等鏈接腳本
├── Makefile # Makefile 構(gòu)建腳本
├── 86panel_c906 # 86panel 方案 C906 RISC-V 核相關(guān)文件
│ ├── defconfig # 軟件包配置文件
│ ├── freertos.lds.S # 鏈接腳本
│ ├── Kconfig # Kconfig 引索文件
│ ├── Makefile # Makefile 構(gòu)建腳本
│ └── src # 86panel 方案 C906 RISC-V 核相關(guān)源碼
│ ├── alsa_config.c # alsa 框架插件配置文件
│ ├── assert.c # 斷言處理
│ ├── card_default.c # 聲卡配置文件
│ ├── FreeRTOSConfig.h # FreeRTOS 配置文件
│ ├── hooks.c # FreeRTOS 相關(guān)鉤子函數(shù)配置
│ └── main.c # FreeRTOS 程序入口
├── wlan.lds.S # WiFi 鏈接文件
└── xip.lds.S # xip 鏈接文件
Tools 目錄
這個目錄主要包含一些預(yù)編譯好的交叉編譯工具鏈,目前M33 基于GCC 8.3.1 的交叉編譯環(huán)境,C906 基于GCC 8.4.0 的交叉編譯器。
M33 編譯器
Using built-in specs.
COLLECT_GCC=./arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/R128-FreeRTOS/lichee/rtos/tools/gcc-arm-none-eabi-8-2019-q3-update/bin/../lib/gcc/arm-none-eabi/8.3.1/lto-wrapper
Target: arm-none-eabi
Configured with: /tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/src/gcc/configure --target=arm-none-eabi --prefix=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/install-native --libexecdir=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/install-native/lib --infodir=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/install-native/arm-none-eabi --build=x86_64-linux-gnu --host=x86_64-linux-gnu --with-gmp=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/build-native/host-libs/usr --with-mpfr=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/build-native/host-libs/usr --with-mpc=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/build-native/host-libs/usr --with-isl=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/build-native/host-libs/usr --with-libelf=/tmp/jenkins/jenkins-GCC-8-build_toolchain_docker-594_20190704_1562200936/build-native/host-libs/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Tools for Arm Embedded Processors 8-2019-q3-update' --with-multilib-list=rmprofile
Thread model: single
gcc version 8.3.1 20190703 (release) [gcc-8-branch revision 273027] (GNU Tools for Arm Embedded Processors 8-2019-q3-update)
C906 RISC-V 編譯器
Using built-in specs.
COLLECT_GCC=./riscv64-unknown-elf-gcc
COLLECT_LTO_WRAPPER=/R128-FreeRTOS/lichee/rtos/tools/riscv64-elf-x86_64-20201104/bin/../libexec/gcc/riscv64-unknown-elf/8.4.0/lto-wrapper
Target: riscv64-unknown-elf
Configured with: /ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/build/../source/riscv/riscv-gcc/configure --target=riscv64-unknown-elf --with-mpc=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/lib-for-gcc-x86_64-linux/ --with-mpfr=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/lib-for-gcc-x86_64-linux/ --with-gmp=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/lib-for-gcc-x86_64-linux/ --prefix=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/install --disable-shared --disable-threads --enable-languages=c,c++ --with-system-zlib --enable-tls --enable-libgcctf --with-newlib --with-sysroot=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/install/riscv64-unknown-elf --with-native-system-header-dir=/include --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libgomp --disable-nls --src=../../source/riscv/riscv-gcc --with-pkgversion='T-HEAD RISCV Tools V1.10.2 B20201104' --enable-multilib --with-abi=lp64d --with-arch=rv64gcxthead 'CFLAGS_FOR_TARGET=-Os -mcmodel=medany' 'CXXFLAGS_FOR_TARGET=-Os -mcmodel=medany' CC=gcc CXX=g++
Thread model: single
gcc version 8.4.0 (T-HEAD RISCV Tools V1.10.2 B20201104)
審核編輯 黃宇
-
mcu
+關(guān)注
關(guān)注
146文章
17123瀏覽量
350994 -
SDK
+關(guān)注
關(guān)注
3文章
1035瀏覽量
45903 -
R128
+關(guān)注
關(guān)注
0文章
41瀏覽量
105
發(fā)布評論請先 登錄
相關(guān)推薦
評論