ubuntu製作chroot系統鏡像

来源:https://www.cnblogs.com/magicdmer/archive/2023/08/18/17640427.html
-Advertisement-
Play Games

這裡的使用場景是在ubuntu x64上編譯arm程式,需要一個開發環境,而最省心的方式就是自己做一個arm環境的chroot鏡像,然後自由用apt-get安裝依賴,然後編譯程式。所以這裡就以製作arm鏡像為例。 在我們開始之前,我們需要瞭解一下ARM的幾種架構: armel(abi):這個是老架構 ...


這裡的使用場景是在ubuntu x64上編譯arm程式,需要一個開發環境,而最省心的方式就是自己做一個arm環境的chroot鏡像,然後自由用apt-get安裝依賴,然後編譯程式。所以這裡就以製作arm鏡像為例。

在我們開始之前,我們需要瞭解一下ARM的幾種架構:
armel(abi):這個是老架構,之前的arm硬體沒有浮點處理單元,所以採用軟體模擬的方式進行浮點計算,相容新架構
armhf:這個是新架構,有了獨立的硬體浮點處理單元,這個不相容老架構
arm64:這個就直接用了新架構,沒有el和hf之分了
kernel、rootfs和app編譯的時候,指定的必須保持一致才行

1、首先我們需要安裝相關程式來支持chroot環境

sudo apt-get install qemu-user-static

如果你有現成的鏡像,那麼只需要安裝這個就行了,然後你就可以chroot進去了

2、接著我們需要安裝製作鏡像所需要的工具環境

sudo apt-get install binfmt-support debootstrap qemu

這裡最主要是這個debootstrap,另外兩個看著辦

3、然後我們利用debootstrap來製作鏡像
首先我們建立一個文件夾

sudo mkdir /opt/ubuntu-arm-64

然後我們運行debootstrap來聯網下載對應的ubuntu版本基礎鏡像來製作我們的鏡像

debootstrap --arch=arm64 --foreign trusty /opt/ubuntu-arm-64 http://ports.ubuntu.com/

這裡的trusty是ubuntu 14.04的版本代號,關於debootstrap支持的版本代號,可以在debootstrap的腳本目錄下查看,路徑為 /usr/share/debootstrap/scripts/ 這下麵有很多以ubuntu代號命名的文件

4、接著我們就等待3的操作完成,然後拷貝qemu-aarch64-static 到我們鏡像的bin目錄

cp  /usr/bin/qemu-aarch64-static  /opt/ubuntu-arm-64/usr/bin/

這裡要註意了,是aarch64,如果你是armhf環境,那麼請使用【qemu-arm-static】接著我們chroot進去

sudo chroot /opt/ubuntu-arm-64

這一步的時候,你可能會遇到 "i have no name" 的情況,不要急,我們來利用debootstrap對我們的鏡像進行初始化操作

debootstrap/debootstrap --second-stage

如果沒找到debootstrap腳本,那麼請檢查步驟3中遇到的錯誤,可能是mount proc失敗。
然後等待初始化完成,你就會發現一切ok了。

5、接著我們來編輯apt的源,方便我們安裝其他依賴

deb http://ports.ubuntu.com/ trusty main restricted universe multiverse
deb-src http://ports.ubuntu.com/ trusty main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty main universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty main universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-updates main universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-updates main universe

這裡的trusty根據你版本的不同,可以換

6、接著就是關於chroot掛載真實系統設備到我們的虛擬系統,這個需要在chroot之前調用掛載,作用是比如你想多線程編譯 make -j4 那麼你就需要運行下麵的腳本,掛載設備

#!/bin/bash
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -t devpts pts dev/pts/

參考:
http://www.360doc.com/showweb/0/0/804170657.aspx
https://wiki.debian.org/EmDebian/CrossDebootstrap
https://linux.cn/article-4936-1.html

~ 個人簽名: 無論發生什麼都不要停下,無論到什麼時候都要繼續前行,要一直走下去,直到生命終止的那一刻!~
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • > 本文以一個通過正常註冊攔截器流程註冊攔截器失敗的實際場景,來帶領大家閱讀源碼,體會Spring的HandlerInterceptor攔截器整個工作流程 ### 簡單認識 org.springframework.web.servlet.HandlerInterceptor是Spring框架中的一個 ...
  • # 【狂神說Java】Java零基礎學習筆記-面向對象 ## 面向對象01:什麼是面向對象 ### 面向過程&面向對象 - 面向過程思想 - 步驟清晰簡單,第一步做什麼,第二步做什麼.... - 面對過程適合處理一些較為簡單的問題 - 面向對象思想 - 物以類聚,**分類**的思維模式,思考問題首先 ...
  • **即時編譯器優化技術一覽:** ![](https://img2023.cnblogs.com/blog/3256961/202308/3256961-20230816153001309-163136082.png) ![](https://img2023.cnblogs.com/blog/325 ...
  • # Unity 如何獲取Texture 的記憶體大小 在Unity中,要獲取Texture的記憶體文件大小,可以使用UnityEditor.TextureUtil類中的一些函數。這些函數提供了獲取存儲記憶體大小和運行時記憶體大小的方法。由於UnityEditor.TextureUtil是一個內部類,我們需要 ...
  • ## 引言 今天在做一個設置文件夾路徑的功能,就是一個文本框,加個按鈕,點擊按鈕,彈出 `FolderBrowserDialog` 再選擇文件夾路徑,簡單做法,可以直接 `StackPanel` 橫向放置一個 `TextBox` 和一個 `Image Button`,然後點擊按鈕在 後臺代碼中給 ` ...
  • # Unity 編輯器資源導入處理函數 OnPreprocessTexture 用法 [![https://github.com/AlianBlank/download.unity.com](https://img2023.cnblogs.com/other/406187/202308/406187 ...
  • 他媽的!!!就因為這破事導致我浪費了兩天的時間!!! 都是基礎不扎實的鍋,導致我沒能第一時間想到問題的關鍵 好了,平復一下心情,快速的寫一篇博客來記錄這個叼問題 ## 解決方法 先把結論放在這裡:用`extern "C" {}`把中斷函數包起來 ```C++ // 就像這樣 extern "C" { ...
  • ansible 是用來自動化管理遠程操作系統的工具. ansible的三要素: `控制節點` , `被控節點`, `資產清單` ### 安裝 ansible 可以通過pip直接安裝 ```bash python3 -m pip install ansible --user ``` ### 快速入門 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...