我可以在我的開發機器上使用 chroot 來建立在嵌入式 Linux 安裝上運行的應用程式嗎?

我可以在我的開發機器上使用 chroot 來建立在嵌入式 Linux 安裝上運行的應用程式嗎?

我正在嘗試開發一個在嵌入式 Linux 安裝上運行的應用程式。它附帶的 libc 版本比我的開發機器上的版本舊。如果我要在開發電腦上建立 chroot 環境,從嵌入式設備複製庫,使 chroot 環境鏡像設備,然後建立應用程序,在設備上運行是否安全?我的開發機器和設備都是 x86 32 位,所以我認為我不需要交叉編譯。

另外,我編寫的應用程式是否應該需要連結到其他庫(裝置上不存在),我可以安全地在 chroot 中的開發電腦上建立這些庫,然後將它們複製到裝置以進行應用程式部署嗎?

從我對此主題所做的所有閱讀來看,確保所有內容正確鏈接在一起的唯一方法是在設備上實際構建應用程序,但這不是一個選項,因為它是最小安裝,並且不附帶 gcc 安裝。

答案1

這通常會起作用。我只是想嘗試一下,但您需要注意以下幾點:

  • 建置時,需要針對目標的 CPU 架構和功能建置二進位檔案。鑑於它們都是 x86,這將有很大幫助,但您仍然需要小心使用 sse3 等處理器功能。

  • 您的建置系統的核心可能會對您的 chroot 環境的行為產生一些影響。您不能對 chroot 與主機系統使用不同的內核,因此您可能會遇到兩者之間的差異。應用程式通常最終會透過 libc 與內核進行通信,它提供了一個標準接口,可以幫助防止此類問題。

  • 您的 libc 需要在某種程度上與您的核心相容。您的嵌入式系統中的 libc 可能與您的核心不相容,具體取決於介面的變更;但是,如果 libc 早於您的內核,則這不太可能成為問題(舊的內核介面更有可能保留以支援舊的二進位)。

  • 您的主機系統的服務將對您的嵌入式系統可見。這對於任何 chroot 來說都很常見,因為它們共享進程表、網路介面等。

  • 對於“附加庫”,您可以使用靜態連結將它們連結到您的應用程式。然後您可以避免將庫部署到設備。你的旅費可能會改變。

您可以考慮使用虛擬機器來執行此操作。它不一定會消除所有問題(例如處理器功能/標誌),但您可以擁有一個與您的嵌入式系統更緊密匹配的環境。也就是說,您可以使用相同的內核,運行相同的引導過程,避免受到主機服務的污染...

請注意,如果您在 chroot 內設定建置工具鏈,您可能需要考慮如何將新檔案複製回嵌入式系統;您可能不想複製工具鏈檔案(gcc 等)。

嘗試設定它並編寫一個測試應用程序,建立一些庫或其他內容,然後看看它們在移動到嵌入式系統時的工作情況如何。

相關內容