打印
[APM32F4]

apm32f407移植nuttx系统

[复制链接]
878|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
老鸟|  楼主 | 2023-3-25 18:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 老鸟 于 2023-3-25 18:50 编辑

NuttX 是一个实时操作系统(RTOS),强调标准兼容和小型封装,具有从8位到32位微控制器环境的高度可扩展性。
NuttX 主要遵循  Posix 和 ANSI 标准,可以说是所有RTOS中对posix兼容性最高的。
直白点的说就是很多的linux应用程序可以通过简单的修改或不修改直接运行在nuttx中。
小米的Vela系统就是基于nuttx打造的。
nuttx一般是在linux下开发(也可以在windows下,但没尝试过),其开发方式与不使用设备树的linux开发非常相似,
具体的环境搭建过程就不简述了,官网就有教程,这里主要是基于我自己画的一块apm32f407板子的移植

一、芯片级移植:
1.apm32f407属于cortex-m内核,故在nuttx/arch/arm的src和include下新建apm32文件夹
2.参考stm32,将arch/arm/src/stm32下的Make.defs和Kconfig复制到apm32下
3.查看Make.defs,发现有很有源文件直接被添加到了编译选项中,根据mcu的一般配置流程可知最简的系统中仅仅rcc、flash、irq、heap、io、serial等是必须的,而apm32f407是直接兼容stm32f407的,故可以将以下源文件从stm32中复制过来并将stm32替换成apm32。根据启动流程可知,汇编完后会进入__start()函数,故apm_32_start.c也需要复制。其他不必须的文件可从Make.defs中移除,后续有需要再添加
apm32_allocateheap.c、apm32_start.c、apm32_rcc.c、apm32_lse.c、apm32_lsi.c、apm32_gpio.c、apm32_exti_gpio.c、apm32_flash.c、apm32_irq.c、apm32_lowputc.c、apm32_waste.c、apm32_ccm.c、apm32_serial.c、apm32_timerisr
4.复制其他文件:
总的原则就是查看上述必须文件内容,其包含引用其他文件(源文件或头文件等)就从stm32中复制到apm32对应位置,并根据芯片的实际情况做一些修改。这一步的工作量会比较大

5.修改Kconfig文件:
根据apm32f407手册修改芯片外设配置情况(因apm32f407兼容stm32f407,故可以直接删除文件中非407的部分或者不修改)

6.到此处,基本的文件已添加并修改,后续只需要根据编译情况来添加或修改对应的文件,但此时编译器还无法链接到apm32,需将apm32添加到配置文件。修改arch/arm/Kconfig
在Prompt “ARM MCU selection”该choice段内,参考stm32添加apm32:
config ARCH_CHIP_APM32
  bool "Geehy APM32 F1/F4"
  select ARCH_HAVE_MPU
  select ARCH_HAVE_FETCHADD
  select ARCH_HAVE_I2CRESET
  select ARCH_HAVE_HEAPCHECK
  select ARCH_HAVE_PROGMEM
  select ARCH_HAVE_SPI_BITORDER
  select ARCH_HAVE_TICKLESS
  select ARCH_HAVE_TIMEKEEPING
  select ARM_HAVE_MPU_UNIFIED
  select ARMV7M_HAVE_STACKCHECK
  ---help---

              Geehy APM32 architectures (ARMCortex-M3/4).


在config ARCH_CHIP下添加:

default "apm32"              ifARCH_CHIP_APM32


在最后指定源文件:

if ARCH_CHIP_APM32
source"arch/arm/src/apm32/Kconfig"
endif

二、板级移植:
1.在boards/arm/下创建apm32文件夹,将同级目录下stm32/stm32f4discovery复制到apm32下,并重命名为apm32f407-mini
2.修改configs/nsh/defconfig
     CONFIG_ARCH_BOARD="apm32f407-mini"
     CONFIG_ARCH_BOARD_APM32F407_MINI=y
     CONFIG_ARCH_CHIP="apm32"
     CONFIG_ARCH_CHIP_APM32=y
     CONFIG_ARCH_CHIP_APM32F407VG=y
     CONFIG_APM32_USART1=y
     CONFIG_USART1_RXBUFSIZE=128
     CONFIG_USART1_SERIAL_CONSOLE=y
     CONFIG_USART1_TXBUFSIZE=128

3.根据板子实际情况修改include/board.h,主要是一些时钟配置、外设引脚配置等

4.根据nuttx启动流程可知,只有apm32_boot.c、apm32_bringup.c、apm32_appinit.c是必须的,故可以将src下的其他xxx.c文件删除

5.在src下编写Makefile文件,添加对上述源文件的编译支持(修改Make.defs无效,暂未找到原因)
include$(TOPDIR)/Make.defs

CSRCS =apm32_boot.c apm32_bringup.c

