嵌入式Linux开发

这个页面包含了嵌入式Linux和Android开发的信息和链接,并且集中在“系统”方面(低级,操作系统配置),所以你不会发现太多关于应用程序开发的信息,并且这个页面中讨论的很多概念也可以应用于“大Linux”开发。亚博体育官下载虽然提供的信息应该是目标独立的,一些材料是板特定的,如果它可以帮助理解更一般的想法。

设置嵌入式Linux开发机器 -

嵌入式Linux开发通常是在Linux机器上完成的,所以您必须将其设置为在构建机器和目标板之间交换文件,调试目标板,安装工具链来交叉编译软件,等等....如果您是Linux新手,Ubuntu是ARM Linux开发的一个很好的发行版。要开始使用Ubuntu 12.04,你可能想下载"开始使用Ubuntu 12.04,一本长达143页的免费指南。

安装交叉工具链

一旦你在你的机器上安装了Linux,你需要做的第一件事就是安装一个交叉工具链,它通常是由Silicon制造商提供的,但是现在有一些常见的Linux发行版的工具链,例如:

Yocto项目和Buildroot是为嵌入式系统生成完整Linux发行版的工具,它们还将为您生成一个跨工具链。在下面的ARM Linux开发rootfs一节中,我将简要介绍这些问题。

安装一个服务器来在构建机器和目标板之间共享文件

现在您已经在您的机器上安装了一个工具链,您需要设置一个方法来通过网络在目标板和您的机器之间交换文件,以加速开发。有几个服务器可以实现这一壮举:

  • NFS - NFS代表网络文件系统,并且在我的经验中,最常用于在构建机器和目标板之间交换文件。构建应用程序后,将其复制在NFS服务器中,然后从目标板中的那里运行它。好,易于。看看你的方式在Ubuntu中安装NFS
  • TFTP -转移文件传输协议通常是用来引导装载程序加载文件,它可以用来加载系统映像(比如ramdisk)通过网络系统调试(内核+ rootfs)或执行网络引导为了节省物料清单(如不需要Flash)和维护成本,由于文件存储在中央服务器可能更容易维护,访问个别文件。在Ubuntu中,你可以使用apt-get安装atftpdapt-get安装tftpd安装TFTP服务器。
  • CIFS / Samba - AKA“Windows Share”,除非您还需要使用Windows,否则并不真正使用。这是Linux下如何配置samba服务器

您还需要安装一些其他工具,如版本控制客户端(git、svn、cvs…)、调试器等。但更多的是在下面。您很可能使用串口控制台使用minicom或screen (Linux)或超级终端或terterm (Windows)访问主板。

配置管理:版本控制,错误跟踪和连续集成 -

这一节并不是专门针对嵌入式软件的,但是您需要一个版本控制系统来管理您的代码,特别是在您作为一个团队工作的时候,但是即使您自己在一个项目中工作,它也很有用,因为您可以轻松地跟踪更改。有几种可用的版本控制系统,CVS是最早的,使用得越来越少,SVN是最近的,仍然在一些项目中使用,但是现在最常用的解决方案是Git。

你可以自己安装gitLinux窗户,或使用在线服务,例如GitoriousGitHub..在线服务对公共存储库和小型团队是免费的,但您需要付费托管闭源项目。

如果你还在使用CVS,我写了一些帖子来解释如何自动生成ChangeLog,如何阻止“淘气的”开发人员提交不写提交注释的。

对于错误跟踪,您可以安装诸如此类的工具BugzillaTrac。Bugzilla是使用最广泛的,而Trac实际上不仅仅是一个Bug跟踪器,因为它被用来管理完整的项目并与svn集成。有一个更完整在维基百科列表

最后,您很可能希望定期自动构建代码,例如每天/每晚使用脚本,或者使用持续集成(每次提交后构建)工具来确保构建完成。QA团队也可以使用此类构建,因为它们可以指示哪个构建未能通过某些测试。一些有趣的工具包括Jenkins-CIBuildbotBuildHive在Github (Jenkins-CI)。

用虚拟机开发 -

如果你必须使用windows XP/7有你的主机器,你仍然可以做Linux开发与x86虚拟化软件包,如Oracle VirtualBox.VMWare的球员但是,如果您是一个开发团队,您可以使用Linux服务器并通过SSH终端窗口(例如使用Putty)进行开发。

