I.MX6 Linux Qt 启动流程跟踪

/**************************************************************************
 *                     I.MX6 Linux Qt 启动流程跟踪
 *  声明:
 *      1. 源代码来源MY-I.MX6;
 *      2. 本文仅仅是对启动流程的解析,没有解释启动流程为什么是这样的问题。
 *
 *                                   2015-6-13 深圳 晴 南山平山村 曾剑锋
 *************************************************************************/

                \\\\\\\\\\\\\-*- 目录 -*-////////////
                |   一、cat /etc/inittab
                |   二、cat /etc/rc.d/rcS
                |   三、cat /etc/rc.d/rc.local
                |   四、cat /etc/rc.d/rc_gpu.S
                |   五、cat /etc/profile
                \\\\\\\\\\\\\\\\\\\//////////////////

一、cat /etc/inittab
    # see busybox-1.00rc2/examples/inittab for more examples
    ::sysinit:/etc/rc.d/rcS             # 系统启动时调用的程序1
    #::respawn:/etc/rc.d/rc_mxc.S
    ttymxc0::once:/bin/login root       # 内核信息打印的串口
    ::sysinit:/etc/rc.d/rc_gpu.S        # 系统启动时调用的程序2
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/etc/rc.d/rcS stop       # 关机时调用的程序
    ::restart:/sbin/init                # 系统重启时调用的程序

