使用 multistrap 產生 Linux 建置軟體

使用 multistrap 產生 Linux 建置軟體

我正在開發一個帶有 ARM CPU 和使用 multistrap 構建的 Debian Jessie 的嵌入式設備。看來我需要在該系統中安裝稍微修補過的 ModemManager 版本,我要求的是有關如何執行此操作的任何指導。

到目前為止我所嘗試的是chroot到由multistrap創建的rootfs,使用apt-get下載ModemManager的原始程式碼並建置它chroot。到目前為止,由於我無法滿足的依賴關係,我什至還沒有通過配置腳本。

需要修補以解決 ModemManager 的已知問題,即它可能會透過掃描數據機的序列埠來混淆硬體。有一種方法可以解決這個問題,即透過 udev 規則將裝置列入黑名單,但在這種情況下,序列埠是 tty 子系統的一部分,不支援將其列入黑名單。我已經在 ModemManager 的源代碼中檢查過這一點。

如果有的話,我也非常願意尋求更簡單的方法來解決這個問題,但到目前為止我還沒有註意到它們。

答案1

儘管這個具體問題很老了,但在使用 multistrap 時將某些軟體的修改版本添加到 multistrap 生成的 debian rootfs 是一個常見問題。

我不會將交叉編譯與multistrap混合在一起,因為在multistrap產生的chrootfs中編譯軟體太費力了。

相反,我會在容易的地方編譯修改後的軟體。您可能已經擁有適合您的目標 ARM 架構的交叉編譯環境,但如果沒有,目前 IMO(以及 2016 年)最簡單的方法是使用單板 Linux/ARM 計算機,例如具有所需目標作業系統的 Raspberry Pi ,在那裡安裝所需的建置工具並在那裡編譯修改後的軟體。不需要設定交叉編譯,因為這是使用本機編譯。編譯後,將建立的二進位檔案複製到 PC 上的 multistrap 環境中。

正常運行 multistrap,在它執行並且您在 chroot 中配置了所有套件之後,只需將修改後的二進位檔案複製到 rootfs 中,然後再在目標硬體上使用 rootfs 即可。

這裡的「二進位」可能只是指已編譯的可執行文件,但它也可以指自訂的 .deb 套件(最後在 chroot 中使用 dpkg 安裝,而不是僅僅複製)。後者可以為您的修改提供更多保護,因為您也可以修改 .deb 版本號,這樣apt update; apt upgrade如果您的嵌入式系統可以在運行時檢索軟體更新,您的修改就不會在以後恢復。

相關內容