在Ubuntu下安装imx6linux系统的交叉编译环境遇到的问题总结
这段时间一直忙于手上的嵌入式项目,可以说自己从嵌入式的菜鸟一点点的入门了,关于嵌入式和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
- 编译Qt 4.8.5
- 安装Qt 4.8.5
- 并配置ARM的交叉编译
- 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系统的交叉编译环境遇到的问题总结的更多相关文章
- Ubuntu下安装配置android sdk及其环境变量
同理,这里介绍的是手动安装方法~ *系统;Ubuntu 16.4 1.下载Android sdk,直接在系统自带的firefox浏览器输入 http://tools.android-studio.or ...
- Ubuntu下安装R语言和开发环境
[简介]R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. [R语言的安装]官网:https://www.r-pr ...
- ubuntu下安装opencv库+Python2.7环境安装及开发摄像头拍照应用
好久没有更新了,今天更一篇最近遇到的问题,及解决办法,后面博客得继续写起来 安装 #使用Python下的lib库直接进行安装 apt-get install python-opencv 测试 #使用如 ...
- Ubuntu 下安装QT
Ubuntu 下安装QT 本文使用的环境 QT Library: qt-everywhere-opensource-src-4.7.4.tar.gz QT Creator: qt-creator-li ...
- ubuntu下安装RemixOS双系统(Android x86)
这篇文章主要讲在怎样在ubuntu下安装RemixOS pc版(Android x86版本号),下面两种做法的思路都适合安装不论什么版本号的Android x86版本号到ubuntu系统上,仅仅须要改 ...
- Ubuntu下安装JDK以及相关配置
1.查看系统位数,输入以下命令即可 getconf LONG_BIT 2.下载对应的JDK文件,我这里下载的是jdk-8u60-linux-64.tar.gz 3.创建目录作为JDK的安装目录,这里选 ...
- Ubuntu杂记——Ubuntu下安装VMware
转战Ubuntu,不知道能坚持多久,但是自己还是要努力把转战过程中的学习到的给记录下来.这次就来记录一下,Ubuntu下如何安装VMware. 就我所知,Linux下有VirtualBox和VMwar ...
- ubuntu下安装配置OpenCV
Cmake的安装 我用的是ubuntu-software自动下载安装的. Ubuntu 下安装 OpenCV 首先下载安装相关包,然后下载OpenCV 系统:ubuntu16.04 OpenCV:2. ...
- ubuntu下安装rpm 文件
正想着如何把rpm package 安装到ubuntu上, 发现了这篇文章,转载一下 Ubuntu的软件包格式是deb,如果要安装rpm的包,则要先用alien把rpm转换成deb. sudo a ...
随机推荐
- UNIX环境高级编程-环境配置
环境配置步骤如下. 1. 下载源文件:http://www.apuebook.com/src.tar.gz. 2. 复制src.tar.gz文件到/home/me/mydir/unixl/目录(自 ...
- winrar 压缩文件方法
问题描述: 我要一些大的文件进行压缩,看了网上有很多类拟的写法.但在我这都存在两个问题. 1.就是他们都是通过注册表找到rar的exe目录.我安装好winrar后,虽然注册表有,但那个目录一直报一个错 ...
- 【转】- 使用T4模板批量生成代码
前言 之前在 “使用T4模板生成代码 - 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “MultipleOutputHelpe ...
- UML 小结(6)- UML九种图的比较与学习
UML中的九种图: 用例图.类图.对象图.状态图.时序图.协作图.活动图.部署图.构件图. 1)用例图(Use Case Diagram) 它是UML中最简单也是最复杂的一种图.说它简单是因为它采用了 ...
- Daily Scrum 11.9
摘要:本次的meeting主要是继续讨论程序的问题以及单元测试和集成测试等,本次为1.01版本.本次的Task列表如下: Task列表 出席人员 Today's Task Tomorrow's Tas ...
- 怎么直接在MySQL客户端上执行SQl文件?
\. 直接把sql文件拖进去就行了,(斜杠+.+空格+sql文件)
- c语言关于二进制的输出
c语言中的二进制输出是没有占位符的,不像八进制:%o: 和十六进制:x%: c中二进制的输出 //右移31位,从最高为开始和1做&运算,得到每一位的二进制数值 void printbinry( ...
- jquery ajax对特殊字符进行转义防止js注入使用示例
在使用ajax进行留言的时候,出现了一个问题.因为留言内容写完之后,通过ajax提交内容,同时使用js把留言的内容添加到页面上来.浏览留言的时候也是通过ajax请求,然后再显示的.这样,如果有人在留言 ...
- NYOJ-469 擅长排列的小明 II AC 分类: NYOJ 2014-01-02 22:19 159人阅读 评论(0) 收藏
最初的第一印象是和组合数一个性质的题目.所以用了回溯法,结果,你懂的... #include<stdio.h> #include<math.h> void dfs(int n, ...
- Unity3D研究院之IOS全自动打包生成ipa
接着上一篇文章, 自动生成framework,这篇文章我把shell自动化打包ipa整理了一下,希望大家喜欢,嘿嘿.. 建议大家先看一下上一篇文章.http://www.xuanyusong.com/ ...