二、cat /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

    # 如果没有传入第一个参数,那么就将start字符串赋给mode
    # 查看inittab文件里的一下内容,就能理解这一部分:
    #   ::sysinit:/etc/rc.d/rcS             # 系统启动时调用的程序1
    #   ::sysinit:/etc/rc.d/rc_gpu.S        # 系统启动时调用的程序2
    #   ::shutdown:/etc/rc.d/rcS stop       # 关机时调用的程
    # 如上可知,开机时不传参表示start,关机传入stop表示关机

    mode=${1:-start}
    if [ $mode = "start" ]
    then
        services=$cfg_services          # 如果mode是start,services等于cfg_services的值
    else
        services=$cfg_services_r        # 如果mode是start,services等于cfg_services_r的值
    fi
    cfg_services=${2:-$services}        # 如果没有传入第二个参数,cfg_services等于services

    # run the configured sequence
    for i in $cfg_services              # 迭代cfg_services
    do
        if [ -x /etc/rc.d/init.d/$i ]   # 检查文件是否可执行
        then
            /etc/rc.d/init.d/$i $mode   # 如果可执行,那么就执行,并传入对应的mode参数,start或stop
        fi
    done

    if [ $# -ge 2 ]                     # 如果参数个数大于2,到这里也就执行完毕了,不执行下面内容
    then
        exit 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        # 运行该脚本,跟踪该脚本
    fi

三、cat /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
    # 本人查看过/usr/bin/rpm文件,不存在,所以if判断里的内容可以无视
    # 当然系统运行起来之后,也没发现下面echo出来的调试信息
    if [ -x "/usr/bin/rpm" -a -e "/tmp/ltib" ]
    then
        echo "rebuilding rpm database"
        rm -rf /tmp/ltib
        rpm --rebuilddb
    fi

    # fix up permissions
    # 修改/home/user的权限
    if [ -d /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 ]
    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

四、cat /etc/rc.d/rc_gpu.S
    #!/bin/bash
    # 获取CPU的一些信息
    CPUREV=$(cat /proc/cpuinfo | grep Revision | awk ‘{print $3}‘ | awk ‘{print substr($0,1,2)}‘)
    # 设置一些变量,从变量的值来看,主要还解决不同CPU环境下的一些
    # 依赖库的问题,后面内容都是为了处理这件事
    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

五、cat /etc/profile
    # 设置PATH环境变量
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin

    PS1=‘[\[email protected]\h \W]\$ ‘         # shell中显示的提示信息格式

    export PATH                 # 导出PATH位环境变量

    alias ll=‘ls -l‘            # 设置命令别名
    alias la=‘ll -a‘

    export PS1=‘\[email protected]\h \w$ ‘     # 导出一些环境变量
    export PS2=‘> ‘
    export PS3=‘? ‘
    export PS4=‘[$LINENO]+‘

    # 设置TSLIB、QT的库的相关信息

    export GST_PLUGIN_PATH=/usr/lib/fsl_mm_linux/lib/gstreamer-0.10

    export TSLIB_ROOT=/usr/local/tslib-install
    export TSLIB_TSDEVICE=/dev/input/event1
    export TSLIB_CALIBFILE=/etc/pointercal
    export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
    export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
    export TSLIB_FBDEVICE=/dev/fb0
    export PATH=/usr/local/tslib-install:$PATH
    export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.8.5-arm/lib
    export QT_QWS_FONTDIR=/usr/local/Trolltech/QtEmbedded-4.8.5-arm/lib/fonts
    export QWS_MOUSE_PROTO=tslib:/dev/input/event1

    # 查看/etc/pointercal文件是否存在并且是正规文件
    # 通过这个文件来确定是否需要来调用触摸屏矫正程序
    if [ -f /etc/pointercal ];then
        echo "MXS touchscreen have calibrate!"
    else
        /usr/local/tslib-install/bin/ts_calibrate
    fi

    # 运行QT程序,传入qws参数,并置于后台运行
    /qt_app/myzr -qws &
时间: 2024-08-02 15:11:27

I.MX6 Linux Qt 启动流程跟踪的相关文章

Linux 的启动流程

作者: 阮一峰 半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系统,程序员几乎可以定制所有方面.所以,这个部分与程序员的关系更密切. 我主要关心的是Linux操作系统,它是目前服务器端的主流操作系统.下面的内容针对的是Deb

Linux的启动流程(CentOS 6)

前言 Linux启动的过程在实际生产中有着至关重要的作用.试想一下,如果我们在实际生产中服务器因为某一个服务出了问题,而不能启动,这时我们应该怎么办.如果我们了解Linux的详细启动过程,知道是在哪一个环节出了问题,我们就能够进入到相应的环节,排除掉相应的问题,从而解决实际生产中的问题. 同时,我们在这里提出一个问题,有谁知道Windows的启动过程呢?如果启动过程出了问题,我们该怎么办呢?恐怕答案只有重启系统了吧-- Linux 系统的启动过程对于管理员来说是完全透明的,了解了Linux的启动

linux --&gt; Linux 的启动流程

Linux 的启动流程 操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但一旦进入操作系统,程序员几乎可以定制所有方面.所以,这个部分与程序员的关系更密切,下面的内容针对的是Debian发行版. 第一步.加载内核 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件. 以我的电脑为例,/boot 目录下面大概是这样一些文件: $ ls /boot config-3.2.0-3-amd64 config-

Linux的启动流程,回答面试官自用

对于Linux的启动流程,是一个很复杂的过程 下面我来介绍一下: 1.当我们按下电源键通电后,我们的BIOS①会去检查硬件(CPU.显卡.硬盘.光驱等等)是否有问题,取得主机的各项硬件配置后,就会去找启动设备,这里说的就是硬盘,找到硬盘的MBR②,这时候就将控制权交到MBR中 2.MBR的功能就是去找到安装在MBR的grub③菜单,也就是Boot loader,随后grub就把系统的kernel(内核)给引导出来了 3.当boot loader读取到kernel文件后,会将内核加载到内存中,此时

Linux的启动流程(CentOS 7)

前言 Linux启动的过程在实际生产中有着至关重要的作用.试想一下,如果我们在实际生产中服务器因为某一个服务出了问题,而不能启动,这时我们应该怎么办.如果我们了解Linux的详细启动过程,知道是在哪一个环节出了问题,我们就能够进入到相应的环节,排除掉相应的问题,从而解决实际生产中的问题. 同时,我们在这里提出一个问题,有谁知道Windows的启动过程呢?如果启动过程出了问题,我们该怎么办呢?恐怕答案只有重启系统了吧-- Linux 系统的启动过程对于管理员来说是完全透明的,了解了Linux的启动

【转】Linux 的启动流程

原文网址:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html Linux 的启动流程 作者: 阮一峰 半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系

linux内核启动流程[转]

启动流程一览 既然启动是很严肃的一件事,那我们就来了解一下整个启动的过程吧! 好让大家比较容易发现启动过程里面可能会发生问题的地方,以及出现问题后的解决之道! 不过,由於启动的过程中,那个启动管理程序 (Boot Loader) 使用的软件可能不一样,例如目前各大 Linux distributions 的主流为 grub,但早期 Linux 默认是使用 LILO . 但无论如何,我们总是得要了解整个 boot loader 的工作情况,才能了解为何进行多重启动的配置时, 老是听人家讲要先安装

Tiny4412 Linux 内核启动流程

Linux内核的启动分为压缩内核和非压缩内核两种,这里我们以压缩内核为例.压缩内核运行时,将运行一段解压缩程序,得到真正的内核镜像,然后跳转到内核镜像运行.此时,Linux进入非压缩内核入口,在非压缩内核入口中,完成各种初始化操作后跳转到C语言入口处运行.主要流程如下所示. 1.解压缩内核镜像 解压缩程序通常在arch/arm/boot/compressed/目录中 ├── atags_to_fdt.c ├── big-endian.S ├── decompress.c ├── head.S ├

linux操作系统的启动流程--学生作业

首先,先不急着将启动流程,,先说下linux操作系统的相关知识 一:linux的组成部分: 内核+根(/)文件系统 1)内核: 存放位置 centos6的位置是 /boot 目录下的"vmlinuz-2.6.32-573.12.1.el6.x86_64" "2.6.32"是版本号:"573.12.1"是release号.内核的作用是负责核心的内存管理.进程管理.网络协议栈.文件系统.驱动程序.安全功能.linux内核是单内核设计,但是他支持多模块