linux内核工具书(linux 内核 工具)-冯金伟博客园

linux架构类型?

Linux系统一般有4个主要部分:分别是内核、shell、文件系统和应用程序。

内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。

1. linux内核

内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。

2 . linux shell

shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。 

3 . linux 文件系统

文件系统是文件存放在磁盘等存储设备上的组织方法。Linux系统能支持多种目前流行的文件系统,如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660。

4. linux 应用

标准的Linux系统一般都有一套都有称为应用程序的程序集,它包括文本编辑器、编程语言、X Window、办公套件、Internet工具和数据库等。

嵌入式linux系统的启动流程是什么样的?

1) 初始化 RAM因为 Linux 内核一般都会在 RAM 中运行,所以在调用 Linux 内核之前 Bootloader 必须设置和初始化 RAM,为调用 Linux内核做好准备。初始化 RAM 的任务包括设置 CPU 的控制寄存器参数,以便能正常使用 RAM 以及检测RAM 大小等。

2) 初始化串口端口在 Linux 的启动过程中有着非常重要的作用,它是 Linux内核和用户交互的方式之一。Linux 在启动过程中可以将信息通过串口输出,这样便可清楚的了解 Linux 的启动过程。虽然它并不是 Bootloader 必须要完成的工作,但是通过串口输出信息是调试 Bootloader 和Linux 内核的强有力的工具,所以一般的 Bootloader 都会在执行过程中初始化一个串口作为调试端口。

3) 检测处理器类型Bootloader在调用 Linux内核前必须检测系统的处理器类型,并将其保存到某个常量中提供给 Linux 内核。Linux 内核在启动过程中会根据该处理器类型调用相应的初始化程序。

4) 设置 Linux启动参数Bootloader在执行过程中必须设置和初始化 Linux 的内核启动参数。

5) 调用 Linux内核映像Bootloader完成的最后一项工作便是调用 Linux内核。如果 Linux 内核存放在 Flash 中,并且可直接在上面运行(这里的 Flash 指 Nor Flash),那么可直接跳转到内核中去执行。但由于在 Flash 中执行代码会有种种限制,而且速度也远不及 RAM 快,所以一般的嵌入式系统都是将 Linux内核拷贝到 RAM 中,然后跳转到 RAM 中去执行。

如何使用crash工具分析Linux内核崩溃转储文?

由于 crash 用于调试内核崩溃的转储文件,因此使用 crash 需要依赖如下条件:

1. kernel 映像文件 vmlinux 在编译的时候必须指定了 -g 参数,即带有调试信息。

2. 需要有一个内存崩溃转储文件(例如 vmcore),或者可以通过 /dev/mem 或 /dev/crash 访问的实时系统内存。如果 crash 命令行没有指定转储文件,则 crash 默认使用实时系统内存,这时需要 root 权限。

3. crash 支持的平台处理器包括:x86, x86_64, ia64, ppc64, arm, s390, s390x ( 也有部分 crash 版本支持 Alpha 和 32-bit PowerPC,但是对于这两种平台的支持不保证长期维护 )。4. crash 支持 2.2.5-15(含)以后的 Linux 内核版本。随着 Linux 内核的更新,crash 也在不断升级以适应新的内核。启动参数说明使用 crash 调试转储文件,需要在命令行输入两个参数:debug kernel 和 dump file,其中 dump file 是内核转储文件的名称,debug kernel 是由内核调试信息包安装的,不同的发行版名称略有不同,以 RHEL 和 SLES 为例: RHEL6.2:/usr/lib/debug/lib/modules/2.6.32-220.el6.ppc64/vmlinux SLES11SP2:/usr/lib/debug/boot/vmlinux-3.0.13-0.27-ppc64.debug 使用 crash -h 或 man crash 可以查看 crash 支持的一系列选项,这里仅以常用的选项为例说明如下:-h:打印帮助信息-d:设置调试级别-S:使用 /boot/System.map 作为默认的映射文件-s:不显示版本、初始调试信息等,直接进入命令行-i file:启动之后自动运行 file 中的命令,再接受用户输入

如何给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:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。

