DshanMCU-R128s2 SDK 架構與目錄結構

R128 S2 是全志提供的一款 M33(ARM)+C906(RISCV-64)+HIFI5(Xtensa) 三核異構 SoC,同時芯片內部 SIP 有 1M SRAM、8M LSPSRAM、8M HSPSRAM 以及 16M NORFLASH。

本文檔作為 R128 FreeRTOS SDK 開發指南,旨在幫助軟件開發工程師、技術支持工程師快速上手,熟悉 R128 FreeRTOS SDK 的開發流程。

SDK 架構

R128 包含 3 個核,需要編譯 M33+C906+HIFI5 共3 個核的鏡像。啟動時同時運行三個 RTOS 系統。其中 M33 與 C906 使用的是 FreeRTOS v10.4.3,從 https://www.freertos.org/RTOS.html 獲取,HIFI5 使用的 FreeRTOS 是根據Cadence Support 的推薦的 https://github.com/foss?xtensa/amazon?freertos (tag:v1.7?xtensa)版本

開發 HIFI5 需要 Cadence Xtensa 的 IDE 工具, DSP 的 XCC 工具鏈包。Cadence Xtensa 的授權 License,用于服務器代碼編譯和 Xplorer 仿真使用。這些工具需要向 Cadence 申請授權,鏈接: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 軟件框架

image1

R128 軟件框架如上圖所示,一共4 層,分別為硬件層、內核層、組件層、應用層。

  • Hardware。硬件層包括處理器、內存、存儲介質、無線網卡、總線以及外設等。
  • Kernel。內核層包括FreeRTOS 核心系統、文件系統、網絡系統、BSP 驅動等。
  • Component。組件層包括控制臺、多媒體、功耗管理、OTA、音頻系統、顯示系統、圖像采集等。
  • APP。應用層包括各種應用demo。

SDK 目錄結構

以R128-S2芯片為例,SDK 目錄結構如下,重點目錄進行了展開處理

.
├── board               # 板級配置目錄
│   ├── common          # 公共板級配置目錄
│   │   ├── configs     # 公共板級配置
│   │   └── data        # 公共數據
│   │       ├── reserve # Wi-Fi & BT 固件
│   │       ├── secret  # 公共安全區
│   │       └── UDISK   # 公共 UDISK 分區
│   └── r128s2          # R128 S2 芯片配置目錄
│       ├── 86panel     # R128 S2 86面板開發板 板級配置目錄 
│       │   ├── bin     # 86面板開發板固件,引導等bin
│       │   ├── configs # 86面板開發板配置文件,引腳復用,分區表等配置文件
│       │   │   └── ota # 86面板開發板配置文件,OTA相關配置文件
│       │   └── data    # 86面板開發板數據
│       │       ├── reserve
│       │       ├── secret
│       │       └── UDISK
│       └── module      # R128 S2 Module 模塊板級配置目錄
│           ├── bin     # R128 S2 Module 固件,引導等bin
│           ├── configs # R128 S2 Module 配置文件,引腳復用,分區表等配置文件
│           │   └── ota # R128 S2 Module 配置文件,OTA相關配置文件
│           └── data    # R128 S2 Module 數據
│               ├── reserve
│               ├── secret
│               └── UDISK
├── lichee              # 系統源碼目錄
│   ├── brandy-2.0      # 啟動相關目錄
│   │   ├── tools       # U-Boot 使用的工具鏈
│   │   └── u-boot-2018 # U-Boot 啟動代碼
│   ├── rtos            # M33/C906 FreeRTOS 系統、組件、應用
│   │   ├── arch        # 處理器架構相關代碼
│   │   │   ├── arm     # ARM 處理器初始化、中斷處理、異常處理、內存映射相關功能的實現
│   │   │   │   ├── armv8m
│   │   │   │   └── common
│   │   │   ├── common
│   │   │   └── risc-v  # RISC-V 處理器初始化、中斷處理、異常處理、內存映射相關功能的實現
│   │   │       ├── c906
│   │   │       ├── common
│   │   │       ├── includes
│   │   │       └── sun20iw2p1
│   │   ├── build       # 編譯臨時文件輸出目錄
│   │   ├── components  # 應用組件,libc、多媒體、lvgl等
│   │   │   ├── aw      # Allwinner 提供的組件
│   │   │   │   ├── blkpart
│   │   │   │   ├── bluetooth
│   │   │   │   ├── ...
│   │   │   │   └── wireless_video
│   │   │   ├── common -> ../../rtos-components
│   │   │   └── thirdparty # 第三方提供的組件
│   │   │       ├── common
│   │   │       ├── console
│   │   │       ├── ...
│   │   │       └── vfs
│   │   ├── drivers     # RTOS 驅動
│   │   │   ├── drv
│   │   │   │   ├── bluetooth
│   │   │   │   ├── ...
│   │   │   │   └── wireless
│   │   │   ├── osal
│   │   │   │   └── src
│   │   │   └── rtos-hal -> ../../rtos-hal/
│   │   ├── include     # RTOS 頭文件目錄
│   │   │   ├── arch    # 架構相關頭文件
│   │   │   │   ├── arm
│   │   │   │   └── riscv 
│   │   │   ├── drivers # 驅動相關頭文件
│   │   │   ├── FreeRTOS_POSIX
│   │   │   ├── ...
│   │   │   └── sys
│   │   ├── kernel      # FreeRTOS 內核
│   │   ├── projects    # 方案工程目錄,后文有詳細介紹
│   │   ├── scripts     # 編譯腳手架腳本
│   │   └── tools       # RTOS 使用的工具鏈
│   ├── rtos-components # 公共應用組件,libc、多媒體、lvgl等
│   │   ├── aw          # Allwinner 提供的公共應用組件
│   │   └── thirdparty  # 第三方提供的公共應用組件
│   └── rtos-hal        # RTOS HAL驅動
│       ├── hal         # HAL 驅動
│       ├── include     # HAL 頭文件
│       └── tools       # HAL 相關工具
├── out                 # 打包輸出的臨時文件與最終鏡像文件
│   └── r128s2
│       └── pro
└── tools               # 用于存放打包相關的腳本、工具├── image-file├── scripts├── tool│   └── cppcheck├── win-tools└── xradio-tools├── data├── HcidumpXr├── NLink├── NTest└── sdd_editor

