赞
踩
为什么要上系统呢?
如果简单的控制只需要裸板就够了,但是多任务/图形/网络等必须要上系统了就。
Linux是用C语言开发和少量的汇编,可以看成是别人写好的程序了,提供了大量的资源。
比如网络协议/多任务
内存管理/设备管理等等
目标是让产品开发更简单
学习是有难度的,架构也越来越复杂但是用起来方便
使用的方便性的代价是架构的复杂性。
用户态的程序不能直接访问硬件资源,内核态和用户态不仅是软件上的抽象,ARM处理器本身在硬件上就支持这两种状态。
ARM处理器的工作模式:
用户模式
系统模式
中断模式
应用直接访问硬件会触发异常中断
内核态和用户态的划分使得系统更加安全,内核级有更高的特权
进一步理解“系统调用”,它是用户态调用内核态函数的方法,一般通过软中断的方式。
软中断是软件指令触发,ARM有对应指令,不同于按键等外部中断
文件系统可直观理解为Windows上的文件资源管理器,应用程序放在文件系统当中。
Linux启动后一定要挂接一个文件系统,但VxWorks、UCOS等不需要挂接
文件系统可大可小,通过构造文件系统可衍生QT、Ubuntu,Android等系统
Linux等等重要思想:一切皆文件
硬件的操作(串口/LED/按键)都可以归结为:read,write,open,close
Linux初学者首先要搞清三个文件
三个文件:
引导程序(bootloader):uboot.bin/uboot.imx
Linux内核镜像:zImage/uImage/fitImage
文件系统镜像:system.img/rootfs.tar.ba2
初期很多工作都是围绕这三个知识点展开的
开发环境搭建/编译系统/烧写系统
不同的系统文件名会有差异
设备树文件(可看成Linux内核的一部分)
应用编程即Linux系统编程
基于Linux内核之上,基于“系统调用”或者库函数的编程
Linux内核中设置了一组用于实现各种系统功能的子程序,成为系统调用
系统
系统调用由操作系统核心提供,运行与核心态;而普通的函数调用由函数库或用户自己提供,
运行于用户态。
“系统调用”在ARM系统中一般用“软中断”的方式来实现。
ARM处理器的工作模式:
用户模式
系统模式
中断模式
阻塞式IO:一直在那里等直到数据发过来,也可以马上返回能读多少算多少。
信号驱动的IO:告诉内核需求,干别的事情,数据来了发个信号
异步IO:告诉内核这个事,内核全部帮我把这个事情做完。
同时对多路串口操作:多路复用。
函数等复制一份给子进程
进程之间通信:比如A负责数据收发,B负责图像解释。那么就需要进程之间的通信了。
线程是操作系统时间片调度的最小单位,每个线程可使用进程的全局变量
Socket是个接口,标准的;都是socket方式
设备节点:上层应用和底层驱动之间的桥梁,通过open等操作底层
Linux把设备看成文件,对设备的操作可以看成对文件的读写。
设备节点可以通过mkmod命令来生成
包含了主设备和次设备号,可以等同于设备节点;
编写驱动程序:在内核编写open等函数,打包,组合到file_operations中,通过register_chrdev注册到内核当中,其中一个参数就是设备节点,也就是关联起来了设备节点和file_operations并和内核关联了起来,这样就可以通过设备节点来找到驱动了。用户间接的实现了对硬件的控制。
平台总线从Linux2.6开始的,外面加了一层platform实现,引入了设备模式的概念,对应的是sysfs文件系统,实现了BSP。让设备驱动和设备资源分开。
通过设备的名字来匹配结合。在过程中也会完成原始架构的操作,生成设备节点等等。平台架构使得做产品轻松了。诞生了BSP工程师。
平台总线架构在驱动部分进一步分割出了BSP,工作更简单了。我们多数在修改设备树。
换个板子那么修改个设备树文件就好了,设备树的引入需要在Bootload参与传递设备资源。
分离也是模块化设计思路。(平台架构的引入把驱动分成了平台驱动和平台设备)
分层:原始框架被新的架构做了封装。也就是在外面又加了一层。屏蔽底层细节,增加了软件的易用性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。