




已阅读5页,还剩71页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第3章Linux操作系统 3 1Linux概述3 2嵌入式Linux3 3嵌入式实时Linux3 4Linux系统的安装3 5Linux目录结构3 6Linux常见术语和常用命令3 7Linux下的C语言编程入门 2 3 1Linux概述 Linux的起源 Linux也被称作UNIX克隆 UNIXclone 或UNIX风格的操作系统 是UNIXOS的一个版本 在1990年 芬兰赫尔辛基大学的学生LinusTorvalds用汇编语言编写了一个在80386保护模式下处理多任务切换的程序 并从Minix得到启发 开发出0 0 1版本的Linux Linux具有UNIX的全部特征 包括多任务 虚拟内存 共享库 需求装载 共享的写时复制程序执行 优秀的内存管理以及TCP IP网络支持 Linux已成为Windows强劲对手 且不仅能够运行于PC平台 在嵌入式方面更显特色 逐渐可与WindowsCE抗衡 3 3 1 2Linux概述 Linux与GNU 当前流行的软件按照提供方式可分成三种模式 商业软件 commercialsoftware 共享软件 sharesoftware 自由软件 freesoftware 开发者提供软件全部源代码 任何用户都有权利使用 拷贝 扩散 修改该软件 同时用户有义务将自己修改过的源代码公开 4 1984年 哈佛大学学生RichardStallman开发了一个完全基于自由软件的软件体系计划 称为GNU Gnu sNotUnix 是免费软件基金会 FSF FreeSoftwareFoundation 提供了一套应用程序 用来代替UNIX操作系统 并拟定了一份称为公共版权许可 GPL GeneralPublicLicense 的文件 GNU计划的宗旨是 消除对于计算机程序拷贝 分发 理解和修改的限制 也就是说 每一个人都可以在前人工作的基础上加以利用 修改和添加新内容 但必须公开源代码 允许其他人在此基础上继续工作 Linus发布Linux1 0版是完全按照自由发布版权来做的 而后转向了GPL版权 该版权除了规定有自由软件的各项许可以外 还允许用户出售自己的程序拷贝 并从中获利 这一转变对于Linux的发展至关重要 5 3 1 3Linux概述 Linux内核概况 1 Linux内核在操作系统中的位置 Linux操作系统由4个层次组成 用户进程 系统调用接口 Linux内核和硬件 把应用进程也纳入操作系统的范畴是由于其运行和操作系统密切相关 系统调用接口也可以说是操作系统内核的补充 硬件则是物质基础 Linux内核在整个操作系统中的位置 6 2 Linux内核的抽象结构 1 进程调度 Scheduling 子系统控制着进程对CPU的访问 当需要选择下一个进程时 由调度程序根据一定的算法选择最值得运行的进程 Linux使用了比较简单得基于优先级得进程调度算法 2 内存管理 MM MemoryManagement 子系统允许多个进程安全地共享主内存区域 内存管理从逻辑上可以分为硬件无关的部分和硬件相关的部分 前者提供进程的映射和虚拟内存的交换 后者为内存管理提供了虚拟接口 Linux内核子系统及它们之间关系 7 3 虚拟文件系统 VFS VisualFileSystem 子系统隐藏了各种不同硬件的具体细节 为所有设备提供统一的接口 VFS可分为逻辑文件系统和设备驱动程序两部分 前者指Linux所支持的文件系统 如ext2 FAT等 后者指为某一种硬件所编写的驱动程序模块 Linux还支持数十种不同的文件系统 是Linux较有特色的一部分 4 网络子系统提供了对各种网络标准协议的存取和各种网络硬件的支持 可分为网络协议和网络设备驱动程序两部分 网络协议部分负责实现每一种可能的网络传输协议 网络设备驱动程序负责与具体的硬件设备进行通信 每种可能的硬件设备都有相应的设备驱动程序 5 进程间通信 IPC InterprocessCommunication 子系统提供了进程间多种通信机制 多个进程为了能在同一项任务上协调工作 他们之间必须能够进行信息的交互 Linux支持许多不同形式的进程间通信机制 包括管道 pipe 信号以及网络进程通信机制Sockets等 8 3 1 4Linux概述 Linux内核的微型化 嵌入式应用对操作系统的要求是 功能具有针对性 效率高 占用资源少 启动速度快 有些系统有实时性的要求等 Linux是由许多体积小且性能高的微内核和系统组成 在内核代码完全公开的前提下 用户可根据自己应用的需要有针对性地对内核进行改造 完全可以低成本地设计和开发出真正满足自己需要的嵌入式系统 通用做法是对Linux内核重新编译 由于Linux内核采用模块化地设计 内核开发人员在设计时把这些内核模块作为可选项 可以在编译系统内核时制定 9 3 2嵌入式Linux 商业嵌入式系统的共同特点 具有专业性 各自地源代码不公开 使得每个系统上的应用软件不容易与其他系统兼容 软件的移植性较差 对各种设备的支持方面也存在问题 且价格昂贵 嵌入式Linux EmbededLinux 是指对Linux经过小型化剪裁后 能够固化在容量为几百KB到几十MB的存储器或单片机中 适用于特定嵌入式场合的专用Linux操作系统 10 Linux应用于嵌入式系统的优势 1 开放源代码 软件资源丰富2 内核功能强大3 支持多种体系结构4 完善的网络通信和成熟的文件图形系统5 丰富的驱动程序6 完善的开发工具链 11 Linux应用于嵌入式系统的不足 1 软件开发的效率和功能没有足够的资源在本机上运行开发工具和调试设备 往往采用交叉编译调试的方法 2 软件的实时性问题Linux本身不是一种实时的操作系统 其内核不是完全可抢占的 Linux的调度时机主要有 进程状态转换的时刻 即进程终止 进程睡眠 可运行队列中新增加一个进程时 当前进程的时间片用完时 进程从系统调用返回到用户态时 内核处理完中断后 进程返回到用户态时等 12 3 内存及其管理问题一个典型的Linux内核在未压缩的情况下至少要占1 5MB左右的内存 运行时可能需要超过4MB 功能强大的甚至要占用上百MB的存储空间 标准的Linux设计时所针对的处理器都是带有内存管理单元 MMU 的 并且Linux系统充分利用了处理器的内存管理机制 但有些嵌入式处理器不带MMU 13 3 3嵌入式实时Linux 将Linux作为底层操作系统 在其上进行实时化改造 从而构建出一个具有实时处理能力的嵌入式系统 是目前发展的趋势 为实时系统而开发的RTLinux可以让Linux支持硬实时任务 它主要是把Linux的任务作为自己的一个任务 因此 实时性要求很高的任务不受非实时的Linux干扰 另外 还提供了实时任务和Linux的基本内核和其他任务间的接口 这些接口不需要很强的实时性 这种架构的关键是将实时代码与非实时代码分开设计 RTLinux中含有时间紧要的函数 可以用中断管理器来精确控制中断处理 从而很好地保证了关键中断能够在需要时得到执行 这种方法可以满足广泛范围内的实时要求 即使没有实时扩展 Linux也能很好地处理多个事件流 14 3 4Linux系统的安装 15 3 5LINUX目录结构 root X11R6 home dev lib sbin tmp usr var mnt proc bin src lib local man sbin opt etc include 16 目录常用功能介绍 boot 包含了操作系统的内核和在启动系统过程中所要用到的文件 bin 存放常用的二进制可执行文件 如ls mv rm mkdir gzip tar等 dev区 存放与设备有关的特殊文件 UNIX或LINUX系统都把设备当作文件 如 dev cdrom表示光驱 etc 存放系统管理和配置文件 如LILO的参数 用户的帐号和密码 以及系统的主要设置 home 为用户设置的目录 user的主目录就是 home user 这个分区的大小取决于有多少用户 lib 标准程序设计库 也称动态链接库 在LINUX执行和编译内核时 均会用到 sbin 系统管理命令 存放的是系统管理员使用的管理程序 如fdisk mount ifconfig等 tmp 用来存放临时文件 17 mnt 系统提供这个目录让用户临时装载其他的文件系统 如装载软盘的文件系统 proc 虚拟的目录 系统内存的映射 可直接访问这个目录来获取系统信息 opt 存放可选的安装的软件 var 系统工作时预先设置的工作目录 如各种服务日志文件和邮件等 usr 最庞大和最重要的目录之一 要用到的应用程序和文件几乎都在这个目录 其中包含 usr X11R6存放XWindow的目录 usr bin众多的应用程序 usr sbin超级用户的一些管理程序 usr lib存放常用的动态链接库和软件包的配置文件 usr includeLINUX下开发和编译应用程序所需的头文件 usr man存放帮助文档 usr src存放LINUX的内核源码 18 3 6Linux常见术语和常用命令 3 6 1Linux常见术语GNUGNU的字面意思是角马 是南非的一种像牛的大羚羊 但它实质性的含义是强调 IsNotUnix 因此通常说 GNU是Gnu sNotUnix的递归所写 它源于自由软件基金会的一个项目 该项目的目标是开发一个自由的UNIX版本 这一UNIX版本称为HURD 尽管HURD尚未完成 但GNU项目开发了许多高指令的编程工具 包括Emacs编辑器 著名的GNUC和C 编译器 gcc和g 所有的GNU软件和派生工作均适用GNU通用公共许可证 即GPL Linux的开发使用大量的GNU工具 人们常说的Linux通常包括 符合POSIX标准的操作系统Shell和外围工具 C语言编译器和其他开发工具及函数库 XWindow窗口系统 各种应用软件 包括字处理软件 图像处理软件等 其他各种Internet软件 包括FTP服务器 WWW服务器 关系数据库管理系统 19 GPLGPL与软件是否免费无关 它的主要目标是保证软件对所有用户来说是自由的 GPL通过如下途径实现这一目标 它要求软件以源代码的形式发布 并规定任何用户能够以源代码的形式将软件复制或发布给别的用户 它提醒每个用户 对于该软件不提供任何形式的担保 如果用户的软件使用了受GPL保护的任何软件的一部分 那么该软件就继承了GPL GPL并不排斥对自由软件的进行商业性质的包装和发行 也不限制在自由软件的基础上打包发行其他非自由软件 遵照GPL的软件并不是可以任意传播的 这些软件通常都有正式的版本 GPL在发布软件或复制软件时申明限制条件 20 3 6 2Linux基本概念 用户和组Linux是一个真正的多用户系统 为了方便使用GNU Linux系统 必须在机器上拥有一个帐户 一个组能拥有很多用户通过组的方式可便于实现几个人之间的文件共享Linux是一个多用户系统 每个文件是一个用户和一个组的独家财产 用户和组 他们中的每一个成员都持有一个个人的目录 称为HOME目录 21 一个组能拥有很多用户通过组的方式可便于实现几个人之间的文件共享三个类别用户 1 文件的所有者 owner 2 同组用户 是所有者组的成员 所有者组是与文件有关联的组 同组用户不是文件所有者 group 3 其他用户 既不是所有者也不是所有者组的成员 other 有三种不同的许可操作 1 读许可 r 它准许用户读取文件的内容 2 写许可 w 它准许用户修改文件的内容 3 执行许可 x 它准许用户运行可执行文件 22 3 6 3Linux常用命令1 ls pwd cd等文件处理命令ls 显示当前目录下的所有文件和目录语法 ls选项 alFR 文件或目录 a显示所有文件包括隐藏文件 l使用longformat长格式进行显示 F附加文件类别符号在文件名最后 R显示目录及其下的子目录内容pwd 显示当前目录路径cd目录名 进入目录 23 2 cp rm mv mkdir等文件处理命令语法 cp afpx 源文件或目录 目地文件或目录 aarchive的意思相当于 dpR 也就是复制所有目录并包括子目录 f强制复制文件 p保留原始文件的日期 x指定文件复制后属于目的磁盘的文件系统 如 ext2 fat32语法 rm irf 文件或目录 r删除目录及其下的所有目录内容 f强制删除 i交互模式 删除前再做一次确认语法 mv if 源文件或目录 目地文件或目录 24 3chmod chown chgrp等文件权限管理命令chmod命令英文原义 changefileordirectory smode 改变文件或目录的权限 语法 chmod R mode 4 2 1or a u g o r w x s t 文件或目录 示例 chmoda rstuff chmod755filechown命令英文原义 Changefileordirectory sOwner 改变文件或目录的所有者 语法 chown R 用户 群组 文件或目录 chgrp命令英文原义 Changefileordirectory sGroup 改变文件或目录的所属群组 语法 chgrp R 文件或目录 25 4 文件目录匹配搜索的使用如ARM应用程序的安装目录为 ARM FS2410 假设目录下没有其他ARM打头的目录和文件 则要进入这个目录 则只需输入 cd ARM 然后按Tab键 在shell中会自动找到ARM FS2410这个目录 而不必将目录名输入完全 5 编程时获取帮助man获得Linux系统手册的电子版 很实用 如 manmount 26 6 取消root密码在终端输入命令 vim etc shadow可以看到显示的第一行内容如下 root 1 dVVd5YVP OgZG58TL NRExTfcr6URH 11829 0 99999 7 1 1 134539236要取消密码 需要将第一行root后第一对 之间的字符全部删除 删除后如下 root 11829 0 99999 7 1 1 134539236然后用 w 强行存盘 由于shadow时只读的 后 用 q退出vi就实现了取消root密码的操作 7 配置PC的IP地址ifconfigeth0192 168 2 32将PC的IP地址配置为192 168 2 32 27 8 压缩和解压缩gzip命令语法 gzip 选项 19r 文件 1表示快速压缩 9表示最佳状况压缩 r压缩时包含所有子目录 d表示解压命令gunzip命令语法 gunzip 选项 r 文件或目录 tar命令语法 tar 选项 zcvf 文件或目录 z使用gzip压缩 tar文件 c产生一个tar文件 v观看压缩过程 f指定压缩成的文件 或压缩到磁带设备 x解压说明 一般都是最先的四个选项zcvf全加 这样马上可以将一个目录下所有的文件压缩成一个压缩文件 压缩后文件格式 tar gzor tgz 9 查找文件命令如查找文件 main c 使用命令find namemain c或者locatemain c在一个目录下 含子目录 的所有文件中搜索含有某个字符串 如 root 的所有文件 grep root r 28 10 vi m 用法vi是Linux Unix世界里极为普遍的全屏幕文本编辑器 有三种状态 即编辑方式 插入方式和命令方式 在命令方式下 所有命令都要以 开始 对输入的字符 系统均作为命令来处理 如 q代表退出 w表示存盘 当你进入vi时 会首先进入命令方式 同时也是编辑方式 按下i就进入插入方式 用户输入的可视字符都添加到文件中 显示在屏幕上 按下ESC就可以回到命令状态 编辑模式和命令方式类似 都要输入命令 但它的命令不必以 开始 它直接接收键盘输入的单字符或组合字符命令 在编辑模式下按下 就进入命令方式 29 vi常用操作无论是开启新档或修改旧文件 都可以使用vi 所需指令为 vifilenamevi常用命令 q 放弃任何改动而退出vi 也就是强行退出 w存档 w 对于只读文件强行存档 wq存档并退出vi x与wq的工作一样GNOMEgedit文本编辑器 GNOMEgedit文本编辑器与Windows的notepad文本编辑器功能相似 快捷键也大部分相同 又有Windows的wordpad写字板的风格 比之notepad和wordpad gedit功能更全面 操作更便利 30 11 软 硬盘及光驱的使用在Linux中对其他硬盘逻辑分区 软盘 光盘的使用与我们通常在DOS与Windows中的使用方法是不一样的 不能直接访问 因为在Linux中它们都被视为文件 因此在访问使用前必须使用装载命令mount将它们装载到系统的 mnt目录中来 使用结束 必须进行卸载 命令格式如下 mount t文件系统类型设备名装载目录文件类型常用的有 msdosdos分区文件ext2Linux的文件系统swapLinuxswap分区或swap文件iso9660安装CD ROM的文件系统vfat支持长文件名的dos分区hpfsOS 2分区文件系统 31 设备名是指要装载的设备的名称 如软盘 硬盘 光盘等 软盘一般为 dev fd0fd1 硬盘一般为 dev hdahdb 硬盘逻辑分区一般为hda1hda2 等等 光盘一般为 dev hdc 在装载前一般要在 dev mnt目录下建立一个空的目录 如软盘为floppy 硬盘分区为其盘符如c d等等 光盘为cd rom 使用命令 mount tmsdos dev fd0 mnt floppy 装载一个mddos格式的软盘mount text2 dev fd0 mnt floppy 装载一个Linux格式的软盘mount tvfat dev hda1 mnt c 装载Windows98格式的硬盘分区mount tiso9660 dev hdc mnt cd rom 装载一个光盘 32 12 Linux下的硬盘分区对Linux用户来说 无论有几个分区 分给哪一目录使用 它归根结底就只有一个根目录 一个独立且唯一的文件结构 Linux中每个分区都是用来组成整个文件系统的一部分 因为它采用了一种叫 载入 的处理方法 它的整个文件系统中包含了一整套的文件和目录 且将一个分区和一个目录联系起来 这时要载入的一个分区将使它的存储空间在一个目录下获得 33 对于IDE硬盘 驱动器标识符为 hdx 其中 hd 表明分区所在设备的类型 这里是指IDE硬盘 x 为盘号 a为基本盘 b为基本从属盘 c为辅助主盘 d为辅助从属盘 代表分区 前四个分区用数字1到4表示 它们是主分区或扩展分区 从5开始就是逻辑分区 例如 hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区 hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区 对于SCSI硬盘则标识为 sdx SCSI硬盘是用 sd 来表示分区所在设备的类型的 其余则和IDE硬盘的表示方法一样 34 Linux的分区格式只有Ext2 3 和Swap两种 Ext2 3 用于存放系统文件 Swap则作为Linux的交换分区 RedHatLinux至少需要两个专门的分区 LinuxNative和LinuxSwap 且不能将Linux安装在Dos Windows分区 SWAP分区是LINUX暂时存储数据的交换分区 它主要是把主内存上暂时不用的数据存起来 在需要的时候再调进内存内 且作为SWAP使用的分区不用指定 MountPoint 载入点 它的大小至少要等于系统上实际内存的量 一般来说是内存的两倍 可以创建和使用一个以上的交换分区 最多16个 LinuxNative是存放系统文件的地方 它只能用EXT2 3 的分区类型 将Linux安装在一个或多个类型为 LinuxNative 的硬盘分区 且每一个分区都必须要指定一个 MountPoint 载入点 告诉Linux在启动时这个目录要给哪个目录使用 35 至少要使用两个分区 一个是Swap分区 另一个是根分区 可以使用以下两种分区工具 DiskDruid 这是RedHatLinux提供的管理工具 可以根据用户的要求创建和删除硬盘分区 还可以为每个分区管理载入点 Fdisk 传统的Linux分区工具 比DiskDruid功能更强大 使用更加灵活 要求用户对硬盘分区有一定经验 36 3 6 3I O管道和重定向 I O重定向 Redirection 大于符号 小于符号 按位或符号 作为管道 将前级命令的输出定向给下级的命令当输入 Linux将标准I O分为三种stdin Standardlnput 标准输入 键盘Linux命令后面所加的参数 例如 ls lfile1其中的file1就是标准输入stdout StandardOutput 标准输出 stderr Standarderror 标准错误输出 37 1 输出重定向符 ls l list正常情况执行ls l后 输出结果到屏幕上但经过输出重定向符 后 输出结果会存储到list文件中附加输出重定向符 catlist2 list1将输出重定向结果附加到输出文件的后面 cat显示list2 然后将结果附加到list1的文件尾 所以这样的操作可将两个文件合并成一个文件 若只有输出重定向符 则1ist2会把1ist1内容覆盖 38 2 输入重定向符 ls ldir1 file list当目录dir1存在时 输出会保存到file list中当目录dir1不存在时 file list文件为空 ls ldir1 file list 则不管是正常与否都记录到file list文件中通常应用于程序编译过程中 记录错误信息 39 4 管道符 管道的功用是将前面程序的输出结果引导为后面一个程序的输入 ls l usr more usr目录文件众多 使用ls l查看并无法一页显示完毕 输出结果由管道 定向给more命令 当作more命令的输入 而使得可以一页一页地观看1s的输出结果 40 3 7LINUX下的C语言编程入门 3 7 1C语言和LINUX3 7 2gcc编译器3 7 3GNU调试器GDB3 7 4使用make 41 3 7 1C语言和LINUX BrianW Kernighan DennisM Rithie开发了C语言 C语言的特点 1 语言简洁 紧凑 使用方便灵活 2 运算和数据结构丰富 3 C语言允许直接访问物理地址 可以进行位操作 能实现汇编语言的大部分功能 4 可移植性好 42 C语言在嵌入式系统中编写应用程序至少有以下一些好处 1 系统可以在其他的计算机上仿真 2 应用程序有较好的可移植性 3 便于程序的调试 4 C语言库函数丰富 43 gcc是GNU的C和C 编译器 它是Linux中最重要的软件开发工具 gcc能够编译三种语言 C C 和ObjectC C语言的一种面向对象扩展 利用gcc命令可同时编译并连接C和C 源程序 汇编语言的编译器为as 编译器被成功的移植到不同的处理器平台上 标准PCLINUX上的gcc是FORINTELCPU的 3 7 2gcc编译器 44 gcc的基本用法 gcc option filename 1 gcc cdemo c c 表示对文件进行编译和汇编 但不连接 2 gcc odemodemo o将得到名为demo的可执行文件 当使用 o选项时 o后面必须跟一个文件名 3 也可以上两步并为一步gcc odemodemo c 4 运行可执行文件 demo 表示当前目录下执行 5 gcc v显示版本 45 gcc的使用使用gcc 程序员能够对编译过程有更多的控制 编译过程一般分为四个阶段 预处理编译汇编链接 46 hello c程序清单 includevoidmain charmsg 80 Hello world printf s msg 47 hello c运行结果在命令行上键入以下命令编译和运行这段程序 gcchello c ohello helloHello World 48 gcc步骤 gcc首先运行预处理程序cpp来展开hello c中的宏并在其中插入 include文件所包含的内容 然后把预处理后的源代码编译成目标代码最后 调用链接程序ld创建一个名为hello的二进制文件 49 函数库和包含文件 1 如果需要链接函数库或不在标准位置下的包含 include 文件 可以使用 L DIRNAME 和 I DIRNAME 选项指定文件所在的目录 以确保该目录的搜索顺序在标准目录之前 例如 如果读者把自定义头文件放置在 usr local include someapp目录下 则为了使gcc能够找到这些文件 其命令行应与下面类似 gcc csomeapp c I usr local include someapp 50 函数库和包含文件 2 若需要测试在 home someuser lib目录下的新函数库libnew so so是共享库文件的标准扩展名 同时所有需要的头文件在 home someuser include目录下 为了链接该函数库与定位头文件 相应的命令行应与下面类似 gcc cmyapp c L home someuser lib I home someuser include lnew l选项使得链接程序使用指定的函数库中的目标代码 也就是本例中的libnew so 如果忘了使用 l选项 则与库的链接将失败 并且gcc发出错误说明程序中引用了未定义的函数名 51 gcc命令的常用选项有 c只编译并生成目标文件 oFILE生成指定的输出文件 用在生成可执行文件时 E只运行C预编译器 g生成调试信息 GNU调试器可利用该信息 IDIRECTORY指定额外的头文件搜索路径DIRECTORY LDIRECTORY指定额外的函数库搜索路径DIRECTORY lLIBRARY连接时搜索指定的函数库LIBRARY O或 O1优化生成代码 O2进一步优化 O3比 O2更进一步优化 包括inline函数 shared生成共享目标文件 通常用在建立共享库时 static禁止使用共享连接 w不生成任何警告信息 Wall生成所有警告信息 52 C预处理器cpp cpp命令用来完成宏求值 条件编译 以及其它一些需要把代码传递到编译器前完成的工作 通常带 的语句都将有cpp进行预处理 预处理的过程就是展开宏的过程 gcc编译器通常自动调用cpp 也可以使用gcc E调用cpp 或者在命令行中使用cpp 53 GNU连接器ld 实际上程序员编写的任何程序 都包含有许多部分 必须把它们组合起来形成可执行的文件 即使如同前面所见到的例子 程序只有一个模块 也必须使用连接器 ld 诸如C函数库 程序初始化代码等等将被包含进去 如果没有C函数库 将不能使用strcpy 或者getpwnam 等函数 如果要写一个大程序 很多时候要把它分成几个独立的模块 这时候需要连接器把所有模块组合起来 结合C函数库和初始化代码 产生最后的可执行文件 通常 ld被编译器所调用 产生可执行代码 54 GNU汇编器as as的任务就是处理汇编代码 并生成目标 二进制 代码 而目标代码将用来形成 o文件 库或者最终的可执行文件 as程序很少被单独使用 而基本上是被gcc调用 要注意的是由于汇编代码是低级别的代码 在不同平台上 甚至在相同的操作系统中 它也是不同的 比如在32位的x86平台上的用于计算的汇编代码 与在64位的Alpha平台上进行相同计算的汇编代码 就不一样 55 文件处理器ar 当要建立静态库的时候 就需要使用ar程序 这个程序用来把几个小文件组合成一个大文件 在建立静态库时 必须要用到把多个 o文件组合成一个单独的 a文件 56 3 7 3GNU调试器GDB Linux包含了一个叫gdb的GNU调试程序 gdb是一个用来调试C和C 程序的强力调试器 可以说 gdb不是创建工作的一部分 而是开发工作的一部分 使用它可以在程序运行时观察程序的内部结构和内存的使用情况 例如 监视程序中变量的值 设置断点以使程序在指定的代码行上停止执行 支持单步执行等 57 GDB介绍 1 用gcc gos c oos 产生的可执行文档叫os 然后打gdbos 就可进入gdb 屏幕提示 GDBisfreesoftwareandyouarewelcometodistributecopiesofitundercertainconditions type showcopying toseetheconditions ThereisabsolutelynowarrantyforGDB type showwarranty fordetails GDB4 16 Copyright1995FreeSoftwareFoundation Inc gdb gdb 是提示符 在这提示符下可以输入命令 直到退出 退出命令是q Q 58 GDB介绍 2 设置gdb的屏幕大小 键入 gdb setwidth70就是把标准屏幕设为70列 59 GDB介绍 3 设置断点 break或简单打b后面加行号或函数名可以在main函数上设断点 gdb breakmain或 gdb bmain系统提示 Breakpoint1at0 x8049552 fileos c line455 然后运行这个程序 当程序运行到main函数时程序就会停止返回到gdb的提示符下 60 GDB介绍 4 运行命令运行的命令是run或r打入r或run后 程序就开始运行直到进入main的入口停止 显示 Startingprogram osBreakpoint1 main atos c 455455Initial 这里455Initial 是将要执行的命令或函数 61 GDB介绍 5 gdb提供两种跟踪调试方式 1 单步进入 stepinto就是跟踪到函数内 命令是step或s2 单步 next 就是简单的单步 不会进入函数 命令是next或n 62 GDB介绍 6 gdb基本命令 file装入想要调试的可执行文件kill终止正在调试的可执行文件list列出产生可执行文件的源代码的部分next执行下一行源代码但不进入函数内部step执行下一行源代码而且进入函数内部run执行当前被调试的程序quit终止gdbwatch能监视一个变量的值而不管它何时被改变 在break断点设定以后采用 print显示表达式的值break在代码里设置断点 这将使程序执行到这里被挂起make不退出gdb就可以重新产生可执行文件shell不退出gdb就可执行UNIXshell命令 63 依赖库显示ldd ldd LibraryDependencyDisplay 工具用来显示一个可执行文件需要使用的共享函数库 对于简单的C程序来说 显示清单中通常只有两项 C函数库libc和动态库的装载器ld linux 比如 ldd myprogramlibc so 6 lib libc so 6 0 x40004000 lib ld linux so 2 lib ld linux so 2 0 x2aaaa000 64 3 7 4使用make 大程序通常包含有十几个甚至几百个单独的模块 如果手工调用gcc编译每一个模块的话 这个过程不但冗长了 而且非常乏味 也容易引进错误 65 Makefile 使用make 一个叫Makefile的文件将被创建 在这个文件里 描述了如何使用一套规则来创建系统的各个组件 这些规则定义了创建组件所需要的命令 比如对gcc和ar的调用 以及相互的依赖关系 比如 要修改一个为许多C源代码所包含的头文件 需要对这些文件重新编译 以使用新的头文件 然而为了节省时间 不需要再编译和此头文件无关的其他模块 GNUmake可以根据Makefile中指定的规则进行工作 这样只要编译那些需要重新编译的文件就可以了 并且生成新的可执行代码 由Makefile自动维护 使程序员从繁杂的维护工作中解脱出来 66 格式target dependencyfile1dependencyfile2 command1command2 Makefile 67 一个简单使用Makefile的例子 main o main clib1 h prog1 o prog1 clib1 h prog2 o prog2 c prog3 o prog3 clib2 h 68 Thisisourfirstmakefilemyprog
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业标准化课件
- 化工公司安全培训课件
- 化工企业安全工作培训课件
- 初识人工智能的课件
- 初等数论课件微盘
- 内镜室课件教学课件
- 化工事故安全培训心得
- 养生馆营销方案海报背景(3篇)
- 内训师选拔课件
- 内蒙古化工安全培训课件
- 物业员工安全知识教育培训
- 江苏省江阴市河塘中学2024-2025学年七年级上学期10月阶级段性练习语文试题
- 读懂诗家语省公开课金奖全国赛课一等奖微课获奖课件
- 老年人认知障碍的早期识别与干预
- 《电子商务法律法规》课程标准
- EPC模式承包人建议书与承包人实施方案
- 主动防护网施工方案
- 三年级下册书法练习指导全册教案(湖南美术出版社)
- GB/T 17880.5-1999平头六角铆螺母
- 2023年陕西省直和西安市接收军转干部划分条件
- 客诉客退产品处理流程
评论
0/150
提交评论