R128 SDK 目錄結構如上所示,主要包括如下幾個關鍵目錄:

  • board:板級配置目錄,用于存放芯片方案的配置文件,主要包括 env 配置、分區表配置、
    sys_config.fex 引腳復用配置等。
  • lichee/brandy?2.0:主要存放uboot 等代碼。
  • lichee/rtos:存放 M33/C906 FreeRTOS 系統、組件、應用。
  • lichee/rtos?components:公共組件目錄。
  • lichee/rtos?hal:HAL BSP 驅動目錄。用于存放各種驅動代碼。
  • out:用于保存打包時輸出的臨時文件與最終鏡像文件。打包時自動生成此目錄。
  • tools:工具目錄,用于存放打包相關的腳本、工具等。

lichee/rtos 目錄

lichee/rtos├── arch        # 處理器架構相關├── build       # 編譯臨時文件輸出目錄├── components  # 組件├── drivers     # 驅動├── include├── kernel      # FreeRTOS內核├── projects    # 方案工程├── scripts└── tools       # 工具鏈

lichee/rtos 目錄主要包括arch(架構相關)、components(組件)、drivers(驅動)、include(頭文件)、kernel(內核)、projects(工程)、toos(工具鏈) 幾個目錄。

arch 目錄

arch 目錄主要放置跟SoC 架構相關的內容,每個SoC 單獨目錄管理,主要包括跟R128 處理器相關的ARCH 初始化、中斷處理、異常處理、內存映射相關功能的實現。

drivers 目錄

drivers 目錄包含R128 所需的外設驅動,主要包括各外設控制器驅動的具體實現(rtos?hal 軟連接)以及OSAL 層接口實現(osal)。

kernel 目錄

kernel 目錄主要包含FreeRTOS 的kernel 源碼,ARMv8M 的portable 源碼以及全志實現的系統功能相關代碼。

.
├── FreeRTOS
│   ├── Makefile
│   └── Source
├── FreeRTOS-orig
│   ├── License
│   ├── Makefile
│   └── Source
├── Kconfig
├── Makefile
├── objects.mk
└── Posix├── CMakeLists.txt├── include├── Makefile└── source
projects 目錄

