nuttx应用笔记1---启动过程分析

前言:
前段时间有过linux的初级学习经历,了解到它的启动过程,大概分为初始化、运行init进程、挂载根文件系统、脚本解析、创建任务等。Nuttx也大同小异,现梳理一下其启动流程,有助于对整个系统的掌握。

看源码之前的思考:
由于nuttx由driver、net、fs、schedule、mm和一些app构成,并在系统启动之后可以进行命令交互,那么在启动过程中就需要先去初始化显示终端console、driver、net所需的硬件环境、第一个进程、app的运行条件等。nuttx的启动应该是按照这个大方向去实现一系列动作的,具体的过程当然需要阅读源码。

1. void __start(void)
首先是执行__start函数,完成一系列初始化和配置,然后跳转至os_start()。
1.1清bss段
首先需要知道为什么要清除bss段以及什么是bss段?
在编译时可通过链接脚本(nuttx/configs/xxxxx/scripts/flash.ld)中分类的段以及段地址来进行代码分类,同时指定程序的运行地址(注意与装载地址区分开来),一般来说可分为text、data、bss。bss段为程序中未初始化的全局变量和静态变量。
在链接阶段,将不同模块中的同一类段进行重装排序(按照链接脚本约定的顺序)。至于段基地址,则根据不同的目标板来设定,本次使用的是stm32f767,查看手册可知道其flash和sram的大小以及地址。Flash为2048k,基地址为0x08000000;sram为512k,基地址为0x20000000。
在程序运行初期,由于bss段里的数据未初始化,所以需要统一的给bss段中的数据清零,这也是代码分类的好处之一,统一处理统一类型的数据。
1.2从flash中将data段移动到sram中指定的位置
为什么要将data段数据移动到sram中?
作为只读的rom性质的flash,是不允许对存在的数据进行写操作的,而在程序中的全局数据data段,是需要进行读写操作的,那就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值