这段时间一直忙于手上的嵌入式项目,可以说自己从嵌入式的菜鸟一点点的入门了,关于嵌入式和imx6核心板的开发有了一点的了解,尤其是对于板子环境的搭建。硬件的开发,搭建环境,是一个很大的工程量,也是很重要的一步,环境没有搭好就无法进行下一步。当然这个前提是对项目所使用的硬件有一定的了解。对于嵌入式开发,项目进行到现在,从一个什么都不懂的到现在可以和大家讨论v4l2,framebuffer,讨论linux的视频开发,虽然还是菜鸟级别的,但这个月确实让自己掌握了一们知识。

  关于嵌入式的开发,网上有很多的教程和步骤,大概就是按照以下的步骤:确定需求、根据需求硬件选型、确定硬件并对硬件熟悉,搭建开发环境,软件部分,联机调试,各硬件间的联调,最后形成原型,裁剪系统,分装。这里的每一步都很重要,不能轻忽任何一步。下面总结了在搭建开发环境这块遇到的一些问题。不同的硬件有不同的要求,交叉编译的环境也不一样。

  在Linux下搭建开发环境,你必须对linux系统的环境配置要有所了解。

一、环境配置

1.1、什么是shell

Shell:又名壳层,是“提供用户使用界面”的软件,通常指的是命令行界面的解析器,在操作系统中,提供访问内核所提供的服务的程序。

Shell:因为来自于操作系统(内核)与用户界面的外层界面,通常将壳层分为两类:命令行与图形界面。 命令行壳层提供一个命令行界面(CLI); 而图形壳层提供一个图形用户界面(GUI)。

bash 就是一个内置的shell程序,隶属于命令行壳层。简单的说,shell提供了一个接口,让用户输入命令,接收用户命令,然后调用相应的应用程序,就相当于dos的command。

1.2  环境的建立

  用户登录系统后,会启动内置的bash程序,来读取启动文件的配置脚本,这些脚本定义了所有用户共享的默认环境。 针对不通的用户需求,会对操作系统的环境变 量进行修该,以满足用户需求,bash在读取系统默 认的环境便变量后,会自动读存储在主目录下用于定义个人环境的启动文件,建立所需的环境。

1.3 启动文件中有什么

shell会话分两种:login shell 和 non-login shell 会话。

login shell 的启动文件:

/etc/profile :适用于所有用户的全局配置脚本

~./bash_profile :个人启动文件,可扩展成全局配置脚本

~/.bash_login :

~/.profile

non-login shell:读取的启动文件

/etc/bash.bashrc :适用于所有用户的全局配置脚本

~/.bashrc :用户的个人启动文件,而后集成父类进程环境。其中父类进程通常是一个login shell。

eg :  .bash_profile:

# .bash_profile
# cget the aliases and functions if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi # user specific enviroment and startup programs PATH = $PATH:$HOME / bin
export PATH

 # 开始的行是注释行,shell不会读取; 此段代码被称为 if 的复合命令

If the file “~/.bashrc ” exists , then read the "~/.bashrc" file

PATH=$PATH:$HOME / bin : 将$HOME / bin添加到了PATH值的尾部。

export 命令告诉shell,将shell的子进程使用PATH变量的内容。

 1.4 修改环境

  以上是系统启动文件的位置和内容,可以通过修改系统启动文件,来自定义个体环境。 环境变量的修改或者增加PATH目录,需要在 .bash_profile 文件中操作,根据版本的不同而不同,比如Ubuntu使用的就是./profile文件。 其他的修改应该在 .bashrc 文件中 修改工具:vim

文本编辑器分成两类:图形界面的和基于文本的 Ubuntu下常用的是基于文本的vim

联网安装:sudo apt-get vim

卸 载:rm -Rf vim

打开文件:vim 文件名 (一定要进入当前路径)

修改文件: a -->进入insert模式

