我们知道,在PC机Linux上,安装开源软件,一般来讲,大多是如下几个步骤就搞定了。

tar -xzf  open_source_software.tar.gz

cd       open_source_software

./configure

make

make install

但是,如果要将开源软件移植到嵌入式Linux单板上运行,情况却略有不同。

本文就来说说这项工作如何进行。不当之处,还请大家斧正。

其实,无论是在PC机Linux上安装开源软件,还是将开源软件移植到嵌入式Linux单板上,其操作过程,在本质上是完全相同的。只是在PC机Linux上,各项事宜默认就得到了正确的组合。而对于嵌入式Linux单板,我们则需要明确地为这些事宜构造正确的组合。下面,我们就来看看具体的移植过程。

一、在PC机Linux上安装合适的交叉编译工具链。

这一步很简单,一般就是将工具链的压缩包解压到某个路径下,就完成了安装。

我们这里假设目标单板是arm处理器,运行Linux系统,

用的工具链是arm-linux-gcc-3.4.1,工具链安装路径是/opt/arm-linux-gcc-3.4.1。

并且,为了使用方便,我们已经将/opt/arm-linux-gcc-3.4.1/bin目录添加到PATH环境变量中了。这样就可以直接使用arm-linux-gcc、arm-linux-ld等命令了。

如果不这样做的话,后面使用/设定编译器时,就得用/opt/arm-linux-gcc-3.4.1/bin/arm-linux-gcc了。

二、开源库的移植

由于有些开源应用程序本身又依赖于一些开源库。因此,我们的移植步骤是,先移植开源库,再移植开源应用程序。不然的话,开源应用程序的编译就会成问题。

因此,这里先介绍开源库的移植。

库的移植,其实就是对工具链自带的库进行了扩充。

例如,假设上述arm工具链的stdio.h文件路径为/opt/arm-linux-gcc-3.4.1/include/stdio.h

那么,我们移植完开源库之后:

/opt/arm-linux-gcc-3.4.1/include/下面就会多出一些头文件。

/opt/arm-linux-gcc-3.4.1/lib/下面就会多出一些.a文件或.so文件。

当然,凡是单板上用到的/opt/arm-linux-gcc-3.4.1/lib/下面的.so文件,不管是工具链自带的,还是我们移植的,都需要拷贝到单板的根文件系统的/usr/lib/目录中。

好了,下面说说具体移植步骤。

假设我们已经获取并解压了开源库的源码包,并且在shell中已经进入了源码包的根目录。接下来的工作,分三步进行。

1. 配置

注意,这是最关键的一步。在这一步中,我们要指定诸如目标单板的操作系统、CPU、工具链等信息。

如何指定这些信息呢,不同的软件可能会有相同。我们如果不熟悉,就需要仔细阅读源码包中附带的诸如README、INSTALL等文件。这些文件会告诉我们,如何指定这些信息。

一般来讲,常见的配置方法,是通过 ./configure 命令进行。当然,有些开源包,可能叫./config或其他名字。这并不重要。

这些configure通常都是很大的shell脚本,应该都是用自动化工具生成的。因此,我们不用费力去读他的内容。

以opensll为例。配置命令为:

./config --prefix=/opt/arm-linux-gcc-3.4.1/  linux-elf:arm-linux-gcc

这就指定了目标类型是linux-elf,工具链是arm-linux-gcc。

安装路径是:/opt/arm-linux-gcc-3.4.1/。注意,这个路径是交叉工具链include目录及lib目录的父目录。因为头文件及编译后的库文件,需要分别安装到include与lib目录中。

当然,在配置命令中,我们还可以指定其他选项,以做进一步的定制。

一般来讲,可以通过  ./configure  --help 命令查看所支持的可定制选项。

该命令会输出所支持的各种选项,选项的含义,以及默认是否打开等信息。

当然,对于opensll来说,这里是用./config --help 命令。

如果这一步失败,通常是编译系统依赖的某个工具没找到。这个好办,安装一下就是了。

2. 编译

这就简单了,一般来说,一个make命令搞定

3. 安装

这就简单了,一般来说,一个make install命令搞定

对于本例来说,由于指定了安装路径为:--prefix=/opt/arm-linux-gcc-3.4.1/

因此,头文件(例如,openssl/ssl.h)及编译后的库文件(如libcrypto.a  libssl.a),会分别被安装到/opt/arm-linux-gcc-3.4.1/include 与 /opt/arm-linux-gcc-3.4.1/lib目录中。这样一来,就相当于扩充了/opt/arm-linux-gcc-3.4.1自带的库。接下来,就可以编译使用了opensll的开源应用程序了。

三、开源应用程序的移植

假设我们已经获取并解压了开源应用程序的源码包,并且在shell中已经进入了源码包的根目录。接下来的工作,也分三步进行。

1. 配置

和开源库的移植类似。在这一步中,我们要指定诸如目标单板的操作系统、CPU、工具链等信息。

如果不熟悉,同样需要需要仔细阅读源码包中附带的诸如README、INSTALL等文件。这些文件会告诉我们,如何指定这些信息。

以e2fsprogs-1.42.5为例。配置过程如下(可能相对传统一点):

mkdir release

cd release/

../configure --host=arm-linux CC=arm-linux-gcc

当然,我们同样可以带上更多的参数,做更多的定制。

例如,带上参数 LDFLAGS=-static从而指定静态链接。

如果这一步失败,有两个原因:

a). 编译系统依赖的某个工具没找到。这个好办,安装一下就是了。

b). 开源应用程序的某个功能项所依赖的某个开源库没有找到。

