




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章Linux编程概述本章学习目标⊙ Linux下程序设计的特点⊙ Linux下程序设计的IDE的使用⊙ Linux的编程风格15.1Linux程序设计语言概述Linux编程C/C++JavaPythonRubyPerlPHP15.1.1Linux编程Linux的软件开发:一般都基于Internet许多用于Linux的编程工具都源于自由软件基金会(FSF)。所有的工具都可以免费获得,并且得到的源代码可在GNUGPL的指导下自由修改。Linux的程序需要首先转化为低级机器语言,才能被操作系统执行。15.1.2C/C++C语言:除了汇编语言,最接近机器的语言各种操作系统的编程接口的默认语言都是CC++是C语言的加强版:C++增加了面向对象和其它有用的功能,但它的效能并没有大减,编程更方便轻松C++与c:C++支持大部分C的程序,大部分的C编译器也支持C++类Unix操作系统中,C具有很好的开放源代码的条件C/C++具有现代语言的大量特征:(1)语句简练、结构清晰、紧凑,使用方便、灵活。(2)程序结构简单、书写格式自由。(3)数据类型丰富、齐全。(4)运算符丰富、齐全,运算能力强。(5)语法限制不太严格,程序自由度大。(6)具有直接的硬件处理能力。(7)C/C++编译系统生成的目标代码质量高,效率高。(8)程序可移植性强。(9)语言的通用性较强。15.1.3JavaJava语言:是SUN公司的产品,完全的面向对象的编程语言,不同的计算机平台上运行,适合编写网络应用程序。广泛应用于企业、个人终端、移动通信等众多领域。Java语言的特点:(1)简单:(2)面向对象(3)分布性(4)解释性(5)健壮性(6)安全性(7)可移植性(8)高性能(9)多线程(10)动态性15.1.4Python一种公共域的,即译式的,互动的,面向对象的动态编程语言真正的免费软件,关于软件的拷贝或者发布任何用Python开发的应用程序没有规则限制可以在包括Linux在内的任何操作系统平台上运行目前使用的最流行的语言之一包含:模组式的操作,异常处理,动态资料形态十分高层次的动态资料结构,以及类别的使用简单的语法和强大的功能,语法表达优美易读Python语言的特点:(1)开源软件,有许多人为它编写了数量众多的模块和库,(2)被解释器包裹的语言,使它可运行在大部分的操作系统上。(3)良好的粘合语言,可调用C和Java编写的库。(4)语法单纯(5)丰富的内置数据类型(6)功能可以无限扩展,这种扩展是通过导入模块来完成的(7)可移植度高15.1.5Ruby一种解释型的方便快捷的面向对象脚本语言适合文本文件处理和系统管理,并且完全面向对象。语法简单明快,可扩展并且可跨平台。完全自由开放原则:简单化的“最少惊喜”,Java的多线程和安全控制的功能,Tcl的容易扩展的功能,PHP的嵌入功能和强大客户端的功能,最方便的Shell命令的调用。Ruby语言的主要特点:1.纯的面向对象语言2.解释型脚本语言3.其他特点:(1)动态载入。(2)自动内存管理机制。(3)多精度整数。(4)迭代器和闭包。(5)开源项目。15.1.6Perl
PracticalExtractionandReportLanguageUNIX环境下编程高级语言的强大能力和灵活性不需要编译器和链接器来运行代码Perl的特点特点:有强大的字符串模式匹配,最好的文本文件的读取和生成语言Unix系统管理者的好帮手具有很大的自由性接口:强大的数据库接口和其它各种接口大量的程序库(CPAN)缺点:难读懂,维护困难,不适合编写大程序,只适合一千行以下的程序15.1.7PHP专门写网页程序的语言,语法和Perl极近可以嵌入HTML,更容易编写服务器端程序动态生成图像简化了Perl语言倾向于所有的功能都用函数来解决以HTML为用户界面,充当各种服务器得客户端,实现得是传统得客户端编程得任务15.2.1KDevelop简介基于KDE桌面环境的全能的开发环境,如图1-1集编辑、编译、调试等多种功能于一体内嵌许多优秀的第三方工具软件用KDevelop开发软件能自动生成configure脚本及Makefile.in文件,无需编写Makefile发出的软件符合国际化要求,翻译者可以很容易地将本地语言加入到项目中。网站:
15.2Linux集成开发环境图15-1
KDevelop界面15.2.2Eclipse简介替代IBMVisualAgeforJava(以下简称IVJ)的IDE开发环境,如图1-2所示通过开发插件,能扩展到任何语言的开发,甚至能成为图片绘制的工具。目前,Eclipse已经开始提供C/C++开发的功能插件(CDT)Eclipse一个开放源代码的项目可以通过开发新的插件扩展现有插件的功能无限扩展,而且有着统一的外观,操作和系统资源管理Eclipse主要特性:方便的对源文件进行导入和导出源代码的管理更加随心所欲支持团队开发支持插件开发网站:
图15-2
Eclipse主界面15.2.3Emacs简介GNUEmacs由C语言与LISP语言写成新发展的函数可以直接在Emacs中使用,不需重新编译(complie)整个Emacs新增的函数也不会破坏Emacs原有的结构公布的函数,由FSF的审查,以决定是否要加入新版的Emacs中FSF鼓励使用者将所发现的错误,透过相同的管道,提供给FSF作为改进之用不仅仅是一个编辑器,还是一个整合环境,或可称它为集成开发环境,如图15-3Emacs自行开发“bourne-shell-like”的shell:EShell收发电子邮件、通过FTP/TRAMP编辑远程档案、通过Telnet登录主机、上新闻组、登陆IRC和朋友交流、撰写文章大纲、个人信息管理支持多种编程语言的编辑、调试程序,结合GDB,EDebug等。支持C/C++、Perl、Python、Lisp、Java等网站:/projects/emacs
图15-3
GNUEmacs主界面15.3Linux编程风格GNU编程风格流行于Linux,广泛应用于Linux应用软件的编写(1)函数的开头的左花括号放到最左边,避免把任何其它的左花括号、左括号或者左方括号放到最左边。 函数定义:把函数名的起始字符放到最左边也同样重要15.3.1GNU风格(2)尽力避免让两个不同优先级的操作符出现在相同的对齐方式中。
(3)排版do-while语句:
(4)每个程序都应该以一段简短地、说明其功能的注释开头。
(5)每个函数书写注释函数作用,需要哪些种类的参数,参数可能值的含义以及用途。
如果它使用了任何非标准的东西,或者是可能导致函数不能工作的任何可能值,请确认对它们进行了说明。
如果存在重要的返回值,也需要对其进行解释。(6)不要在跨越了行的声明中声明多个变量。在每一行中都以一个新的声明开头。
如果它们是全局变量,在它们之中的每一个之前都应该添加一条注释。
(7)当在一个if语句中嵌套了另一个if-else语句,总是用花括号把if-else括起来。
按照与then那部分代码相同的缩进方式缩进elseif的then部分代码,也可在花括号中把if嵌套
(8)要在同一个声明中同时说明结构标识和变量或者结构标试和类型定义(typedef)。单独地说明结构标试,而后用它定义变量或者定义类型。
(9)尽力避免在if的条件中进行赋值。例如,不要写:
(10)请在名字中使用下划线分隔单词,坚持使用小写
把大写字母留给宏和枚举常量,以及根据统一的惯例使用的前缀。
(11)用于标明一个命令行选项是否被给出的变量应该在选项含义的说明之后,而不是选项字符之后,被命名。一条注释即应该说明选项的精确含义,还应该说明选项的字母。
15.3.1Linux内核风格 K&R的标准:Linux内核的编程风格。(1)缩进格式是8个字符,使得程序易读,能在你将程序变得嵌套层数太多的时候给警告(2)开始的大括号放在一行的最后,结束大括号放在一行的第一位,
(3)C是一种简洁的语言,命名也简洁
当混合类型的名字不得不出现的时候,描述性名字对全局变量来说是必要的了。
(4)函数应该短小而精悍
(5)注释是一件很好的事情,但是过多的注释也是危险的
要试图避免将注释插在一个函数体里15.4课后习题与实验15.4.1课后习题简述Linux下软件开发的特点。为什么在软件开发中需要良好的编程风格?15.4.2实验:了解Linux编程
实验目的
了解Linux下编程实验内容
选择自己熟悉的一门语言,学习 关于这门语言在Linux环境下的使用。(包括编辑器、编译器或者 集成开发环境的使用,如何使用该门语言进行Linux下的软 件开发等)完成实验报告实验步骤: 见书本思考题
说明集成开发环境(IDE)与编辑 器、编译器、连接器的区别。第六章Linux语言环境
⊙Shell的基本概念
⊙Shell编程基础
⊙使用GNU工具进行C/C++语言编程本章学习目标16.1Shell编程
一个命令语言解释器拥有内建的命令集能被系统中其他的应用程序所调用用户在命令提示符下输入的命令都由Shell解释后传递给内核16.1.1Shell基本概念Shell的概念用户LinuxShell进程命令计算机硬件Linux操作系统内核系统调用输出产生进程图16-1
Shell、用户、内核之间的关系命令分:包含在Shell内部的,存在于文件系统中单独的程序Shell接收到用户输入的命令
1。检查命令是否为内部的,若不是再检查是否是一个应用程序。
2。Shell在搜索路径里寻找这些应用程序。非内部命令,不包含在搜索路径里:显示错误信息能找到命令,该内部程序或应用程序将被分解为系统调用传递给Linux内核。Shell一个解释型的程序设计语言。Shell程序设计语言支持绝大多数在高级语言中能见到的程序元素。Shell编程语言简单易学,任何在提示符下能键入的命令都能放到一个执行的Shell程序中。Shell的种类Linux中的Shell有多个版本:BourneShell(sh)是Unix最初始的,在Shell编程方面相当优秀,但在处理与用户交互方面做得不好。BourneAgainShell(bash)是sh的扩展,与sh完全兼容,并且增加了许多特性,有灵活和强大的编程接口,同时又有很友好的用户界面。CShell(csh)是一种比sh更适于编程的Shell,它的语法和C语言相似,但是并不和sh兼容。KornShell(ksh)集合了csh和sh的优点并且和sh完全兼容。Bash优点:补全命令通配符历史命令别名输入/输出重定向管道提示符作用控制
Shell脚本:用Shell提供的语法所编写的脚本。可以将这些命令写成脚本文件,以后只要运行该脚本就可以了。Shell脚本的基本格式如图16-2所示。创建和执行Shell脚本#!/bin/bashecho“Dateandtimeis`date`”#end(1)文件以“#”开头的行是注释行。(2)echo命令用来显示信息,反引号``用于命令置换,也就是将反引号中的字符串作为命令执行,并输出其结果。
在执行脚本前,必须确定它是可执行的。
chmod可以用来对一个脚本文件添加可执行属性。说明:变量:可存放数据的标识符。“$”符号读取变量的值。除了自定义变量外,还有一些系统默认的特殊变量,这些变量也常常应用到脚本中除了系统的常用变量外,还有一些变量是执行Shell程序时系统设置变量,并且不能加以修改,这些变量也是相当有用的
16.1.2Shell语法Shell变量变量功能#存储Shell程序中命令行参数的个数?存储上一个执行命令的返回值0存储Shell程序的程序名*存储Shell程序的所有参数@存储所有命令行输入的参数$存储Shell程序的PID!存储上一个后台执行命令的PID表16-2 Shell程序执行时变量“expr”命令:处理数值运算命令后加上运算表达式表达式由字符串及运算符组成,每个字符串或运算符间必须用空格隔开。说明:当表达式中含有“*”、“(”、“)”等非字母或数字符号时,必须在其前加上“\”,以免被Shell解释成其他的意义。数值运算命令“test”:在Bash中,用于计算一个条件表达式的值。在条件语句和循环语句中被用来判断。“test”命令的语法格式:
testexpression或者[expression]在“test”命令中,可以使用很多Shell的内部操作符。
测试命令操作符介绍:(1)字符串操作符,用于计算字符串表达式:·str1=str2,当str1与str2相同时,返回True。·str1!=str2,当str1与str2不同时,返回True。·str,当str不是空字符时,返回True。·-nstr,当str的长度大于0时,返回True·-zstr,当str的长度是0时,返回True。(2)整数操作符具有和字符操作符类似的功能,只是它们的操作是针对整数:·int1-eqint2,当int1等于int2时,返回True。·int1-geint2,当int1大于或等于int2时,返回True。·int1-leint2,当int1小于或等于int2时,返回True。·int1-gtint2,当int1大于int2时,返回True。·int1-neint2,当int1不等于int2时,返回True。(3)文件操作符,它们能检查文件是否存在、文件类型等:·-dfile,当file是一个目录时,返回True。·-ffile,当file是一个普通文件时,返回True。·-rfile,当file是一个只读文件时,返回True。·-sfile,当file文件长度大于0时,返回True。·-wfile,当file是一个可写文件时,返回True。·-xfile,当file是一个可执行文件时,返回True。(4)逻辑操作符用于修饰/连接包含整数、字符串、文件操作符的表达:· !expr,当expr的值是False时,返回True。· expr1-aexpr2,当expr1、expr2值同为True时,返回True。· expr1-oexpr2,当expr1、expr2的值至少有一个为True时,返回True。条件结构
(1)if语句if语句可根据表达式的值是真或假来决定要执行的程序段落fi是if语句的结束符号,必须与if成对出现,而elif及else子句可有可无。elif是elseif的缩写,当if的表达式不成立时,才会接着测试elif表达式。如果if及elif的测试条件都不成立,最后才会执行else子句内的命令。一个if语句可以包含好几个elif子句,但只能包含一个else子句(2)case语句用来从很多的测试条件中选择符合的条件执行适用于字符串的比较,测试条件可以使用通配符。双分好(;;)为测试条件的结束。在每个测试条件成立后,一直到双分号之前的命令都会被Shell执行。使用通配符时,不要在字符串左右加双引号。由于所有字符串都可与通配符“*”匹配,所以“*”之后的命令可以看作是case语句的默认执行命令(3)
for语句
for语句有两种语法:第一种:
forvarinlist //对list中的每一个元素
do commands //执行这些操作
done //循环结束 在使用此形式时,对在list中的每一项,for语句都执行一次。List可以是包含几个单词并且有空格分隔开的变量,也可以是直接输入的几个值。每执行一次循环,var都被赋予list中的当前值,直到最后一个为止。for语句的in子句和case子句相同,都可以使用通配符。
循环结构第二种:
forvar do commands //对每一个命令行参数执行这些操作
done
使用这种形式时,Shell程序假定var包含Shell程序在命令行的所有位置的参数,对var中的每一项,for语句都执行一次。
(4)while与until语句
while与until的语法结构和用途类似。While语句在测试条件为真时循环执行
until语句会在测试条件为假时循环执行
(5)shift语句shift命令用来将命令行参数左移。shift命令也可以指定参数左移的位数,Shift命令常与while语句或until语句一起使用。(6)break和continue语句
在Shell的for、while、until循环语句中也可以使用如C语言的break和continue语句以跳离当前循环。Break语句:用于中断循环的执行,将程序流程转移至循环外。continue语句:则忽略之后的命令,将程序流程转移至循环开始处。break和continue语句后都可以加上数字,表示要跳出的循环数目。若指定的数字大于最大的循环层数,就跳至最外层循环执行,若只跳离一层,数字可以省略。
函数的定义和使用Shell的脚本也有函数的功能。当脚本变的很大时,可以将脚本文件中常用的程序写成函数的形式,这样可以使脚本更容易维护,同时结构更加严谨函数的使用方法与外部命令一样,只要直接使用函数名就可以了。在使用函数时,一样可以传入参数。函数处理参数的方式与脚本文件处理命令行参数的方法是一样的。在函数中,$1是指传入函数的第一个参数,$2是指传入函数的第二个参数。同时也可以使用shift命令来移动函数的参数。显示压缩文件的内容。#!/bin/bashecho–n“Displayingcontentsof$1”if[${1##*.}=tar]then echo“(uncompressedtar)” tartvf$1elif[${1##*.}=gz]then echo“(gzip-compressedtar)” tartzvf$1elif[${1##*.}=bz2]then echo“(bzip2-compressedtar)” cat$1|bzip2–d|tartvf–fi#end16.1.3Shell编程示例示例一在指定文件中查找特定单词。#!/bin/bashiftest$#-ne2then echo“Invalidargument!”else filename=$1 word=$2 ifgrep$word$filename>/tmp/temp then echo“Thewordwasfound!” else echo“Thewordwasnotfound!” fifi#end示例二查找用户是否登录,若已登录,输出该用户的信息。#!/bin/bashecho“Typeintheusername.”readuserif grep$user/etc/passwd>/tmp/null who|grep$userthen echo“$userhasloggedinthesystem.” cat/tmp/nullelse echo“$userhasnotloggedinthesystem.”fi#end示例三GCC:GNUCompilerCollection的简称,有时也叫GNUCC。能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。16.2C/C++语言编程16.2.1GCCGCC简介GCC支持的体系结构有四十余种。能运行在不同的操作系统上,还支持多种语言。对于C语言,GCC中的编译器是gcc,而对于C++,GCC中的编译器是gcc和g++。程序的编译过程
对于GNU编译器来说,程序的编译要经历预处理、编译、汇编、连接四个阶段,如图16-3所示。从功能上分,预处理、编译、汇编是三个不同的阶段,但GCC的实际操作上,它可以把这三个步骤合并为一个步骤来执行。
gcc的常用模式
编译模式和编译连接模式。gcc常用选项编译C++在GNUCC中,编译C++有两个工具,gcc和g++。16.2.2GNUmake
GNUmake:Linux专门为软件开发提供的自动化管理工具。可以方便地管理软件编译的内容、方式和时机。make将整个软件项目的代码分开放在几个小的源文件里,在改动其中一个文件的时候,可以只对该文件重新进行编译,然后重新连接所有的目标文件。GNUmake简介
Makefile
程序员通过定义构建规则来控制代码的创建过程。这些规则通常定义在一个名为Makefile的文件中。Makefile中的每条规则事实上都包含如下一些内容:目标(target)是make最终需要创建的对象;依赖(dependency)通常是一个列表,指明编译目标时需要用到的其它文件;命令(command)也是一个列表,指明从依赖文件创建出目标对象所需要执行的命令。
变量
引入了变量,简化Makefile的编写。变量:为文本串在Makefile中定义一个便于记忆的名称。变量的定义和应用与Linux的环境变量一样,变量名大写,变量一旦定义之后,就可以通过将变量名用圆括号包起来,并在前面加上“$”符号来进行引用。变量一般都在Makefile的头部定义。如果变量的值发生了改变,很显然只需在一个地方进行修改就可以了,从而大大简化了Makefile的维护。伪目标
在Makefile中,并不是所有的目标都对应于磁盘上的文件。有的目标存在只是为了形成一条规则,从而完成特定的工作,并不生成新的目标文件,这样的目标称为伪目标。在已经给出的Makefile文件中,最后一个目标clean就是伪目标。它规定了make应该执行的命令。隐式规则
除了可以在Makefile中明确指定规则(显示规则)之外,make还维护了一整套隐式规则。
隐式规则可以在用户没有完整地给出某些命令的时候,自动执行恰当的操作。隐式规则最大的好处是可以简化Makefile的编写和维护16.2.3调试工具GDB
GNU的调试器称为GDB,该程序是一个交互式工具,工作在字符模式。GDB是功能强大的调试程序,可完成如下的调试任务: 设置断点 监视程序变量的值 程序的单步执行 修改变量的值GDB介绍
常用GDB命令
命令描述file装入想要调试的可执行文件kill终止正在调试的程序list列出产生执行文件的源代码的一部分next执行一行源代码但不进入函数内部step执行一行源代码而且进入函数内部run执行当前被调试的程序quit终止GDBwatch使用户能监视一个变量的值而不管它何时被改变break在代码里设置断点,这将使程序执行到这里时被挂起make使用户能不退出GDB就可以重新产生可执行文件shell使用户能不离开GDB就执行UNIXshell命令GDB使用范例
以下是一个有错误的C语言源程序test.c:#include<stdio.h>#include<stdlib.h>staticcharbuff[256];staticchar*string;intmain(){printf("Pleaseinputastring:");gets(string);printf("Yourstringis:%s",string);}利用GDB查找该程序中出现的问题,并按如下的步骤进行:运行gdbtest命令,装入test可执行文件。执行装入的test命令。使用where命令查看程序出错的地方。利用list命令查看调用gets函数附近的代码。唯一能够导致gets函数出错的因素就是变量string,用print命令查看string的值。在GDB中,我们可以直接修改变量的值,只要将string取一个合法的指针值就可以了,为此,我们在第11行处设置断点。程序重新运行到第11行处停止,这时,我们可以用setvariable命令修改string的取值。然后继续运行,将看到正确的程序运行结果16.3课后习题与实验
什么是Shell?RedHatLinux9默认的是哪一种Shell?Shell的主要功能是什么?主要执行方式有哪些?Shell的变量有哪些?如何实现对变量的赋值及引用?command1&&command2||command3的含义是什么?分析下面一段Shell脚本的功能:
count=$# cmd=echo while[$count–gt0] do cmd=”$cmd\$$count” letcount=$count–1 done16.3.1课后习题6. 编写一个Shell脚本,显示当天日期,查找给定的某用户是否已经登录到系统,若已经登录,则发送问候给该用户。7. 编写一个Shell脚本,求斐波那契数列的第10项,及其前10项总和。8. 编写一个C语言程序,在屏幕上显示“hello,world!”。16.3.2实验:Shell及C编程
实验目的掌握Linux下Shell脚本的编写及GNUCC工具的使用实验内容设计一个Shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/$HOME目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/$HOME目录下。设计一个Shell程序,在/$HOME/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。编写一个C语言程序,对一个数组实现冒泡排序。sort.c:包含冒泡排序的函数;main.c:加载sort.c,并实现主函数用来测试排序函数;编写makefile,并使用make对该程序进行编译连接完成实验报告思考题尝试使用gdb进行调试,在调试过程中,记录下每一次排序循环后数组的变化。尝试使用makefile的特性(如定义变量、伪目标、隐式规则等)使实验要求编写的makefile更具通用性第十七章Linux内核概述
本章学习目标⊙ 内核的基本概念⊙ 可加载模块的概念17.1内核简介
“内核”:操作系统的核心一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。Linus开发的Linux仅是一个内核,并不是一个完整的操作系统。Linux内核不是现代操作系统所崇尚的微内核结构,而是一体化内核系统,整个内核就是一个单独的系统程序。从实现机制看,Linux分为五个子系统:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。17.1.1内核结构介绍17.1.2内核版本
Linux内核的版本编号系统是这里要重点介绍的。从Linux1.0这个里程碑式的系统开始,使用了两“路”编号方法标注内核的开发。偶数号的内核(比如1.0、2.2、2.4)是“稳定阶段的”内核,表示对内核只有少量的修改,这些修改不影响内核的稳定性,只是为了修正一些bug或优化效率等。奇数号的内核版本(1.1、2.3)是前沿的或者“开发阶段的”内核,表示对内核特性有所增加17.1.3内核配置及编译
Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核为什么重新配置及编译内核内核编译模式
要增加对某部分功能的支持,也可把该部分编译成模块(module),动态调用。编译到内核中,在内核启动时可以自动支持相应部分的功能优点是方便、速度快,机器一启动,你就可以使用这部分功能了缺点是会使内核变得庞大起来如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载优点是不会使内核过分庞大缺点是你得自己来调用这些模块配置及编译内核[root@localhostboot]#ln-svmlinuz-vmlinuz[root@localhostboot]#ln-sSystem.map-System.map//以上命令为安装编译好的新内核//然后修改grub.conf,将新内核配置到启动菜单后,内核的安装就完成了。//从Linux内核版本发布的官方网站()下载最新的稳定版内核//当前为linux-.tar.bz2。//将下载的新内核放入/usr/src目录。[root@localhostdownload]#cplinux-.tar.bz2/usr/src//解压新内核[root@localhostdownload]#cd/usr/src[root@localhostsrc]#tarjxvflinux-.tar.bz2[root@localhostsrc]#cdlinux-//开始编译内核之旅[root@localhostlinux-]#makemrproper//以上命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。[root@localhostlinux-]#makemenuconfig//以上命令进行内核的配置,一共有三种配置选项://Y:将该功能编译进内核;//N:不将该功能编译进内核;//M:将该功能编译成可以在需要时动态插入到内核中的模块。//配置完后,存盘退出。[root@localhostlinux-]#makedep//以上命令确保关键文件在正确的位置[root@localhostlinux-]#makeclean//以上命令确保所有有关文件都处于最新版本状态[root@localhostlinux-]#makezImage/bzImage//以上命令编译压缩形式的内核//zImage:普通方式编译内核//bzImage:需要内核支持较多的外设和功能时,内核可能变得很大,此时可以编译大内核[root@localhostlinux-]#makemodule//以上命令编译选择的模块[root@localhostlinux-]#makemodule_install//以上命令将编译后的模块转移到系统标准位置[root@localhostlinux-]#cpSystem.map/boot/System.map-[root@localhostlinux-]#cparch/i386/bzImage/boot/vmlinuz-[root@localhostlinux-]#cd/boot;rm-fSystem.mapvmlinuz17.1.4内核补丁安装
补丁文件比完整的内核文件要小得多,下载起来比较方便。但补丁文件只能对前一个版本进行升级。例如:假定当前内核版本为,需要下载的补丁文件为patch-.bz2。
patch程序用来对内核源文件进行一系列的修改:〖示例17.1〗[root@localhostdownload]#bzip2–dpatch-.bz2[root@localhostdownload]#cppatch-/usr/src/linux[root@localhostdownload]#cd/usr/src/linux[root@localhostlinux]#patch–p1<patch-将当前内核版本升级成。17.2可加载模块
动态可加载模块好处:让内核保持很小的尺寸同时非常灵活无需重构内核并频繁重新启动来尝试运行新内核代码尽管使用模块很自由,但是也有可能同时带来与核心模块相关的性能与内存损失。可加载模块的代码一般有些长并且额外的数据结构可能会占据一些内存。对内核资源的间接使用可能带来一些效率问题17.2.1可加载模块概述17.2.2模块工具
模块的命令:使用lsmod来查看内核中当前的模块使用modprobe来加载核心模块使用rmmod来卸载模块核心自身可请求核心后台进程kerneld来加载与卸载模块lsmod
说明:列出目前系统中已加载的模块的名称及大小等可以查看/proc/modules,知道系统已经加载的模块。[root@localhostroot]#lsmodModuleSizeUsedby
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论