退出文件:Esc + :+ (w,q, wq , q! ,wq! 等)

printenv : 打印部分或全部的环境信息

set : 设置shell选项

export : 将环境导出到随后要运行的程序中

alias : 为命令创建一个别名

source:文件路径/文件名

二、交叉编译

  嵌入式系统开发过程中,运行程序的目标平台通常 具有有限的存储空间和运算能力,比如常见的ARM 平台: 静态存储空间:16~32MB, CPU的主频:100MHz~500MHz 因此,在ARM平台上不可能进行本机编译,因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的CPU运算能力。 我们就可以在CPU能力很强、存储控件足够的主机平台 上(比如PC上)编译出针对其他平台的可执行程序。PC机 资源丰富,可以很方便地集成开发环境和调试工具。

  由于PC机与嵌入式系统环境的体系结构不同, 在PC机上可以运行的程序在目标机arm板上无法运 行,因此嵌入式开发必须采用交叉编译,以使PC机 可以生成在arm班上可以执行的代码。 编译的最主要的工作就是将程序转化成运行该程序的CPU所能识别的机器代码。此时就用到了交叉编译链。 要进行交叉编译,需要在主机平台上安装交叉编译工具链,然后用这个交叉编译工具链编译我们的源代码,最终生成可以在目标平台上运行的代码。

  什么是编译工具链: 编译工具链可简单理解为编译工具集: 编译器,汇编器,链接器,C标准库。 编译器负责将源代码转换为二进制机器码(或汇编代码),像gcc; 汇编器和链接器等则负责可执行文件的构建,像 binutils,中文为二进制工具集; C标准库是通用的机器码库,供链接器用,像 glibc。

大致流程:

安装LTIB并编译BSP

  1. 编译Qt 4.8.5
  2. 安装Qt 4.8.5
  3. 并配置ARM的交叉编译
  4. ARM的交叉编译

三、问题总结

关于环境配置时遇到的一些问题总结或者是知识梳理:

3.1、make命令简介

  在开发一个系统时,一般是将一个系统分成几个模块, 这样做提高了系统的可维护性,但由于各个模块间不可避免 存在关联,所以当一个模块改动后,其他模块也许会有所更 。为此,在Linux系统中,专门提供了一个make命令来自动维护目标文件。

  优点:只更新修改过的文件(在Linux中,一个文件被创建或更新后有一个最后修改时间,make命令就是通过这个最后修改时间来判断此文件是否被修改),而对没修改的文 件则置之不理,并且make命令不会漏掉一个需要更新的文件。

  依赖关系的确定: make命令当然不会自己知道这些依赖关系,需要程序 员将这些依赖关系写入一个叫Makefile的文件中。 Makefile文件中包含着一些目标,通常目标就是文件名, 对每一个目标,提供了实现这个目标的一组命令以及和这个 目标有依赖关系的其他目标或文件名。

3.2、找不到zlib

  下面是涉及到的一点工具。

  LTIB(Linux Target Image Builder)工程是一个使用在不 同的目标平台下,用于开发和部署BSP(Board Support Packages)的简单工具。使用该工具,用户能够为其目标平 台开发符合GNU/Linux标准的映像。

  BSP(Board Support Package)是板级支持包,是介于主 板硬件和操作系统之间的一层,应该说是属于操作系统的一 部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。

问题描述:

运行./ltib –m config 就出错了

 提示没安装zlib,其实系统已经安装了,也已是最新版本。

解决方法:

  Zlib是提供数据压缩用的函式库, 对自己的程序和文件进行程序内数据压缩、解压

  添加路径,打开目录/ltib/bin/Ltibutils.pm 文件,search for zlib部分代码;

  zlib         => sub { my @f = (glob('/usr/lib/libz.so*'),

            glob('/lib/libz.so*'),

            glob('/lib64/libz.so*'),+

             glob('/lib/i386-linux-gnu/libz.so*'),

               glob('/usr/lib/i386-linux-gnu/libz.so*'),    

            glob('/usr/lib32/libz.so*'),

                      glob('/usr/lib/x86_64-linux-gnu/libz.so*') ); @f > 1 ? 1 : 0 },

