硬件平台:迅为i.MX6ULL终结者
软件系统:Linux
从裸机到OS
做过单片机开发的人都知道裸机程序,裸机程序是在硬件之上直接运行自己写的程序,这种方式简单易懂,
如果使用Linux来开发产品,Linux操作系统上面可以运行应用程序,操作系统和硬件的接口是驱动程序,在框架上更复杂了,总体框架如图:
为什么要用Linux系统呢,是要让产品开发变得更容易,如果只是一个简单的控制,用单片机就够了。但是一些高新的产品,如:网络协议站,复杂的图形界面,多任务的开发,这些复杂的应用就需要用到Linux了,
Linux可看成是一个大软件或者说是一个大程序
它是用C语言来开发的。也有少量的汇编,汇编代码主要在系统的启动部分,在Linux这个大程序的基础上做项目。
Linux提供了大量的资源,如:网络协议站,内存管理,设备管理等等,最终的目地是为了让产品开发更加的简单,但是学习起来还是有一定难度的。Linux架构越来越复杂,但使用越来越方便。也就是说使用的方便性是以复杂的架构为代价的。
有了Linux系统,使得软件开发人员化分成两种类型,应用程序和驱动程序,应用开发人员可以不懂底层驱动,应用开发只关注业务逻辑,而驱动开发关注硬件特性。
应用程序通过“系统调用”来使用内核资源,
驱动是Linux内核的一部分,驱动的架构越来越复杂,目的是为了我们做的事情越来越少。
Linux的内核态和用户态
Linux的内核运行在内核态;应用程序运行在用户态,内核态的权限更高,用户态的程序不能直接访问硬件资源,必须通过操作系统内核来对硬件访问。
内核态和用户态不仅是软件上的抽象,ARM处理器本身在硬件上就支持这两种状态。
ARM处理器的工作模式:用户模式,系统模块,中断模块。应用直接访问硬件会触发异常中断,从而阻止应用程序直接访问硬件,所以用户态和内核态的划分使系统更加安全。内核级有更高的特权。
刚才我们提到了“系统调用”,这是用户态调用内核态函数的方法,一般通过软中断的方式。软中断是软件指令触发。ARM有对应指令,不同于按键等外部中断。
文件系统
文件系统可直观的理解为Windows上的文件资源管理器,我们上面提到的应该程序就放在文件系统中。
Linux启动后一定要挂载一个文件系统,这样应应程序才能被执行,但VxWorks,ucos等并不需要挂载。
文件系统可大可小,通过构造文件系统可衍生QT,ubuntu,android等系统。
Linux还有一个重要思想:一切皆文件,像串口,led,按键等这些硬件设备,都可以归结为像文件一样的操作,如read,write,open,close,大家在后期编程过程中会深刻的体会到这一点。
Linux初学者需要了解的三个知识点:
引导程序(bootloader);(是开发板上电首先运行的程序)
Linux内核镜像:zimage;(bootloader启动后会把内核引导起来)
文件系统镜像:system.img/rootfs.tar.ba2(内核启动最后会挂载文件系统)
并且要了解三个文件之间的关系。初期很多工作都是围绕这三个知识点展开的(开发环境搭建,编译系统,烧写系统),不同的系统文件名会有差异。设备树文件可看成Linux内核的一部分)
IMX6ULL终结者开发板:活动期间:终结者开发板原价398元!现在下单立减100元,到手价仅需298元!