linux内核架构教程
LINUX怎么修改内核文件?
我理解的修改顺序如下
1,下载内核源码
2,修改源码文件
3,重新编译源码生成新的内核
如何给linux安装新内核?
一获取内核源码
二解压内核源码
首先以root帐号登录,然后进入/usr/src子目录如果用户在安装Linux时,安装了内核的源代码,则会发现一个linux-x.y.z的子目录该目录下存放着内核x.y.z的源代码此外,还会发现一个指向该目录的链接linux删除该连接,然后将新内核的源文件拷贝到/usr/src目录中,并解压:
#tarzxvfLinux-2.3.14.tar.gz
文件释放成功后,在/usr/src目录下会生成一个linux子目录其中包含了内核2.3.14的全部源代码将/usr/include/asm/usr/inlude/linux/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中
#cd/usr/include
#rm-Rfasmlinux
#ln-s/usr/src/linux/include/asm-i386asm
#ln-s/usr/src/linux/include/linuxlinux
#ln-s/usr/src/linux/include/scsiscsi
删除源代码目录中残留的.o文件和其它从属文件
#cd/usr/src/linux
#makemrproper
三.增量补丁
有时不需要完全重新安装,只需打增量补丁,类似升级,在内核源码树根目录运行:
patch-p1../patch-x.y.z
四.内核源码树目录:
arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分)mm(内存管理)math-emu(浮点单元仿真)lib(硬件相关工具函数)boot(引导程序)pci(PCI总线)和power(CPU相关状态)
block:部分块设备驱动程序
crypto:常用加密和散列算法(如AESSHA等),还有一些压缩和CRC校验算法
Documentation:关于内核各部分的通用解释和注释
drivers:设备驱动程序,每个不同的驱动占用一个子目录
fs:各种支持的文件系统,如extfatntfs等
include:头文件其中,和系统相关的头文件被放置在linux子目录下
init:内核初始化代码(注意不是系统引导代码)
ipc:进程间通信的代码
kernel:内核的最核心部分,包括进程调度定时器等,和平台相关的一部分代码放在arch/*/kernel目录下
lib:库文件代码
mm:内存管理代码,和平台相关的一部分代码放在arch/*/mm目录下
net:网络相关代码,实现了各种常见的网络协议
scripts:用于配置内核文件的脚本文件
security:主要是一个SELinux的模块
sound:常用音频设备的驱动程序等
usr:实现了一个cpio
在i386体系下,系统引导将从arch/i386/kernel/head.s开始执行,并进而转移到init/main.c中的main()函数初始化内核
五.配置内核
#cd/usr/src/linux
内核配置方法有三种:
(1)命令行:makeconfig
(2)菜单模式的配置界面:makemenuconfig
(3)Xwindow:makexconfig
Linux的内核配置程序提供了一系列配置选项对于每一个配置选项,用户可以"y""m"或"n"其中"y"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序的支持由于内核的配置选项非常多,本文只介绍一些比较重要的选项
1Codematurityleveloptions(代码成熟度选项)
Promptfordevelopmentand/orincompletecode/drivers(CONFIG_EXPERIMENTAL)如果用户想要使用还处于测试阶段的代码或驱动,可以选择y如果想编译出一个稳定的内核,则要选择n
2Processortypeandfeatures(处理器类型和特色)
(1)Processorfamily(386,486/Cx486,586/K5/5x86/6x86,Pentium/K6/TSC,PPro/6x86MX)选择处理器类型,缺省为Ppro/6x86MX
(2)MaximumPhysicalMemory(1GB,2GB)内核支持的最大内存数,缺省为1G
(3)Mathemulation(CONFIG_MATH_EMULATION)协处理器仿真,缺省为不仿真
(4)MTRR(MemoryTypeRangeRegister)support(CONFIG_MTRR)
选择该选项,系统将生成/proc/mtrr文件对MTRR进行管理,供Xserver使用
(5)Symmetricmulti-processingsupport(CONFIG_SMP)选择y,内核将支持对称多处理器
3Loadablemodulesupport(可加载模块支持)
(1)Enableloadablemodulesupport(CONFIG_MODULES)选择y,内核将支持加载模块
(2)Kernelmoduleloader(CONFIG_KMOD)选择y,内核将自动加载那些可加载模块,否则需要用户手工加载
4Generalsetup(一般设置)
(1)Networkingsupport(CONFIG_NET)该选项设置是否在内核中提供网络支持
(2)PCIsupport(CONFIG_PCI)该选项设置是否在内核中提供PCI支持
(3)PCIaccessmode(BIOS,Direct,Any)该选项设置Linux探测PCI设备的方式选择BIOS,Linux将使用BIOS;选择Direct,Linux将不通过BIOS;选择Any,Linux将直接探测PCI设备,如果失败,再使用BIOS
(4)Parallelportsupport(CONFIG_PARPORT)选择y,内核将支持平行口
5PlugandPlayconfiguration(即插即用设备支持)
(1)PlugandPlaysupport(CONFIG_PNP)选择y,内核将自动配置即插即用设备
(2)ISAPlugandPlaysupport(CONFIG_ISAPNP)选择y,内核将自动配置基于ISA总线的即插即用设备
6Blockdevices(块设备)
(1)NormalPCfloppydisksupport(CONFIG_BLK_DEV_FD)选择y,内核将提供对软盘的支持
(2)EnhancedIDE/MFM/RLLdisk/cdrom/tape/floppysupport(CONFIG_BLK_DEV_IDE)选择y,内核将提供对增强IDE硬盘CDROM和磁带机的支持
7Networkingoptions(网络选项)
(1)Packetsocket(CONFIG_PACKET)选择y,一些应用程序将使用Packet协议直接同网络设备通讯,而不通过内核中的其它中介协议
(2)Networkfirewalls(CONFIG_FIREWALL)选择y,内核将支持防火墙
(3)TCP/IPnetworking(CONFIG_INET)选择y,内核将支持TCP/IP协议
(4)TheIPXprotocol(CONFIG_IPX)选择y,内核将支持IPX协议
(5)AppletalkDDP(CONFIG_ATALK)选择y,内核将支持AppletalkDDP协议
8SCSIsupport(SCSI支持)
如果用户要使用SCSI设备,可配置相应选项
9Networkdevicesupport(网络设备支持)
Networkdevicesupport(CONFIG_NETDEVICES)选择y,内核将提供对网络驱动程序的支持
10Ethernet(10or100Mbit)(10M或100M以太网)
在该项设置中,系统提供了许多网卡驱动程序,用户只要选择自己的网卡驱动就可以了此外,用户还可以根据需要,在内核中加入对FDDIPPPSLIP和无线LAN(WirelessLAN)的支持
11Characterdevices(字符设备)
(1)Virtualterminal(CONFIG_VT)选择y,内核将支持虚拟终端
(2)Supportforconsoleonvirtualterminal(CONFIG_VT_CONSOLE)
选择y,内核可将一个虚拟终端用作系统控制台
(3)Standard/generic(dumb)serialsupport(CONFIG_SERIAL)
选择y,内核将支持串行口
(4)Supportforconsoleonserialport(CONFIG_SERIAL_CONSOLE)
选择y,内核可将一个串行口用作系统控制台
12Mice(鼠标)
PS/2mouse(aka"auxiliarydevice")support(CONFIG_PSMOUSE)如果用户使用的是PS/2鼠标,则该选项应该选择y
13Filesystems(文件系统)
(1)Quotasupport(CONFIG_QUOTA)选择y,内核将支持磁盘限额
(2)Kernelautomountersupport(CONFIG_AUTOFS_FS)选择y,内核将提供对automounter的支持,使系统在启动时自动mount远程文件系统
(3)DOSFATfssupport(CONFIG_FAT_FS)选择y,内核将支持DOSFAT文件系统
(4)ISO9660CDROMfilesystemsupport(CONFIG_ISO9660_FS)
选择y,内核将支持ISO9660CDROM文件系统
(5)NTFSfilesystemsupport(readonly)(CONFIG_NTFS_FS)
选择y,用户就可以以只读方式访问NTFS文件系统
(6)/procfilesystemsupport(CONFIG_PROC_FS)/proc是存放Linux系统运行状态的虚拟文件系统,该项必须选择y
(7)Secondextendedfssupport(CONFIG_EXT2_FS)EXT2是Linux的标准文件系统,该项也必须选择y
14NetworkFileSystems(网络文件系统)
(1)NFSfilesystemsupport(CONFIG_NFS_FS)选择y,内核将支持NFS文件系统
(2)SMBfilesystemsupport(tomountWfWsharesetc.)(CONFIG_SMB_FS)
选择y,内核将支持SMB文件系统
(3)NCPfilesystemsupport(tomountNetWarevolumes)(CONFIG_NCP_FS)
选择y,内核将支持NCP文件系统
15PartitionTypes(分区类型)
该选项支持一些不太常用的分区类型,用户如果需要,在相应的选项上选择y即可
16Consoledrivers(控制台驱动)
VGAtextconsole(CONFIG_VGA_CONSOLE)选择y,用户就可以在标准的VGA显示方式下使用Linux了
17Sound(声音)
Soundcardsupport(CONFIG_SOUND)选择y,内核就可提供对声卡的支持
18Kernelhacking(内核监视)
MagicSysRqkey(CONFIG_MAGIC_SYSRQ)选择y,用户就可以对系统进行部分控制一般情况下选择n
六编译内核
(一)建立编译时所需的从属文件
#cd/usr/src/linux
#makedep
(二)清除内核编译的目标文件
#makeclean
(三)编译内核
#makezImage
内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件zImage如果编译的内核很大的话,系统会提示你使用makebzImage命令来编译这时,编译程序就会生成一个名叫bzImage的内核映像文件
(四)编译可加载模块
如果用户在配置内核时设置了可加载模块,则需要对这些模块进行编译,以便将来使用insmod命令进行加载
#makemodules
#makemodelus_install
编译成功后,系统会在/lib/modules目录下生成一个2.3.14子目录,里面存放着新内核的所有可加载模块
七启动新内核
(一)将新内核和System.map文件拷贝到/boot目录下
#cp/usr/src/linux/arch/i386/boot/bzImage/boot/vmlinuz-2.3.14
#cp/usr/src/linux/System.map/boot/System.map-2.3.14
#cd/boot
#rm-fSystem.map
#ln-sSystem.map-2.3.14System.map
(二)配置/etc/lilo.conf文件在该文件中加入下面几行:
default=linux-2.3.14
image=/boot/vmlinuz-2.3.14
label=linux-2.3.14
root=/dev/hda1
read-only
(三)使新配置生效
#/sbin/lilo
(四)重新启动系统
#/sbin/reboot
新内核如果不能正常启动,用户可以在LILO:提示符下启动旧内核然后查出故障原因,重新编译新内核即可
linux内核操作系统有哪些?
1veket系统
veket系统目前包括veket-x86平台系统和随身系统,还有上网本系统,分别对应veket-8系统veket-7系统和veket-5系统经过测试,veket-7和veket-5在使用上比较完善veket-8目前还处于测试期,在功能上可能还不稳定
2Ubunto系统
这个系统又名乌班图系统,也是一个以桌面应用为主的Linux操作系统,系统分为云平台,服务器版和桌面版可以根据需要选择相应的版本桌面版目前最新版本好像是Ubuntu13.10版本,在虚拟机上安装过,还算可以
3Fedora系统
此系统,也是基于linux的一款不错的操作系统,在界面上比较美观,安装文件可能会相对较大一些,大家可以尝试一下
4麒麟操作系统
这个算是国产的一个自主可控的基于linux的操作系统,在功能上也算比较完善,有32位和64位的系统,想尝试的朋友可以下载安装试一下
linux内核怎么学习1 学习一些操作系统的理论知识,一些概念比如:进程,内存管理,文件系统等等关于这一方面的书籍太多了,自己找一本就行了2 学习x86汇编,虽然linux用的是AT&T汇编,但二者只是格式不同而已而且学习x86汇编有助于了解x86系统结构书籍推荐王爽的汇编语言 ,我学的时候用的不是这个,后面看到这本书,才觉得自己做了苦功了学完大部分汇编指令时,找些汇编程序读读,熟悉这些指令的用法不需要有写汇编程序的能力,能读就行了,当然会写更好
3 赵炯的Linux内核0.11完全注释这个linux内核版本低,作者也讲得很详细不过关于x86体系的那一部分,作者讲得很繁琐,这一部分一定要大体看懂,那后面章节的内容就没有多大的问题了我先把书通看了一遍,用了1个月的时间后来,再返回来一个一个研究,用了2个月
之所以看这本书,是让自己对内核有个实质的感受,不仅仅只是理论上的东西
4 毛德操的linux内核情景分析linux内核版本2.4.0,这本书很厚,上下两册我通读一遍,用了2个月时间后来,再返回来一个一个研究,现在已用了2个月,正在研究中就我个人觉得,linux内核最难的是内存管理,这2个月我就只大体搞清内存页面的周转,但搞清了这个,就会对内核的整体结构有个大致的了解,因为你已经清楚了用户进程和内核的其它部分是怎样使用内存页面的
5 学习linux内核最需要的是坚持和思考这是一个很长的过程,也许你会发现学了linux内核,并不会给你带来什么,我现在就是这样觉得的,感觉自己什么都不会做,真希望有人能我一些建议!不过学习学习也是有好处的,比如看了赵炯的Linux内核0.11完全注释后,你再去看UCOS-II,会感觉那太容易了!也许学习linux内核会对将来的工作有所帮助吧! (随机推荐阅读本站500篇优秀文章点击前往:500篇优秀随机文章)