Documentation:关于内核各部分的通用解释和注释。

drivers:设备驱动程序,每个不同的驱动占用一个子目录。

fs:各种支持的文件系统,如ext、fat、ntfs等。

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”表示内核不提供相应特性或驱动程序的支持。由于内核的配置选项非常多,本文只介绍一些比较重要的选项。

  1、Codematurityleveloptions(代码成熟度选项)

  Promptfordevelopmentand/orincompletecode/drivers(CONFIG_EXPERIMENTAL)如果用户想要使用还处于测试阶段的代码或驱动,可以选择“y”。如果想编译出一个稳定的内核,则要选择“n”。

 2、Processortypeandfeatures(处理器类型和特色)

  (1)、Processorfamily(386,486/Cx486,586/K5/5×86/6×86,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”,内核将支持对称多处理器。

  3、Loadablemodulesupport(可加载模块支持)

  (1)、Enableloadablemodulesupport(CONFIG_MODULES)选择“y”,内核将支持加载模块。

  (2)、Kernelmoduleloader(CONFIG_KMOD)选择“y”,内核将自动加载那些可加载模块,否则需要用户手工加载。

  4、Generalsetup(一般设置)

  (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”,内核将支持平行口。

  5、PlugandPlayconfiguration(即插即用设备支持)

  (1)、PlugandPlaysupport(CONFIG_PNP)选择“y”,内核将自动配置即插即用设备。

  (2)、ISAPlugandPlaysupport(CONFIG_ISAPNP)选择“y”,内核将自动配置基于ISA总线的即插即用设备。

  6、Blockdevices(块设备)

  (1)、NormalPCfloppydisksupport(CONFIG_BLK_DEV_FD)选择“y”,内核将提供对软盘的支持。

  (2)、EnhancedIDE/MFM/RLLdisk/cdrom/tape/floppysupport(CONFIG_BLK_DEV_IDE)选择“y”,内核将提供对增强IDE硬盘、CDROM和磁带机的支持。

  7、Networkingoptions(网络选项)

  (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协议。

  8、SCSIsupport(SCSI支持)

  如果用户要使用SCSI设备,可配置相应选项。

  9、Networkdevicesupport(网络设备支持)

  Networkdevicesupport(CONFIG_NETDEVICES)选择“y”,内核将提供对网络驱动程序的支持。

  10、Ethernet(10or100Mbit)(10M或100M以太网)

  在该项设置中,系统提供了许多网卡驱动程序,用户只要选择自己的网卡驱动就可以了。此外,用户还可以根据需要,在内核中加入对FDDI、PPP、SLIP和无线LAN(WirelessLAN)的支持。

  11、Characterdevices(字符设备)

  (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”,内核可将一个串行口用作系统控制台。

  12、Mice(鼠标)

  PS/2mouse(aka”auxiliarydevice”)support(CONFIG_PSMOUSE)如果用户使用的是PS/2鼠标,则该选项应该选择“y”。

  13、Filesystems(文件系统)

  (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”。

  14、NetworkFileSystems(网络文件系统)

  (1)、NFSfilesystemsupport(CONFIG_NFS_FS)选择“y”,内核将支持NFS文件系统。

  (2)、SMBfilesystemsupport(tomountWfWsharesetc.)(CONFIG_SMB_FS)

  选择“y”,内核将支持SMB文件系统。

  (3)、NCPfilesystemsupport(tomountNetWarevolumes)(CONFIG_NCP_FS)

  选择“y”,内核将支持NCP文件系统。

  15、PartitionTypes(分区类型)

  该选项支持一些不太常用的分区类型,用户如果需要,在相应的选项上选择“y”即可。

  16、Consoledrivers(控制台驱动)

  VGAtextconsole(CONFIG_VGA_CONSOLE)选择“y”,用户就可以在标准的VGA显示方式下使用Linux了。

  17、Sound(声音)

  Soundcardsupport(CONFIG_SOUND)选择“y”,内核就可提供对声卡的支持。

  18、Kernelhacking(内核监视)

  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:提示符下启动旧内核。然后查出故障原因,重新编译新内核即可。