busybox的init分析-相当经典,清晰

基于BusyboxLinux init执行流程 基本上,init首先启动一个初始化过程run_sysinit(),然后在一个无限循环中,一个一个查询inittab设定动作类型,执行该类型的动作,inittab是由/etc/inittab文件来配置的。// BusyBox 源码核心逻辑(简化版)// 1. 初始化环境// 设置信号处理函数// 解析 /etc/inittab// 2. 执行 sysinit 阶段// 3. 启动 getty 进程(用于控制台登录)// 4. 进入主循环// 遍历 inittab 条目i++) { 阅读详情

本文转载,地址:http://blog.csdn.net/chinazcw/archive/2008/12/09/3482174.aspx,版权问题,马上删除。

 

5.5.3  busyboxinit

   除了基本的命令之外,BusyBox还支持init功能,如同其它的init一样,busyboxinit也是完成系统的初始化工作,关机前的工作等等,我们知道在Linux的内核被载入之后,机器就把控制权转交给内核,linux的内核启动之后,做了一些工作,然后找到根文件系统里面的init程序,并执行它,BusyBoxinit进程会依次进行以下工作:(参考<<构建嵌入式LINUX系统>> p201)

1.       init设置信号处理过程

2.       初始化控制台

3.       剖析/etc/inittab文件

4.       执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS

5.       执行所有导致init暂停的inittab命令(动作类型:wait

6.       执行所有仅执行一次的inittab(动作类型:once

一旦完成以上工作,init进程便会循环执行以下进程:

       1.  执行所有终止时必须重新启动的inittab命令(动作类型:once

       2.  执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst)

       初始化控制台之后,BusyBox会检查/etc/inittab文件是否存在,如果此文件不存在,BusyBox会使用缺省的inittab配置,它主要为系统重引导,系统挂起以及init重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1tty4)设置启动shell的动作。如果未建立这些设备文件,BusyBox会报错。

       inittab文件中每一行的格式如下所示:(busybox的根目录下的example文件夹下有详尽的inittab文件范例)     

       id:runlevel:action:process

尽管此格式与传统的Sytem V init类似,但是,idBusyBoxinit中具有不同的意义。对BusyBox而言,id用来指定启动进程的控制tty。如果所启动的进程并不是可以交互的shell,例如BusyBoxshash),应该会有个控制tty,如果控制tty不存在,Busyboxsh会报错。BusyBox将会完全忽略runlevel字段,所以空着它就行了,你也许会问既然没用保留着它干吗,我想大概是为了和传统的Sytem V init保持一致的格式吧。process字段用来指定所执行程式的路径,包括命令行选项。action字段用来指定下面表中8个可应用到process的动作之一。

动作

结果

sysinit

init提供初始化命令行的路径

respawn

每当相应的进程终止执行便会重新启动

askfirst

类似respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户按下enter

wait

告诉init必须等到相应的进程完成之后才能继续执行

once

仅执行相应的进程一次,而且不会等待它完成

ctratldel

当按下Ctrl+Alt+Delete组合键时,执行相应的进程

shutdown

当系统关机时,执行相应的进程

restart

init重新启动时,执行相应的进程,通常此处所执行的进程就是init本身

 以下是我的usblinux的inittab文件

::sysinit:/etc/init.d/rcS

 

::respawn:/sbin/getty  38400  tty1

 

tty2::askfirst:-/bin/sh

 

tty3::askfirst:-/bin/sh

 

::restart:/sbin/init

 

::ctrlaltdel:/bin/umount -a -r

 

这个inittab执行下列动作

1.       将/etc/init.d/rcS设置成系统的初始化文件

2.       在38400 bps的虚拟终端tty1上启动一个登陆会话 (注意getty的用法)

3.       在虚拟终端tty2和tty3上启动askfirst动作的shell

4.       如果init重新启动,将/sbin/init设置成它会执行的程序

5.       告诉init,在系统关机的时候执行umount命令卸载所有文件系统,并且在卸载失败时用只读模式冲新安装以保护文件系统。

5.6  系统的配置文件

5.6.1. /etc/init.d/rcS文件

配置文件一般放在/etc/目录下,5.5.3节说了init初始化命令行的文件是/etc/init.d/rcS,下面是我的rcS文件

       #!/bin/sh

 

    /bin/mount -n -t proc  /proc  /proc

 

    /bin/mount -n -o  remount,rw  /

 

    /bin/mount -av

 

    /bin/hostname usblinux

 

    /etc/init.d/rc.nic

 

    /etc/init.d/rc.network

 

    /etc/init.d/rc.usb

 

    /etc/init.d/rc.local

 

