libbare-cpu 介绍

libbare-cpu 介绍

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

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

目前主要支持芯片

• X16XX

• X26XX

系统结构

img_01.jpg

源码目录结构

├── 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

主要包含

• gcc libgcc 使用说明

• libc-minimal

• libc-newlib

开发环境搭建

工具链信息汇总

工具链名称 支持芯片系列 Linux下载链接 Windows下载链接 百度网盘链接
XBURST1 X1600系列ftp://ftp.ingenic.com.cn/Ingenic-MIPS-Toolchain/releases/ingenic-mips-toolchain-r5.1.6/mips-ingenic-xburst1-elf-tools-r5.1.6.tar.bz2ftp://ftp.ingenic.com.cn/Ingenic-MIPS-Toolchain/releases/ingenic-mips-toolchain-r5.1.6/mips-ingenic-xburst1-elf-tools-x86_64-w64.r5.1.6.zip链接 提取码: res3
XBURST2 X2000/X2600系列ftp://ftp.ingenic.com.cn/Ingenic-MIPS-Toolchain/releases/ingenic-mips-toolchain-r5.1.6/mips-ingenic-xburst2-elf-tools-r5.1.6.tar.bz2ftp://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链接 提取码: 9g4f
RISC-V V0 X2600系列(RISC-V小核)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.bz2ftp://ftp.ingenic.com.cn/Ingenic-RISCV-Toolchain/Victory0-Series/releases/riscv-ingenic-victory0-series-toolchain-r1.0.0/riscv-ingenic-victory0-series-toolchain-win64-r1.0.0.tar.bz2链接 提取码: nz6i

注意: 如果ftp无法访问,请使用百度网盘链接进行下载。

U-BOOT 下载

• git clone http://git1.ingenic.com.cn:8082/gerrit/bootloader/u-boot -b ingenic-master u-boot-ingenic-master

烧录工具下载

平台 官方下载链接 替代下载方案(百度网盘)
Linuxftp://ftp.ingenic.com.cn/DevSupport/Tools/USBBurner/cloner-latest-ubuntu.tar.gz
Windowsftp://ftp.ingenic.com.cn/DevSupport/Tools/USBBurner/cloner-latest-windows.zip
Linux & Windows
链接 提取码: svwi

参考文档

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

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

开发环境设置

• windows 开发环境搭建

• Linux 开发环境搭建

使用方法

使用示例参考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. 程序烧录

烧录配置

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

img_02.png

3.1 选择烧录配置

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

img_03.png

1. 选择芯片平台"x1600"

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

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

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

3.2 选择烧录镜像

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

img_04.png

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镜像。

2. 选择之前编译完成的裸机驱动程序(二进制*.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

烧录具体选择如下

img_05.png

img_06.png

3.3.2 减少 spl 所占空间修改

注:与 3.3.1 选择一个即可

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

vim include/configs/panda.h

img_07.png

编译执行

make distclean;make panda_rtos_sfc_nor

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

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

img_08.png

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

img_09.png

3.4 详细参考资料

libbare 是裸机SDK, 对应Linux 的SDK 资料更加全面,其中部分开发流程可以参考Linux的开发资料。

• 烧录工具的详细使用

• uboot 开发和配置

芯片平台 资料名称 链接
X16XX 文档仓库X16XX开发手册
X26XX 文档仓库X2600开发手册

4. 创建工程

4.1 基于已有工程

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

1. SDK_PATH 修改

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

   SDK_PATH = ../../

2. 修改CMakelists.txt 工程名称 例如:

Project(my_template)          # Modified

3. 添加源文件 根据工程实际情况,添加需要编译的源文件

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

)

4. 添加头文件路径 根据实际情况,添加需要包含的路径

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
)

5. 添加库路径

link_directories(
${SDK_PATH}/lib/libc/newlib/lib/
)

6. 添加链接的库选项 确保要链接的库在link_directories中定义

set(CMAKE_LD_FLAGS          "${CPU_PARAMETERS}" -lm -lc -lgcc -lnosys)

在线调试

5 JDI调试

5.1.准备调试环境

• JDI 调试环境搭建和使用

5.2. 调试说明

img_10.png

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

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

注意

6 开发板调试

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


评论交流 (共 0 条)