这种问题,有两个解决办法:

一是移植此开源库,按照前面的方法;

二是通过 --disable-funcname关闭此功能项,如果确实用不到该功能项的话。

2. 编译 这就简单了,一般来说,一个make命令搞定 3. 安装 这一步,需要将上述编译出的可执行文件、程序运行需要用到的配置文件、程序运行需要用到的所有动态库文件(无论是工具链自带的库文件,还是我们移植的库文件),都拷贝到单板的根文件系统的相应的目录下就行了。 例如, 库文件拷贝到/usr/lib/目录中。 配置文件拷贝到/etc/下面合适的路径中。 可执行文件拷贝到/bin或/usr/bin等目录中。 这一步,自己写点脚本来完成可能更合适。 因为即使在第1步中,已经指定了安装目录为单板的根文件系统。 make install命令也未必好用,他可能会安装过多的东西(如man手册页等,单板上并不需要),或者某些文件安装的路径未必正确,或者不会安装相应的库文件。

嵌入式linux系统移植的四大步骤_如何移植开源软件到嵌入式Linux系统相关推荐

  1. 嵌入式linux系统移植的四大步骤_嵌入式系统移植步骤

    在嵌入式系统移植中重要的一部分是操作系统的移植,与其它操作系统相比,Linux大的特点:它是一款遵循GPL的操作系统,我们可以自由地使用.修改.和扩展它.正是由于这一特色,嵌入式系统移植过程中Linu ...

  2. python 系统策略禁止这个安装_电脑无法安装软件提示设置了系统策略禁止此项安装怎么办?...

    Win7系统安装软件提示系统管理员设置系统策略禁止此项安装怎么办?最近有用户在安装office2003时,就遇到了提示禁止此项安装的问题,那么电脑不能安装某些软件该如何解决呢?请看下文介绍. 解决方法 ...

  3. 嵌入式linux系统移植的四大步骤_嵌入式linux系统移植基本知识

    系统移植第一天 [ 1 ] 系统移植重点掌握的内容 1 . 搭建交叉开发环境 2 . 移植 Bootloat 3 . 移植 kernel 4 . 根文件系统的制作 [ 2 ] 第一天要掌握的 1 . ...

  4. 嵌入式linux系统移植的四大步骤_嵌入式 Linux 产品技术评估之系统裁剪与启动速度...

    作者简介:吴章金,十年 Linux 研发经验,Linux Committer,前魅族内核团队技术总监.热门开源书<C 语言编程透视>作者. 版权声明:本文最先发表于 "泰晓科技& ...

  5. python开发工业机器人视觉系统_如何利用开源软件开发机器人视觉系统?

    机器人视觉应用程序可以带来一系列复杂的需求,但开源库可以为几乎所有需求提供解决方案.开发人员可以找到从基本的图像处理和对象识别再到运动规划和避免碰撞的开源软件包 .另外,还有有一些关键的开源图像处理软 ...

  6. 外网访问arm嵌入式linux系统_嵌入式Linux系统移植的四大步骤

    最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命 ...

  7. 嵌入式Linux系统移植的四大步骤

    最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命 ...

  8. 嵌入式Linux系统移植的四大步骤(详细长文,慎入!)

    关注.星标公众号,直达精彩内容 来源:网路素材 最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们 ...

  9. 联想用u盘重装系统步骤_联想t430怎么用u盘重装系统

    现如今电脑已经走进千家万户,大家生活和工作基本上都离不开电脑,接下来介绍一下联想ThinkPad T430笔记本电脑怎么用U盘重装系统,以重装win7系统为例,分享一下联想ThinkPad T430笔 ...

最新文章

  1. Python正则表达式常用的15个符号整理
  2. 数据库设计中的14个关键技巧收藏[转]
  3. linux perf - 性能测试和优化工具
  4. retain copy(浅复制) mutablecopy (深复制)
  5. 如何判断网站是否启用HTTP2
  6. 【放置奇兵】踩坑记录( 白字、红字、黄字)tips 小技巧
  7. 五.几何对象和空间参考
  8. 怎样和处在“叛逆”阶段的孩子交流沟通?
  9. 使用curses管理基于文本的屏幕--(三)
  10. 局域网SDN技术硬核内幕 一 从二层到大二层
  11. linux拷贝文件和目录命令,Linux 命令 - cp: 拷贝文件和目录
  12. 动态改变图片的useMap属性导致IE假死或崩溃!
  13. WERTYU UVA - 10082
  14. android pppd流程,Android pppd_gprs脚本启动过程
  15. C# openfiledialog文件单选和多选
  16. word图文混排复制到FCKEditor图片不显示
  17. Win32如何定义IP数据报的首部
  18. matlab中坐标轴的量程,origin中如何改变坐标量程
  19. c语言学生学籍管理程序,C语言实现简单学籍管理系统
  20. 【C语言】文件管理<2>

热门文章

  1. SAP Hybris Commerce installer目录下的build.gradle
  2. 使用SAP C4C的OData服务的deep insert操作创建Lead
  3. javax.ws.rs.Path注解@Path的工作原理解析
  4. when is oData transaction data request sent for an xml view binding case
  5. SAP UI5 view controller lifecycle discussion - onInit
  6. Data for set COM_LOCAT_ADDR may only be changed in the original system CRQ_100
  7. CRM 里面table download to excel的实现
  8. JavaScript里的...(三个点)操作符
  9. Cloud for Customer系统里的附件url,可以通过partner编程自己生成么
  10. 如何对C4C UI上的手机号码字段加上自定义验证逻辑