glob() 函数返回匹配指定模式的文件名或目录。

加粗那一行错误所在,添加进去后才可以运行。

3.3、./ltib错误

问题描述:

You don't have a working TeX binary installed, but the texi2dvi script

can't proceed without it. If you want to use this script, you have to

install some kind of TeX, for example TeX Live Debian packages. You can do

that with this command:

apt-get install texlive

make[2]: *** [flex.pdf] Error 1

make[2]: Leaving directory `/opt/freescale/ltib/usr/src/rpm/BUILD/flex-2.5.37/doc'

make[1]: *** [install-recursive] Error 1

make[1]: Leaving directory `/opt/freescale/ltib/usr/src/rpm/BUILD/flex-2.5.37'

make: *** [install] Error 2

error: Bad exit status from /home/cody/i.mx6/ltib/tmp/rpm-tmp.99407 (%install)

RPM build errors:

Bad exit status from /home/cody/i.mx6/ltib/tmp/rpm-tmp.99407 (%install)

Build time for flex: 27 seconds

Failed building flex

Died at ./ltib line 1392.

traceback:

main::build_host_rpms:1392

main::host_checks:1447

main:554

解决方案:

sudo apt-get install texinfo
sudo apt-get install texlive

原因:

tex 是一个排版系统

texlive就是包含了编辑器、编译器、阅读器的一个tex套装;

texinfo软件依赖于bash,包含读取、写入和转换 Info 文档的程序,以提供系统文档

3.4、找不到文件目录

问题描述:

bash:command not found

因为PATH变量的设置,导致系统原有的默认路径被覆盖,此时 sudo ,ls ,chmod等命令都不能用。

 解决方案:

  1,/usr/bin/sudo  vi  /etc/profile          (由于你找不到sudo,所以必须写全路径,其他命令如果提示找不到,也需要写全路径)

  2.末尾添加以下内容后保存

export PATH=$PATH:/sbin:/usr/bin:/usr/sbin

  /sbin一般是指超级用户指令,主要放置一些系统管理的必备程式;

  /usr/bin 是你在后期安装的一些软件的运行脚本;

  /usr/sbin   放置一些用户安装的系统管理的必备程式;

要考虑root 的$PATH里是否已经包含了这些环境变量。

可以查看PATH,如果是:PATH=$PATH:$HOME/bin则需要添加成如下:

PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin

3.重新启动系统或执行以下命令生效

source /etc/profile

  以上感谢小妍是师妹的整理和分享,这让我们大家又多学了一点东西。以后决定将周会的内容记录下来,分享和总结。

