libbare-cpu 是Ingenic为其MCU提供的一个底层硬件库,旨在提供不依依赖于操作系统的裸机环境,其结构简单,直接面对硬件控制器寄存器编程,能够实现误操作系统的业务逻辑。同时libbare-cpu提供了基于 freertos/alios/rthtread的porting文件,方便适配到rtos系统,满足对操作系统有需求的用户。
配合Ingenic提供的JTAG调试器,支持使用VSCode 在线调试代码。
目前主要支持芯片
├── 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
├── gcc
│ ├── fp64
│ ├── include
│ └── sof
└── libc
├── minimal
│ └── include
└── newlib
├── include
└── lib
├── fp64
└── sof
主要包含
支持芯片
适用于x86_64(64位)Linux系统: ftp://ftp.ingenic.com.cn/Ingenic-MIPS-Toolchain/releases/ingenic-mips-toolchain-r5.1.6/mips-ingenic-xburst1-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-xburst1-elf-tools-x86_64-w64.r5.1.6.zip
支持芯片
适用于x86_64(64位)Linux host PC:
Linux 平台:
Windows 平台:
参考文档
tools 目录下包含必要的开发工具:
tools
├── dev-tools
│ ├── linux
│ └── windows
│ ├── adb
│ ├── CMake
│ └── mingw64
├── ld.lds
└── windows
└── Windows开发环境搭建.md
Windows 完整开发环境下载链接:
使用示例参考projects/template
$ make
会在build目录生成template.elf, template.bin文件.
前提:确认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文件.
前提:确认cmake 版本 cmake-v3.23.1 ,可以使用最新的cmake版本。 注意:不要使用工具链的cmake。否则vscode 会报错。
流程如下:
windows 开发需要安装相关的软件和系统环境变量配置,参考 Windows开发环境搭建手册
流程如下:
说明: vscode 可以支持在线调试,也可以仅编译后,使用烧录工具烧到开发板运行
前提: 系统必须安装msys - mingw64-make 工具.
$ mkdir build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../mips-gcc-sde-elf.cmake -G "MinGW Makefiles" ../
$ mingw32-make
打开烧录工具,选择配置界面
以x16xx系列芯片x1600e,halley6开发板为例.
选择芯片平台"x1600"
根据开发板配置选择板级。
开发板板载nand flash,选择"x1600e_sfc_nand_lpddr2_linux.cfg"
开发板板载nor flash,选择"x1600e_sfc_nor_lpddr2_linux.cfg"
运行裸机驱动程序需要烧录uboot和裸机程序
注意: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镜像。
*.bin
文件,这里以template.bin为例)到这里烧录配置完成,点击“保存”按钮,保存配置, 回到初始界面后,点击“开始”按钮,开始烧录.
注:目前此启动模式暂时只针对x1600 nor flash panda 板。 该章节中采用的是 spl 启动 raw driver ,3.2 部分采用的是 u-boot 启动。
打开 ubooot 程序在u-boot 目录下进行执行
make distclean;make panda_rtos_sfc_nor;
在 u-boot/spl 目录下生成 u-boot-spl-pad.bin ,烧录工具选择该文件位置以及选择之前编译完成的裸机驱动程序(二进制*.bin
文件,这里以 template.bin 为例),此时 spl 所占大小为 256K
烧录具体选择如下
注:与 3.3.1 选择一个即可
第一步:打开 uboot 源码目录输入,对应图片进行修改如下可作为参考最小 32k 大小
vim include/configs/panda.h
编译执行
make distclean;make panda_rtos_sfc_nor
此时烧录文件为 uboot /spl目录下 u-boot-spl-pad.bin 与编译出的template.bin文件
烧录工具也需要进行对应的修改,按照以下图片进行修改。
需要对 uboot 部分和 kernel部分都修改为与图片一致的数据
可以在project目录下,找到一个合适的工程,复制到新的文件夹,进行以下修改
修改工程目录CMakelists.txt 中SDK_PATH 到 libbare-cpu 根目录,可以是相对路径,也可以使用绝对路径.
SDK_PATH = ../../
Project(my_template) # Modified
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
)
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
)
link_directories(
${SDK_PATH}/lib/libc/newlib/lib/
)
set(CMAKE_LD_FLAGS "${CPU_PARAMETERS}" -lm -lc -lgcc -lnosys)
按下键盘的F5或者Run菜单下的Start Debugging开始调试。等待代码编译并加载完成会出现如图所示界面。图中标注的序号代表不同的工作区域。各个区域含义如下。
1.表示目前处于debug菜单栏,显示各种调试相关的选项视图。
2.显示调试过程中的变量、数组、寄存器值。这些值会随着调试位置变化而动态变化。另外,鼠标放在结构体上也可以显示
3.调试控制区域。6个按钮从左到右依次是:执行到下一个断点(断点位置需手动添加)、执行到下一行、执行到函数体内、从函数体中执行出去、重新开始调试、结束调试。
4.在该区域可以手动添加断点。
5.函数的调用堆栈
6.添加的断点信息
注意
使用配套的panda开发板通过添加打印的方式进行调试。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。