day01

第四阶段:项目
智能家具项目:
        1.能够监控室内温度,如果温度高于某个阈值,启动报警器,LED1告警指示灯每隔200ms闪烁
        2.能够监控红外状态,如果检测有非法入侵,启动报警器,LED2告警指示灯每隔500ms闪烁
        3.能够实现软件的在线升级
        4.能够实现MP3播放器
        5.能够查阅版本信息
智能小车项目:
        1.连接USB接口摄像头,下位机能够显示摄像头采集的视频
        2.连接USB接口的WIFI,下位机能够实现路由功能和AP热点功能
        3.手机和电脑能够通过无线和浏览器获取到视频
        4.能够控制小车的前进后退,左转右转
        5.能够控制摄像头的垂直和水平摆动
********************************************************
项目第一天任务安排:
  2.1.向下位机移植QT,观看QT.avi和QT2.avi视频
  实施步骤:
  1.建议最好能够再次制作一个最小根文件系统出来
    复习面试题:谈谈对嵌入式linux系统的认识
  2.向下位机移植QT
  具体实施步骤:
  获取要移植的QT源码:ftp://project/qt/qtbase-opensource-src-5.4.1.tar.xz
  获取配置QT源码的脚本:ftp://project/qt/build.sh
  mkdir /opt/project/qt_source
  cp qtbase-opensource-src-5.4.1.tar.xz /opt/project/qt_source
  cd /opt/project/qt_source
  tar -xvf qtbase-opensource-src-5.4.1.tar.xz
  cd qtbase-opensource-src-5.4.1
  cp build.sh qtbase-opensource-src-5.4.1
  vim mkspecs/linux-arm-gnueabi-g++/qmake.conf
  将:arm-linux-gnueabi-修改为arm-cortex_a9-linux-gnueabi-
  保存退出
   
  ./build.sh //./configure...,生成Makefile
  make -j4 //编译
  make install -j4 //安装
  ls /opt/project/qt/  //查看编译生成的成果
    bin lib plugins include doc  
  file /opt/project/qt/bin/qmake //查看qmake的属性
   
  只拷贝将来QT运行时所需的动态库到根文件系统中   
  mkdir /opt/rootfs/home/qt/
  切记:不能拷贝到/opt/rootfs/lib(只存放标准的系统库)
  cp /opt/project/qt/lib /opt/rootfs/home/qt/ -frd
  cp /opt/project/qt/plugins /opt/rootfs/home/qt -frd
   
  获取触摸屏的设备文件方法:
  在下位机执行以下命令:
  hexdump /dev/input/event0 //执行完毕,用手点击触摸屏
                  如果有打印信息,说明触摸屏的设备文件就是/dev/input/event0
  如果点击触摸屏没有反应,接着测试下一个设备文件:
  hexdump /dev/input/event1 //操作步骤同上
  直到找到对应的触摸屏的设备文件                 
  提示:注意bootargs中的lcd=.... tp=....
   
  添加QT运行时所需的环境变量
  vim /opt/rootfs/etc/profile 添加如下环境变量
  export QTDIR=/home/qt
  export PATH=$QTDIR:$PATH
  #明确,以下环境变量都是给QT源码使用
  #此环境变量用来指示图片的处理库所在的路径
  export QT_QPA_PLATFORM_PLUGIN_PATH=/home/qt/plugins
  #此环境变量用来指示将来QT运行时操作的LCD显示屏的设备文件
  export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
  #此环境变量用来指示QT运行时所需的字体库
  export QT_QPA_FONTDIR=$QTDIR/lib/fonts
  export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/
  #此环境变量用来指示将来QT在和用户进行交互时对应的
   触摸屏的设备文件,触摸屏的设备文件通过hexdump来测试
  export TSDEVICE=/dev/input/event0
  export QT_QPA_GENERIC_PLUGINS=evdevtouch:$TSDEVICE
  export QWS_MOUSE_PROTO=evdevtouch:$TSDEVICE
  #用来指示将来使用的LCD显示屏的设备文件
  export set QWS_DISPLAY=LinuxFb:/dev/fb0
  #用来指示LCD显示屏的分辨率
  export set QWS_SIZE=1024x600
  export set QWS_DISPLAY="LinuxFb:mmWidth300:mmHeight400:0"
  保存退出
   
  下位机测试QT移植的成果:
  随意找一个QT程序helloworld,获取用qtcreator
  创建一个helloworld工程,然后交叉编译测试:
  注意:工程名一般就是源码所在的目录名
        编译源码生成的二进制文件名和工程名一样!
    
  切记切记:交叉编译自己的QT源码,不能这么做:
  cp helloworld /opt/project/
  cd /opt/project/helloworld //进入自己的QT源码
  qmake -project //生成一个工程文件helloworld.pro
  qmake      //根据工程helloworld.pro生成Makefile
  vim Makefile //观察CXX=g++
  make    //根据Makefile进行编译
  file helloworld //查看属性,一定是针对于X86架构
   
  同样也不能这么干:
  利用qtcreator的绿色的按钮直接编译!此编译方式
  同样生成X86架构的二进制文件!
  所以qtcreator仅仅目前用来便于编辑代码!但不能交叉编译!
   
  只能这么干:一定要使用交叉编译QT源码生成的qmake
  cd /opt/project/helloworld
  /opt/project/qt/bin/qmake -project //生成工程文件helloworld.pro
  vim helloworld.pro 添加widgets控件的支持
  QT += widgets
  保存退出
   
  /opt/project/qt/bin/qmake //根据工程文件helloworld.pro生成的Makeifle
  vim Makefile //观察CXX=arm-cortex_a9-linux-gnueabi-g++
  make
  //创建自己的QT程序在根文件系统rootfs中的存放目录
  mkdir /opt/rootfs/home/appbin/
  cp helloworld /opt/rootfs/home/appbin
   
  开发板测试:
  cd /home/appbin/
  ./helloworld //观察自己的QT程序是否能够启动
                           //如果有JPG图片,看能否正常显示
                           //如果有中文,看能够正常显示
   
  此时此刻,如果QT界面有中文,此时是无法显示中文字体:
  1.将原先QT中的字体库全部删除
    rm /opt/rootfs/home/qt/lib/fonts/* -fr
  2.从ftp://project/qt/下载文泉驿字体库wqy-zenhei.ttc
    cp wqy-zenhei.ttc /opt/rootfs/home/qt/lib/fonts/
    然后再次运行QT程序,即可显示中文字体!
   
  最后:观看QT.avi和QT2.avi视频尝试给QT界面添加背景图片和多级界面操作
     
问题总结:
  1.开源应用软件操作三步骤
    ./configure ... //目的就是为了自动生成Makefile
                                     //利用automake工具对源码进行操作生成configure配置程序
            "...":用来指定编译选项
            -prefix /opt/project/qt //-prefix选项用来
            指定编译安装目录(将来编译QT源码生成的目标文件的存放目录)
            将来只需到/opt/project/qt目录下就可以看到
            编译QT源码生成的成果
            选项可以通过执行:./configure --help来获取
            例如:-qt-libjpeg:表示让QT支持jpg格式的图片           
    make //编译
    make install //将编译QT生成的内容放到/opt/project/qt目录下
   
  2.编译QT源码,到底获取了什么东西呢?
    编译QT源码生成的内容如下:
    ls /opt/project/qt/
       bin   lib   plugins  include doc
    bin:编译QT源码生成工具,例如qmake,uic,moc等
        这些工具将来用于交叉编译自己的QT程序使用
        注意:这些工具都是运行在上位机     
    lib:编译QT源码生成的各种动态库
         其实就是类似QPushButton的类进行了交叉编译
         生成了对应的动态库,将来自己的应用程序可以
         访问这些动态库,这些动态库运行在下位机    
    plugins:同lib一样,生成了各种动态库,主要是处理图片的动态库
    include:头文件,在上位机编译QT程序时使用     
    doc:说明文档
     
   3./opt/rootfs/etc/profile配置文件的执行流程
     profile:本质就是脚本程序
     系统启动流程:
     上电->uboot->kernel->rootfs->/sbin/init
     ->创建子进程执行etc/init.d/rcS,init父进程
     此时等待,rcS执行完毕->init再次创建一个子进程来执行
     etc/profile脚本文件,一般此文件用于
     设置各种全局的环境变量,init父进程继续等待,执行完毕
     ->init父进程最后创建子进程用来执行/bin/sh->用户输入命令
    
   4.运行QT测试程序helloworld提示各种动态库找不着
     一类是缺少标准的系统库:类似libpthread.so找不着
     解决办法:到交叉编译器中找到标准的系统库拷贝到
                          根文件系统/opt/rootfs/lib目录下
      
     另一类是缺少QT库:提示libQtGui.so找不着
     解决办法:明确这些动态库都已经拷贝到
     根文件系统/opt/rootfs/home/qt/lib下
     只需在根文件系统中添加环境变量即可:
     上位机执行:
     vim /opt/rootfs/etc/profile 文件最后添加:
     export LD_LIBRARY_PATH=/home/qt/lib:$LD_LIBRARY_PATH
     保存退出
     重启下位机
      
     切记切记:
     标准的系统库一定放在/opt/rootfs/lib下
     自己制作的库和移植的库一律不允许放到/opt/rootfs/lib下
     要单独存放,当然了还要注意设置添加LD_LIBRARY_PATH

你可能感兴趣的:(Tarena_项目)