linux启动过程

  加载内核

运行的程序便是/sbin/init,该文件会读取/etc/inittab文件

inittab文件格式:

 <id>:<runlevels>:<action>:<process> 

<runlevels>: The runlevels field is completely ignored.

加载BIOS 

Boot Loader

加载内核屏幕一般会输出“Uncompressing Linux”的提示,系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件

Linux系统执行的第一个用户层文件就是/etc/init.d/rc.sysinit脚本程序

 

IFTPATH=/lib:/web/lib
LD_LIBRARY_PATH=${IFTPATH}
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/ift/application:${IFTPATH}
export PATH

# mount root filesystem in read-write mode
/bin/busybox echo "Mounting root fs rw ..."
/bin/busybox mount -n -o remount,rw /

if [ ! -e /proc/mounts ]; then
    /bin/busybox mount -t sysfs sysfs /sys
    /bin/busybox mount -t proc  proc  /proc
fi

 

-n 不要将载入的信息记录在/etc/mtab文件中
-o 指定载入文件系统时的选项
remount  重新载入设备
rw      可读写载入模式
/proc 的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。大部分 /proc 中的文件和目录提供系统物理环境最新的信息

如果系统中还没有加载 proc 文件系统,可以通过如下命令加载 proc 文件系统:

mount -t proc proc /proc

$ cat /proc/cpuinfo 可以查看cpu信息

目录名称 目录内容

apm 高级电源管理信息

cmdline系统启动时输入的内核命令行参数  

Cpuinfo CPU 的信息 (型号, 家族, 缓存大小等) 

Devices主设备号及设备组的列表,当前加载的各种设备(块设备/字符设备)

Dma 使用的DMA通道

Filesystems当前内核支持的文件系统,当没有给 mount(1) 指明哪个文件系统的时候, mount(1) 就依靠该文件遍历不同的文件系统

Interrupts 中断的使用及触发次数,调试中断时很有用

Ioports I/O当前在用的已注册 I/O 端口范围

Kcore该伪文件以 core 文件格式给出了系统的物理内存映象,可以用 GDB 查探当前内核的任意数据结构。该文件的总长度是物理内存 (RAM) 的大小再加上 4KB

Kmsg可以用该文件取代系统调用 syslog(2) 来记录内核日志信息,对应dmesg命令

Ksyms 内核符号表,该文件保存了内核输出的符号定义, modules(X) 使用该文件动态地连接和捆绑可装载的模块

Loadavg 负载均衡,平均负载数给出了在过去的 1, 5, 15 分钟里在运行队列里的任务数

Locks 内核锁

Meminfo物理内存、交换空间等的信息,系统内存占用情况,对应df命令

Misc 杂项

Modules 已经加载的模块列表,对应lsmod命令

Mounts已加载的文件系统的列表,对应mount命令,无参数

Partitions 系统识别的分区表

Rtc 实时时钟

Slabinfo Slab池信息

Stat 全面统计状态表,对应ps命令

Swaps 对换空间的利用情况

Version指明了当前正在运行的内核版本,对应uname –v,例如:

Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994

Uptime 系统正常运行时间,对应date命令

并不是所有这些目录在你的系统中都有,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和 sys。Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则 scsi目录不存在。

 

net

该子目录包括多个 ASCII 格式的网络伪文件, 描述了网络层的部分情况。 可以用 cat 来察看这些文件, 但标准的 netstat(8) 命令组更清晰地给出了这些文件的信息

arp

该文件以 ASCII 格式保存了内核 ARP 表, 用于地址解析, 包括静态和动态 arp 数据. 文件格式如下:

IP address       HW type     Flags       HW address

10.11.100.129    0x1         0x6         00:20:8A:00:0C:5A

10.11.100.5      0x1         0x2         00:C0:EA:00:00:4E

44.131.10.6      0x3         0x2         GW4PTS

 

其中 'IP address' 是机器的 IPv4 地址; 'HW type' 是地址的硬件类型, 遵循 RFC 826; flags 是 ARP 结构的内部标志, 在 /usr/include/linux/if_arp.h 中定义; 'HW address' 是该 IP 地址的物理层映射(如果知道的话).

 

dev

该伪文件包含网络设备状态信息, 给出了发送和收到的包的数目, 错误和冲突的数目, 以及别的一些基本统计数据ifconfig(8) 利用了该文件来报告网络设备状态. 文件格式如下:

Interface | Receive | Transmit|packets errs drop fifo frame|packets errs drop fifo colls carrier

lo:      0    0    0    0    0     2353    0    0    0     0    0

eth0: 644324    1    0    0    1   563770    0    0    0   581    0

rarp

该文件具有和 arp 同样的格式, 包含当前的逆向地址映射数据. rarp(8) 利用这些数据来作逆向地址查询服务. 只有将 RARP 配置进内核, 该文件才存在.

route

没有信息, 但是看上去类似于 route(8)

tcp

该文件保存了 TCP 套接字表, 大部分信息除用于调试以外没有什么用. "local address" 包括本地地址和端口号; "remote address" 包括远地地址和端口号(如果有连接的话); 'tx_queue' 和 'rx_queue' 是内核存储器使用意义上的输入输出数据队列;

udp

该文件保存了 UDP 套接字表, 大部分信息除用于调试以外没有什么用

 

$ ls -l /proc/32558

total 0

-r--r--r--    1 root  root            0 Dec 25 22:59 cmdline

-r--r--r--    1 root  root            0 Dec 25 22:59 cpu

lrwxrwxrwx    1 root  root            0 Dec 25 22:59 cwd -> /proc/

-r--------    1 root  root            0 Dec 25 22:59 environ

lrwxrwxrwx    1 root  root            0 Dec 25 22:59 exe -> /usr/bin/mozilla*

dr-x------    2 root  root            0 Dec 25 22:59 fd/

-r--r--r--    1 root  root            0 Dec 25 22:59 maps

-rw-------    1 root  root            0 Dec 25 22:59 mem

-r--r--r--    1 root  root            0 Dec 25 22:59 mounts

lrwxrwxrwx    1 root  root            0 Dec 25 22:59 root -> //

-r--r--r--    1 root  root            0 Dec 25 22:59 stat

-r--r--r--    1 root  root            0 Dec 25 22:59 statm

-r--r--r--    1 root  root            0 Dec 25 22:59 status

目录名称 目录内容

Cmdline 命令行参数,包含启动进程时调用的命令行,如果该进程已经被交换出内存, 或者该进程已经僵死, 那么就没有任何东西在该文件里, 这时候对该文件的读操作将返回零个字符

Environ该文件保存进程的环境变量, 各项之间以空字符分隔

Fd进程所打开的每个文件都有一个符号连接在该子目录里, 以文件描述符命名, 这个名字实际上是指向真正的文件的符号连接

Mem 进程的内存被利用情况

Stat 进程状态

Status 进程当前状态,包括启动进程的用户的用户ID (UID) 和组ID(GID) ,父进程ID (PPID),还有进程当前的状态,比如"Sleelping"和"Running"

Cwd一个符号连接, 指向进程当前的工作目录。例如, 要找出进程 20 的 cwd, cd /proc/20/cwd; /bin/pwd

Exe 指向该进程的执行命令文件

Maps该文件包含当前的映象内存区及他们的访问许可

Statm 进程内存状态信息

Root 链接此进程的root目录

self 当某进程访问 /proc 目录时, 该目录就指向 /proc 下以该进程 ID 命名的目录.

 




8182 linux startup:


 

你可能感兴趣的:(linux启动过程)