Linux-启动过程

FAE将porting好的linux提供,几乎都在写应用代码,空闲时间整理一下B1202系统启动的过程

通过/boot/vm进行启动 vmlinuz

init进程会读取    /etc/inittab,/etc/inittab先/etc/rc.d/rc.sysinit,再/etc/rc.d/rc3.d/ 等等 

启动login登录界面 login

在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的

  /etc/profile.d/file

  /etc/profile

  /root/.bashrc

  /root/.profile

1.        init

读内核代码

init/main.c

-->kernel_init

 

if (!ramdisk_execute_command)

        ramdisk_execute_command = "/init";

在B1202中

init -> bin/busybox

init只是一个busybox的快捷方式,busybox程序中调/etc/inittab脚本,

如果没有busybox就按照inittab走,有busybox就先运行busybox,最后会调/etc/inittab

 

2.        /etc/inittab内容

/etc/inittab会调用/etc/rc.d/rcS,/bin/login 等

# see busybox-1.00rc2/examples/inittab for more examples

::sysinit:/etc/rc.d/rcS

#::respawn:-/bin/sh

::respawn:/bin/login

::ctrlaltdel:/sbin/reboot

::shutdown:/etc/rc.d/rcS stop

::shutdown:/bin/umount -a -r

::shutdown:/sbin/swapoff -a

::restart:/sbin/init

 

 

/etc/rc.d/rc.conf

 

cfg_services="hostname mount-proc mountrd devfsd devpts syslog networking portmap upgrade.sh nfs-kernel-server inetd start_apps"

 

/etc/rc.d/rcS根据/etc/rc.d/rc.conf的配置

/etc/rc.d/init.d/$i这行的意思就是逐个加载这些脚本的

可以看到syslog这个脚本,就是打印调试用的,由busybox的提供的

start_apps这个脚本是加载驱动,应用,防火墙,FE基本配置等等

 

#!/bin/sh

. /etc/rc.d/rc.conf

mode=${1:-start}

if [ $mode = "start" ]

then

    services=$cfg_services

else

    services=$cfg_services_r

fi

cfg_services=${2:-$services}

 

# run the configured sequence

for i in $cfg_services

do

    if [ -x /etc/rc.d/init.d/$i ]

    then                                                                       

        /etc/rc.d/init.d/$i $mode

    fi                                                                          

done

 

if [ $# -ge 2 ]

then

    exit 0

fi

if [ -x /etc/rc.d/rc.local ]

then

    /etc/rc.d/rc.local

fi

/bin/login就是登陆程序

 

3.        进程线程

用进程还是线程,这个个人觉得按功能来分M个进程,关系紧密的N个模块起N个线程放一个进程中,M个进程之间最好通信单一,B1202就是这样来实现的

 

4.        分块详解

====

您好!最近在看linux启动脚本相关的东西。如果我想让我的应用程序开机直接启动,应该就是在脚本里增加相关的代码吧?另外对cfg_services=${2:-$services}这种语句不是很理解。比如我想增加一个helloworld程序,开机启动显示,程序放在/mnt目录下,应该如何增加呢?

----

回复xiaoyanlou:文中写到了:
/etc/rc.d/rc.conf下配置
cfg_services="hostname mount-proc mountrd devfsd devpts syslog networking portmap upgrade.sh nfs-kernel-server inetd start_apps"
cfg_services是一个开机运行程序集合,你的helloword放这里即可

====

http://blog.csdn.net/xkarl/article/details/6219291

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