600 likes | 881 Views
嵌入式 系统 An Introduction to Embedded System 浙江大学计算机学院 2012 年 4 月. 第 4 课 嵌入式 Linux 开发基础. Linux 准备知识. Linux 的文件系统 常用的 Linux 命令及使用 Linux 下的 Shell Linux 下的编译器 GCC 认识 Makefile. 嵌入式 Linux 简介. Linux. 嵌入式开 发领域. 稳步发展. 许多 Linux 改良品种迎合了嵌入式市场,它们包括:. RTLinux.
E N D
嵌入式系统 An Introduction to Embedded System 浙江大学计算机学院 2012年4月
Linux准备知识 • Linux的文件系统 • 常用的Linux命令及使用 • Linux 下的 Shell • Linux 下的编译器 GCC • 认识 Makefile
嵌入式 Linux 简介 Linux 嵌入式开 发领域 稳步发展 • 许多 Linux 改良品种迎合了嵌入式市场,它们包括: RTLinux • 虽然大多数 Linux 系统运行在 PC 平台上, 但 Linux 也可以作为嵌入式系统的操作系统。 • 嵌入式 Linux 标准吸引了“Linux 标准库”以及 UNIX 组织中有益的元素 • 在嵌入式系统上运行Linux的一个缺点是Linux 体系提供实时性能需要添加实时软件模块 uCLinux Montavista Linux ARM-Linux 其他Linux系统
Debian Suse MEPIS Redhat/ Fedora Mandrake Ubuntu 常用的Linux发行版 发行版 发行版 发行版 • Linux 是一个操作系统中的内核。一个完整的操作系统不仅仅是内核而已。所以,许多个人、组织和企业,开发了基于 GNU/Linux 的 Linux 发行版。
Linux下的文件类型 • 普通文件 • 目录文件 • 连接文件 • 设备文件
普通文件 • 系统文件 • .conf: 配置文件,也用.cfg • .lock:锁文件,用来判定程序或设备是否正在被使用 • .rpm: RedHat用来安装软件的软件包管理器文件 • 编程和脚本文件 • .c .cpp .h .o .pl(Perl脚本) .py(Python 脚本) .so(库文件) .sh(shell脚本) .tcl(TCL脚本)
普通文件 • 文件格式 • .au(音频文件) .gif .html/.htm .jpg .pdf .png(PNG(Portable Network Graphic,可移植网络图形)文件) .ps(PostScript文件) .txt .wav .xpm(图像文件) • 压缩以及归档文件 • .bz2(使用bzip2压缩的文件) .gz(使用gzip压缩的文件) .tar(使用tar归档的文件) .tbz(使用tar和bzip压缩的文件) .tgz(使用tar和gzip压缩的文件) .zip(使用ZIP压缩的文件) • 察看一个没有扩展名的文件的类型,可以使用file命令,file filename
目录文件 (directory) • 目录中包含文件以及下级子目录,但目录也是文件。这个文件中记录了包含在它中的文件和子目录的名称与它所处的地址。 • 一个文件本身的记录不包含文件名,对文件名进行的更改,实际是修改它上一层的目录文件中的一条文件记录 • 连接文件 (link) • 连接是Linux中比较特殊而非常有用的一种文件,类似于Windows中的快捷方式,它本身不包含任何内容,它指向别的文件或目录
设备文件 • Linux下所有的设备都是通过文件来表示的,所有的设备文件都存放在/dev目录下,设备文件的文件名就是设备名 $cd /dev $ls • 设备文件的种类 • 块设备文件:/dev/hda1,这些设备以块为最小单位。块的大小随设备不同而不同,一般将一块定义为1kB • 字符设备: /dev/ttyS0,字符设备按顺序一个一个传递字符 • 网络接口: /dev/eth0, 由内核中的网络系统驱动,负责发送和接收数据包 • 文件名通常是尾部带有设备编号数字的缩写名称。
Linux下的文件详细信息 -rw-r--r-- 1 root root 15228 2003-01-25 a2ps.cfg -rw-r--r-- 1 root root 2562 2003-01-25 a2ps-site.cfg -rw-r--r-- 1 root root 47 12月 26 23:39 adjtime drwxr-xr-x 2 root root 4096 2005-05-16 aep -rw-r--r-- 1 root root 688 2003-02-04 aep.conf 文件权限 文件上次被修改的时间和日期 文件类型 文件属主名 文件长度 用户分组名 链接个数 文件名
/usr /local /bin /src /bin /var /lib /etc /bin /man /lib /dev /etc /tmp / /home /usr1 /usr2 /usr3 /mnt /root /up-armmp3 /up-netarm2410 /proc /sbin Linux下的目录结构 • linux采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。微软的DOS和windows也是采用树型结构,但是在DOS和windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。
Linux下的目录结构 • /bin 二进制可执行命令/dev 设备文件/etc 系统管理和配置文件/etc/rc.d 启动的配置文件和脚本/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序/tmp 公用的临时文件存储点/root 系统管理员的主目录/mnt 让用户临时挂载(mount)其他的文件系统。/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下的.chk)放在这里/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。/var 某些大文件的溢出区,比方说各种服务的日志文件
Linux下的目录结构 • /usr是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:/usr/X11R6 存放X window的目录/usr/bin 众多的应用程序/usr/sbin 超级用户的一些管理程序/usr/doc linux文档/usr/include linux下开发和编译应用程序所需要的头文件/usr/lib 常用的动态链接库和软件包的配置文件/usr/man 帮助文档/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里/usr/local/bin 本地增加的命令/usr/local/lib 本地增加的库
Linux 源代码的目录内容 /Documentation • 这个目录下面只有内核文档 /arch • 所有子目录中都是体系结构相关的代码 /drivers • 包括显卡、网卡、SCSI 适配器等 /fs • 文件系统在该目录下面都有对应的子目录 /include • 包含了 Linux 源程序树中大部分的.h 文件 • 这个目录下面只有两个文件 /init • 这个目录下的文件实现了进程间通讯 /ipc • 包含了实现平台独立的基本功能 /kernel • 这个目录包含两部分的内容 /lib • 包含了体系结构无关的内存管理代码 /mm /net • 包含了 Linux 应用的网络协议代码 /scripts • 它包含了用来配置内核的脚本
Shell 简介 • Shell 是一种具备特殊功能的程序,它是介于使用者和 UNIX/Linux 操作系 统核心程序(kernel)之间的一个接口。 • 在系统起动的时候,核心程序会被加载内存,负责管理系统的工作,直到系 统关闭为止。它建立并控制着处理程序,管理内存、档案系统、通讯等等。 而其它的程序,包括 shell 程序,都存放在磁盘中。核心程序将它们加载 内存,执行它们,并且在它们中止后清理系统。 • 一个 shell 命令档很像是 DOS 下的批次档(如 Autoexec.bat):它把一 连串的 UNIX 命令存入一个文档,然后执行该文档。 使用者 Shell UNIX/Linux 操作系统
Shell 的发展历史 • Bourne shell 是标准的 UNIX shell • 以前常被用来做为管理系统之用 • 大部份的系统管理命令文件, rc start、stop 与 shutdown 都是 Bourne shell 的命令档 • 在单一使用者模式下以 root 签入 时它常被系统管理者使用 • C shell 是柏克莱大学所开发的,且 加入了一些新特性: • 命令列历程 • 别名 • 内建算术 • 档名完成 • 工作控制 • C shell 提示符号的默认值是% • Korn shell 是 Bourne shell 的超集,由 AT&T 的 David Korn 所开发。 • 它增加了一些特色,比 C shell 更为先进。 • Korn shell 的特色包括了可编辑的历程、别名、函式、正规表达式、万用 • 字符、内建算术、工作控制、共作处理和特殊的除错功能。
Shell 的使用 Shell 主要功用 主要功用 解译指令 提供环境 • Shell 语法分析命令行,把它分解成 以空白区分开的符号,在此空白包括: • Tab 键 • 空白 • 换行 • Shell也能当解译性的程序语言,Shell 程序,通常叫做 命令文件,它由列在档案内的命令所构成 • Shell 的另一个重要功用是提供个人化的使用者环境,这通常在 shell 的初始化档案中完成
Shell 的功能 • 为了确保任何提示符号下输入的命令都能够适当地执 行。shell 担任的工作包括有: 包括 Shell • 读取输入和语法分析命令列; • 对特殊字符求值; • 设立管线、转向、和幕后处理; • 处理讯号; • 设立程序来执行。
常用的Linux命令及使用 • Linux 的系统管理主要在控制终端下进行,通过使用 命令行的方式进行管理。 • Linux 的文件命令可以完成各种复杂的工作: • 对目录进行复制 • 目录移动 • 目录链接 • 搜索和查找文件 • 搜索和查找目录 • 阅读文件内容 • 显示文件内容 • 打印文件内容 ls chown passwd pwd chmod touch mv mkdir cp clear cal write cat cd tar shutdown echo rm mesg 查看系统
帮助 • 如何获取帮助信息 • 使用man命令查看手册 • 权限:所有用户 • 使用方法:man [查找内容] • 说明:打印出需要查找帮助内容的手册页信息 • 使用“ -- help”或“-help”参数 • 权限:所有用户 • 使用方法:[命令] --help • 说明:打印出需要查找帮助命令的帮助信息,根据命令不同可能采用不同的参数“--help”或“-help”
基本命令 • date • 权限:所有用户 • 使用方法:date • 说明:显示系统时间 • 应用示例: $ date • exit • 权限:所有用户 • 使用方法:exit • 说明:图形模式下exit为关闭一个终端窗口 • 应用示例: $ exit
基本命令(二) • who • 权限:所有用户 • 使用方法:who • 说明:确定系统上的用户 • 应用示例: $ who • ps (process) • 权限:所有用户 • 使用方法:ps • 说明:列出所有的进程 • 应用示例: $ ps
基本命令(三) • passwd • 权限:当前用户 • 使用方法:passwd • 说明:更改密码 • 应用示例: $ passwd • file • 权限:所有用户 • 使用方法:file [文件名] • 说明:判断文件类型 • 应用示例: $ file xx.c
基本命令(四) • reboot • 权限:所有用户 • 使用方法:reboot • 说明:重启系统 • 应用示例: $ reboot • halt • 权限:所有用户 • 使用方法:halt • 说明:关闭系统 • 应用示例: $ halt
基本命令(五) • su (super-user) • 权限:所有用户 • 使用方法: su [用户] • 说明:以替代用户身份执行命令 • 应用示例: $ subc • startx (start X Window) • 权限:所有用户 • 使用方法:startx • 说明:文本方式下启动图形界面 • 应用示例: $ startx
基本命令(六) • which • 权限:所有用户 • 使用方法:which [程序名] • 说明:寻找实用程序所在位置 • 应用示例: $ which who • echo • 权限:所有用户 • 使用方法:echo [显示内容] • 说明:将一行字显示到标准输出 • 应用示例: $ echo this is a echo test
浏览目录常用命令 • pwd 命令 (print working directory) • 权限:所有用户 • 使用方法:pwd • 说明:显示用户当前工作子目录的完整路径 • 应用示例: $ pwd
浏览目录常用命令 • ls命令 (list) • 权限:所有用户 • 使用方法:ls [选项]... [文件]... • 说明:列出当前工作子目录(默认)中的文件及子目录清单 • 常用参数: -a 显示所有文件及目录(包括隐藏文件)(all) -l 显示文件的详细信息 (long) -h 以容易理解的方式打印文件大小(1k 32M 2G) -t 将文件按建立的先后次序列出 (time) -F 在列出的文件名称后加一个符号(可执行文件“*”,目录“/”) • 应用示例: $ ls -lh
浏览目录常用命令 • cd命令 (change directory) • 权限:所有用户 • 使用方法:cd [目标路径] • 说明:变换工作目录到目标路径,其中目标路径可以是绝对路径也可以是相对路径。目标路径名可以缺省,若缺省则变换至使用者的home directory(用户登录子目录)。 • 常用参数: ~ :home directory . : 当前目录 . . : 当前目录的上一层目录 -:返回切换目录后的前一个目录 • 应用示例: $ cd /home/bc/ $ cd ../../
阅读常用命令 • cat 命令 (concatenate) • 权限:所有用户 • 使用方法:cat [参数] [文件名] • 说明:把文件串连接后输出到基本输出(或另一个文件) • 常用参数: -n或--number:由1开始对所有输出行数编号 -b或--number-nonblank:与-n类似,只是不对空白行编号 • 应用示例: $ cat –n textfile1 > textfile2 (将textfile1的内容加上行数编号,写入textfile2中。如果textfile2已存在,则覆盖原有内容。 $ cat text1 text2 >> text3 (将text1与text2的内容串行放在一起,再附在text3文件的最后(不覆盖text3的原有内容。))
阅读常用命令 • more 命令 • 权限:所有用户 • 使用方法:more [参数] [文件名] • 说明:类似cat,但它可以分页显示,适合显示长文件清单或文本内容,最基本的指令就是按空格换页,按回车下一行,按b键返回上一页。 • 常用参数: -num :一次显示的行数 -d :在屏幕最下方显示提示信息 +num:从第num行开始显示应用示例 • 应用示例: $ more textfile
目录操作常用命令 • mkdir命令 (make directory) • 权限:所有用户 • 使用方法:mkdir [子目录或子目录完整路径] • 说明:建立一个新的子目录,使用子目录的路径作为参数 • 应用示例: $ mkdir /home/bc/temp • rmdir命令 (remove directory) • 权限:当前目录有适当权限的所有者 • 使用方法:rmdir [参数] [子目录或子目录完整路径] • 说明:删除空的目录(当目录非空时,返回错误) • 应用示例: $ rmdir /home/bc/temp
文件操作常用命令 • wc命令 (word count) • 权限:当前文件有适当权限的所有者 • 使用方法:wc [参数] [文件名] • 说明:统计文件中的单词数 • 常用参数: -c:显示文件内的字符数 (character) -w:显示文件内以空格符分隔的字数 (word) -l:显示文件内的行数 (line) • 应用示例: $ wc –cl users (显示当前目录下的文件users的字符数和行数)
文件操作常用命令 • rm 命令(remove) • 权限:当前文件有适当权限的所有者 • 使用方法:rm [参数] [文件名或目录] • 说明:删除文件以及 目录 • 常用参数: -i:删除前逐一询问确定 (inform) -f: 即时原文件为只读也强制删除,并不询问确定 (force) -r:同时删除该目录层下的所有目录和文件 (recursive) • 应用示例: $ rm textfile (删除当前目录下的textfile文件) $ rm –rf /home/bc/temp (删除/home/bc/temp目录以及其下的所有目录和文件)
文件操作常用命令 • mv 命令 (move) • 权限:当前文件有适当权限的所有者 • 使用方法:mv [参数] [原文件或目录] [目标文件或目录] • 说明:将一个文件移至另一个文件,或将多个文件移动至另一个目录,也可以将一个目录移动至另一个目录 • 常用参数: -i:若目的位置已有同名文件,则询问是否覆盖旧文件 • 应用示例: $ mv text1 text2 (将当前目录下的文件text1的内容复制到text2中并删除text1。如果text2已存在,则覆盖其中的原有内容) $ mv –i *.c /home/bc/temp (将当前目录下的所有以.c为后缀的文件移至/home/bc/temp目录下)
文件操作常用命令 • cp 命令 (copy) • 权限:所有用户 • 使用方法:cp [参数] [原文件或目录] [目标文件或目录] • 说明:将一个文件复制到另一个文件,或将数个文件复制到另一个目录中,也可以将一个目录复制到另一个目录 • 常用参数: -a:尽可能将文件的状态、权限等信息全部复制 (all) -f: 若目的地址有同名文件,则将已有的文件删除再进行复制 (force) -r:若原目录中包含子目录,则原目录中的文件及子目录也依次复制到目的地址中 (recursive) • 应用示例: $ cp text1 text2 (将文件text1的内容复制到text2中。如果text2已存在,则覆盖其中的原有内容) $ cp –arf up-tech/ /temp (将当前目录下的up-tech/目录中的所有内容复制到/temp目录下)
文件操作常用命令 • sort 命令 • 权限:所有用户 • 使用方法:sort [参数] [文件名] • 说明:将文本文件数据排序 • 常用参数: -u:输出结果中去掉重复的行 (unique) -r: 以相反顺序排序 (reverse) -o:将排序后的结果写入文件(>)(output) -n: 把行中的第一个字段当作数值,数据按算术方法排序 (numeric) • 应用示例: $ sort –rn data (将data文件每行以相反算术顺序排序,并显示在当前的用户终端上(不改动原文件))
文件操作常用命令 • chmod命令 (change mode) • 权限:所有用户 • 使用方法:chmod [+|-模式] [文件] • 说明:改变文件模式 • 常用参数: +-r:修改读模式 (增加(+)或去除(-)可读(read)权限) +-w:修改写模式 (增加(+)或去除(-)可写(write)权限) +-x:修改执行模式 (增加(+)或去除(-)可执行(execute)权限) • 应用示例: $ chmod +x users (将users文件或目录增加可执行权限)
文件操作常用命令 • chown命令 (change owner) • 权限:根用户 • 使用方法:chown [参数][所有者] :[组] [文件或目录] • 说明:改变文件的所有者 • 常用参数: -R:以递归方式处理目录下所有文件 (recursive) • 应用示例: $ chownjessie:users file1.txt (将档案 file1.txt 的拥有者设为 users组的用户 jessie )
压缩及解压缩命令 • tar 命令 • 权限:所有用户 • 使用方法:tar [参数] [归档文件名] [原文件或目录] • 说明:将文件及目录复制到归档文件中, • 常用参数: -c:创建文档(create) -f:表示存档到文件而非磁盘(file) -v:显示每个复制文件的名称(verbose) -x:解压缩 -z:使用gzip或ungzip -j:使用bz2 • 应用示例: $ tar cvjf temp.tar.bz2 temp/ (将当前目录下的temp/目录包含的所有内容归档并用bz2压缩到temp.tar.bz2文件中) $ tar xvjf temp.tar.bz2 (将当前目录下的temp.tar.bz2文件解压缩)
挂载文件系统命令 • mount 命令 • 权限:所有用户 • 使用方法:mount [参数] [设备] [挂载目录(挂载点)] • 说明:在命令行中使用mount命令挂载文件系统 • 常用参数: - t :指定挂载文件系统类型 • 应用示例: adfs, affs, autofs, coda, coherent, cramfs, devpts, efs, ext, ext2, ext3, hfs, hpfs, iso9660, jfs, minix, msdos, ncpfs,nfs, ntfs, proc, qnx4, ramfs, reiserfs, romfs, smbfs, sysv,tmpfs, udf, ufs, umsdos, vfat, xenix, xfs, xiafs. #mount -t nfs 192.168.0.43:/home/wj /mnt/nfs/ (将IP地址为192.168.0.43的计算机上的/home/wj目录 以NFS的文件系统类型挂载为/mnt/nfs/
卸载mounted文件系统命令 • umount 命令 • 权限:所有用户 • 使用方法:umount [参数] [设备] [挂载目录(挂载点)] • 说明:将指定的文件系统从系统文件结构中卸载 • 常用参数: -V:显示umount程序版本信息 (Version) -v :输出详细信息 (verbose) -t vfstype:指定文件系统类型,只卸载该指定文件系统类型的文件系统 应用示例: #umount mnt/nfs(卸载/mnt/nfs/。该命令执行后, mnt/nfs不再是一个有效路径)
网络常用命令 • ifconfig命令 • 权限:所有用户 • 使用方法:ifconfig [接口] 接口是可选项,如果不加此项,则显示系统中所有网卡的信息。如果添加此选项则显示所指定的网卡信息 • 说明:用来配置网络接口 • 应用示例: # ifconfig eth0 192.168.0.102 (配置网卡eth0的IP地址) # ifconfig eth0 down (将网卡eth0禁用) # ifconfig eth0 up (将网卡eth0启用)
NFS服务 • NFS(Network File System)是由Sun公司开发的一套协议 • 通过RPC(Remote Procedure Call)技术,使我们可以达到文件的共享,能够在多台计算机上透明的访问彼此间的目录。它们使用分布式文件系统方案来实现,在UNIX工作站和Linux系统下比较常见。 • NFS使用mount命令来将远程的文件系统挂载到本机上的文件系统上,用户在使用时不会感觉到两者有任何差异。
编辑模式 工作模式 Linux 下的编辑器 vi 退出命令 行号与文件 字符串搜索 命令模式 删除正文 正文替换 插入模式 恢复文件 选项设置 vi shell 切换 vi vim 和 gvim 的高级特色
Linux 下的编译器 GCC • 在使用 GCC 编译程序时,编译过程可以被细分为四个阶段: • 预处理(Pre-Processing); • 编译(Compiling); • 汇编(Assembling); • 链接(Linking)。 预处理 编译 汇编 链接 • Linux 程序员可以根据自己的需要让 GCC 在编译的任何阶段结束,以便检 查或使用编译器在该阶段的输出信息 • GCC 提供了 30 多条警告信息和三个警告级别,使用它们有助于增强程序 的稳定性和可移植性。
认识 Makefile ---Makefile概述 • make 命令对于构建具有多个源文件的程序有很大的帮助 • 只有 make 命令还是不够的,还必须用 makefile 告诉它要做什么以及 怎么做才行 • make 命令和 Makefile 配合使用,能给我们的项目管理带来极大的便 利 • 一个 makefile 由依赖关系和规则两部分内容组成 Makefile 依赖关系 规则 + = 规则用来说明怎样使用所依赖的文件来建立目标文件 依赖关系由一个目标和一组该目标所依赖的源文件组成
认识 Makefile ---makefile 中的依赖关系 • make 程序自动生成和维护通常是可执行模块或应用程序的目标,目标的状态 取决于它所依赖的那些模块的状态。 • Make 的思想是为每一块模块都设置一个时间标记,然后根据时间标记和依赖 关系来决定哪一些文件需要更新。一旦依赖模块的状态改变了,make 就会 根据时间标记的新旧执行预先定义的一组命令来生成新的目标。 • 依赖关系规定了最终得 到的应用程序跟生成它 的各个源文件之间的关 系 main: main.o f1.o f2.ogcc -o main main.o f1.o f2.omain.o: main.c def1.hgcc -c main.cf1.o: f1.c def1.h def2.hgcc -c f1.cf2.o: f2.c def2.h def3.hgcc -c f2.c
认识 Makefile ---makefile 中的规则 • makefile 规定相应的规则来描述如何生成目标,或者说使用哪些命令来根 据依赖模块产生目标。 • makefile 是以相关行为基本单位的,相关行用来描述目标、模块及规则三 者之间的关系。一个相关行格式通常为:冒号左边是目标名;冒号右边是 目标所依赖的模块名;紧跟着的规则是由依赖模块产生目标所使用的命令。 相关行的格式为: 目标:[依赖模块][;命令] 习惯上写成多行形式 目标:[依赖模块] 命令 命令