资源描述
Linux 内核 Makefile 文件
目录
1概述22角色分工3
3内核编译文件4
3.1 目标定义4
3.2 内嵌对象-obj-y4
3.3 可力口载模块 -obj-m5
3.4 导出符号目标6
3.5 库文件-lib-y6
3.6 目录递归6
3.7 编译标记7
3.9 依赖关系8
3.10 特殊规那么$(obj)8
3.11 $(CC)支持功能94辅助程序11
4.1 简单辅助程序11
4.2 组合辅助程序11
4.3 定义共享库11
4.4 C++语言使用方法12
4.5 辅助程序编译控制选项12
4.6 何时建立辅助程序13
4.7 使用 hostprogs-$(CONFIG_FOO)145编译清除机制15
6体系Makefile文件17
1.1 变量设置17
1.2 增加预设置项19
1.3 目录表19
1.4 引导映像20
1.5 编译非内核目标21
1.6 编译引导映像命令21
1.7 定制编译命令23
1.8 预处理连接脚本23Kbuild 变量25
7 Makefile 语言26Credits26
8 TODO26Example:
CFLAGS += $(cc-option-align)-functions=4
在上面例子 中对于gcc >= 3.00来 说-falign-functions=4, gcc < 3.00版本使用 -malign-functions=4。
cc-versioncc-version返回$(CC)编译器数字版本号。
版本格式是vmajor>vminor>,均为两位数字。例如gcc 3.41将返回0341。当一个特定 $(CC)版本在某个方面有缺陷时cc-version是很有用的。例如-mregparm=3在一些gcc版本会 失败尽管gcc接受这个选项。
Example:
#arch/i386/MakefileGCC_VERSION := $(call cc-version) cflags-y += $(shell \
if [ $(GCC_VERSION) -ge 0300 ] ; then echo n-mregparm=3n; fi ;)在上面例子中-mregparm=3表示只使用在版本大于等于3.0的gcc中。
4辅助程序
内核编译系统支持在编译(compliation)阶段编译主机可执行程序。为了使用主机程序 需要两个步骤:第一个步骤使用hostprogs-y变量告诉内核编译系统有主机程序可用。第二 步给主机程序添加潜在的依赖关系。有两种方法,在规那么中增加依赖关系或使用$(always) 变量。具体描述如下。
4.1 简单辅助程序
在一些情况下需要在主机上编译和运行主机程序。下面这行告诉kbuild在主机上建立 bin2hex 程序。
Example:
hostprogs-y := bin2hexKbuild假定使用Makefile相同目录下的单一 C代码文件bin2hex.c编译bin2hex。
4.2 组合辅助程序
主机程序也可以由多个object文件组成。定义组合辅助程序的语法同内核对象的定义 方法。$(<executeable>-objs)包含了所有的用于链接最终可执行程序的对象。
Example:
#scripts/lxdialog/Makefile hostprogs-y := Ixdialog Ixdialog-objs := checklist.o Ixdialog.o扩展名.o文件都编译自对应的.c文件。在上面的例子中checklist.c编译成checklist.o,
Ixdialog.c编译为Ixdialog.Oo最后两个.0文件链接成可执行文件Ixdialogo注意:语法vexecutable〉-y不能用于定义主机程序。
4.3 定义共享库
扩展名为30的对象是共享库文件,并且是位置无关的object文件。内核编译系统提供 共享库使用支持,但使用方法有限制。在下面例子中libkconfig.so库文件被链接到可执行文 件conf中oExample:
#scripts/kconfig/Makefile hostprogs-y := conf conf-objs := conf.o libkconfig.so libkconfig-objs := expr.o type.o
共享库文件需要对应的-objs定义,在上面例子中库libkconfig由两个对象组成:expr.o 和type.oo expr.o和type.o将被编译为位置无关代码并被链接如libkconfig.so。共享库不支持 C++语言。
4.4 C++语言使用方法
内核编译系统提供了对C++主机程序的支持以用于内核配置,但不主张其它方面使用 这种方法。
Example:
#scripts/kconfig/Makefile hostprogs-y := qconf qconf-cxxobjs := qconf.o在上面例子中可执行文件由C++文件qconf.cc组成-通过$(qconf-cxxobjs)标识。
如果qconf由.c和.cc文件混合组成,附加行表示这种情况。
Example:
#scripts/kconfig/Makefile hostprogs-y := qconf qconf-cxxobjs := qconf.o qconf-objs := check.o辅助程序编译控制选项
当编译主机程序时仍然可以使用$(HOSTCFLAGS)设置编译选项传递给$(HOSTCC)。 这些选项将影响所有使用变量HOST.EXTRACFLAG的Makefile创立的主机程序。
Example:
#scripts/lxdialog/MakefileHOST_EXTRACFLAGS +二-I/usr/include/ncurses
为单个文件设置选项使用下面方式:
Example:
#arch/ppc64/boot/MakefileHOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE)
也可以使用附加链接选项:
Example:
#scripts/kconfig/MakefileHOSTLOADLIBES_qconf := -L$(QTDIR)/lib
当链接qconf时将使用外部选项”-L$(QTDIR)/lib\何时建立辅助程序
只有当需要时内核编译系统才会编译主机程序。有两种方式:
(1)在特殊规那么中作为隐式的前提需求Example:
#drivers/pci/Makefile hostprogs-y := gen-devlist $(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist (cd $(obj); ./gen-devlist) < $<
编译目标文件$(obj)/devlist.h需要先建立$(obj)/gen-devlist。注意在特殊规那么中使用主 机程序必须加前缀$(obj)。
(2)使用 $(always)
当没有合适的特殊规那么可以使用,并且在进入Makefile文件时就要建立主机程序,可 以使用变量$(always)。
Example:
#scripts/lxdialog/Makefile hostprogs-y := Ixdialog always :二 $(hostprogs-y)这样就告诉内核编译系统即使没有任何规那么使用Ixdialog也要编译它。
4.5 使用 hostprogs-$(CONFIG_FOO)在Kbuild文件中典型模式如下:
Example:
#scripts/Makefilehostprogs-$(CONFIG_KALLSYMS) += kallsyms
对Kbuild来说V用于内嵌对象,m,用于模块。因此如果config符号是,nT,编译系统也将 创立该程序。换句话说内核编译系统等同看待hostprogs-m和hostprogs-y。但如果不涉及到 CONFIG符号仅建议使用hostprogs-yo
5编译清除机制"make clean”命令删除在编译内核生成的大局部文件,例如主机程序,列举在$(hostprogs-y)、 $(hostprogs-m)> $(always)> $(extra-y^D$(targets)中目标文件都将被删除。代码目录数中的 ”*.[oas/、"*.ko”文件和一些由编译系统产生的附加文件也将被删除。
附加文件可以使用$(clean-files)进行定义。
Example:
#drivers/pci/Makefileclean-files := devlist.h classlist.h
当执行"make clean”命令时,"devlist.h classlist.h”两个文件将被删除。内核编译系统默认这 些文件与Makefile具有相同的相对路径,否那么需要设置以7开头的绝对路径。
删除整个目录使用以下方式:
Example:
#scripts/package/Makefile clean-dirs := $(objtree)/debian/这样就将删除包括子目录在内的整个debian目录。如果不使用以7开头的绝对路径内核编译 系统见默认使用相对路径。
通常内核编译系统根据”。bj-* := dir/”进入子目录,但是在体系Makefile中需要显式使用如下 方式:
Example:
#arch/i386/boot/Makefile subdir- := compressed/上面赋值语句指示编译系统执行"make clean”命令时进入compressed/目录。
在编译最终的引导映像文件的Makefile中有一个可选的目标对象名称是archcleanoExample:
#arch/i386/MakefiIearchclean:
$(Q)$(MAKE) $(clean)=arch/i386/boot当执行"make clean”时编译器进入arch/i386/boot并象通常一样工作。arch/i386/boot中的 Makefile文件可以使用subdir-标识进入更下层的目录。
注意1: arch/$(ARCH)/Makefile不能使用"subdir-”,因为它被包含在顶层Makefile文件中, 在这个位置编译机制是不起作用的。
注意2:所有列举在core-y> libs-y> drivers-y和net-y中的目录将被"make clean”命令清除。
6体系Makefile文件在开始进入各个目录编译之前,顶层Makefile文件设置编译环境和做些准备工作。顶层 Makefile文件包含通用局部,arch/$(ARCH) /Makefile包含该体系架构所需的设置。因此 arch/$(ARCH)/Makefile会设置一些变量和少量的目标。
当编译时将按照以下大概步骤执行:
1)配置内核=> 产生.config文件2)保存内核版本到include/linux/version.h文件中
3)符号链接 include/asm to include/asm-$(ARCH)4)更新所有目标对象的其它前提文件
- 附加前提文件定义在arch/$(ARCH)/Makefile文件中5)递归进入init-* core* drivers-* net-* libs-*中的所有子目录和编译所有的目标对象
- 上面变量值都引用到arch/$(ARCH)/Makefile文件。
6)链接所有的object文件生成vmlinux文件,vmlinux文件放在代码树根目录下。
最开始链接的几个object文件列举在arch/$(ARCH)/Makefile文件的head-y变量中。
7)最后体系Makefile文件定义编译后期处理规那么和建立最终的引导映像bootimageo包括创立引导记录
- 准备initrd映像和相关处理.1变量设置
LDFLAGS $(LD)一般选项选项使用于链接器的所有调用中。通常定义emulation就可以了。
Example:
#arch/s390/M akefil eLDFLAGS :=-m elLs390
注意:EXTRA_LDFLAGS和LDFLAGS_$@可以进一步订制使用选项,请参考第7章。
LDFLAGS.MODULE$(LD)链接模块的选项
LDFLAGS_MODULE通常设置$(口))链接模块的.ko选项。默认为“-r”即可重定位输出 文件。
LDFLAGS_vmlinux $(LD)链接 vmlinux 选项
LDFLAGS.vmlinux是定义链接最终vmlinux时链接器的选项。LDFLAGS_vmlinux支 持使用 LDFLAGS_$@oExample:
#arch/i386/MakefileLDFLAGS_vmlinux :二-e stext
OBJCOPYFLAGS objcopy 选项
当使用$(call if_changed,objcopy)转化a .。文件时,OBJCOPYFLAGS中的选项将被使 用。$(call if_changed,objcopy)经常被用作为vmlinux产生原始的二进制文件。
Example:
#arch/s390/MakefileOBJCOPYFLAGS := -O binary
#arch/s390/boot/Makefile $(obj)/image: vmlinux FORCE $(call if_changed,objcopy)
在上面例子中$(obj)/image是vmlinux的二进制版本文件。$(call if_changed,xxx)的使用 方法见后。
AFLAGS$(AS)汇编选项默认值见顶层Makefile文件。针对每个体系需要另外添加和修改它。
Example:
#arch/sparc64/MakefileAFLAGS += -m64 -mcpu=ultrasparc
CFLAGS$(CC)编译器选项默认值见顶层Makefile文件。针对每个体系需要另外添加和修改它。
通常CFLAGS变量值取决于内核配置。
Example:
#arch/i386/M akefil ecflags-$(CONFIG_M386) += -march=i386
CFLAGS += $(cflags-y)许多体系Makefiles文件动态启动市场目标机器上的C编译器检测支持的选项:
#arch/i386/Makefile cflags-$(CONFIG_MPENTIUMIT) += $(call cc-option,\-march=pentium2,-march=i686)...
# Disable unit-at-a-time mode ...
CFLAGS += $(call cc-option,-fno-unit-at-a-time)第一个例子当config选项是V时将被选中。
CFLAGS_KERNEL$(CC)编译 built-in 对象的选项$(CFLAGS_KERNEL)包含外部C编译器选项编译本地内核代码。
CFLAGS_MODULE $(CC)编译模块选项$(CFLAGS_MODULE)包含外部C编译器选项编译可加载内核代码。
6.2 增加预设置项
pr叩are:这个规那么用于列举开始进入子目录编译前需要的前提文件。通常是些包含汇 编常量的头文件。
prepare:这个规那么用于列举开始进入子目录编译前需要的前提文件。通常是些包含汇 编常量的头文件。
Example:
#arch/s390/Makefileprepare: include/asm-$(ARCH)/offsets.h
在这个例子中include/asm-$(ARCH)/offsets.h将在进入子目录前编译。详见XXX-TODO 文件描述了 kbuild如何产生offset头文件。
6.3 目录表
体系Makefile文件和顶层Makefile文件共同定义了如何建立vmlinux文件的变量。注 意没有体系相关的模块对象定义局部:所有的模块对象都是体系无关的。
head-y, init-y, core-y, libs-y, drivers-y, net-y1概述
Makefile包括五局部:
Makefile .config arch/$(ARCH)/Makefile scripts/Makefile. * kbuild Makefiles
1概述
Makefile包括五局部:
Makefile .config arch/$(ARCH)/Makefile scripts/Makefile. * kbuild Makefiles
顶层Makefile文件
内核配置文件
机器体系Makefile文件
所有内核Makefiles共用规那么 其它Makefile文件
通过内核配置操作产生.config文件,顶层Makefile文件读取该文件的配置。顶层 Make行le文件负责产生两个主要的程序:vmlinux (内核image)和模块。顶层Makefile文件根 据内核配置,通过递归编译内核代码树子目录建立这两个文件。顶层Makefile文件文本一 个名为arch/$(ARCH)/Makefile的机器体系Makefile文件。机器体系Makefile文件为顶层 Makefile文件提供与机器相关的信息。
每一个子目录有一个Makefile文件,子目录Makefile文件根据上级目录Makefile文件 命令启动编译。这些Makefile使用.config文件配置数据构建各种文件列表,并使用这些文 件列表编译内嵌或模块目标文件。
scripts/Makefile.*包含了所有的定义和规那么,与Makefile文件一起编译出内核程序。
$(head-y)列举首先链接到vmlinux的对象文件。
$(libs-y)列举了能够找到lib.a文件的目录。
其余的变量列举了能够找到内嵌对象文件的目录。
$(init-y)列举的对象位于$(11匕@(1-丫)对象之后。
然后是如下位置秩序:
$(core-y), $(libs-y), $(drivers-y)和 $(net-y)o
顶层Makefile定义了所有同用目录,arch/$(ARCH)/Makefile文件只需增加体系相关的 目录。
Example:
#arch/sparc64/Makefilecore-y +二 arch/sparc64/kernel/
libs-y += arch/sparc64/prom/ arch/sparc64/Iib/drivers-$(CONFIG_OPROFILE) += arch/sparc64/oprofile/
6.4 引导映像
体系Makefile文件定义了编译vmlinux文件的目标对象,将它们压缩和封装成引导代 码,并复制到合适的位置。这包括各种安装命令。如何定义实际的目标对象无法为所有的体 系结构提供标准化的方法。
附加处理过程常位于arch/$(ARCH)/下的boot/目录。
内核编译系统无法在boot/目录下提供一种便捷的方法创立目标系统文件。因此 arch/$(ARCH)/Makefile要调用make命令在boot/目录下建立目标系统文件。建议使用的方 法是在arch/$(ARCH)/Makefile中设置 调用,并 且使用 完整路 径引用 arch/$ (ARCH)/boot/MakefileoExample:
#arch/i386/Makefileboot := arch/i386/boot
bzlmage: vmlinux$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
建议使用“$(Q)$(MAKE) $(build)=vdir>”方式在子目录中调用make命令。
没有定义体系目标系统文件的规那么,但执行”make help”命令要列出所有目标系统文件, 因此必须定义$(archhelp)变量。
Example:
#arch/i386/Makefiledefine archhelp
echobzlmage - Image (arch/$(ARCH)/boot/bzImage)1 endef
当执行不带参数的make命令时,将首先编译第一个目标对象。在顶层Makefile中第 一个目标对象是all:o一个体系结构需要定义一个默认的可引导映像。
“make help”命令的默认目标是以*开头的对象。
增加新的前提文件给all目标可以设置不同于vmlinux的默认目标对象。
Example:
#arch/i386/Makefile all: bzlmage当执行不带参数的“make”命令时,bzlmage文件将被编译。
6.5 编译非内核目标extra-y
extra-y定义了在当前目录下创立没有在obj-*定义的附加的目标文件。
在extra-y中列举目标是处于两个目的:
1)是内核编译系统在命令行中检查变动情况-当使用$(call if_changed,xxx)时
2)内核编译系统知道执行"make clean”命令时删除哪些文件Example:
#arch/i386/kemel/Makefileextra-y := head.o init_task.o
上面例子extra-y中的对象文件将被编译但不会练接到built-in.o中。
6.6 编译引导映像命令Kbuild提供了 一些编译引导映像有用的宏。
iCchangedif_changed是后面命令使用的基础。
用法:
target: source(s)FORCE $(call iCchanged,ld/objcopy/gzip)
当这条规那么被使用时它将检查哪些文件需要更新,或命令行被改变。后面这种情况将 迫使重新编译编译选项被改变的执行文件。使用if_changed的目标对象必须列举在$(targets) 中,否那么命令行检查将失败,目标一直会编译。
赋值给$(targets)的对象没有$(obj)/前缀。
if_changed也可以和定制命令配合使用,见6.7nkbuild定制命令”。
注意:一个常见错误是忘记了 FORCE前导词。
链接目标。常使用LDFLAGS_$@作为Id的选项。
objcopy
复制二进制文件。常用于arch/$(ARCH)/Makefile中和使用OBJCOPYFLAGS作为选 项。
也可以用OBJCOPYFLAGS_$@设置附加选项。
gzip压缩目标文件。使用最大压缩算法压缩目标文件。
Example:
#arch/i386/boot/MakefileLDFLAGS_bootsect := -Ttext 0x0 -s —oformat binary
LDFLAGS_setup := -Ttext 0x0 -s —oformat binary -e begtexttargets += setup setup.o bootsect bootsect.o
$(obj)/setup $(obj)/bootsect: %: %.o FORCE$(call if_changed,ld)
在上面例子中有两个可能的目标对象,分别需要不同的链接选项。使用LDFLAGS_$@ 语法为每个目标对象设置不同的链接选项。
$(targets)包含所有的目标对象,因此内核编译系统知道所有的目标对象并且将:
1)检查命令行的改变情况2)执行make clean命令时删除目标对象
":%: %。"是简写方法,简写setup.o和bootsect.o文件。
注意:常犯错误是忘记"target.”语句,导致没有明显的原因目标文件被重新编译。
6.7 定制编译命令
当执行带KBUILD_VERBOSE=0参数的编译命令时命令的简短信息会被显示。要让定 制命令具有这种功能需要设置两个变量:
quiet_cmd_<command> - »各被显示的内容 cmd_<command> -被执行的命令Example: # quiet_cmd_image = BUILD $@ cmd_image = $(obj)/tools/build $(BUILDFLAGS) \ $(obj)/vmlinux.bin > $@
targets 十= bzlmage $(obj)/bzlmage: $(obj)/vmlinux.bin $(obj)/tools/build FORCE $(call ifLchanged,image) @echo 'Kernel: $@ is ready*执行"make KBUILD_VERBOSE=0"命令编译$(obj)/bzlmage 目标时将显示:
BUILD arch/i386/boot/bzlmage预处理连接脚本
当编译vmlinux映像时将使用arch/$(ARCH)/kernel/vmlinux.lds链接脚本。
相同目录下的文件是这个脚本的预处理的变体。内核编译系统知晓.Ids 文件并使用规那么*lds.S -> *ldso
Example:
#arch/i386/kernel/Makefile always :二 vmlinux.Ids #Makefileexport CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
$(always)赋值语句告诉编译系统编译目标是vmlinux.Ids。$(CPPFLAGS_vmlinux.lds) 赋值语句告诉编译系统编译vmlinux.lds目标的编译选项。
编译*.Ids时将使用到下面这些变量:
CPPFLAGS :定义在顶层 MakefileEXTRA_CPPFLAGS :可以设置在编译的Makefile文件中
CPPFLAGS_$(@F):目标编译选项。注意要使用文件全名。
7 Kbuild 变量顶层Makefile文件导出下面这些变量:
VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
这几个变量定义了当前内核版本号。很少体系体系Makefiles文件直接使用他们,常用 $(KERNELRELEASE)代替。
$(VERSION)> $(PATCHLEVEL^D$(SUBLEVEL)定义了三个基本局部版本号,例如“2”, “4”,和“0”。这三个变量一直使用数值表示。
$(EXTRAVERSION)定义了更细的补钉号,通常是短横跟一些非数值字符串,例如 H-pre4noKERNELRELEASE
$(KERNELRELEASE)是一个单一字符如”2.4.0-pre4”,适合用于构造安装目录和显示版 本字符串。一些体系文件使用它用于以上目的。
ARCH
这个变量定义了目标系统体系结构,例如“i386”、“arm”、“spare”. 一些内核编译文件测 试$0乩引用于确定编译哪个文件。默认情况下顶层Makefile文件设置$。4同为主机相同 的系统体系。当交叉编译编译时,用户可以使用命令行改变$(ARCH)值:
make ARCH=m68k...
INSTALL_PATH这个变量定义了体系Makefiles文件安装内核映项和System.map文件的路径。
INSTALL MOD PATH, MODLIB
$(INSTALL_MOD_PATH)定义了模块安装变量$(MODLIB)的前缀。这个变量通常不在 Makefile文件中定义,如果需要可以由用户添加。
$(MODLIB)定义了模块安装目录。
顶层 Makefile 定义 $(MODLIB)为 $(INSTALL_MOD_PATH)/lib/modules/ $(KERNELRELEASE)O用户可以使用命令行修改这个值。
8 Makefile 语言内核Makefiles设计目标用于运行GNU Make程序。Makefiles仅使用GNU Make提到的特 性,但使用了较多的GNU扩展局部。
GNU Make程序支持基本的列表处理功能。内核Makefiles文件结合”iF语句使用了简单的列 表建立和维护功能。
GNU Make程序有两种赋值操作符:“:二”和"执行时立即计算右值并赋值给左值。
类似公式定义,当每次使用左值要被使用时计算右值并赋给它。
一些情况中使用■”合适,而一些情况中使用才是正确选择。
9 CreditsOriginal version made by Michael Elizabeth Chastain, <>
Updates by Kai Germaschewski <kai@tpl .ruhr-uni-bochum.de>Updates by Sam Ravnborg <>
10 TODO-Describe how kbuild support shipped files with _shipped.
-Generating offset header files.
-Add more variables to section 7?
CROSS PILE ?= xscale_be-CC = $(CROSS_COMPILE)gcc
CROSS PILE = $(shell if [ -f .hhl_cross_compile ]; then \ cat .hhl_cross_compile; \⑴附录资料:不需要的可以自行删除
CentOS网络设置这里介绍一下Linux下的网络设置文件,这是网络计算机服务器的前提条件。
1 .网络的基本设置我们在设置网络环境的时候,提前要弄清楚以下的相关信息。
IP IP地址Netmak子网掩码
Gateway默认网关HostName主机名称
DomainName 域名DNS DNS 的 IP
2 .网络设置文件无论是通过网络配置命令(下文将提到)来配置网络,还是通过图形化的配置界面,最终的 配置信息都将写入到某某的文件中,也就是说一旦我们知道了这些信息都写到了什么文件中 或哪儿个文件中,我们就可以通过直接的修改某某文件来直接进行配置,下面就说明一下网 络设置将要涉及到的几个主要的文件。不光是CentOS,其他的UNIX系的OS都可以通过 这个方法来配置网络,不过系统的不同定义也不同,比方说有些系统会说到通过直接修改文 件的方法配置网络信息会导致网络环境的不稳定,提倡使用图形界面或配置命令的形式来配 置网络,这里要特别的注意。
(1) 文件 /etc/sysconfig/network这个/etc/syscon行g/network文件是定义hostname和是否利用网络的不接触网络设备的对系统 全体定义的文件。
设定形式:设定值=值/etc/sysconfig/network 的设定工程如下:
NETWORKING 是否利用网络GATEWAY默认网关
IPGATEWAYDEV默认网关的接口名HOSTNAME主机名
DOMAIN域名
(2) 文件 /etc/sysconfig/network-scripts/ifcfg-ethO/etc/sysconfig/network-scripts在这个目录下面,存放的是网络接口(网卡)的制御脚本文件 (控制文件),ifcfg-ethO是默认的第一个网络接口,如果机器中有多个网络接口,那么名字 就将依此类推ifcfg-ethl,ifcfg-eth2,ifcfg- eth3……(这里面的文件是相当重要的,涉及到网络 能否正常工作)
设定形式:设定值二值设定工程工程如下:
DEVICE接口名(设备,网卡)BOOTPROTO IP 的配置方法(static:固定 IP, dhcpHCP, none:手动)
HWADDR MAC 土也址ONBOOT系统启动的时候网络接口是否有效(ycs/no)
TYPE网络类型(通常是Ethemet)NETMASK网络掩码
IPADDR IP 土也址IPV6INITIPV6 是否有效(yes/no)
GATEWAY默认网关IP地址这里有一个例子:
CODE:
[root@linux 〜]# cat -n /etc/sysconfig/network-scripts/ifcfg-ethO
1 DEVICE=ethO
2 BOOTPROTO二static
3 BROADCAST =
4 HWADDR=00:0C:2x:6x:0x:xx
5
6
7
8 ONBOOT=yes
9 TYPE二Ethernet
(3)文件 /etc/resolv.conf这个文件是用来配置主机将用的DNS服务器信息。在这个文件中如果不设置DNS服务器的 IP 地址,那么在通信的时候,将无法指定像 lurl二 centospub |7url|7url]]这样的域名。(DNS 是 Domain Name
System的简称,中文名称域名解析服务器,主要是IP和域名转换功能)/etc/resolv.conf的设 定工程:
domain 一定义本地域名search 一定义域名和搜索列表
nameserver一定义被参照的DNS服务器的IP地址(最多可指定3个)一般来说最重要的是第三个nameserver工程,没有这项定义,用域名将无法访问网站,并 且yum等服务将无法利用
(4)文件 /etc/hosts/etc/hosts这个文件是记载LAN内接续的各主机的对应[HostName和IP]用的。在LAN内, 我们各个主机间访问通信的时候,用的是内网的IP地址进行访问(例:192.168.L22, 192.168.1.23),从而确立连接进行通信。除了通过访问IP来确立通信访问之外,我们还可 以通过HostName进行访问,我们在安装机器的时候都会给机器起一个名字,这个名字就是 这台机器的 HostName,通过上图可以看至U,HostA 的 hostname centos 1,HostB 的 hostname 是centos2那我们怎么能不但通过IP确立连接,通过这个IP对应的HostName进行连接访 问呢?解决的方法就是这个/etc/hosts这个文件,通过把LAN内的各主机的IP地址和 HostName的一一对应写入这个文件的时候,就可以解决问题。
要在HostA上用ssh访问HostB的时候,在命令行下做这样的操作:
[-]CODE:
[root@centosl 〜[email=root@ 1,,s[/email] password:
Last login: Mon Dec 25 15:04:58 2006 from centos 1 [root@ccntos2 ~]#访问成功后,我们看到hostname的地方变化了。
那么我们用hostname试试看:
[-]CODE:
[root@centosl 〜]# ssh centos2ssh:centos2: Name or service not known —提示错误,不知道主机
[root@centosl 〜]#那么我们编辑/etc/hosts文件,将HostB的IP和hostname的对应关系写入这个文件,如果主 机有域名,可以将域名写在IP地址之后hostname之前,并且用空格隔开,形式如第三行 127.0.0.1 的设置。
[-]CODE:
[root@centosl 〜]# cat -n /etc/hosts
1 # Do not remove the following line, or vario
展开阅读全文