在Ubuntu下安装imx6linux系统的交叉编译环境遇到的问题总结的更多相关文章

  1. Ubuntu下安装配置android sdk及其环境变量

    同理,这里介绍的是手动安装方法~ *系统;Ubuntu 16.4 1.下载Android sdk,直接在系统自带的firefox浏览器输入 http://tools.android-studio.or ...

  2. Ubuntu下安装R语言和开发环境

    [简介]R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. [R语言的安装]官网:https://www.r-pr ...

  3. ubuntu下安装opencv库+Python2.7环境安装及开发摄像头拍照应用

    好久没有更新了,今天更一篇最近遇到的问题,及解决办法,后面博客得继续写起来 安装 #使用Python下的lib库直接进行安装 apt-get install python-opencv 测试 #使用如 ...

  4. Ubuntu 下安装QT

    Ubuntu 下安装QT 本文使用的环境 QT Library: qt-everywhere-opensource-src-4.7.4.tar.gz QT Creator: qt-creator-li ...

  5. ubuntu下安装RemixOS双系统(Android x86)

    这篇文章主要讲在怎样在ubuntu下安装RemixOS pc版(Android x86版本号),下面两种做法的思路都适合安装不论什么版本号的Android x86版本号到ubuntu系统上,仅仅须要改 ...

  6. Ubuntu下安装JDK以及相关配置

    1.查看系统位数,输入以下命令即可 getconf LONG_BIT 2.下载对应的JDK文件,我这里下载的是jdk-8u60-linux-64.tar.gz 3.创建目录作为JDK的安装目录,这里选 ...

  7. Ubuntu杂记——Ubuntu下安装VMware

    转战Ubuntu,不知道能坚持多久,但是自己还是要努力把转战过程中的学习到的给记录下来.这次就来记录一下,Ubuntu下如何安装VMware. 就我所知,Linux下有VirtualBox和VMwar ...

  8. ubuntu下安装配置OpenCV

    Cmake的安装 我用的是ubuntu-software自动下载安装的. Ubuntu 下安装 OpenCV 首先下载安装相关包,然后下载OpenCV 系统:ubuntu16.04 OpenCV:2. ...

  9. ubuntu下安装rpm 文件

      正想着如何把rpm package 安装到ubuntu上, 发现了这篇文章,转载一下 Ubuntu的软件包格式是deb,如果要安装rpm的包,则要先用alien把rpm转换成deb. sudo a ...

随机推荐

  1. AVG()和to_date()函数的使用

    1.一道关于AVG函数和NULL值的面试题 某部门有10个员工,其中9个工资为1000,另一个为NULL,当使用AVG函数取该部门平均工资时,结果应该是多少? A.1000 B.900 我这里把题目再 ...

  2. 2016 系统设计第一期 (档案一)MVC 控制器接收表单数据

    1.FormCollection collection   user.UserId =Convert.ToInt32(collection["UserId"]); /// < ...

  3. C语言基础:两个变量交换值的方法

    学习任何语言基础时,两个数值得交换是必须掌握的,下面是3种不同的方式(c语言) 方法一:利用数学的计算技巧 #include <stdio.h> int main() { , b = ; ...

  4. 计划:怎样理解水平集方法 ITK Level set V4 框架介绍

    简易解释:在曲面中插入一个平面所形成的轮廓,即是该轮廓的水平集表示,可见,该轮廓的水平集表示有多个.对于图像分割,在图像力的驱动下曲面进行更新. 轮廓的数学表达有隐式和显式两种表达.用曲面演化代替Fr ...

  5. tomcat绑定域名

    现在很多的公司的网站都是用tomcat作为应用服务区的,可是对于初学者,8080端口号是如何去掉的,这些网站是如何和域名绑定到一起的呢?一个tomcat是如何绑定多域名?并且这些域名是如何对应不同的项 ...

  6. Flv 视频格式(转)

    最近要用到flv,整理了一些flv格式的资料,供参考. flv文件主要由两部分组成:header和body. 1.header header部分记录了flv的类型.版本等信息,是flv的开头,一般都差 ...

  7. 消息传递选择:返回值 or 抛出异常

    1.返回值 bool 不应该用来表示函数是否调用成功,而应该返回业务值,例如 IsExist,HasNext

  8. oracle 判断是否数字 正则表达式法

     SELECT '-100'    FROM dual   WHERE REGEXP_LIKE('-100','(^[+-]?\d{0,}\.?\d{0,}$)'); REGEXP_LIKE 用法: ...

  9. 阿里云之OSS 开放存储服务开发笔记

    在使用云服务以后,你不用考虑他是否能承受压力,而是费用.不要考虑是否被攻击,而是他的API实现.本人开发阿里云服务也走了些崎岖之路,写下以备忘之. 阿里云的开放存储服务可以提供文件的存储服务,开放了上 ...

  10. Linq常用

    1.左关联查询var lst = from m in db.信息          join d in db.明细信息          on m.单号 equals d.单号 into mi     ...