13 Star 6 Fork 3

ingenic / libbare-cpu

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

libbare-cpu 介绍

libbare-cpu 是Ingenic为其MCU提供的一个底层硬件库,旨在提供不依依赖于操作系统的裸机环境,其结构简单,直接面对硬件控制器寄存器编程,能够实现误操作系统的业务逻辑。同时libbare-cpu提供了基于 freertos/alios/rthtread的porting文件,方便适配到rtos系统,满足对操作系统有需求的用户。

配合Ingenic提供的JTAG调试器,支持使用VSCode 在线调试代码。

目前主要支持芯片

  • X16XX
  • X26XX

系统结构

Alt text

源码目录结构

├── cpu
│   ├── core                    # CPU 体系结构相关,主要是mips xburst系列.
│   └── soc-x16xx               # soc-x16xx 系列芯片寄存器定义
│   └── soc-x2000               # soc-x2000 系列芯片寄存器定义<X2000/X2000E/X2100/X2000H>
├── Doxyfile                    # 用于生成API文档
├── drivers
│   ├── bsp                     # 开发板级相关的驱动,例如:开发板上的camera/lcd驱动等,封装成库文件
│   │   ├── common
│   │   ├── x16xx-halley6       # [chipname]-[devboard]
│   │   └── x2000-halley5
│   ├── core                    # mips架构,用于适配不同系统的文件,支持裸系统bare/alios/rtthread/freertos.
│   │   ├── alios
│   │   ├── bare
│   │   ├── freertos
│   │   └── rtthread
│   ├── core-riscv              # riscv架构,用于适配不同系统的文件,支持裸系统bare/alios/rtthread/freertos.
│   └── drivers-x16xx           # soc-x16xx 对应的hal 寄存器驱动
│   ├── drivers-x2000           # soc-x2000 对应的hal 寄存器驱动
│   ├── drivers-x2600           # soc-x2600 对应的hal 寄存器驱动
├── lib
│   ├── gcc                     # gcc 库
│   └── libc
|       ├── minimal             # 最小的C库实现,不支持浮点
│       └── newlib              # 移植的newlibc,支持浮点和软浮点
├── Middlewares                 # 中间组件
│   ├── Third_Party
│   └── X16XX_USB_Device_Library
├── projects                    # 工程示例
│   ├── x16xx-halley6           # 针对 x16xx系列芯片 halley6开发板的示例程序.
│   │   ├── Apps                # 实现某些有特色功能的应用程序,例如:音频播放器,camera recorder 等等。
│   │   ├── Demos               # 结合市场需求,开发的具有特色的产品推广的 demo.
│   │   ├── Examples            # 针对芯片控制器编写的使用示例,例如:串口,SPI,I2C 等等.
│   │   └── Templates           # 工程模板,可以复制Templates到其他文件夹,进行工程创建.
│   ├── x2000-halley5           # 针对 x2000系列芯片 halley5开发板的示例程序.
│   │   ├── Apps                # 实现某些有特色功能的应用程序,例如:音频播放器,camera recorder 等等。
│   │   ├── Demos               # 结合市场需求,开发的具有特色的产品推广的 demo.
│   │   ├── Examples            # 针对芯片控制器编写的使用示例,例如:串口,SPI,I2C 等等.
│   │   └── Templates           # 工程模板,可以复制Templates到其他文件夹,进行工程创建.
│   └── x2660-halley          	# 针对 x2600系列芯片 halley开发板的示例程序. 支持mips/riscv体系结构的程序.
│       ├── Apps
│       ├── Demos
│       ├── Examples
│       └── Templates
├── README.md
└── tools
    ├── astyle.sh
    ├── create_project.py
    ├── ld.lds                  # 系统的链接脚本
    ├── proj
    ├── vscode_template
    ├── dev-tools
    |    ├── Windows            # windows 开发工相关软件安装包
    |    └── Linux              # Linux 开发工具相关软件
    └── windows

lib 目录说明

├── gcc
│   ├── fp64
│   ├── include
│   └── sof
└── libc
    ├── minimal
    │   └── include
    └── newlib
        ├── include
        └── lib
            ├── fp64
            └── sof

主要包含

开发环境搭建

交叉工具链下载

XBURST1 工具链

XBURST2 工具链

  • 支持芯片
    • X2000 系列
    • X2600 系列 (MIPS主核)
  • 适用于x86_64(64位)Linux系统:

ftp://ftp.ingenic.com.cn/Ingenic-MIPS-Toolchain/releases/ingenic-mips-toolchain-r5.1.6/mips-ingenic-xburst2-elf-tools-r5.1.6.tar.bz2

  • 适用于x86_64(64位) Win10/Win11操作系统:

