stm32单片机和linux从上电到运行应用程序的过程

我们在写单片机逻辑程序时
再启动文件中,初始化一些必要的外设比如时钟 ram flash等等,准备好c语言运行环境,
然后进入main
在main里面先是初始化我们是用到的外设,包括片内外设 定时器 adc gpio (led灯,按键等)还有一些主机控制器或者说总线控制器的驱动spi iic usb,uart等等,除了这些片内设备,还有一些片外的板级外设,比如eeprom,mcp2515,led灯,按键,wm8896,4g芯片,以太网芯片,网卡,等等
以上这些统称为硬件的驱动程序。

然后进入while死循环我们的应用程序。
什么是应用程序,就是通过硬件驱动程序读取到的硬件提供的数据,通过这些数据开发各种各样的应用程序,比如gps可以开发出定位的应用程序,六轴传感器可以开发出计步的应用程序等等

那么linux跟上面的steam裸机开发有什么不同呢,

linux运行在cortex-a系列的开发板上。

从uboot到应用程序中间经历了怎样的过程呢

上电先运行ROM中的一段程序,这段程序把flash(sd卡,emmc,norflash等等)中的uboot

uboot刚开始被放到flash中,板子上电后,会自动把其中的一部分代码拷到内存中执行,这部分代码负责把剩余的uboot代码拷到内存中,然后uboot代码再把kernel部分代码也拷到内存中,并且启动,内核启动后,挂着根文件系统,执行应用程序。

总结一下uboot的功能,初始化必要的外设比如 时钟 串口 flash ram 网络,然后就是把内核代码搬运到RAM中运行。
为什么要初始化串口 网卡,因为要使用终端调试 从网络下载内核镜像,便于调试等等

stm32是在flash中运行程序,linux内核是在ram内存中。

把内核加载到ram中后,uboot就寿终正寝了,接下来开始运行linux内核,linux有哪些功能
进程调度 内存官理 网络管理 虚拟文件系统
进程间通信 还有各种硬件的驱动程序。

内核要加载根文件系统,运行根文件系统的init程序,最终运行各种应用程序。自启动应用程序,在命令行输入指令执行应用程序。对应windows下的双击启动应用程序。以及安卓单机应用图标执行应用程序。

留个问题
linux的外设的初始化,也就是Linux的外设的驱动程序是什么时候执行的?
当然,肯定在应用程序之前,因为硬件驱动程序就是为应用程序服务的。

init程序的作用?

猜你喜欢

转载自blog.csdn.net/dianqicyuyan/article/details/123366757