Embedded
我可以在我的開發機器上使用 chroot 來建構一個在嵌入式 linux 安裝上執行的應用程序嗎?
我正在嘗試開發一個在嵌入式 linux 安裝上執行的應用程序。它附帶的 libc 版本比我在開發過程中使用的舊版本。如果我要在我的開發機器上創建一個 chroot 環境,從我的嵌入式設備複製庫,以使 chroot 環境鏡像設備然後建構應用程序,那麼在設備上執行是否安全?我的開發機器和設備都是 x86 32 位,所以我認為我不需要交叉編譯。
此外,我編寫的應用程序是否需要連結到其他庫(設備上不存在)我是否可以安全地在 chroot 的開發機器上建構這些庫,然後將它們複製到設備以進行應用程序部署?
從我對這個主題所做的所有閱讀看來,我可以確保所有內容正確連結在一起的唯一方法是在設備上實際建構應用程序,但這不是一個選項,因為它是最小安裝並且不會附帶 gcc 安裝。
這通常會起作用。我只是試一試,但您需要注意以下幾點:
- 建構時,需要為目標的 CPU 架構和功能建構二進製文件。鑑於它們都是 x86,這將有很大幫助,但您仍然需要小心使用 sse3 等處理器功能。如果您建構的二進製文件利用了目標安裝中不存在的功能,它會贏不行。
- 您的建構系統的核心可能會對您的 chroot 環境的行為產生一些影響。您不能為 chroot 與主機系統使用不同的核心,因此您可能會遇到兩者之間的差異。應用程序通常最終通過 libc 與核心通信,它提供了一個標準介面,可以幫助防止此類問題。
- 在某種程度上,您的 libc 需要與您的核心兼容。嵌入式系統中的 libc 可能與核心不完全兼容,具體取決於介面更改;但是,如果 libc 早於您的核心,這不太可能成為問題(舊的核心介面更有可能繼續支持舊的二進製文件)。
- 您的主機系統的服務將對您的嵌入式系統可見。這對任何 chroot 來說都很常見,因為它們共享程序表、網路介面等。
- 對於您的“其他庫”,您可以使用靜態連結將它們連結到您的應用程序。然後,您可以避免將庫部署到設備。你的旅費可能會改變。
您可以考慮使用虛擬機來代替。它不一定會消除所有問題(如處理器功能/標誌),但您可以擁有一個與您的嵌入式系統更匹配的環境。也就是說,您可以使用相同的核心,執行相同的引導過程,避免被主機服務污染……
請注意,如果您在 chroot 中設置了建構工具鏈,您可能需要考慮如何將新文件複製回嵌入式系統;您可能不想複製工具鏈文件(gcc 等)。
嘗試設置它並編寫一個測試應用程序,建構一些庫或其他任何東西,看看它們在移動到嵌入式系統時的工作情況。