ftp://ftp.ingenic.com.cn/Ingenic-MIPS-Toolchain/releases/ingenic-mips-toolchain-r5.1.6/mips-ingenic-xburst2-elf-tools-x86_64-w64.r5.1.6.zip

RISC-V V0 工具链

  • 支持芯片

    • X2600 系列 (RISCV 小核)
  • 适用于x86_64(64位)Linux host PC:

ftp://ftp.ingenic.com.cn/Ingenic-RISCV-Toolchain/Victory0-Series/releases/riscv-ingenic-victory0-series-toolchain-r1.0.1/riscv-ingenic-victory0-series-toolchain-r1.0.1.tar.bz2

U-BOOT 下载

烧录工具下载

Linux 平台:

Windows 平台:

参考文档

tools 目录下包含必要的开发工具:

tools
├── dev-tools
│   ├── linux
│   └── windows
│       ├── adb
│       ├── CMake
│       └── mingw64
├── ld.lds
└── windows
    └── Windows开发环境搭建.md

Windows 完整开发环境下载链接:

使用方法

使用示例参考projects/template

2.1 Linux 平台开发

2.1.1 基于Makefile编译

$ make

会在build目录生成template.elf, template.bin文件.

2.1.2 基于cmake构建

前提:确认cmake 版本 cmake-v3.23.1 ,可以使用最新的cmake版本。

$ mkdir build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../mips-gcc-sde-elf.cmake ..
$ make

会在build目录下生成template.elf,template.bin文件.

2.1.3 基于vscode 集成开发环境

前提:确认cmake 版本 cmake-v3.23.1 ,可以使用最新的cmake版本。 注意:不要使用工具链的cmake。否则vscode 会报错。

流程如下:

  1. vscode 打开工程
  2. 选择cmake kits:cmake-kits "GCC for ingenic cross compile on Linux"
  3. lunch(F5) 运行编译、调试
  4. 选择状态栏,build, 进行代码编译.

2.2 windows 平台开发

windows 开发需要安装相关的软件和系统环境变量配置,参考 Windows开发环境搭建手册

2.2.1 基于vscode集成开发环境

流程如下:

  1. vscode 打开创建好的工程文件夹,例如 projects/template 文件夹
  2. 选择cmake-kits "GCC for ingenic cross compile on Windows"
  3. lunch(F5) 运行编译、调试
  4. 或者选择状态栏,build,仅编译.

说明: vscode 可以支持在线调试,也可以仅编译后,使用烧录工具烧到开发板运行

2.2.2 基于命令行编译

前提: 系统必须安装msys - mingw64-make 工具.

$ mkdir build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../mips-gcc-sde-elf.cmake -G "MinGW Makefiles" ../
$ mingw32-make

3. 程序烧录

烧录配置

打开烧录工具,选择配置界面

3.1 选择烧录配置

以x16xx系列芯片x1600e,halley6开发板为例.

  1. 选择芯片平台"x1600"

  2. 根据开发板配置选择板级。

    开发板板载nand flash,选择"x1600e_sfc_nand_lpddr2_linux.cfg"

    开发板板载nor flash,选择"x1600e_sfc_nor_lpddr2_linux.cfg"

3.2 选择烧录镜像

运行裸机驱动程序需要烧录uboot和裸机程序

  1. 选择uboot镜像, u-boot-with-spl.bin

注意:uboot镜像需要另外修改和编译,uboot需要将裸机程序引导在0x80600000地址进行启动,所以需要修改其boot command。

以halley6开发板为例,在Manhattan工程的u-boot目录,修改uboot板级配置文件( u-boot/include/configs/halley6.h )中boot command的定义, 根据板载flash类型进行区分: Nor flash:

#define CONFIG_BOOTCOMMAND "sfcnor read 0x40000 0x600000 0x80600000;go 0x80600000"

Nand flash:

#define CONFIG_BOOTCOMMAND "sfcnand read 0x100000 0x800000 0x80600000;go 0x80600000"

修改保存之后,回到u-boot/目录,进行编译,同样根据板载flash类型进行区分: Nor flash: 执行make halley6_uImage_sfc_nor -j Nand flash: 执行make halley6_uImage_sfc_nand -j

编译成功之后,就会在该目录下生成u-boot-with-spl.bin镜像。

  1. 选择之前编译完成的裸机驱动程序(二进制*.bin文件,这里以template.bin为例)

到这里烧录配置完成,点击“保存”按钮,保存配置, 回到初始界面后,点击“开始”按钮,开始烧录.

