0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简化SBC的嵌入式Linux软件开发

星星科技指导员 来源:嵌入式计算设计 作者:Nathan Z. Gustavson, 2022-06-15 09:36 次阅读

如今,大多数从大学毕业并获得电气工程或计算机科学学位的程序员都非常精通 Linux 桌面平台上的编程。当这些程序员需要跨越式地对嵌入式 Linux 系统进行编程时,他们常常会感到惊讶和困惑,因为他们在桌面上编写的程序无法运行他们的 Linux 嵌入式系统

如今,大多数从大学毕业并获得电气工程或计算机科学学位的程序员都非常精通 Linux 桌面平台上的编程。当这些程序员需要跨越式地对嵌入式 Linux 系统进行编程时,他们常常会感到惊讶和困惑,因为他们在桌面上编写的程序无法运行他们的 Linux 嵌入式系统。

为了缓解这个问题,一些程序员选择在嵌入式应用程序中使用桌面系统版本。这通常不太适合,因为台式机系统通常具有风扇和硬盘驱动器,它们是故障点。更大的障碍是快速变化;拥有最快、最新技术的需求在短短六个月内就淘汰了桌面系统。围绕一个没有寿命的平台设计一个寿命长的嵌入式产品是灾难的根源。

即使桌面平台可以保证从现在起大约五年后,Linux 内核和相关的发行版也是移动的目标。内核和标准库在不断发展,发行版也在努力跟上步伐。内核补丁和库更新可能会使用户的程序无法运行。当工程师由于安全漏洞或其他问题而需要更新开发机器时,这种情况会更加严重。需要一种从标准桌面环境中抽象出嵌入式开发环境的方法。

关键不仅是要找到一个长寿命的嵌入式Linux硬件平台,还要找到一个长寿命的嵌入式Linux软件平台。熟练的嵌入式 Linux 程序员通常可以通过收集正确的库和工具版本,并适当地修改 Makefile 来创建嵌入式开发平台。即使成功,它也是一个次优的开发环境。

理想情况下,编译器不应该依赖于其主机的库和内核,而是依赖于更静态目标的工具链。软件平台应与其他平台、其他操作系统(OS)和其他语言兼容。软件开发工具包 (SDK) 应该基于具有广泛社区支持的工具链,以便即使驱动 SDK 的组织之一停止支持它,它也可以在其他组织的肩膀上生存。

进入日食

Eclipse 是一个开源的、可再发行的、跨平台的代码开发框架。它本身就支持 Java 和 C/C++ 及其 CDT 插件。它提供了许多由商业集成开发环境 (IDE) 反复改造的相同功能(语法突出显示、语言感知搜索、代码完成等),但不依赖于任何特定的工具集来完成它(见图1)。

图 1:商业集成开发环境 (IDE) 反复改造的许多相同功能(语法突出显示、语言感知搜索、代码完成等)但不依赖于任何特定的一组完成它的工具

poYBAGKpOAiAJVffAAVWoCjZxUA017.png

该解决方案的灵活性促使 EMAC 和其他嵌入式软件公司在 Eclipse 环境中构建开发平台。这种商业采用为嵌入式代码开发人员创造了事实上的标准化。OEM 可以编写与 GNU 工具链一起使用的 Eclipse 插件和项目,同时提供与运行 Windows 和 Linux 的众多商业平台的兼容性。

嵌入式 Java

EMAC 的原始 Eclipse 环境是为 SoM-400M 模块开发的,使用 Dallas/Maxim 的 DS400 TINI 处理器。该处理器的固件包含专有的嵌入式 JRE。通过为普通 JRE 环境编译类,用 TINI 特定 jar 替换核心 jar,然后将生成的类转换为 TINI 可执行文件来完成为系统构建 Java 代码。

为此,开发人员利用了 Eclipse 的原生 Ant 支持,它可以用来创建一种 XML 格式的高级 Java Makefile。Ant 然后使用 Eclipse 的 JDTcompileradaptor 类构建目标,这使得内部编译器可用于 Ant 的任务。Sourceforge TiniAnt 扩展然后执行从 Java 类到 TINI 可执行文件的最终转换。执行此操作所需的所有复杂声明都隐藏在顶级 build.properties 文件中,从而极大地降低了将 SoM-400M 编译为简单的标准 Ant 任务的复杂性。

交叉编译的 C

Eclipse 工具项目提供了一个开放的、可再发行的 C 开发插件,称为 CDT。除其他外,它还提供:

语法高亮

代码完成

即时构建

