RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡化SBC的嵌入式Linux軟件開發(fā)

星星科技指導(dǎo)員 ? 來源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Nathan Z. Gustavson, ? 2022-10-18 09:14 ? 次閱讀

作者:Nathan Z. Gustavson,Eric Rossi

如今,大多數(shù)擁有電氣工程或計(jì)算機(jī)科學(xué)學(xué)位的大學(xué)程序員都相當(dāng)精通Linux桌面平臺(tái)上的編程。當(dāng)這些程序員需要對(duì)嵌入式Linux系統(tǒng)進(jìn)行編程時(shí),他們經(jīng)常感到驚訝和困惑,因?yàn)樗麄冊谧烂嫔暇帉懙某绦驅(qū)o法運(yùn)行他們的Linux嵌入式系統(tǒng)。

為了緩解這個(gè)問題,一些程序員選擇在嵌入式應(yīng)用程序中使用桌面系統(tǒng)的版本。這通常不太合適,因?yàn)榕_(tái)式機(jī)系統(tǒng)通常具有風(fēng)扇和硬盤驅(qū)動(dòng)器,它們是故障點(diǎn)。一個(gè)更大的障礙是快速變化;需要擁有最快,最新的技術(shù),在短短六個(gè)月內(nèi)淘汰了桌面系統(tǒng)。圍繞沒有壽命的平臺(tái)設(shè)計(jì)長壽命的嵌入式產(chǎn)品是一場災(zāi)難。

即使桌面平臺(tái)可以保證從現(xiàn)在起大約五年后,Linux內(nèi)核和相關(guān)發(fā)行版也是移動(dòng)的目標(biāo)。內(nèi)核和標(biāo)準(zhǔn)庫在不斷發(fā)展,發(fā)行版也在努力跟上步伐。內(nèi)核補(bǔ)丁和庫更新可能會(huì)使用戶的程序無法運(yùn)行。當(dāng)工程師由于安全漏洞或其他問題而需要更新開發(fā)計(jì)算機(jī)時(shí),這種情況會(huì)加劇。需要一種將嵌入式開發(fā)環(huán)境從標(biāo)準(zhǔn)桌面環(huán)境中抽象出來的方法。

關(guān)鍵不僅在于找到一個(gè)長壽命的嵌入式Linux硬件平臺(tái),更是一個(gè)長壽命的嵌入式Linux軟件平臺(tái)。有成就的嵌入式Linux程序員通??梢酝ㄟ^收集正確的庫和工具版本并適當(dāng)?shù)匦薷腗akefile來創(chuàng)建嵌入式開發(fā)平臺(tái)。即使成功,它也是一個(gè)次優(yōu)的開發(fā)環(huán)境。

理想情況下,編譯器不應(yīng)依賴于其主機(jī)的庫和內(nèi)核,而應(yīng)依賴于更靜態(tài)目標(biāo)的工具鏈。軟件平臺(tái)應(yīng)與其他平臺(tái)、其他操作系統(tǒng) (OS) 和其他語言兼容。軟件開發(fā)工具包(SDK)應(yīng)該基于具有廣泛社區(qū)支持的工具鏈,以便即使推動(dòng)SDK的組織之一停止支持它,它也能在其他人的肩膀上生存。

輸入日食

Eclipse 是一個(gè)開源的、可再發(fā)行的、跨平臺(tái)的、用于代碼開發(fā)的框架。它本身支持 Java,并且 C/C++及其 CDT 插件。它提供了許多由商業(yè)集成開發(fā)環(huán)境 (IDE) 一遍又一遍地重新設(shè)計(jì)的相同功能(語法突出顯示、語言感知搜索、代碼完成等),但不依賴于任何一組特定的工具來完成它(請參見圖 1)。

圖 1:許多由商業(yè)集成開發(fā)環(huán)境(IDE)一遍又一遍地重新發(fā)明的相同功能(語法突出顯示,語言感知搜索,代碼完成等),但不依賴于任何一組特定的工具來完成它

poYBAGNN_kSAJA5vAARfQV6e5BY704.png

該解決方案的靈活性促使 EMAC 和其他嵌入式軟件公司在 Eclipse 環(huán)境中構(gòu)建開發(fā)平臺(tái)。這種商業(yè)采用為嵌入式代碼開發(fā)人員創(chuàng)造了事實(shí)上的標(biāo)準(zhǔn)化。OEM 可以編寫與 GNU 工具鏈配合使用的 Eclipse 插件和項(xiàng)目,同時(shí)提供與同時(shí)運(yùn)行 Windows 和 Linux 的眾多商業(yè)平臺(tái)的兼容性。