1.       安装proc文件系统,但是不写入/etc/mtab文件(mtab文件是df命令读取的文件)

2.       以读写模式重新挂载根文件系统(需要/etc/fstab文件)

3.       mount -av 挂载所有在/etc/fstab里面列出的文件系统

4.       主机名命名为usblinux

5.       依次执行rc.nic(自动检测网卡),rc.network(配置网络),rc.usb(加载usb模块),rc.local(执行本地的一些服务)

5.6.2. /etc/fstab

上面使用mount命令的时候已经涉及到了fstab文件,下面是我的fstab文件

/dev/ram0       /       ext2    defaults    0   0

 

proc            /proc   proc    defaults    0   0

 

关于fstab配置文件的语法可以man fstab

其实rcS里面的mount -av没有必要加上去。

5.6.3. /etc/mtab

这个文件里面的内容是动态变化的,当mount一个文件系统的时候,如果mount 没有加上-n参数,那么安装信息就会写入mtab文件,df命令读取的就是这个文件。

5.6.4. /etc/profile

这个文件是sh用的,当用户获得一个shell后,sh就会根据这个文件配置用户的登陆环境,下面是我的profile文件。

PATH=/bin:/sbin:/usr/bin:/usr/sbin

 

PS1='[/u@/h /W]/$ '

 

HOSTNAME='/bin/hostname'

 

export PATH HOSTNAME PS1

 

alias l.='ls -d .[a-zA-Z]* --color=tty'

 

alias rm='rm -i'

 

alias cp='cp -i'

 

alias mv='mv -i'

 

 export PATH=/usr/local/bin:$PATH

 

export PATH=/usr/local/sbin:$PATH

 

     

其中PATH环境变量指定当用户键入一个命令时,sh寻找这个命令的路径。

PS1指定sh提示符的格式

其它的export命令,alias命令不用说了吧,busybox里面的ash和bash非常相似,因此只要熟悉bash就会不成问题。

5.6.5. /etc/ld.so.conf 与 /etc/ld.so.cache

这两个文件是与lib库有关的,它们用来指定应用程序寻找lib库的路径。

我的ld.so.conf文件内容如下。

/lib

 

/usr/lib

 

/usr/local/lib

 

ld.so.cache里面的内容是由是ldconfig命令生成的,ldconfig根据ld.so.conf配置文件生成ld.so.cache里面的内容,应用程序读取的是ld.so.cache文件,因此如果变动了ld.so.conf文件,需要运行一次ldconfig才能是新的配置生效,另外如果新加了lib库文件,也需要ldconfig。

5.6.6   /etc/passwd,/etc/shadow,/etc/group

group里面存放的是用户组的信息。

我的group文件内容如下:

root:x:0:root

 

ftp:x:50:

 

passwd里面存放的是用户的信息

我的passwd文件内容如下:

root:x:0:0:root:/root:/bin/sh

 

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

 

sshd:x:74:74:piviledge-separated SSH:/var/empty/sshd:/sbin/nologin

 

注意,group和passwd里面的每一行都不是多余的。

shadow文件是pam认证用到的密码存放文件

5.6.7.   /etc/services

网络应用程序用到的标准服务端口映射表

我的services文件如下:

tcpmux    1/tcp

 

tcpmux    1/udp

 

ftp-data  20/tcp

 

ftp       21/tcp

 

ssh      22/tcp

 

ssh      22/udp

 

telnet    23/tcp

 

nameserver  42/tcp   name

 

 syslog    514/udp

 

auth      113/tcp  authentication  tap ident

 

因为我需要开启sshd,syslogd服务,同时会使用ftp,ssh,telnet应用程序。所以就会加上上面的东西,但是注意并不是所有的网络应用程序都会依赖与services文件,比如telnet,但是也许telnetd需要。

5.6.8.   /etc/nsswitch.conf

这个文件的作用很大,没有它很多程序都不能正常运行,关于它的具体作用还是用man  nsswitch.conf看看吧。

我的nsswitch.conf文件内容如下:

passwd:     files

 

shadow:     files

 

group:      files

 

hosts:      files dns

 

ethers:     files

 

netmasks:   files

 

networks:   files

 

protocols:  files

 

services:   files

 

netgroup:   files

 

publickey:  files

 

automount:  files

 

aliases:    files

 

注意hosts这一行一定要加上dns,不然即使有resolv.conf文件,域名也不能解析,注意nsswitch.conf是对应一组lib库的,这里我们用了files,dns,因此需要拷贝相应的lib库到/lib目录下.

#cd  /mnt/rootfs

