项目目标:
- 本学习过程以「STM32MP157」处理器的ARM开发板为实验基础,学习记录嵌入式Linux开发的各种知识与经验,主要内容包括嵌入式Linux移植,嵌入式Linux驱动开发,嵌入式Linux应用开发等;
- QT程序作为systemD守护进程启动;
- 系统开机需要在2s之内显示出开机界面;
- 系统开机需要在10s左右完成所有外设初始化和下位机的通讯,进入主界面;
- 需要用到的设备:CAN、UART、IIC、USB、SPI、LCD-8080、IIS、GPIO;
- 需要实现的功能:
- USB驱动FAT32、exFAT、NTFS等主流格式的U盘;(基础功能)
- 计划使用7寸/电阻屏,目前阶段先使用电容屏完成基础功能;(基础功能)
- 能使用U盘进行程序升级;(基础功能)
- 外扩物理按钮作为输入;(基础功能)
- 能进行联网,上传日志、OTA升级、云指令接收、在线音视频播放等功能;(基础功能)
- USB驱动摄像头;(基础功能)
- 需要保存本地运行日志、通过U盘导出;(拓展功能)
- 需要实现二维码首付款功能;(拓展功能)
嵌入式Linux的基本认识:
主要由如下3部分构成:
- 「bootloader (TF-A+uBoot)」, Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader程序。 这段bootloader程序会先初始化DDR等外设, 然后将Linux内核从flash(NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。 bootloader 有很多,常用的就是 U-Boot。 bootloader 和 Linux 内核的关系就跟 PC 上的 BIOS 和 Windows 的关系一样,bootloader 就相当于 BIOS。
- 「Linux 内核(kernel+dtbs)」,Linux内核由一系列程序组成,包括负责响应中断的中断服务程序、负责管理多个进程从而分享处理器时间的调度程序、负责管理地址空间的内存管理程序、网络、进程间通信的系统服务程序等。内核负责管理系统的硬件设备。
- 「根文件系统(rootfs)」,Linux 中的根文件系统更像是一个文件夹或者叫做目录,在这个目录里面会有很多的子目录。根目录下和子目录中会有很多的文件,这些文件是 Linux 运行所必须的,比如库、常用的软件和命令、设备文件、配置文件等等。根文件系统里面包含了一些最常用的命令和文件。
「U-Boot、Linux kernel和rootfs」 这三者一起构成了一个完整的Linux系统,一个可以正常使用、功能完善的Linux系统。
嵌入式Linux的构建:
Linux 平台上有许多开源的嵌入式 linux 系统构建框架(框架的意思就是 工具),这些框架极大的方便了开发者进行嵌入式系统的定制化构建,目前比较 常见的有 OpenWrt, Buildroot, Yocto,等等。其中 Buildroot 功能强大, 使用简单,而且采用了类似于 linux kernel 的配置和编译框架,所以受到广 大嵌入式开发人员的欢迎。网传Yocto非常胡好用,自学过程就采用buildroot进项,但是首先先按照韦东山的建议,先有限完成自己的APP设计目标和驱动设计目标,再去对现有的程序框架做裁剪。
不管怎样先上相关资源的链接。
- aliyun阿里云开源镜像网站:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com)
- BuildRoot的官网上最新的LTS包:Buildroot - Making Embedded Linux Easy
- BuildRoot的官方在gitLab上的包:文件 · master · buildroot.org / buildroot · GitLab
- BuildRoot的使用说明文档:Buildroot用户手册 | Phoebus Ma (phoebus-ma.github.io)
- Qt的各个版本源码网站:Index of /archive/qt
- Qt的可执行软件在线安装器:Index of /archive/online_installers (qt.io)
- Qt的阿里云行镜像网址:qt-archive安装包下载_开源镜像站-阿里云 (aliyun.com)
- ST关于STM32MP1XX的官方开发包:STM32MP1Dev - STM32MP1 OpenSTLinux Developer Package - STMicroelectronics
- ArmDeveloper的官方工具链:Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer
- linux下常见的文件操作指令:linux下目录操作---进入、显示、复制、移动_linux 进入文件夹-CSDN博客
嵌入式Linux的硬件平台:
不做过多描述,参考韦东山的开发板即可。
为什么要用QT6.7.2:
- QT6对比QT5,在Qt quick 上做了大量的优化,编译出来的嵌入式软件大小也小了很多;
- QT6使用Qt quick的情况下,开发触摸操作方式的嵌入式软件更加快速,比如:虚拟键盘组件;
- 使用QML去做开发界面的过程与游戏行业使用JavaScript做开发的思路比较类似,用过cocos creater,unity 3D可能会有这种感觉;
- 使用QML做界面开发,可以使界面层与后台服务层隔离的比较开,方便进行团队开发的管理;
- 使用QML做界面开发,可以快速的实现丰富的动画效果;
- Qt quick比桌面应用开发,对openGL的使用更加充分,对界面的流畅度有一定提升;
待续。。。