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

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

3天内不再提示

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

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

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

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

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

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

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

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

进入日食

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

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

poYBAGKykSmAY5kwAAVdvF7EaMM414.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 版本来调试应用程序。

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 中

poYBAGKykTKAYH0oAAljVhF9L_0603.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

审核编辑:郭婷

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

    关注

    5082

    文章

    19118

    浏览量

    305088
  • Linux
    +关注

    关注

    87

    文章

    11303

    浏览量

    209440
  • 服务器
    +关注

    关注

    12

    文章

    9149

    浏览量

    85401
收藏 人收藏

    评论

    相关推荐

    一文了解嵌入式软件开发的对象

    以前应用场景很单一,嵌入式开发可能谈不上面向对象开发。但现在,做嵌入式开发,没有面向对象开发,你就有点落伍了。 本文结合个人经验和周立功《抽象接口技术和组件
    的头像 发表于 11-15 10:31 338次阅读
    一文了解<b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>的对象

    你认为嵌入式软件开发的尽头是什么?

    嵌入式软件开发的“尽头”是一个富有哲理且多维度的概念,因为它不仅关乎技术发展的极限,还涉及到行业应用、市场需求、技术融合与创新等多个方面。从几个不同的视角来看
    的头像 发表于 09-18 09:42 465次阅读
    你认为<b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>的尽头是什么?

    嵌入式开发常用软件有哪些?

    嵌入式开发常用软件有哪些? 对于初学嵌入式的朋友们,会想要了解嵌入式软件开发常用的软件有些,有什
    发表于 09-09 15:22

    嵌入式linux开发的基本步骤有哪些?

    嵌入式Linux开发是一个复杂的过程,涉及到硬件选择、操作系统移植、驱动开发、应用程序开发等多个方面。以下是
    的头像 发表于 09-02 09:11 490次阅读

    嵌入式linux开发板怎么操作

    嵌入式Linux开发板是一种基于Linux操作系统的嵌入式系统开发平台。它通常包括一个处理器、内
    的头像 发表于 09-02 09:09 385次阅读

    嵌入式linux开发板芯片的工作原理

    了处理器、存储器、输入/输出接口等硬件资源的嵌入式系统开发平台。它通常采用Linux操作系统作为底层软件平台,提供了丰富的开发工具和库函数,
    的头像 发表于 09-02 09:07 391次阅读

    节点、跨平台开发,AWFlow让嵌入式开发变得更简单

    国产化趋势对嵌入式软件开发构成挑战,导致软件移植和适配需求激增,影响开发效率。AWFlow软件通过节点化和跨平台
    的头像 发表于 08-02 08:25 371次阅读
    节点<b class='flag-5'>式</b>、跨平台<b class='flag-5'>开发</b>,AWFlow让<b class='flag-5'>嵌入式开发</b>变得更简单

    嵌入式软件开发与AI整合

    嵌入式软件开发与AI整合是当前技术发展的重要趋势之一。随着人工智能技术的快速发展,嵌入式系统越来越多地集成了AI算法,以实现更复杂的智能功能。以下是关于嵌入式
    的头像 发表于 07-31 09:25 708次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>与AI整合

    嵌入式软件开发招聘

    本帖最后由 jf_19082533 于 2024-7-26 13:56 编辑 寻求:嵌入式软件工程师 要求:3年以上开发经验,音视频领域应用层开发 地址:北京市昌平区 邮箱:10
    发表于 07-26 13:44

    AMD Vitis™ Embedded嵌入式软件开发套件的功能和特性概述

    Vitis Embedded 是一款独立的嵌入式软件开发套件,主要用于为 AMD 自适应 SoC 和 FPGA 中的 AMD 嵌入式处理子系统(基于 ARM 的子系统和 AMD MicroBlaze)
    的头像 发表于 04-08 10:50 926次阅读
    AMD Vitis™ Embedded<b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>套件的功能和特性概述

    嵌入式软件设计的原则分享

    嵌入式软件开发如果具有更好的阅读性、扩展性以及维护性,就需要考虑很多因素。今天给大家分享几个嵌入式软件设计的原则。
    发表于 02-25 10:54 685次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>设计的原则分享

    嵌入式软件开发应该掌握哪些知识?

    知识点学习 熟悉 Linux 的基本使用对于嵌入式软件开发至关重要。包括文件系统的管理、用户权限的控制、软件包管理等。嵌入式开发人员需要能够
    发表于 02-19 11:23

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

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

    嵌入式Linux开发的三种方式

    嵌入式Linux开发主要有三种方式:裸机开发、SDK开发和驱动开发
    的头像 发表于 01-22 14:22 971次阅读

    基于功能安全的汽车嵌入式软件单元验证技术研究

    随着汽车嵌入式软件功能的不断叠加,软件复杂性不断提升,对汽车嵌入式软件的安全性提出了更高要求,基于功能安全的
    的头像 发表于 01-07 11:27 1053次阅读
    基于功能安全的汽车<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>单元验证技术研究