#cp -dpR  /lib/libnss_files*   ./lib

#cp -dpR  /lib/libnss_dns*   ./lib

5.6.9 .  /etc/hosts,/etc/ host.conf, /etc/resolv.conf

       我的hosts文件内容如下,不用说也应该清楚什么意思了,不清楚的man hosts

       127.0.0.1   localhost:localdomain   localhost

 

       host.conf和resolv.conf是域名解析的时候用到的配置文件,其中resolv.conf里面是域名服务器的ip地址,host.conf里面放的是主机的查找规则。不了解的还是man host.conf和man  resolv.conf

我的host.conf与resolv.conf文件内容分别如下:

#cat  /mnt/rootfs/etc/host.conf

 

order hosts,bind

 

#cat  /mnt/rootfs/etc/resolv.conf

 

nameserver 202.112.20.131

 

5.6.10.  /etc/syslog.conf

syslogd服务程序读取的配置文件。

我的文件内容如下:

# Log all kernel messages to the console.

 

# Logging much else clutters up the screen.

 

#kern.*                                                 /dev/console

 


 


# Log anything (except mail) of level info or higher.

 

# Don't log private authentication messages!

 

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

 


 


# The authpriv file has restricted access.

 

authpriv.*                                              /var/log/secure

 


 

 

 


# Save boot messages also to boot.log

 

local7.*                                                /var/log/boot.log

 

busybox init进程分析 busybox init进程分析 参考文献   http://blog.chinaunix.net/uid-20788636-id-1841289.html 一.  Busybox启动流程分析    init进程是由内核启动的第一个也是惟一的一个用户进程,它根据配置文件决定启动哪些程序,比如执行某些脚本,启动shell,运行用户指定的程序等。init进程是后续所有进程的发起者 阅读详情

相关推荐

Busyboxinit进程

Busybox是用来制作文件系统的一个工具集,可以用来替换GNU fileutils shellutils等工具集,它为各种小型的或者嵌入式系统提供了比较完全的工具集。它提供的核心程序中包括了用户空间的init进程。用户空间的init进程是整个系统启动流程的最后一个阶段,经过该进程的初始化,整个系统进入服务状态,提供诸如系统调用、任务管理服务及设备管理等服务。

dashi_007的博客 1099

linux启动分析

嵌入式linux启动时运行的inittab文件(zz) 简介:这是嵌入式linux启动时运行的inittab文件(zz)的详细页面,介绍了和linux,有关的知识、技巧、经验,和一些linux源码等。     嵌入式系统下的linux启动配置文件,不同与普通的pclinux启动配置,启动相关文件与文件的内容也要少得多。嵌入式系统下的linux启动过程一般是:     1 在bootloa

alloc_young的专栏 1616

busyboxinit程序分析

BusyBoxinit进程依次进行以下工作: 1)为init设置信号处理进程。 2)初始化控制台。 3)解析inittab文件(/etc/inittab)。 4)执行系统初始化脚本(/etc/init.d/rcS作为缺省)。 5)执行所有阻塞的(会导致init暂停的)inittab命令(动作类型:wait)。 6)执行所有仅执行一次的inittab命令(动作类型:once)。 7

781

ldconfig命令以及/etc/ld.so.cache , /etc/ld.so.conf等文件详细说明

ldconfig是一个动态链接库管理命令 名称:      /sbin/ldconfig     配置动态连接器(ld)运行时邦定 语法:      /sbin/ldconfig [ -nNvXV ] [ -f conf ] [ -C cache ] [ -r root ] directory ...      /sbin/ldconfig -l [ -v ] library

leo115的专栏 1万+

ldconfig命令行用法

ldconfig命令行用法如下: ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|--print-cache] [-c FORMAT] [--format=FORMAT] [-V] [-?|--help|--usage] path... ldconfig可用的选...

weixin_33785972的博客 280

busybox简介及使用

1 简介 busybox 是一个集成了一百多个最常用linux命令和工具的软件,ta甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功效却只有区区1M左 右的大小.wo们平时用的那些linux命令就好比是分立式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成紧缩在一个可执行文件里,功效基础不变,而大小却小很多倍,在嵌入式linux运用中,busybox

zhezhelin的专栏 2990

busybox做一个简单的文件系统

利用BusyBox做一个简单的根文件系统1、下载BusyBox源代码包 http://busybox.net/2、找个地方解压缩包,例如tar -xjvf busybox-1.00.tar.bz23、进入busybox的文件夹,使用make menuconfig进入设置[attach]244[/attach]4、在build options中有一些选项要注意Build BusyBox as a s

6972

BusyboxBusybox源码分析-02 | init程序

