嵌入式Linux发行版
究竟什么是Linux发行版?在Linux内核引导之后,它期望找到并挂载根文件系统。当一个匹配的根文件系统已经挂载上,启动脚本开始运行大量程序和系统要求的工具。这些程序经常调用其他的程序做一些特定的任务,例如产生一个登录shell,初始化网络接口,启动用户程序。这些程序都有特定的要求(经常称为依赖)就是适用于系统中的其它组件。绝大多数Linux应用程序依赖于一个或者多个系统库。其它一些程序需要配置和日志文件,等等。总之,甚至于一个小型的嵌入式Linux系统都需要根文件系统目录结构中的大量文件。
成熟的桌面系统的根文件系统中有数以千计的文件。这些文件来自于按功能分组的包(packages)。这些包通过包管理器来安装和管理。红帽的包管理器(rpm)就是一个很好的例子,并且被广泛使用。如果你的Linux工作站是基于红帽的,包括Fedora系列,都通过在命令中输入rpm –qa来安装包。如果你使用一个Debain发行版本,例如Ubuntu,你可以输入dpkg –l得到相同的结果。
一个包通常包含许多文;甚至一些包包含几百个文件。一个完整的Linux发行版包含几百个甚至上千包。下面这些包都有可能在你的嵌入式Linux发行版中找到:
·initscripts包含基本的系统启动和关闭脚本。
·apache实现了流行的Apache网站服务。
·telnet-server包含实现telnet服务功能的必要文件,允许你和开发板之间简历telnet会话。
·glibc实现了标准C库。
·busybox包含了许多UNIX/Linux系统上的流行命令行工具集的精简版本。
一个典型的Linux发行版本伴随着带有大量有用的程序,库,工具,使用工具集和文档的的CD-ROM一起发行。一个典型的发行版能够提供一系列配置选项满足用户的定制需求。你可能熟悉一些流行的桌面Linux发行版本,例如Red Hat(红帽)或者Ubuntu。
嵌入式的Linux发行版与一般的Linux发行版有几点不同。第一点,嵌入式发行版的可执行的二进制目标代码不是在你的PC运行,而是针对于你的嵌入式系统的处理器架构。(当然,如果你的嵌入式Linux是x86架构的话,这就不是必须的了。)一个桌面Linux发行版针对典型的桌面用户有很多GUI工具,例如漂亮的图形时钟,计算器,个人时钟管理工具,e-mail客户端,等等。一个嵌入式Linux发行版只含有开发者需要的一些工具,例如内存分析工具,远程调试工具这些等等,而忽略了图形化组件。
桌面Linux发行版与嵌入式Linux发行版的其它一些显著的区别就是嵌入式发行版包括交叉工具,例如gcc工具链。其它的一些工具链都有相似的配置:他们运行在开发主机上(通常是x86的PC),设计用来操作其它体系结构的目标,比如ARM或者Power Architecture。
商业Linux发行版
制作属于你自己的Linux发行版
你可以选择你的嵌入式工程里面的所有需要的组件。你必须对此所产生的风险做好准备。如果做这一工作完全是为了兴趣,例如爱好或者大学项目,这个方法可能很适合你。然而,你必须花费大量的时间收集你项目中必须的所有的工具和工具集,并且确保都能使用。
对于刚接触的人来说,你需要工具链。gcc和binutils可以从www.fsf.org获得。两者都要求为你的额项目编译内核以及用户空间程序。这些在源码格式(source code form)中被首要分配并且你必须为你的交叉编译环境编译这些工具。这些工具集的稳定源码树(recent “stable”source trees)都要求打补丁,尤其是你使用x86/IA32架构的机器。这些补丁通常都可以在基础包的目录中找到。找到可以解决特殊问题和架构的补丁包是一项有挑战的工作。
只要你的工具链正在工作,你就需要下载并编译伴随着依赖项的应用程序包。这是一个令人生畏的挑战,由于许多包不允许交叉编译。当它们在本地的x86环境就已经建立好了。
要解决这些挑战,你可能需要足够强大的开发环境,包括工具(例如图形化的调试器),内存分析工具,系统追踪和剖析工具等等。当你在建立你自己的嵌入式Linux发行版的时候就能够看到这些问题了。
Embedded Linux Primer----嵌入式Linux基础教程--2.4节--嵌入式Linux发行版的更多相关文章
-
Linux下配置Squid基础教程
Linux下配置Squid基础教程 本视频高清下载地址:http://down.51cto.com/data/437529 本文出自 "李晨光原创技术博客" 博客,请务必保留此出处 ...
-
嵌入式系统基础知识(一): 系统结构和嵌入式Linux
目录 一. 嵌入式体系结构 二. 开发过程中的分工 三. 嵌入式软件体系结构 四. 嵌入式Linux 一. 嵌入式体系结构 <嵌入式系统设计师教程>这本书的前三章脉络很清晰, 按照嵌入式系 ...
-
Unix/Linux环境C编程入门教程(5) Red Hat Enterprise Linux(RHEL)环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 通过./a.out ./Y.out执行出结果,证明C++程序编译成功,也就说明li ...
-
Unix/Linux环境C编程新手教程(5) Red Hat Enterprise Linux(RHEL)环境搭建
Unix/Linux版本号众多,我们推荐Unix/Linux刚開始学习的人选用几款典型的Unix/Linux操作系统进行学习. 通过./a.out ./Y.out运行出结果,证明C++程序编译成功.也 ...
-
2016 最佳 Linux 发行版排行榜
2015年,不管在企业市场还是个人消费市场都是 Linux非常重要的一年.作为一个自2005年起就开始使用 Linux的 Linuxer ,我门见证了 Linux在过去十年的成长.2016 Linux ...
-
全球最受欢迎的十大Linux发行版(图)
帮助新的Linux用户在越来越多的Linux发行版中选择最合适的操作系统,是创建这个网页的原因.它列出了迄今为止最流行的10个Linux发行版(另外增加的是FreeBSD,到目前为止最为流行的BSD系 ...
-
2016年如何选择 Linux 发行版
不管是在企业级应用还是在消费者领域,2015 对于 Linux 来说都是极其重要的一年.作为一个从 2005 年就开始使用 Linux 的老用户,我有幸见证了 Linux 过去这 10 年里的重大发展 ...
-
版本 ------- 2017年最受开发者欢迎的10个Linux发行版
1.Arch Linux Arch Linux在安装过程中提供了强大的可定制选择,支持你下载和安装自己所需的程序包.虽然这个选择对新手来说没有多大的帮助,但是它确实能够帮助那些使用Arch构建系统和存 ...
-
2016 最佳 Linux 发行版排行榜【转】
转自:http://www.linuxstory.org/the-best-linux-distros-of-2016/?utm_source=tuicool&utm_medium=refer ...
随机推荐
-
Poj The xor-longest Path 经典题 Trie求n个数中任意两个异或最大值
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5646 Accepted: 1226 Description In an ...
-
Python + OpenCV2 系列:3 - python 字符串,类,编码规范
首先,强烈推荐<<简明 Python 教程>> Swaroop, C. H. 著 沈洁元 译 其实,这本书里已经把python的最基本的用法,编码等等介绍的很好,这里把我用到的 ...
-
css笔记11:选择器练习
1. (1)exam1.css文件: .s1 { font-size: 50px; color: blue; } .s2 { backgoround:gray; font-style: italic; ...
-
Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载五)Linux系统的对话方式
本篇是Linux小白最佳实践第5篇,目的就是让白菜们了解Linux进程之间是如何对话的.之前连载的几篇,在微信上引起了很多的反响,有人也反映图多文字少,感觉没有干货.本篇选了大部分是实战讲解的&quo ...
-
嵌入式系统烧写uboot/bootloader/kernel的一般方法
嵌入式系统烧写uboot/bootloader/kernel的一般方法 本文介绍了在嵌入式系统中烧写uboot/bootloader/kernel 的一般方法,以及如果uboot或者内核出现错误, ...
-
js 分割循环
var str ='1,2,3'; var arr = str.split(","); var array1 =[]; var array2 =[]; for(i=0,l=arr. ...
-
curl几个选项
1.--cacert 选项请看https://curl.haxx.se/docs/sslcerts.html 2.CURL库怎样验证服务器证书 [复制链接] 中提到:你是客户端, 你希望的是: 你拿 ...
-
基于WCF的RESTFul WebAPI如何对传输内容实现压缩
前言 WCF作为通迅框架可以很容易地实现对消息的压缩,且方法不止一种,主要解决方法主要有以下四种: 1.通过自定义MessageEncoder和MessageEncodingBindingElemen ...
-
List转换成JSON对象报错(三)
List转换成JSON对象 1.具体错误如下 Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/e ...
-
API创建员工
DECLARE lc_employee_number PER_ALL_PEOPLE_F.EMPLOYEE_NUMBER%TYPE := 'PRAJ_01'; ln_person_id PER_ALL_ ...