在VirtualBox或VMWare Player中安装Linux发行版真的很容易,所以我在这里不解释如何做到这一点。您可能希望拥有的功能之一是能够在Windows主机和Linux客户操作系统之间复制/粘贴文本。我已经解释了如何在VirtualBox做到这一点在之前的一篇文章中,因为这在默认情况下没有启用。在主机和客户操作系统之间交换文件的最简单的解决方案可能是设置一个网络共享

仿真器和虚拟硬件平台

无论你是一个学生非常有限的预算,或者需要更有经验的工程师工作在前一个项目硬件准备好了,你可以开始使用交叉开发的使用qemu仿真器等,可以模仿很多目标,如手臂、MIPS、PCC和更多。

QEMU通常作为Linux发行版中的二进制包提供,您可以使用“apt-get安装qemu-system,比如Debian或Ubuntu。在某些情况下,您可能希望使用最新的qemu版本,在这种情况下,您必须构建它。下面是如何为ARM模拟器构建qemu

现在qemu已经运行起来了,可以尝试一下了。我已经把说明写好了模拟Gumstix Overo板(TI OMAP3 - ARM Cortex A8)ARM通用Express在qemu,你可以用它来开始ARM的开发。

在主机和qemu之间传输文件并不是很简单,所以我解释了如何做到这一点直接将文件复制到图像通过网络(NFS / SSH)

然而,由于性能较低和缺乏外围设备支持,使用模拟器进行开发有一些限制,所以通常情况下,访问硬件和图形密集型的任何东西(尽管现在支持OpenGL ES)通常不能在qemu中运行。这个问题的解决方案是执行虚拟硬件平台可以在动力机器上运行,并模拟CPU(s)和SoC的所有外设。我自己还没试过,但如果你想试试,你可能会想试试治之OPVsim模拟器.它是免费的,而且有一些型号可供选择。

ARM最近发布了ARMv8的快速模型。我写了使用说明开放的64位ARM端口

ARM Linux开发-

这一部分是针对ARM和Linux的,我假设您已经按照上面指定的方式设置了构建机器。

在嵌入式Linux系统中通常有3个组件,它们在启动时按顺序调用。

  • 引导加载程序(例如U-boot)
  • Linux内核
  • 根文件系统(rootfs)

我将给出例子来说明如何使用每个方法,因为方法是相同的:

一旦准备好引导加载程序和Linux内核,您将需要一个包含完成系统引导所需的所有用户空间文件的rootfs。下面是一些获得ARM根文件系统的方法:

如果您想交叉编译ARM包,您现在可以使用MultiArch在Ubuntu 12.04,这将下载和安装ARM包(依赖项),并交叉构建ARM目标源的包。

Linux内核开发-

如果你想了解更多关于内核开发的知识,有一些必须阅读的亚博体育官下载书籍:

  • Linux设备驱动程序,第三版 - 免费@https://lwn.net/kernel/ldd3/适用于Linux 2.6驱动程序及更远。如果您更喜欢硬拷贝,它也可以使用亚马逊
  • Linux内核开发(第3版) - 可在亚马逊上获得平装书 kindle版本。
  • Linux内核简介-免费提供在线

这里还有一个很棒的书籍和指南列表亚博体育官下载关于Linux kernel开发linuxquestions.org

一旦你为内核开发了驱动程序和/或修复了一个bug,你会想要提交一个补丁,但你必须遵守提供的链接中的规则,否则将被拒绝。

嵌入式Android开发-

您是否计划为Android开发应用程序,或者只想用系统(带adb),您需要安装Android SDK。下面是如何在Windows XP上安装Android SDKUbuntu 12.04

Google为应用程序开发提供了Android教程。我知道它与嵌入式Android无关,但仍然有趣。你可以阅读概括,或直接前往教程

如果你想了解更多关于Linaro Android和如亚博体育官下载何安装它在一个Pandaboard,你可以这样做Linaro Android教程作者:Zach Pfeffer, Linaro Android工作小组的技术领导(他总是很有趣)。扎克还有另一个非常有趣的演讲,他解释了这一点如何将Android港口与Linaro一起播放到新平台

如果你想了解更多关于Android内部的知识,并在嵌亚博体育官下载入式系统中使用Android,请点击这里Opersys“Android变体,技巧,技巧和资源”演示文稿幻灯片(Andevcon II)以及他们的“嵌入式Android车间“幻灯片。