linux内核启动过程的后期,在```kernel_init()```函数代表的init线程中,会尝试执行用户空间的init进程。本文将分析init程序。

iriczhao的博客 1533

2.init进程分析以及分析Busybox源码

1.终端命令由来 在linux终端,各种命令(如,ls,cp,mkdir等)的定义,是在busybox中定义 我们执行这些命令,实际上是执行busybox ls =busybox ls 所以我们想知道/sbin/init这个程序做什么事情,就要去分析busybox的源码 2.分析busybox的源码 我们在source insight建立busybox的工程 随便...

weixin_40535588的博客 1600

Busybox init进程启动过程分析

<br />上一篇文章只是移植了Busybox不过对中间的启动流程还不是很清楚,经过查看资料,终于搞明白了Busybox启动的基本的流程。现把流程记录如下:一、Busybox    Busybo是一个遵循GPLv2协议的开源项目。Busybox将众多的Linux命令集合进一个很小的可执行程序中,可以用来替换GNU fileutils shellutils等工具集。Busybox中各种命令与相应的GNU工具相比,所能提供的选项较少,但是能够满足一般应用。Busybox为各种小型的或者嵌入式系统提供了一

babyfans的专栏 2501

busybox init启动过程分析

注:本文转载自 http://www.flatws.cn/article/program/embed/2011-06-13/30294.html Busybox     Busybo是一个遵循GPLv2协议的开源项目。Busybox将众多的Linux命令集合进一个很小的可执行程序中,可以用来替换GNU fileutils shellutils等工具集。Busybox中各种命令与相应的GNU

Demetered的专栏 1486

linux系统编程-静态库、共享库的创建和链接

静态库实际上就是一个目标文件的集合。 使用 ar命令能够创建静态库: $gcc -g -c mod1.c mod2.c mod3.c //-g使用gdb调试,-c只编译不链接 $ar r libdemo.a mod1.o mod2.o mod3.o //创建静态库 $rm mod1.o mod2.o mod3.o //创建完成后可删除.o目标文件 显示静态库中所包含的目标文件: $ar tv libdemo.a rw-r–r-- 1000/100 1001016 NOV 15 12:26 2009 mod

weixin_40555950的博客 643

busyboxinit详解

文章转载自:http://blog.donews.com/mutecat/archive/2006/02/18/731500.aspx的一部分,全文内容请看原文。 5.5.3busyboxinit 除了基本的命令之外,BusyBox还支持init功能,如同其它的init一样,busyboxinit也是完成系统的初始化工作,关机前的工作等等,我们知道在L...

diaxfw2168的博客 406

简单的busybox创建_动态连接的busybox的简单使用

开发环境:Redhat 9.0busybox 1.0.1实现目标:用busybox生成一个简单的initrd,busybox采用动态连接的方式进行编译。同时在busybox上运行简单的动态连接的helloword程序。1.busyboxbusybox的官方网站上下载busybox-1.0.1.tar.bz2(我的Redhat好象无法编译通过高版本的busybox)解压#tar -jxvf bus...

weixin_34476159的博客 1262

Linux根文件系统分析-init进程busybox

前言 写文章的目的是想通过记录自己的学习过程,以便以后使用到相关的知识点可以回顾和参考。 运行流程框架 BusyBox下载 一讲到根文件系统,第一个就是想到BusyBox这个东东,它集成了BusyBox 是一个大的工具箱,这个工具箱里面集成了 Linux 的许多工具和命令,如 ls、mv、ifconfig 等命令 BusyBox 都会提供。等下分析init 进程函数也是在BusyBox的源码中的,所以要想知道init进程的运行流程,就必须把BusyBox源码下载下来。BusyBox可直接在官网下载:h

qq_43286311的博客 517

BusyboxBusybox init启动过程

Busybox会在内核刚完成加载后就立即启动,此后Busybox会跳转到它的init进程开始自横行,它的init进程主要进行一下的工作。1、为init进程设置信号处理进程2、对控制台进行初始化3、解析inittab文件即/etc/inittab4、在默认情况想ia,Busybox会运行系统初始化脚本/etc/init.d/rcS5、运行导致init暂停的inittab命令(ac

1505

busyboxinit_main源码分析

busybox是一个轻量级的Linux工具箱,其中包含了一些基本的UNIX工具。init_main是busybox中的一个重要函数,其作用是启动系统初始化,包括初始化系统进程、挂载文件系统、执行rc脚本等。

weixin_43708235的博客 516
上一篇: amazing
下一篇: ubuntu9.10使用usb摄像头
linucos
博客等级 码龄17年 38粉丝 43原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值