嵌入式爪哇

EMAC的原始Eclipse環(huán)境是為SoM-400M模塊開發(fā)的,使用來自達(dá)拉斯/馬克西姆的DS400 TINI處理器。該處理器的固件包含專有的嵌入式 JRE。為系統(tǒng)構(gòu)建 Java 代碼是通過編譯普通 JRE 環(huán)境的類,用特定于 TINI 的 jar 替換核心 jar,然后將生成的類轉(zhuǎn)換為 TINI 可執(zhí)行文件來完成的。

為此,開發(fā)人員利用了 Eclipse 的本機(jī) Ant 支持,該支持可用于創(chuàng)建一種 XML 格式的高級(jí) Java 生成文件。然后,Ant 使用 Eclipse 的 JDT 編譯器適配器類構(gòu)建目標(biāo),這使得內(nèi)部編譯器可用于 Ant 的任務(wù)。然后,源代碼鍛造的 TiniAnt 擴(kuò)展執(zhí)行從 Java 類到 TINI 可執(zhí)行文件的最終轉(zhuǎn)換。執(zhí)行此操作所需的所有復(fù)雜聲明都隱藏在頂級(jí) build.properties 文件中,從而大大降低了 SoM-400M 的編譯復(fù)雜性,使其成為簡單的標(biāo)準(zhǔn) Ant 任務(wù)。

交叉編譯 C

Eclipse 工具項(xiàng)目提供了一個(gè)開放的、可再發(fā)行的 C 開發(fā)插件,稱為 CDT。除其他事項(xiàng)外,它還提供:

語法突出顯示

代碼完成

動(dòng)態(tài)構(gòu)建