关于嵌入式Linux和Android的亚博体育官下载培训材料 -

在本节中,我将列出一些外部资源,我(以及其他许多人)发现这些资源非常适合开始使用嵌入式Linux或/和嵌入式Android。

Free electronics是一家提供嵌入式Linux咨询服务和培训的法国技术公司,abd有关于Linux内核和驱动开发的优秀嵌入式Linux培训材料(亚博体育官下载labs.pdf),使用IGEPv2板(TI OMAP3)嵌入式Linux,以及关于嵌入式Linux系统开发的超过500页的演示(亚博体育官下载slides.pdf).下载的PDF可能不是最新的版本,最新的文档可以在它们的存储库中找到。这是如何构建文档

Opersys是另一家培训公司,你会找到老板的Karim J. yaghour在几乎所有的Linux和Android活动上都做了演讲,这些活动专门从事嵌入式软件开发课程。他们提供嵌入式Android和Linux材料免费

Linux基金会也提供免费的Linux培训视频,虽然大多数不是直接与嵌入式软件相关,但仍然有一些有趣的看看免费的Linux教程

每年都会有嵌入式Linux大会和Linux大会这样的活动,视频会被录制(通常由上面提到的Free electronics录制)并免费提供。我发现这些视频内容丰富,通过观看这些视频,您将了解到许多最新的嵌入式Linux、开源和Linux开发。我已经上传了一些到YouTube,并提供了书面摘要和演示幻灯片的链接(如果可以的话):

嵌入式Linux快速入门指南由Chris Simmons表示在ELCE 2010上,这是最受欢迎的课程之一,在三个小时内,您将了解嵌入式软件开发的各个方面,最后一部分是NXP LPC3250 Stick (ARM9)的实践环节。请注意,第二个视频在17:00之前非常嘈杂,因为当时正在进行装修。

NPTEL上传了一个50小时嵌入式系统课程亚博体育官下载Dr.Santanu乔杜里,部门。印度理工学院德里分校(IIT Delhi)电气工程学院的教授。这并不是针对嵌入式Linux的,因为它涉及所有类型的嵌入式系统,但它似乎仍然非常有趣。

爱丁堡大学已经提供了他们的嵌入式系统课程幻灯片.同样,这不是Linux特有的,尽管有些部分是,但仍然有趣。例如使用MQX RTOS和飞思卡尔Kinetis K70。

嵌入式系统的通用软件包

在“大”Linux中,当你想安装一个web服务器时,你可能会想到Apache,一个数据库,你可能会想到Mysql,但是对于内存和处理能力亚博体育官下载有限的嵌入式系统来说,这些都是资源密集型的。

所以你可以使用轻量级的替代方案:

ARM编程,

这一节不是针对Linux和Android的,但是如果你想优化ARM的性能或你的产品的电池寿命,你可能必须使用这一节。

你也可以浏览部门信息中心这是关于ARM编程的大量信息。

修复公共编译错误消息 -

当我浏览一些Linux或编程论坛时,我经常看到人们发布“帮助”帖子,讨论在构建的配置和制作阶段由于缺少文件或包而出现的错误。亚博体育官下载几年前,你必须做一些研究来找到正确的软件包,但现在由于打包工具很容易找到丢失的软件包,这样的问题不应该出现在论坛上。我会给出使用Ubuntu/Debian apt工具的说明:

  • "致命错误:header.h:没有这样的文件或目录编译终止"。你可以使用apt-file找到丢失的包
  • configure: error: PACKAGE requirements (package_name) were not met: No PACKAGE ' package_name ' found ".在这种情况下,你可以用"能力搜索包_name获取包含“package_name”的包列表。并安装相关的。
  • 查找给定包的配置选项。这并不是一个错误,但是由于您的系统不支持apt-get或yum等打包utils,因此您必须在嵌入式Linux中自己交叉构建一个库,并且可能必须手动设置依赖项路径(头文件和库文件),这是非常常见的。一个快速列出这些的方法是使用pkg-config

编程的书,

以下是一些编程书籍的链接:

调试,

以下是一些调试工具的链接,提示和如何在嵌入式系统中调试软件:

软件QA -

在这一节中,我将写一些关于测试的内容,并列出一些简单的技术,通过使用亚博体育官下载一些工具来改进源代码。

