开启辅助访问 切换到窄版

打印 上一主题 下一主题

从串口驱动到Linux驱动模型,想转Linux的必会!

[复制链接]
作者:___↗洸 
版块:
嵌入式操作系统 linux 发布时间:2021-1-5 16:29:20
8230
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文通过对Linux下串口驱动的分析。由最上层的C库。到操作系统系统调用层的封装。再到tty子系统的核心。再到一系列线路规程。再到最底层的硬件操作。
对Linux中的tty子系统进行简要的说明。从理论到实践。以便读者能对OS原理有更深入的了解和更具体的掌握。
在具体分析之前。我们必须对串口。驱动。和Linux操作系统有一定的了解。这一阶段我们有三个问题需要解决:
1.什么是Linux操作系统。
2.什么是Linux设备驱动。
3.关于串口的种种。
要了解这些概念。如下我介绍了一点这方面的知识。不过遗憾的是对一些概念有着不可避免的向前引用。
这个过程中我会尽量忽略次要因素。以在本次调研中最主要目的为主线。如果读者您对这些概念已经有很深入的理解。可以直接阅读后面的代码分析:
1、什么是Linux操作系统 ?
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。
Linux具备惊人的可移植性。可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。
在这几个简要的段落中。有不少新的名词被引入了进来。下面我对几个重要的概念进行描述。
A、关于类UNIX系统
类Unix系统(英文:Unix-like)指各种传统的Unix系统(比如FreeBSD、OpenBSD、SUN公司的Solaris)以及各种与传统Unix类似的系统(例如Minix、Linux、QNX等)。
它们虽然有的是自由软件,有的是商业软件,但都相当程度地继承了原始UNIX的特性,有许多相似处,并且都在一定程度上遵守POSIX规范。
这个在一些经典的操作系统教科书中已经作了说明。我们仅需知道。它和我们熟知的Windows系列操作系统一样。都是一种现代操作系统。对底层的计算机资源进行抽象。对上层用户提供调用接口。完成计算机应该完成的功能。
B、关于可移植性
可移植性指与软件从某一环境转移到另一环境下的难易程度。为获得较高的可移植性,在设计过程中常采用通用的程序设计语言和运行支撑环境。尽量不用与系统的底层相关性强的语言。
可移植性是软件质量之一,良好的可移植性可以提高软件的生命周期。代码的可移植性主题是软件;可移植性是软件产品的一种能力属性,其行为表现为一种程度,而表现出来的程度与环境密切相关。
一个操作系统的可移植性往往表现在它能在运行在不同的体系结构上。感性的理解就是可以支持的设备有很多。比如前文所说的,Linux可以运行在大型服务器上。各种平板电脑上。
前段时间有黑客成功的把Linux移植到一个佳能照相机上。并且在这个照相机上运行了一些主流的软件。可以说。只要有足够可以利用的硬件资源。就可以把Linux移植到这个硬件平台上去。这个资源的最低要求往往很低。这可以与对硬件资源要求很高的Windows有一个鲜明的对比。举个例子就是。当Windows 10的升级提示从你计算机的右下角弹出时。
你可以不假思索的点击‘马上升级’吗?我想大多数人对这个问题的答案是否定的。为什么?因为大多数情况下。升级之后就会变得更卡。延迟更大。一些无用而庞大的软件疯狂的占用你有限的计算机资源。而如果你选择的是Linux。你几乎可以任意的在计算机上安装软件。运行程序(如果你的内存不是太小。且硬盘交换分区足够的话)。
Linux核心已经将有限的硬件资源发挥到了极致。开源软件良好的模块化设计在各个层次上充分利用了程序的局部性原理。(当然这是在损失了一定易用性的前提下的。)。不好意思我扯远了。这些不是本文的重点。。
由于笔者没有土豪到有很多计算机。所以选择了一款比较便宜的ARM9开发板作为开发平台。它的CPU是三星公司生产的S3C2440。核心是ARM920T。
C、关于Linux的基本思想
Linux的基本思想有两点:
第一. 一切都是文件。系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近
第二. 每个软件都有确定的用途。。
D、关于Linux的特点
完全免费
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。
正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。
完全兼容POSIX1.0标准
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。
许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。
多用户、多任务
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
良好的界面
Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。
支持多种平台
Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。
文件类型
普通文件(regular file):就是一般存取的文件,由ls-al显示出来的属性中,第一个属性为 [-],例如 [-rwxrwxrwx]。另外,依照文件的内容,又大致可以分为:
1、纯文本文件(ASCII):这是Unix系统中最多的一种文件类型,之所以称为纯文本文件,是因为内容可以直接读到的数据,例如数字、字母等等。设置文件几乎都属于这种文件类型。举例来说,使用命令“cat ~/.bashrc”就可以看到该文件的内容(cat是将文件内容读出来)。
2、二进制文件(binary):系统其实仅认识且可以执行二进制文件(binary file)。Linux中的可执行文件(脚本,文本方式的批处理文件不算)就是这种格式的。举例来说,命令cat就是一个二进制文件。
3、数据格式的文件(data):有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件可以称为数据文件(data file)。举例来说,Linux在用户登入时,都会将登录数据记录在 /var/log/wtmp文件内,该文件是一个数据文件,它能通过last命令读出来。但使用cat时,会读出乱码。因为它是属于一种特殊格式的文件。
4、目录文件(directory):就是目录,第一个属性为[d],例如 [drwxrwxrwx]。
连接文件(link):类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]。
5、设备与设备文件(device):与系统外设及存储等相关的一些文件,通常都集中在 /dev目录。通常又分为两种:
块设备文件:就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为
字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]。
6、套接字(sockets):这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 ,最常在 /var/run目录中看到这种文件类型。
7、管道(FIFO,pipe):FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表