- 物联网嵌入式技术项目教程
- 张小恒 李静主编
- 4字
- 2023-06-28 16:06:07
相关知识
1.2.1 嵌入式Linux概述
Linux是一种基于可移植操作系统接口标准(POSIX)的多用户、多任务、支持多线程和多CPU的操作系统。软件支持主要的UNIX工具软件、应用程序和网络协议,硬件支持32位和64位。1991年10月5日首次发布第一个Linux操作系统内核Linux 0.01,目前有上百种不同的发行版本,主要包括Red Hat Linux、Ubuntu Linux、SuSE Linux、Gentoo Linux、Debian Linux、Fedora等。其优势包括:完全开源免费、多用户多任务、界面良好、多种平台支撑、软件支持丰富、安全可靠、良好稳定性及强大网络功能。
1.嵌入式Linux操作系统
嵌入式Linux(Embedded Linux)是指将完整的Linux经过裁剪修改小型化后,固化在嵌入式处理器的存储器中,并应用于特定场合的专用Linux操作系统。嵌入式Linux既继承了Internet上无限的开放源代码资源,又具有嵌入式操作系统的特性,与其他嵌入式操作系统相比具备如下优势。
(1)内核完全开源免费及良好移植性
由于内核代码完全开源免费,不同领域和不同层次的用户可以根据实际应用场景对内核进行改造,低成本地设计和开发出满足自己需要的嵌入式系统。类似于Linux,嵌入式Linux也符合IEEE POSIX.1相关标准,使得应用程序可移植性良好。
(2)强大的网络支持及兼容性
嵌入式Linux支持所有标准的因特网协议,来源于Linux网络协议栈构建的嵌入式TCP/IP网络协议栈,除IPV4还包括IPV6。此外还支持多种文件系统,包括ext2、fat16、fat32、romfs等。良好的兼容和支持特性有利于应用开发。
(3)Linux具备一整套完整工具链
传统嵌入式开发调试一般采用在线仿真器(ICE)方式实现。仿真器为目标程序建立完整的仿真环境,完成监视调试相关功能。这种使用专用仿真器的调试方式适合硬件底层调试,但成本较高。而嵌入式Linux只需软硬件支持基本的串口功能即可进行调试,成本极低且能解决实际应用中的大部分问题。嵌入式Linux的完整工具链(Tool Chain)包括用作编译器的GCC工具,用作调试工具的GDB、KGDB、XGDB等。相关工具可以完成从操作系统底层到应用软件上层的调试。对不同平台架构及不同处理器开发者可以通过全套工具链建立相应的开发环境和交叉运行环境,开发及仿真十分方便。
(4)具有广泛的硬件支持特性
系统可运行在x86、Alpha、Sparc、MIPS、PPC、Motorola、NEC、ARM等多种硬件平台,而且开放源代码,可以定制。
综上,嵌入式Linux应用领域非常广泛,如平板、机顶盒、手机、扫描仪、数据网络、交换机、路由器、服务器以及卫星通信、医疗电子、交通运输计算机外设、工业控制、航空航天领域各种特种设备等。与台式机/笔记本式计算机相比,各种手持设备、消费电子以及特殊用途的专用设备市场容量极大,因此嵌入式Linux系统具有极其强大的生命力和广泛的应用前景。
2.Linux文件系统
Linux文件系统目录如图1-25所示,“/”为根目录,其下的一级子目录作用如下所述。
图1-25 Linux文件系统目录
(1)/bin
bin是“二进制文件(Binaries)”的英文缩写,主要存放系统命令,普通用户和root超级用户都可以执行。放在/bin下的命令在单用户模式下也可以执行。
(2)/boot
boot是系统启动目录,保存与系统启动相关的文件,如内核文件、启动引导程序(grub)文件以及其他连接文件、镜像文件等。
(3)/dev
dev是“设备(device)”的英文缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
(4)/etc
etc是“等等(et cetera)”的英文缩写,这个目录用来存放所有的系统管理需要的配置文件和子目录。
(5)/home
home是普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在/home/下建立一个和用户名相同的目录。如用户lxr的主目录就是/home/lxr。
(6)/lib
lib是“库(library)”的英文缩写,这个目录里存放着系统最基本的动态链接共享库文件,其作用类似于Windows里的动态链接库(dll)文件。几乎所有的应用程序都需要用到这些共享库文件。
(7)/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些系统修复过程中恢复的文件。
(8)/media
media是挂载目录。系统建议用来挂载媒体设备,如U盘和光盘。
(9)/mnt
mnt也是挂载目录。早期Linux中只有这一个挂载目录。系统建议这个目录用来挂载额外的设备,如U盘、移动硬盘和其他操作系统的分区。
(10)/opt
安装大的应用程序。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到/usr/local/目录中,也就是说/usr/local/目录也可以用来放置和安装软件。
(11)/proc
proc是“进程(processes)”的英文缩写,/proc是一种伪文件系统(即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,可以通过直接访问这个目录来获取系统信息。
(12)/root
root是超级用户的主目录。普通用户主目录在/home/下,超级用户root的主目录在“/”下。
(13)/sbin
保存与系统环境设置相关的命令,只有root超级用户可以使用这些命令进行系统环境设置,但也有些命令允许普通用户查看。
(14)/srv
该目录存放一些服务启动之后需要提取的数据。
(15)/sys
虚拟文件系统。和/proc/目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息。
(16)/tmp
临时目录,系统存放临时文件的目录。在该目录下,所有用户都可以访问和写入。建议此目录中不保存重要数据,最好每次开机都把该目录清空。
(17)/usr
usr是“共享资源(unix shared resources)”的英文缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files目录。
(18)/var
var是“变量(variable)”的英文缩写,这个目录中存放着在不断扩充着的文件,一般可以将那些经常修改的目录放在这个目录下。包括各种日志文件。
(19)/run
这是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果系统上有/var/run目录,应该让它指向run目录。
3.Linux文件权限
Linux是一个多用户操作系统,为了保护用户个人的文件不被其他用户读取、修改或执行,Linux提供文件权限机制,文件的操作权限分为读、写和执行,分别用r、w、x来表示。对每个文件(或目录)而言,都有4种不同的用户。
●root:系统超级用户能够以root账号登录。
●owner:实际拥有文件(或目录)的用户。
●group:用户所在组的成员。
●other:以上三类之外的所有其他用户。
4.Linux Shell
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
(1)Shell的特点
1)图形用户界面化。Linux提供了像Microsoft Windows那样的可视的命令输入界面——X Window的图形用户界面(GUI)。它提供了很多窗口管理器,其操作就像Windows一样,有窗口、图标和菜单,所有的管理都是通过鼠标控制。现在比较流行的窗口管理器是KDE和GNOME。
2)解析命令。Shell内置的命令解释器,解析用户输入的命令并把它们送到内核。
3)可编程。Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
(2)常见的Shell版本
每个Linux系统的用户可以拥有自己的用户界面或Shell,用以满足他们自己专门的Shell需要。同Linux本身一样,Shell也有多种不同的版本。目前主要有下列版本的Shell:
1)Bourne Shell:是贝尔实验室开发的。
2)BASH:是GNU的Shell版本,是GNU操作系统上默认的Shell。
3)Korn Shell:是对Bourne Shell的发展,在大部分内容上与Bourne Shell兼容。
4)C Shell:是SUN公司Shell的BSD版本。
(3)Shell提示符及命令操作
Shell有两种提示符:#和$。Linux系统登录时可以用两种身份登录:root用户和一般用户。以“#”为提示符表明该终端是由root用户打开的,root用户具有最高权限,因此可以输入任何可用的命令。以“$”为提示符表明该终端是一般用户,一般用户在使用系统时是有限制的。
在Shell下输入相应的命令并按〈Enter〉键,Shell就执行命令。如果没有此命令,Shell会提示:“command not fount”。Shell命令是区分大小写的,一条命令只要有一个字母的大小写发生变化,系统就认为是一条不同的命令。输入命令、目录名或文件名的开头一个或几个字母后按〈Tab〉键,Shell会在相应目录里进行匹配,自动补齐命令、目录名或文件名。还可以通过按〈↑〉或〈↓〉键来显示执行过的命令,这在重复执行某些命令时会给用户带来很大的方便。