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='[\u@\h \W]\$ '         # shell中显示的提示信息格式

    export PATH                 # 导出PATH位环境变量

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

    export PS1='\u@\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-09-23 12:06:06

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

【内核】linux内核启动流程详细分析【转】

转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程  arch/arm/kernel/head-armv.S  该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码, 主要作用是检查CPU ID, Architecture Type,初始化BSS等操作,并跳到start_kernel函数.在执行前,处理器应满足以下状态:  r0 - should be 0 r1 - unique

Linux的启动流程(CentOS 6)

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

I.MX6 linux Qt 同时支持Touch、mouse

/***************************************************************************** * I.MX6 linux Qt 同时支持Touch.mouse * 声明: * 在Qt上,有时候当没有Touch的时候,我们会希望鼠标还是能够使用的,于是乎 * 这又变成了一个看上去必须的需求了,所以这也就变成了一个需要解决的问题,当然 * 这又解决Touch存在还是不存在的问题,以及如何跟mouse共存的问题. * * 2016-1-1

Linux 的启动流程

那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系统,程序员几乎可以定制所有方面.所以,这个部分与程序员的关系更密切. 我主要关心的是Linux操作系统,它是目前服务器端的主流操作系统.下面的内容针对的是Debian发行版,因为我对其他发行版不够熟悉. 第一步.加载内核 操作系统接管硬件以后,首先读入

bootchart工具:记录Linux的启动流程

因为网上的大部分中文描述bootchart工具的都是过时的了,故也就有这篇日志的产生. Bootchart 是一个分析Linux启动流程的方便工具,此工具得出的结果可以用来作为优化启动速度的参考,此工具在较新的发行版中直接安装包后,即会在下次系统启动时生成一个系统启动时的各个组件启动所花的时间的记录的图表,此图表位于:/var/log/bootchart目录下,默认格式为.png格式,以Mint Linux为例: 安装: sudo apt-get install bootchart 重启系统后,

Linux 的启动流程详解

第一阶段:BIOS启动引导阶段 在该过程中实现硬件的初始化以及查找启动介质 从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理 第二阶段:GRUB启动引导阶段 装载stage1 装载stage1.5 装载stage2 读取/boot/grub.conf文件并显示启动菜单 装载所选的kernel和initrd文件到内存中 第三阶段:内核阶段 运行内核启动参数 解压initrd文件并挂载initd文件系统,装载必须的驱动 挂载根文件系统 第四阶段:Sys V init初始化阶段 启动/sb

Linux内核启动流程分析(一)【转】

转自:http://blog.chinaunix.net/uid-25909619-id-3380535.html 很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接粘过来的有点乱,敬请谅解! S3C2410 Linux 2.6.35.7启动分析(第一阶段) arm linux 内核生成过程  1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息.符号表的最初的

各大计算机公司 笔试及面试 题目 - 阿里巴巴、深信服(Linux的启动流程 V3)

· 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘信息.内存信息.时钟信息.PnP特性等等.在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了. 启动第二步--读取MBR 众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信

Linux内核启动流程分析(二)【转】

转自:http://blog.chinaunix.net/uid-25909619-id-3380544.html S3C2410 Linux 2.6.35.7启动分析(第二阶段) 接着上面的分析,第一阶段的代码跳转后,会进入第二阶段的代码. 第二阶段的代码是从\arch\arm\kernel\head.S开始的. 内核启动第二阶段主要完成的工作有,cpu ID检查,machine ID(也就是开发板ID)检查,创建初始化页表,设置C代码运行环境,跳转到内核第一个真正的C函数startkerne