亚博体育官下载大约2年前,我写了一篇关于如何在开发人员和测试人员之间分享测试任务的文章测试嵌入式软件.这只是供参考,因为其他人会有不同的观点。

以下是一些开发人员可以用来提高代码质量的资源:

最后,一个有趣的学习发现开发人员应该使用测试自动化、静态分析和虚拟系统原型/模拟(VSPS)工具来加速开发,但是很少有人这样做。

杂项提示和如何 -

你的应用程序可能需要支持不同的语言,你可以阅读标题为“语言,Unicode和字符集来学习为什么你的应用应该使用Unicode,如何将不同的字符集转换为Unicode,以及如何使用工具和C代码检测文件中使用的语言。

你至少应该有基本的代码规则来说明如何格式化你的代码,而且很多软件都可以设置成自动这样做。其中一个规则通常是禁止在代码中使用制表符,因此每个人都使用(4)空格而不是制表符,以使代码的格式适合任何人。如果您使用vi/vim作为您的编辑器,您可以将其设置为将制表符自动替换为空格

如果要在嵌入式Linux上工作,就必须使用开源包(其中之一就是内核),您应该学习亚博体育官下载不同的开源许可证如GPL,LGPL,Apache,MIT ...

这里有一个方法将所有输出重定向到日志文件,它对长期建设特别有用。

您的软件应该有文档,您可以单独编写文档,但也有一些工具,例如Doxygen它可以使用变量,函数名称和源代码中的特定注释自动生成文档。

尽管现在对于NAND flash来说使用ext-2/3/4更常见,但是JFFS2仍然在许多使用NOR flash的嵌入式系统中使用。您可能需要在Linux PC上访问这些图像来添加文件和/或查看里面有什么。下面是如何在Linux中挂载JFFS2映像

在哪里和如何提问

以下是对开发人员有用的站点列表

  • stackoverflow-这是你应该问与编程相关的问题的地方
  • 开发论坛-优秀的论坛,找出如何破解移动设备与Android或Linux发行版。信息到处都是(由于网站的受欢迎程度),可能很难找到确切的信息,但我可以告诉你它在某个地方
  • Linux问题论坛-如果你对Linux有问题,可以在这里问。他们也有相关的部分嵌入式Linux,Linux内核和硬件。
  • 板或硅供应商-如果你买了一个开发板,你应该问你的经销商,因为许多板有在线支持。这应该是最容易被问到的地方。一些公司,如德州仪器或Atmel有非常活跃的在线社区,所以你应该在他们的论坛上寻求专家的答案,而不是在更一般的网站,如Linux问题。

如果你想“救救我!”、“我的板子坏了!”或者语法错误的“How do?”是论坛帖子的好主题,我强烈推荐你去读如何以聪明的方式提问”。

在你问问题之前,确保你至少用“谷歌”之类的在线搜索工具做了一些调查(有些人似乎并不知道有这个问题:https://lmgtfy.com/),提供明确的标题,解释您已经尝试过的内容,并提供尽可能多的细节。如果您有一个长日志,请不要直接在帖子中发布,但发布相关片段,或者如果您不确定问题所在,复制/粘贴您的登录pastebin.com并提供一个链接。

你更有可能得到这种准确的回答,你也可以避开来自社区的焦点。

让我知道如果你是更多的建议,发现错误,过时的指示等。在评论区。

订阅
通知的
客人
评论表单会收集您的姓名、电子邮件和内容,以便我们跟踪网站上的评论。请阅读并接受我们的网站条款和隐私政策发表评论。
7评论
最古老的
最新的
Ganesh
Ganesh
5年前

你好,
我来自班加罗尔的Ganesh,用作嵌入式软件工程师。

三个月前我从“http://www.hotmcu.com/hylpc1788-development-board-with-7-touch-screen-tft-lcd-p-39.html”购买了LPC1788开发板。我试着把uboot和uclinux放在这上面很多次,但是没有成功。我闪现uboot从“http://www.emcraft.com/index.php/products/88”下载,在这个uboot我不能通过tftp加载linux映像。在浏览谷歌的时候,我看到了你的博客简介。我已经挣扎了三个月了所以请帮帮我。

谢谢你!

Ganesh
Ganesh
5年前

你好,
但是在这个CD映像中,没有uboot和uclinux,但是我需要在那个板上加载linux,请帮助我

Ganesh
Ganesh
5年前

没关系…谢谢