这段时间一直忙于手上的嵌入式项目,可以说自己从嵌入式的菜鸟一点点的入门了,关于嵌入式和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. QUOTENAME函数的用法

    quotename函数的语法为:quotename('expression1','expression2') expression1:指的是需要被特殊处理的字符 expression2:例如{}.[] ...

  2. [SQL_Server_Question]Msg 1105无法为数据库 'tempdb' 中的对象分配空间,因为 'PRIMARY' 文件组已满

    错误消息: Msg 1105, Level 17, State 2, Line 266Could not allocate space for object 'dbo.Large Object Sto ...

  3. 安装Golang 1.6及开发环境

    安装Golang 1.6及开发环境=====================================> 下载软件    * go1.4.2.linux-amd64.tar.gz     ...

  4. 【C#】索引器

    索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的. 索引器和数组比较: (1)索引器的索引值(Index)类型不受限制 (2)索引器允许重载 ...

  5. 简单的C#线程开发实例(隔一秒改变一下Label的Text)

    要实现的效果:点击按纽,窗口上的label上出现1~100数字的变化. 第一个实例(把窗口上的label上文字改成0): using System; using System.Windows.Form ...

  6. POJ 2315 最小费用最大流

    从1走到N然后从N走回来的最短路程是多少? 转换为费用流来建模. 1: /** 2: 因为e ==0 所以 pe[v] pe[v]^1 是两条相对应的边 3: E[pe[v]].c -= aug; E ...

  7. c数组与指针

    0.数组和指针并不是相同的 我们声明数组时,同时分配了一些内存空间,用于容纳数组元素,但是当我们声明一个指针时,只分配了用于容纳指针本身的内存空间. 从这个方面也可以理解sizeof后面跟数组名和指针 ...

  8. ios 多任务学习笔记

    一.检测多任务是否支持: - (BOOL) isMultitaskingSupported{ BOOL result = NO; if ([[UIDevice currentDevice] respo ...

  9. jQuery+css+div一些值得注意的常用语句

    一.div页面布局 一个好的页面布局很重要,这会让你写代码的时候层次分明: 以2列左侧固定右侧自适应宽度为例子: 这是HTML代码: <!DOCTYPE html PUBLIC "-/ ...

  10. 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子

    原地址:http://www.cnblogs.com/xuling/archive/2013/03/04/2943154.html 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西 ...