調(diào)試器集成(使用 GDB 的 MI 接口

它不提供實(shí)際的編譯器、鏈接器和調(diào)試器二進(jìn)制文件。這些特定于要構(gòu)建的目標(biāo),并且必須從外部源提供。然后,可以通過編寫 Eclipse 插件,或者更簡單地說,通過使用“標(biāo)準(zhǔn)”生成項(xiàng)目并在 Makefile 中指定編譯器,將它們集成到 Eclipse 中。

清單 1 中的生成文件將在 EMAC 日食環(huán)境中編譯一個(gè)簡單的“你好世界”示例項(xiàng)目。

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 環(huán)境一樣,所有項(xiàng)目通用的復(fù)雜編譯器/鏈接器標(biāo)志都隱藏在更高級(jí)別的文件中,然后由 SDK 中的所有 Makefile 包含該文件。

EMAC 通過針對(duì)目標(biāo)開發(fā)操作系統(tǒng)的庫構(gòu)建免費(fèi)提供的 GNU 交叉編譯器,為其所有板提供交叉編譯器。在Linux上,這些庫是原生的;在視窗上,使用天鵝庫。然后,我們“隱藏”實(shí)際的 Eclipse 可執(zhí)行文件,并將其替換為一個(gè)批處理文件,該文件在 Eclipse 啟動(dòng)時(shí)臨時(shí)添加支持 GNU 工具鏈所需的路徑。

調(diào)試

使用 GDB 和 GDB 服務(wù)器進(jìn)行調(diào)試,以方便遠(yuǎn)程調(diào)試環(huán)境。為此,將編譯后的可執(zhí)行文件上載到 SBC,并啟動(dòng) GDBServer 會(huì)話偵聽特定端口或串行終端。Eclipse 調(diào)試透視圖允許用戶通過指定要使用的連接參數(shù)以及為目標(biāo)體系結(jié)構(gòu)構(gòu)建的 GDB 版本來調(diào)試應(yīng)用程序。

“調(diào)試”透視顯示要調(diào)試的程序的源代碼和生成的程序集代碼。它易于管理和監(jiān)視斷點(diǎn)和變量,并且可以逐行逐步完成程序。源代碼中的當(dāng)前位置會(huì)自動(dòng)突出顯示。Eclipse 提供了一個(gè)圖形化調(diào)試環(huán)境,極大地簡化了遠(yuǎn)程目標(biāo)調(diào)試的過程。

目標(biāo)溝通

在針對(duì)嵌入式環(huán)境進(jìn)行開發(fā)時(shí),需要通過串行終端程序或通過 TCP 使用 Telnet、SSH 或其他類似連接與目標(biāo)板建立連接。當(dāng)通過命令行界面或圖形前端完成此操作時(shí),程序員被迫不斷在窗口之間切換,以同時(shí)監(jiān)視連接和IDE。

EMAC 通過集成 Eclipse 插件來消除此問題,這些插件允許在 Eclipse 中實(shí)現(xiàn) SSH、遠(yuǎn)程登錄和終端連接。這允許程序員像監(jiān)控本地文件系統(tǒng)一樣監(jiān)控嵌入式目標(biāo)板,并直接發(fā)出命令,而無需離開 Eclipse 環(huán)境。

CVS

日食本身提供了一個(gè)強(qiáng)大的 CVS。通過設(shè)置 CVS 登錄名并為客戶提供密碼,開發(fā)人員可以確保他們始終可以訪問最新版本的代碼和產(chǎn)品的錯(cuò)誤修復(fù)。

將 SDK 的軟件補(bǔ)丁和全新組件上傳到 CVS 服務(wù)器上可為客戶提供最新的軟件支持,客戶能夠以圖形方式查看文件的差異,并使用部分、全部或全部上傳的內(nèi)容修補(bǔ)自己的 SDK。

文檔

Eclipse 提供了自己的本機(jī)瀏覽器,這有利于在工作區(qū)中創(chuàng)建 HTML 鏈接的文檔。通過這種方式,客戶可以瀏覽 HTML 文檔(類似于由多克西根和爪哇生成的文檔)。Eclipse 中還集成了上下文相關(guān)幫助(參見圖 2),使新用戶能夠提高工作效率。

圖 2:上下文相關(guān)幫助也集成在 Eclipse 中

poYBAGNN_k2AUkQXAAeyDXOyrh0549.png

該文檔也可以鏈接回軟件開發(fā)人員的網(wǎng)站,從而允許動(dòng)態(tài)添加用戶文檔。用戶可以使用選項(xiàng)卡直接從代碼切換到文檔,而不是一次瀏覽多個(gè)窗口。

集成工具,更好的開發(fā)

Eclipse 提供了一個(gè) GNU 工具和商業(yè)工具可以一起玩的環(huán)境。通過少量集成,OEM可以為他們的電路板創(chuàng)建一個(gè)強(qiáng)大的跨平臺(tái)開發(fā)平臺(tái),該平臺(tái)將在許多商業(yè)軟件供應(yīng)商采用的同一平臺(tái)上運(yùn)行。

在 Eclipse 框架中,EMAC 使用交叉編譯來緩解將嵌入式開發(fā)環(huán)境從標(biāo)準(zhǔn)桌面環(huán)境抽象出來的問題。調(diào)試是使用帶有 Eclipse 窗口的 GDB 完成的,用于調(diào)試器的輸入和輸出。與目標(biāo)的通信也通過遠(yuǎn)程登錄、FTP、終端和 SSH 插件集成到 Eclipse 中。CVS 版本控制和 HTML 文檔也在 Eclipse 環(huán)境中完成。

將上述所有開發(fā)功能整合到標(biāo)準(zhǔn)IDE中,形成了一個(gè)功能強(qiáng)大、高效的開發(fā)平臺(tái),可以與基于Java的小型8位控制器和用C編程的32位Linux服務(wù)器一起使用。這就是日食的力量。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19104

    瀏覽量

    304796
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209323
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    學(xué)嵌入式軟件開發(fā)需要些什么知識(shí)?

    嵌入式軟件開發(fā)需要學(xué)習(xí)什么知識(shí),對(duì)學(xué)習(xí)嵌入式來說就比較有條清晰的學(xué)習(xí)路線。嵌入式軟件開發(fā)需要學(xué)習(xí)的知識(shí)有C語言,匯編,數(shù)據(jù)結(jié)構(gòu),
    發(fā)表于 10-14 09:19

    嵌入式軟件開發(fā)需要學(xué)習(xí)什么?

    應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程》華清遠(yuǎn)見出版2:《嵌入式Linux C語言程序設(shè)計(jì)基礎(chǔ)教程》華清遠(yuǎn)見出版3:《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》華清遠(yuǎn)見出版
    發(fā)表于 01-31 14:45

    嵌入式Linux軟件開發(fā)的相關(guān)資料推薦

    嵌入式Linux軟件開發(fā)(學(xué)習(xí)目標(biāo)計(jì)劃內(nèi)容)
    發(fā)表于 11-16 08:17

    如何學(xué)習(xí)嵌入式軟件開發(fā)

    1. 如何學(xué)習(xí)嵌入式軟件開發(fā)嵌入式軟件開發(fā)一定要結(jié)合開發(fā)板來學(xué)習(xí),所有的知識(shí)都可以在開發(fā)板上
    發(fā)表于 02-11 07:33

    什么是嵌入式軟件開發(fā)

    嵌入式軟件開發(fā)又是指什么?   隨著嵌入式軟件系統(tǒng)結(jié)構(gòu)越來越復(fù)雜,嵌入式軟件
    發(fā)表于 04-20 08:43 ?8773次閱讀

    嵌入式軟件開發(fā)與Embedded-GIS

    1.嵌入式軟件開發(fā) 市場現(xiàn)狀 嵌入式操作系統(tǒng) 嵌入式軟件開發(fā)特點(diǎn) 嵌入式
    發(fā)表于 02-28 10:39 ?36次下載

    ARM嵌入式軟件開發(fā)

    ARM嵌入式軟件開發(fā)ARM嵌入式軟件開發(fā)ARM嵌入式軟件開發(fā)
    發(fā)表于 01-15 17:29 ?65次下載

    嵌入式Linux與物聯(lián)網(wǎng)軟件開發(fā)C語言內(nèi)核深度解析書籍的介紹

    嵌入式Linux與物聯(lián)網(wǎng)軟件開發(fā)——C語言內(nèi)核深度解析 C語言是嵌入式Linux領(lǐng)域的主要開發(fā)
    發(fā)表于 05-15 18:10 ?8次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>與物聯(lián)網(wǎng)<b class='flag-5'>軟件開發(fā)</b>C語言內(nèi)核深度解析書籍的介紹

    關(guān)于嵌入式Linux軟件開發(fā)的常用知識(shí)

    C語言是嵌入式軟件開發(fā)的基礎(chǔ),c佳佳在嵌入式領(lǐng)域也有一定的份額,但是很少,所以我們?nèi)绻?b class='flag-5'>嵌入式軟件開發(fā),就得熟練掌握c語言語法。
    發(fā)表于 08-26 17:11 ?1448次閱讀

    嵌入式軟件開發(fā)入門

    1. 如何學(xué)習(xí)嵌入式軟件開發(fā)嵌入式軟件開發(fā)一定要結(jié)合開發(fā)板來學(xué)習(xí),所有的知識(shí)都可以在開發(fā)
    發(fā)表于 12-07 17:21 ?17次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>入門

    簡化SBC嵌入式Linux軟件開發(fā)

      Eclipse 提供了一個(gè)環(huán)境,讓 GNU 工具和商業(yè)工具可以一起發(fā)揮作用。只需稍加集成,OEM 就可以為其電路板創(chuàng)建一個(gè)強(qiáng)大的跨平臺(tái)開發(fā)平臺(tái),該平臺(tái)將在許多商業(yè)軟件供應(yīng)商采用的同一平臺(tái)上運(yùn)行。
    的頭像 發(fā)表于 06-15 09:36 ?1373次閱讀
    <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'>軟件開發(fā)</b>

    簡化SBC嵌入式Linux軟件開發(fā)

      在 Eclipse 框架內(nèi),EMAC 使用交叉編譯來緩解將嵌入式開發(fā)環(huán)境從標(biāo)準(zhǔn)桌面環(huán)境中抽象出來的問題。調(diào)試是使用帶有 Eclipse 窗口的 GDB 來完成的,用于調(diào)試器的輸入和輸出。
    的頭像 發(fā)表于 06-22 11:48 ?791次閱讀
    <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'>軟件開發(fā)</b>

    簡化SBC嵌入式Linux軟件開發(fā)

    或其他問題而需要更新開發(fā)機(jī)器時(shí),這種情況會(huì)更加嚴(yán)重。需要一種從標(biāo)準(zhǔn)桌面環(huán)境中抽象出嵌入式開發(fā)環(huán)境的方法。
    的頭像 發(fā)表于 06-28 11:45 ?763次閱讀
    <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'>軟件開發(fā)</b>

    簡化SBC嵌入式Linux軟件開發(fā)

      Eclipse 提供了一個(gè)環(huán)境,讓 GNU 工具和商業(yè)工具可以一起發(fā)揮作用。只需稍加集成,OEM 就可以為其電路板創(chuàng)建一個(gè)強(qiáng)大的跨平臺(tái)開發(fā)平臺(tái),該平臺(tái)將在許多商業(yè)軟件供應(yīng)商采用的同一平臺(tái)上運(yùn)行。
    發(fā)表于 08-12 09:39 ?531次閱讀
    <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'>軟件開發(fā)</b>

    嵌入式軟件開發(fā)軟件開發(fā)的區(qū)別

    嵌入式軟件開發(fā)軟件開發(fā)是兩個(gè)不同的概念,它們在一些關(guān)鍵方面有著明顯的區(qū)別。嵌入式軟件開發(fā)是指開發(fā)
    的頭像 發(fā)表于 01-22 15:27 ?2268次閱讀
    RM新时代网站-首页