有stm32基础,学习linux开发要多久?

有stm32基础,学习linux开发要多久?,第1张

linux开发是指:硬件开发?驱动开发?应用程序开发?

STM32是cortex-M内核,一般能跑linux的都是cortex-A核,架构差异蛮大的。

STM32单片机 = cortex-M内核 + 外设

arm soc = cortex-A内核 + 外设

先说结论:单片机开发基础对linux开发有帮助,但是很有限

STM32基础:我个人认为是一定的code能力+寄存器配置能力 + 小型程序开发能力 + 外设驱动能力

先大概说一下linux启动流程吧:

1、FSBL:引导程序,厂家固化的,不用管;

2、SSBL:bootloader程序,一般用u-boot,厂家会提供一个可用版本,定制裁剪功能看个人需求;

3、linux内核 + linux驱动

4、跟文件系统rootfs,可能需要增添删改

linux毕竟是庞大的 *** 作系统,开发起来当然也非常复杂,需要的技术栈十分庞大,比如:

makefile、链接脚本、交叉编译、shell脚本、设备树、驱动框架等等

即使是linux驱动开发也是基于框架的开发,与单片机开发差距较大。既然想进入linux世界,先从空杯心态开始吧。

写这么多,不是说linux很难,其实任何东西入门容易,精通难,比如Linux内核进程调度、存储管理等等,都是我不知道的。没关系的,可以从简单的开始入手,一步一步积累嘛

工业控制用linux比stm32多。

STM32MP1强调适用于所有用户,但是工业控制领域采用Linux *** 作系统较多,消费领域采用安卓 *** 作系统比较多,对于这一现状,ST表示第一款产品首先支持Linux *** 作系统,是从STM32MP1的性能考量。

整套STM32MP1软件套件可以简化客户的流程开发,其中重要的一点是STM32MP1的Linux平台,全面兼容主流行的OpenLinux开发包。目前,STM32MP1SoC驱动程序已被Linux社区采用和认可,ST的STM32MP1支持Linux4.19LTS,LTS表示ST会长期支持这一软件发行版。在支持整个Linux开发源时,STM32MP1全面兼容开源软件的标准,包括Linux的Foundation和YoctoProject,因为Linux代码开源,而且非常多,客户不可能全部都用或者清楚哪个好用,ST在Yocto建立一个Project,客户可以稳定简易使用这个开发包,而且支持Linaro社区,里面有一些参考软件和培训。因为Linux是开源的,代表是公开的,所以预集成安全 *** 作系统OP-TEE,客户不需要再付费;客户可以使用免费的加密OS,让系统在可信区域加密,公开用的数据全部用开源的Linux。

ST还为STM32MP1提供了硬件解决方案。STM32MP1提供两种开发板:一是全部功能板,支持157A和157C,157C是安全加密功能升级的部分;探索板有两套,一套是精简版本,包括MP1+基本外设,还有一个相对完整的功能,配了MIPI屏和Wi-Fi/BT射频模块,当用户需要做无线连接时,可以以此为原型来开发。

环境:

ubuntu 13.10

stm32f103zet6

一、STM 32 GCC 安装

stm32 属于arm cortex-m系列thumb指令集,所以给arm用的arm-none-eabi就可以了,首先是下载

下载地址:

https://launchpad.net/gcc-arm-embedded/+download

下载其中的gcc-arm-none-eabi-version-linux.tar.bz2

解压到目录会产生gcc-arm-none-eabi的文件夹

把该编译器添加到用户的环境中:

在最后一行添加:

因为之前有添加过树莓派的编译器了,所以实际上是这样的:

两个编译器环境中间用冒号隔开

注销后测试:

可以查看到该编译器的版本,就表示可以了。

二、工程环境的建立

新建个工程文件夹及其目录

下载安装官方库:

1、stm32的寄存器不像51 avr等单片机那么少,自己写写库,背背寄存器就可以了,所以ST公司提供了官方的库。为了避免重复造轮子,就直接采用其库,库版本为STM32_USB-FS-Device_Lib_V4.0.0,这个库多了usb支持,下载的话到st官网搜索stm32f10x就有了。

2、解压把解压好的文件夹复制到刚才新建的libs里面.

3、在工程根目录下新建Makefile.common文件,这个为通用makefile。

编译库文件:

进入libs文件夹,新建Makefile:

编译该库:

就会在lib目录下生成libstm32.a,这个就是编译好的静态库了。

建立工程编译ld文件

这个ld文件,为在编译时告诉编译器把代码放到什么地址,根据芯片的内存以及flash容量不同有所调整。

在工程根目录下新建linker.ld文件

根据芯片型号不同,选择相应的RAM FLASH大小。

在工程根目录下新建Makefile文件:

在src里面添加测试源码,主要是startup.c 以及main.c。

然后进入工程主目录下make就好了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8385516.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存