imx6文件系统启动脚本分析。开机运行/sbin/init,读取/etc/inittab文件,进行初始化。

参考链接

http://blog.163.com/wghbeyond@126/blog/static/35166181201051483723579/

/etc/inittab

# see busybox-1.00rc2/examples/inittab for more examples
::sysinit:/etc/rc.d/rcS # 系统启动的时候运行/etc/rc.d/rcS脚本
#::respawn:/etc/rc.d/rc_mxc.S
ttymxc0::once:/bin/login root # debug口使用ttymxc0,之运行一次/bin/login,root是传入的参数。
# 这就是为什么登录之后退出就不能再登录。如果想再次运行/bin/login,将once改为respawn
#::once:/sbin/getty 115200 ttymxc0 # 也可以采用这种形式设置串口,不过这样就需要输入账户密码 ::sysinit:/etc/rc.d/rc_gpu.S # 系统启动的时候运行rc_gpu.S
::ctrlaltdel:/sbin/reboot # ctrl + alt + del 组合键是运行/sbin/reboot程序。
::shutdown:/etc/rc.d/rcS stop # 关机的时候运行 /etc/rc.d/rcS stop
::restart:/sbin/init # 重启时运行/sbin/init

/etc/rc.d/rcS

#!/bin/sh

# minimal startup script, will work with msh (this is best available in
# MMUless format). # load the configuration information
. /etc/rc.d/rc.conf # 运行/etc/rc.d/rc.conf 脚本
mode=${1:-start} # 当$1的值不存在或者为空,那么mode=start,否者mode=$1
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 ] # 判断/etc/rc.d/init.d/中是否存在$i表示的可执行文件
then
/etc/rc.d/init.d/$i $mode # 运行/etc/rc.d/init.d中的shell脚本,start or stop
fi
done if [ $# -ge 2 ] # 如果传入脚本的参数个数大于 2
then
exit 0 # 退出, 返回值为 0
fi
# show all kernel log messages
#echo 8 > /proc/sys/kernel/printk # run rc.local if present and executable
if [ -x /etc/rc.d/rc.local ] # 判断rc.local是否存在,并且可执行
then
/etc/rc.d/rc.local $mode # 运行rc.local, mode= start/stop
fi

/etc/rc.d/rc.conf

all_services="mount-proc-sys mdev udev hostname devfsd depmod modules filesystems syslog network inetd portmap dropbear sshd boa smb dhcpd settime fslgnome watchdog bluetooth gtk2 pango"
all_services_r="pango gtk2 bluetooth watchdog fslgnome settime dhcpd smb boa sshd dropbear portmap inetd network syslog filesystems modules depmod devfsd hostname udev mdev mount-proc-sys"
# 启动,运行顺序
cfg_services="mount-proc-sys udev hostname depmod modules filesystems inetd "
# 停止,停止顺序与启动顺序相反
cfg_services_r=" inetd filesystems modules depmod hostname udev mount-proc-sys" export HOSTNAME="freescale"
export NTP_SERVER=""
export MODLIST=""
export RAMDIRS=""
export TMPFS="tmpfs"
export TMPFS_SIZE="512k"
export READONLY_FS=""
export INETD_ARGS=""
export BOA_ARGS=""
export SMBD_ARGS=""
export NMBD_ARGS=""
export DHCP_ARG=""
export DEPLOYMENT_STYLE="RAMDISK"
export SYSCFG_DHCPC_CMD="udhcpc -b -i "
export DROPBEAR_ARGS=""

/etc/rc.d/rc.local

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here
if [ -x "/usr/bin/rpm" -a -e "/tmp/ltib" ] # 是否存在可执行文件/usr/bin/rpm,以及/tmp/ltib
then
echo "rebuilding rpm database"
rm -rf /tmp/ltib # 重新创建rpm数据库
rpm --rebuilddb
fi # fix up permissions
if [ -d /home/user ] # 是否存在/home/user目录
then
chown -R user.user /home/user # 更改所有者,所在组
fi # Add nodes when running under the hypervisor and static devices
if [ -r /sys/class/misc/fsl-hv/dev -a ! -r /dev/fsl-hv ] # 查看/sys/class/misc/fsl-hv/dev是否可读,并且/dev/fsl-hv不可读
then
echo "creating hypervisor nodes"
DEVID=`cat /sys/class/misc/fsl-hv/dev`
if [ -n "$DEVID" ] # 判断是否为空
then
MAJOR="${DEVID%:*}"
MINOR="${DEVID##*:}" if [ \( "$MAJOR" -gt 0 \) -a \( "$MINOR" -gt 0 \) ]
then
rm -f /dev/fsl-hv
mknod /dev/fsl-hv c $MAJOR $MINOR
fi
fi
for i in 0 1 2 3 4 5 6 7
do
mknod /dev/hvc$i c 229 $i
done
fi # add the fm device nodes
if [ -n "$(cat /proc/devices | grep fm | sed 's/\([0-9]*\).*/\1/')" -a ! -r /dev/fm0 ]
then
echo "creating fman device nodes"
cd /usr/share/doc/fmd-uspace-01.01/test/
sh fm_dev_create
cd -
fi for i in 0 1 2; do
if [ -e /sys/class/graphics/fb$i ]; then
chmod 0666 /sys/class/graphics/fb$i/pan
fi
done

/etc/rc.d/rc_gpu.S

#!/bin/bash
CPUREV=$(cat /proc/cpuinfo | grep Revision | awk '{print $3}' | awk '{print substr($0,1,2)}') # 查看cpu的版本,mx6dl读取的是61
FILEVG=/usr/lib/libOpenVG.so
FILEVG3D=/usr/lib/libOpenVG_3D.so
FILEVG355=/usr/lib/libOpenVG_355.so
echo 4 > /sys/module/galcore/parameters/gpu3DMinClock
if [ -e $FILEVG3D ] && [ -e $FILEVG355 ]
then
if [ $CPUREV == "61" ] || [ $CPUREV == "63" ] || [ $CPUREV == "60" ] && [ -e $FILEVG ]
then
rm -f $FILEVG
fi
if [ $CPUREV == "61" ]
then
ln -s $FILEVG3D $FILEVG # 创建软连接
fi
if [ $CPUREV == "63" ]
then
ln -s $FILEVG355 $FILEVG
fi
if [ $CPUREV == "60" ]
then
ln -s $FILEVG355 $FILEVG
fi
fi

/etc/profile

登录的时候,输入完账户密码之后,调用/etc/profile


Tony Liu

2016-12-13, Shenzhen

busybox rootfs 启动脚本分析(一)的更多相关文章

  1. busybox rootfs 启动脚本分析(二)

    上次分析了busybox的启动脚本,这次分析一下init.d中一些脚本的内容. 参考链接 http://www.cnblogs.com/helloworldtoyou/p/6169678.html h ...

  2. HBase配置&启动脚本分析

    本文档基于hbase-0.96.1.1-cdh5.0.2,对HBase配置&启动脚本进行分析 date:2016/8/4 author:wangxl HBase配置&启动脚本分析 剔除 ...

  3. Spark配置&启动脚本分析

    本文档基于Spark2.0,对spark启动脚本进行分析. date:2016/8/3 author:wangxl Spark配置&启动脚本分析 我们主要关注3类文件,配置文件,启动脚本文件以 ...

  4. Hadoop启动脚本分析

    Hadoop启动脚本分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇博客的你估计对Hadoop已经有一个系统的了解了,最起码各种搭建方式你应该是会的,不会也没有关系, ...

  5. 4. hadoop启动脚本分析

    4. hadoop启动脚本分析 1. hadoop的端口 ``` 50070 //namenode http port 50075 //datanode http port 50090 //2name ...

  6. hadoop启动脚本分析及常见命令

    进程------------------ [hdfs]start-dfs.sh NameNode NN DataNode DN SecondaryNamenode 2NN [yarn]start-ya ...

  7. linux系统 initrd.img中init启动脚本分析

    概述:这篇文章主体内容来源于网上转载.前面几篇文章倾向于制作initrd.img,这篇文章更倾向于initrd.img的运行过程:加载framebuff驱动 ide驱动和文件系统驱动,最后进入到真正的 ...

  8. 内核启动文件系统后第一个执行的文件(inittab启动脚本分析)

    Linux 开机脚本启动顺序: 第一步:启动内核 第二步:执行init (配置文件/etc/inittab) 第三步:启动相应的脚本,执行inittab脚本,并且执行里面的脚本/etc/init.d ...

  9. Hadoop 2.0+YARN启动脚本分析与实战经验

    start-all.sh脚本现在已经废弃,推荐使用start-dfs.sh和start-yarn.sh分别启动HDFS和YARN. 在新一代的Hadoop里面HDFS称为了统一存储的平台,而YARN成 ...

随机推荐

  1. XIII Open Cup named after E.V. Pankratiev. GP of Asia and South Caucasus

    A. RPG 首先计算出每个技能对于每个属性值的可行区间,若区间为空则不合法. 枚举两个技能,以及每个属性值,根据区间的关系可以得到哪个必须要在另一个之前学,连边看看是否有环即可. 时间复杂度$O(n ...

  2. BZOJ2934 : [Poi1999]祭坛问题

    对于每个祭坛,算出每条线段阻碍它的角度区间,然后排序求并看看是否有空位即可,时间复杂度$O(n^2\log n)$. 这题在Main上官方时限是0.2S,因此需要几个常数优化: $1.$为了避免用at ...

  3. Oracle 中的游标(用Javase中Iterator 类比之)

    当使用 pl/sql 查询 Oracle 数据库时,有时我们想输出多条记录的数据.:select * from scott.emp; 这时,我们一定会想利用循环来输出.但是,在pl/sql 中是没有数 ...

  4. Android 在线更新apk

    1.获取当前包的信息: 1 PackageManager manager = Main.this.getPackageManager(); 2 try { 3 PackageInfo info = m ...

  5. java基础--java静态代码块和静态方法的区别、static用法

    转载自: http://blog.sina.com.cn/s/blog_afddb8ff0101aqs9.html 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时, ...

  6. 去掉tppabs冗余代码,怎样批量去掉tppabs代码

    去掉tppabs冗余代码,怎样批量去掉tppabs代码 刚用teleport pro拉了一个整站到本地 所有的超链都被强行加了一句tppabs="   就玩了一把dw的替换功能 查找范围:整 ...

  7. 如何打印出lua里table的内容

    不像开发as3时用fb有强大的断点调试功能,一般lua开发不用什么高级的ide,貌似也没有适合的,就直接用sublime.exvim等文本编辑器,直接编译运行看结果.所以不能很方便的知道变量值,特别是 ...

  8. js判断微信浏览器

    function is_weixin(){ //检查是否是微信浏览器 var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroMes ...

  9. CSS3+HTML5实现块阴影与文字阴影

    CSS 3 + HTML 5 是未来的 Web,它们都还没有正式到来,虽然不少浏览器已经开始对它们提供部分支持.本教程分5节介绍了 5 个 CSS3 技巧,可以帮你实现未来的 Web,不过,这些技术不 ...

  10. JQuery的动画及其幻灯片效果

    1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,简单介绍jQuery的显示和隐藏. <script type="text/javascript&q ...