ifeq($(CONFIG_BOARDCTL),y)
CSRCS +=apm32_appinit.c
ifeq($(CONFIG_BOARDCTL_RESET),y)
CSRCS +=apm32_reset.c
endif
endif

include$(TOPDIR)/boards/Board.mk

6.修改apm32f407-mini下的Kconfig,因该配置文件仅针对板级的配置,我们最简系统可以不使用其他东西,故Kconfig下的内容可以移除
7.到此处,板级文件已基本配置,但编译器还无法链接到该板级文件。
修改boards/Kconfig:
在"Select target board"的choice段下添加apm32f407-mini板
config ARCH_BOARD_APM32F407_MINI
   bool "Geehy APM32F407-Mini board"
   depends on ARCH_CHIP_APM32F407VG
   ---help---

                    Geehy APM32F407-Mini board based on theGeehy apm32F407VGT6 MCU.


在config ARCH_BOARD段最后添加:
default "apm32f407-mini"           if ARCH_BOARD_APM32F407_MINI

在comment"Board-Specific Options"段最后添加:
ifARCH_BOARD_APM32F407_MINI
source"boards/arm/apm32/apm32f407-mini/Kconfig"
endif


8.到此处移植的基本工作已经完成,后续主要是根据编译情况进行查漏补缺了


三、编译:
在nuttx源码目录下执行:./tools/configure.sh  apm32f407-mini/nsh导入配置
执行make menuconfig,按需修改配置后保存
执行make  -j16编译系统,根据编译的报错情况处理未修改到位的地方
四、烧录运行



附件放一个本次移植芯片级的和板级的文件夹,只需修改下arch/arm/Kconfig和boards/Kconfig即可使用,consol使用的PA9/10串口1。由于手上只有自己做的这块板子,目前芯片级和板级都只做了这个的支持,如果后续有其他芯片或板子的话再放些其他的移植



捕获.PNG (39.36 KB )

运行情况

运行情况

芯片级.tar

928 KB

板级.tar

72 KB

使用特权

评论回复
沙发
jtracy3| | 2023-4-12 21:17 | 只看该作者
nuttx与uCOS、FreeRTOS这类已经普及的实时操作系统差异巨大

使用特权

评论回复
板凳
lihuami| | 2023-4-12 21:29 | 只看该作者
这个移植的难度大吗              

使用特权

评论回复
地板
uptown| | 2023-4-12 21:48 | 只看该作者
NuttX是一个成熟的实时操作系统

使用特权

评论回复
5
chenjun89| | 2023-4-12 21:56 | 只看该作者
天哪,太多操作系统了,NuttX又是个啥系统?

使用特权

评论回复
6
lzmm| | 2023-4-13 20:33 | 只看该作者
开发环境目前仅支持linux吧

使用特权

评论回复
7
lzbf| | 2023-4-13 21:28 | 只看该作者
NuttX 是一个实时操作系统(RTOS),强调标准兼容和小型封装,具有从8位到32位微控制器环境的高度可扩展性。

使用特权

评论回复
8
updownq| | 2023-4-13 22:50 | 只看该作者
这是物联网系统吗              

使用特权

评论回复
9
mnynt121| | 2023-5-5 20:36 | 只看该作者
Nuttx系统提供了完整的实时操作系统功能集,包括任务管理、内存管理、中断处理、设备驱动程序、文件系统等。

使用特权

评论回复
10
dspmana| | 2023-5-5 20:50 | 只看该作者
如何用keil将nuttx系统编译到嵌入式系统中呢?

使用特权

评论回复
11
老鸟|  楼主 | 2023-5-5 20:55 | 只看该作者
dspmana 发表于 2023-5-5 20:50
如何用keil将nuttx系统编译到嵌入式系统中呢?

nuttx一般是在linux下开发,windows下搭环境比较麻烦,keil应该是用不了

使用特权

评论回复
12
rosemoore| | 2023-5-5 20:59 | 只看该作者
nuttx系统的目标是提供高效、可靠和易于使用的实时操作系统解决方案。

使用特权

评论回复
13
macpherson| | 2023-5-5 22:12 | 只看该作者
支持网络协议栈和一些常用的应用程序,例如TCP/IP协议栈、Web服务器、Telnet服务器、FTP和TFTP客户端以及Shell等。

使用特权

评论回复
14
gygp| | 2023-5-5 23:57 | 只看该作者
开源嵌入式操作系统NuttX的物联网系统

使用特权

评论回复
15
biechedan| | 2023-5-6 00:33 | 只看该作者
Nuttx系统是一个开源的实时操作系统,主要针对嵌入式设备和嵌入式系统。

使用特权

评论回复
16
caigang13| | 2023-5-9 08:09 | 只看该作者
现在的嵌入式操作系统真多,眼花缭乱啊。

使用特权

评论回复
17
麻花油条| | 2023-5-9 11:16 | 只看该作者
这个操作系统啥时候出来的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