3.3 spl 启动 raw driver

注:目前此启动模式暂时只针对x1600 nor flash panda 板。 该章节中采用的是 spl 启动 raw driver ,3.2 部分采用的是 u-boot 启动。

3.3.1 uboot 编译 spl

​ 打开 ubooot 程序在u-boot 目录下进行执行

make distclean;make panda_rtos_sfc_nor;

​ 在 u-boot/spl 目录下生成 u-boot-spl-pad.bin ,烧录工具选择该文件位置以及选择之前编译完成的裸机驱动程序(二进制*.bin文件,这里以 template.bin 为例),此时 spl 所占大小为 256K

​ 烧录具体选择如下

image-20230407184809368

image-20230407190031456

3.3.2 减少 spl 所占空间修改

注:与 3.3.1 选择一个即可

第一步:打开 uboot 源码目录输入,对应图片进行修改如下可作为参考最小 32k 大小

vim include/configs/panda.h

image-20230410114925484

编译执行

make distclean;make panda_rtos_sfc_nor

此时烧录文件为 uboot /spl目录下 u-boot-spl-pad.bin 与编译出的template.bin文件

烧录工具也需要进行对应的修改,按照以下图片进行修改。

image-20230407191433075

需要对 uboot 部分和 kernel部分都修改为与图片一致的数据

image-20230407191534290

4. 创建工程

4.1 基于已有工程

可以在project目录下,找到一个合适的工程,复制到新的文件夹,进行以下修改

  1. SDK_PATH 修改
   修改工程目录CMakelists.txt 中SDK_PATH 到 libbare-cpu 根目录,可以是相对路径,也可以使用绝对路径.

   SDK_PATH = ../../
  1. 修改CMakelists.txt 工程名称 例如:
Project(my_template)          # Modified
  1. 添加源文件 根据工程实际情况,添加需要编译的源文件
set(sources_SRCS                    # Modified
    ${SDK_PATH}/cpu/core/genex.S
    ${SDK_PATH}/cpu/core/spinlock.c
    ${SDK_PATH}/cpu/core/start.S
    ${SDK_PATH}/cpu/core/traps.c
    ${SDK_PATH}/cpu/soc-x16xx/interrupt.c
    ${SDK_PATH}/cpu/soc-x16xx/serial.c
    ${SDK_PATH}/cpu/soc-x16xx/startup.c
    ${SDK_PATH}/drivers/drivers-x16xx/src/x16xx_hal_def.c
    ${SDK_PATH}/lib/libc/minimal/ctype.c
    ${SDK_PATH}/lib/libc/minimal/div64.c
    ${SDK_PATH}/lib/libc/minimal/string.c
    ${SDK_PATH}/lib/libc/minimal/vsprintf.c
    main.c

)
  1. 添加头文件路径 根据实际情况,添加需要包含的路径
include_directories(
    ${SDK_PATH}/lib/libc/minimal/include
    ${SDK_PATH}/drivers/drivers-x16xx/include
    ${SDK_PATH}/cpu/core/include
    ${SDK_PATH}/cpu/soc-x16xx/include
)
  1. 添加库路径
link_directories(
${SDK_PATH}/lib/libc/newlib/lib/
)
  1. 添加链接的库选项 确保要链接的库在link_directories中定义
set(CMAKE_LD_FLAGS		    "${CPU_PARAMETERS}" -lm -lc -lgcc -lnosys)

在线调试

5 JDI调试

5.1.准备调试环境

5.2. 调试说明

按下键盘的F5或者Run菜单下的Start Debugging开始调试。等待代码编译并加载完成会出现如图所示界面。图中标注的序号代表不同的工作区域。各个区域含义如下。

1.表示目前处于debug菜单栏,显示各种调试相关的选项视图。
2.显示调试过程中的变量、数组、寄存器值。这些值会随着调试位置变化而动态变化。另外,鼠标放在结构体上也可以显示
3.调试控制区域。6个按钮从左到右依次是:执行到下一个断点(断点位置需手动添加)、执行到下一行、执行到函数体内、从函数体中执行出去、重新开始调试、结束调试。
4.在该区域可以手动添加断点。
5.函数的调用堆栈
6.添加的断点信息

注意

6 开发板调试

使用配套的panda开发板通过添加打印的方式进行调试。

空文件

简介

适用于君正芯片平台,裸系统驱动 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/ingenic-dev/libbare-cpu.git
git@gitee.com:ingenic-dev/libbare-cpu.git
ingenic-dev
libbare-cpu
libbare-cpu
develop/master

搜索帮助