projects 目錄下的每一個子目錄代表一個SoC 類別,每個 SoC 類別下面存放對應的方案,每個方案都有 m33 與c906 目錄,在這些目錄下面實現各處理器上第一個任務,選擇不同的 project 編譯出來的 bin 具有不同功能。每個 project 有獨立的 FreeRTOSConfig 配置。

.
├── config.h                       # 公共配置頭文件
├── Kconfig                        # Kconfig 引索文件
├── Makefile                       # Makefile
├── objects.mk                     # Makefile 構建腳本
└── r128s2                         # R128 S2 平臺方案├── bt.lds.S                   # 藍牙協議棧等鏈接腳本├── Makefile                   # Makefile 構建腳本├── 86panel_c906               # 86panel 方案 C906 RISC-V 核相關文件│   ├── defconfig              # 軟件包配置文件│   ├── freertos.lds.S         # 鏈接腳本│   ├── Kconfig                # Kconfig 引索文件│   ├── Makefile               # Makefile 構建腳本│   └── src                    # 86panel 方案 C906 RISC-V 核相關源碼│       ├── alsa_config.c      # alsa 框架插件配置文件│       ├── assert.c           # 斷言處理│       ├── card_default.c     # 聲卡配置文件│       ├── FreeRTOSConfig.h   # FreeRTOS 配置文件│       ├── hooks.c            # FreeRTOS 相關鉤子函數配置│       └── main.c             # FreeRTOS 程序入口├── wlan.lds.S                 # WiFi 鏈接文件└── xip.lds.S                  # xip 鏈接文件
Tools 目錄

這個目錄主要包含一些預編譯好的交叉編譯工具鏈,目前M33 基于GCC 8.3.1 的交叉編譯環境,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)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370147.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370147.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370147.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據導出

數據導出和數據導入剛好是相反的,把邏輯反過來就可以了。 源碼:https://github.com/SeaLee02/FunctionModule/blob/master/UploadFiles/WebDemo/COM/DataToOut.aspx 效果: 然后勾選需要導出的數據,生成Excel 部分前臺:…

c語言清空輸入緩沖區函數,c語言:C語言清空輸入緩沖區在標準輸入(stdin)情況 -電腦資料...

C語言清空輸入緩沖區在標準輸入(stdin)情況下的使用程序1://功能:先輸入一個數字,再輸入一個字符,輸出hello bit#include int main(){int num 0;char ch ;scanf("%d", &num);scanf("%c", &ch);pri…

Spring MVC 3:上傳多個文件

只是在辦公室又漫長的一天,數據庫不可用,一個團隊成員現在滯后一周。 因此,我們必須作為一個團隊來交付它。 在Spring3,它看起來很直接上傳文件。 但是,從jsp文件上載多個文件幾乎沒有幫助。 上載多個文件需要完成三件…

spring 事務隔離級別和傳播行為_Spring事務傳播性與隔離性實戰

一、事務傳播性1.1 什么是事務的傳播性事務的傳播性一般在事務嵌套時候使用,比如在事務A里面調用了另外一個使用事務的方法,那么這倆個事務是各自作為獨立的事務執行提交,還是內層的事務合并到外層的事務一塊提交那,這就是事務傳播…

前端為什么非要動靜分離 說一下CDN托管的意義

大型Web應用對速度的追求并沒有止步于僅僅利用瀏覽器緩存,因為瀏覽器緩存始終只是為了提升二次訪問的速度,對于首次訪問的加速,我們需要從網絡層面進行優化,最常見的手段就是CDN(Content Delivery Network,…

unity語音聊天之 www.GetAudioClip

最近在開發語音聊天功能,游戲需要跨平臺安卓與ios,上傳本地錄制的wav文件至服務器后,需要根據服務器返回的地址進行語音文件的下載并進行播放。 這里通過使用www進行下載并播放 其中在ios播放時卻不行了,查詢官方文檔后發現,ios必…

輕談BFC

BFC 定義 CSS2.1的定義 Block formatting contexts 9.4.1 Block formatting contexts Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cells, and table-captions) that are not block boxes, and block boxes with overflow other …