调试器集成(使用 GDB 的 MI 接口

它不提供实际的编译器、链接器和调试器二进制文件。这些特定于正在构建的目标,并且必须从外部源提供。然后可以通过编写 Eclipse 插件将它们集成到 Eclipse 中,或者更简单地说,通过使用“标准”make 项目并在 Makefile 中指定编译器。

清单 1 中的 Makefile 将在 EMAC Eclipse 环境中编译一个简单的 Hello World 示例项目。

SDKBASE=。./。./

CROSS=$(SDKBASE)gcc-4.0.0-i486-D/bin/i486-linux-

CC=$(CROSS)gcc

LIBFLAGS =-lc

#VERBOSE=-v

CFLAGS= -g

OFLAGS=-Wl

TARGET=hello

CFILES=hello.c

all: $(TARGET)

$(TARGET): objects

$(CC) $(VERBOSE) *.o $(OFLAGS) $(SLIBS)-o $(TARGET) $(LIBFLAGS)

objects: $(CFILES)

$(CC) $(VERBOSE) $(CFLAGS) -c $(CFILES)

clean:

$(RM) *.o *.gdb $(TARGET)

TARGET_IP=192.168.0.1

LOGIN=someuser

PASSWORD=somepassword

upload

wput $(TARGET) ftp://$(LOGIN):$(PASSWORD)@$(TARGET_IP)/。./。./tmp/$(TARGET)

与嵌入式 Java 环境一样,所有项目共有的复杂编译器/链接器标志隐藏在更高级别的文件中,然后包含在 SDK 中的所有 Makefile 中。

EMAC 通过针对目标开发操作系统的库构建免费可用的 GNU 交叉编译器,为其所有板提供交叉编译器。在 Linux 上,这些库是原生的;在 Windows 上使用 Cygwin 库。然后,我们“隐藏”实际的 Eclipse 可执行文件,并用一个批处理文件替换它,该批处理文件在 Eclipse 启动时临时添加所需的路径以支持 GNU 工具链。

调试

使用 GDB 和 GDBServer 进行调试以促进远程调试环境。为此,将编译后的可执行文件上传到 SBC 并启动 GDBServer 会话,侦听特定端口或串行终端。Eclipse 调试透视图允许用户通过指定要使用的连接参数以及为目标体系结构构建的 GDB 版本来调试应用程序。

“通过一点点集成,OEM 可以为其开发板创建一个强大的跨平台开发平台,该平台将在许多商业软件供应商采用的同一平台上运行。”

Debugging 透视图显示要调试的程序的源代码和生成的汇编代码。易于管理和监视断点和变量,以及逐行单步执行程序。源代码中的当前位置会自动突出显示。Eclipse 提供了一个图形化的调试环境,极大地简化了远程目标调试的过程。

目标沟通

在为嵌入式环境进行开发时,需要通过串行终端程序或使用 Telnet、SSH 或其他类似连接通过 TCP 与目标板建立连接。当这是通过命令行界面或图形前端完成时,程序员被迫不断地在窗口之间切换以同时监视连接和 IDE。

EMAC 通过集成 Eclipse 插件消除了这个问题,这些插件允许 SSH、Telnet 和终端连接都在 Eclipse 中。这允许程序员监控嵌入式目标板,就像它是本地文件系统一样,并直接发出命令,而无需离开 Eclipse 环境。

CVS

Eclipse 原生提供了强大的 CVS。通过设置 CVS 登录并向客户提供密码,开发人员可以确保他们始终可以访问最新版本的代码和产品的错误修复。

将 SDK 的软件补丁和全新组件上传到 CVS 服务器可为客户提供最新的软件支持,客户可以以图形方式查看文件中的差异,并使用已上传的部分、全部或不修补自己的 SDK 。

文档

Eclipse 提供了自己的本机浏览器,这有利于在工作区中创建 HTML 链接文档。通过这种方式,客户可以浏览 HTML 文档(类似于 Doxygen 和 Javadoc 生成的文档)。上下文相关的帮助也集成在 Eclipse 中(参见图 2),使新用户的工作效率更高。

图 2:上下文相关的帮助也集成在 Eclipse 中

poYBAGKpOBGARhhBAAlfBRIscJk220.png

该文档也可以直接链接回软件开发人员的网站,从而允许动态添加用户文档。用户可以使用选项卡从代码直接切换到文档,而不是一次浏览多个窗口。

集成工具,更好的开发

Eclipse 提供了一个环境,让 GNU 工具和商业工具可以一起发挥作用。只需稍加集成,OEM 就可以为其电路板创建一个强大的跨平台开发平台,该平台将在许多商业软件供应商采用的同一平台上运行。

在 Eclipse 框架内,EMAC 使用交叉编译来缓解将嵌入式开发环境从标准桌面环境中抽象出来的问题。调试是使用带有 Eclipse 窗口的 GDB 来完成的,用于调试器的输入和输出。与目标的通信也通过 Telnet、FTP、终端和 SSH 插件集成到 Eclipse 中。CVS 版本控制和 HTML 文档也是在 Eclipse 环境中完成的。

将上述所有开发功能整合到一个标准 IDE 中,形成了一个强大、高效的开发平台,可以与基于 Java 的小型 8 位控制器和用 C 编程的 32 位 Linux 服务器一起使用。

作者:Nathan Z. Gustavson,Eric Rossi

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5068

    文章

    19008

    浏览量

    302962
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • 服务器
    +关注

    关注

    12

    文章

    9010

    浏览量

    85160
收藏 人收藏

    评论

    相关推荐

    嵌入式软件开发需要些什么知识?

    嵌入式软件开发需要学习什么知识,对学习嵌入式来说就比较有条清晰的学习路线。嵌入式软件开发需要学习的知识有C语言,汇编,数据结构,
    发表于 10-14 09:19

    嵌入式软件开发需要学习什么?

    应用程序开发标准教程》华清远见出版2:《嵌入式Linux C语言程序设计基础教程》华清远见出版3:《Linux设备驱动开发详解》华清远见出版
    发表于 01-31 14:45

    嵌入式Linux软件开发的相关资料推荐

    嵌入式Linux软件开发(学习目标计划内容)
    发表于 11-16 08:17

    如何学习嵌入式软件开发

    1. 如何学习嵌入式软件开发嵌入式软件开发一定要结合开发板来学习,所有的知识都可以在开发板上
    发表于 02-11 07:33

    什么是嵌入式软件开发

    嵌入式软件开发又是指什么?   随着嵌入式软件系统结构越来越复杂,嵌入式软件
    发表于 04-20 08:43 8754次阅读

    嵌入式软件开发与Embedded-GIS

    1.嵌入式软件开发 市场现状 嵌入式操作系统 嵌入式软件开发特点 嵌入式
    发表于 02-28 10:39 36次下载

    ARM嵌入式软件开发

    ARM嵌入式软件开发ARM嵌入式软件开发ARM嵌入式软件开发
    发表于 01-15 17:29 64次下载

    嵌入式Linux与物联网软件开发C语言内核深度解析书籍的介绍

    嵌入式Linux与物联网软件开发——C语言内核深度解析 C语言是嵌入式Linux领域的主要开发
    发表于 05-15 18:10 8次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>与物联网<b class='flag-5'>软件开发</b>C语言内核深度解析书籍的介绍

    关于嵌入式Linux软件开发的常用知识

    C语言是嵌入式软件开发的基础,c佳佳在嵌入式领域也有一定的份额,但是很少,所以我们如果要做嵌入式软件开发,就得熟练掌握c语言语法。
    发表于 08-26 17:11 1441次阅读

    嵌入式软件开发入门

    1. 如何学习嵌入式软件开发嵌入式软件开发一定要结合开发板来学习,所有的知识都可以在开发
    发表于 12-07 17:21 17次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>入门

    简化SBC嵌入式Linux软件开发

      在 Eclipse 框架内,EMAC 使用交叉编译来缓解将嵌入式开发环境从标准桌面环境中抽象出来的问题。调试是使用带有 Eclipse 窗口的 GDB 来完成的,用于调试器的输入和输出。
    的头像 发表于 06-22 11:48 766次阅读
    <b class='flag-5'>简化</b><b class='flag-5'>SBC</b>的<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>软件开发</b>

    简化SBC嵌入式Linux软件开发

    或其他问题而需要更新开发机器时,这种情况会更加严重。需要一种从标准桌面环境中抽象出嵌入式开发环境的方法。
    的头像 发表于 06-28 11:45 748次阅读
    <b class='flag-5'>简化</b><b class='flag-5'>SBC</b>的<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>软件开发</b>

    简化SBC嵌入式Linux软件开发

      Eclipse 提供了一个环境,让 GNU 工具和商业工具可以一起发挥作用。只需稍加集成,OEM 就可以为其电路板创建一个强大的跨平台开发平台,该平台将在许多商业软件供应商采用的同一平台上运行。
    发表于 08-12 09:39 526次阅读
    <b class='flag-5'>简化</b><b class='flag-5'>SBC</b>的<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>软件开发</b>

    简化SBC嵌入式Linux软件开发

    如今,大多数拥有电气工程或计算机科学学位的大学程序员都相当精通Linux桌面平台上的编程。当这些程序员需要对嵌入式Linux系统进行编程时,他们经常感到惊讶和困惑,因为他们在桌面上编写的程序将无法运行他们的
    的头像 发表于 10-18 09:14 1105次阅读
    <b class='flag-5'>简化</b><b class='flag-5'>SBC</b>的<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>软件开发</b>

    嵌入式软件开发软件开发的区别

    嵌入式软件开发软件开发是两个不同的概念,它们在一些关键方面有着明显的区别。嵌入式软件开发是指开发
    的头像 发表于 01-22 15:27 2159次阅读