Java中的Selenium / WebDriver示例

幾年前,我正在忙于一些工作,客戶希望了解如何解決現實世界中的問題。 他們要求我自動化woot.com網站上的某些任務。 他們的任務是訪問各個網站,并閱讀當天商品的名稱和價格。 我寫了一些Selenium代碼,以為可以將其張貼在這里&am…

c語言中怎樣實現空格的替換,C語言實現去除字符串中空格的簡單實例

在網上看了些去除空格的代碼,覺得都不是很簡潔,就自己寫代碼實現它本著高效率,不使用額外存儲空間的想法實現該功能去除空格一共有三種:1、去除全部空格;2、一種是去除左邊空格;3、去除右邊空格想去除左右兩邊空格,只要先去除左邊…

python消息隊列中間件_python-RabbtiMQ消息隊列

1.RabbitMQ簡介AMQP,即Advanced Message Queuing Protocol,高級消息隊列協議,是應用層協議的一個開放標準,為面向消息的中間件設計。消息中間件主要用于組件之間的解耦,消息的發送者無需知道消息使用者的存在&#xff…

CSS position(定位)屬性

關于CSS position,來自MDN的描述: CSS position屬性用于指定一個元素在文檔中的定位方式。top、right、bottom、left 屬性則決定了該元素的最終位置。 然后來看看什么是文檔流(normal flow),下面是 www.w3.org 的描述: Normal flo…

tomcat配置文件server.xml詳解

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 目錄(?)[] 元素名 屬性 解釋 server port 指定一個端口,這個端口負責監聽關閉tomcat 的請求 shutdown 指定向端口發送的命令字符串 service name 指定service 的名字 Con…

均值,方差,協方差,協方差矩陣,特征值,特征向量

大牛博客,收藏一下 http://blog.csdn.net/yangleo1987/article/details/52845912轉載于:https://www.cnblogs.com/gaohai/p/8086626.html

Java ByteBuffer –速成課程

以我的經驗,當開發人員第一次遇到java.nio.ByteBuffer時,會引起混亂和細微的錯誤,因為如何正確使用它尚不明顯。 在我對API文檔感到滿意之前,需要反復閱讀API文檔和一些經驗以實現一些微妙之處。 這篇文章是關于如何正確使用它們的…

c語言cth三角函數表示,三角函數與雙曲函數基本公式對照表

圓函數(三角函數)1.基本性質:sin tan cos x x x ,cos cot sin xx x 1sec cos x x ,1csc sin x x tan cot 1x x sin csc 1x x sec cos 1x x 22sin cos 1x x 221tan sec x x ,221cot csc x x 2.奇偶性:sin()sin x x -- cos()cos x x - tan()tan x x --3.…

實現編輯功能有哪幾個action_Web 應用的撤銷重做實現

背景前不久,我參與開發了團隊中的一個 web 應用,其中的一個頁面操作如下圖所示:GIF這個制作間頁面有著類似 PPT 的交互:從左側的工具欄中選擇元素放入中間的畫布、在畫布中可以刪除、操作(拖動、縮放、旋轉等&#xff…

為什么我們要做三份 Webpack 配置文件

時至今日,Webpack 已經成為前端工程必備的基礎工具之一,不僅被廣泛用于前端工程發布前的打包,還在開發中擔當本地前端資源服務器(assets server)、模塊熱更新(hot module replacement)、API Pro…

使用maven插件構建docker鏡像

為什么要用插件 主要還是自動化的考慮,如果額外使用Dockerfile進行鏡像生成,可能會需要自己手動指定jar/war位置,并且打包和生成鏡像間不同步,帶來很多瑣碎的工作。 插件選擇 使用比較多的是spotify的插件:https://github.com/spo…

windows下如何安裝pip以及如何查看pip是否已經安裝成功?

最近剛學習python,發現很多關于安裝以及查看pip是否安裝成的例子都比較老,不太適合于現在(python 3.6 )因此,下一個入門級別的教程。 0:首先如何安裝python我就不做介紹了。 1:如果安裝的是pyth…

檢查用戶顯示器的分辨率

檢查用戶顯示器的分辨率 轉載于:https://www.cnblogs.com/Renyi-Fan/p/8088012.html