在x86 64機器上構建arm64映象

2021-10-24 11:10:03 字數 1564 閱讀 2482

有幾種辦法可以打包出arm64的映象

直接在arm機器上執行編譯和打包

通過qemu模擬arm環境

利用docker提供的buildx(需要啟用試驗性特性)

我沒有arm的機器~,所以我主要試了一下下面兩種方式。

借助qemu-user-static映象打包

文件: qemu-user-static

$ docker run --rm --privileged multiarch/qemu-user-static:register --reset

$ docker build --rm -t 「test/integration/ubuntu」 -<$ docker run --rm -t 「test/integration/ubuntu」 uname -m

aarch64

在執行qemu-user-static:register映象的時候,就通過核心中的binfmt_misc機制注入了哪些可執行檔案可以被識別。

注意:需要將qemu-aarch64-static檔案 copy 到/usr/bin目錄。

❝binfmt_misc是linux核心說提供的一種擴充套件機制, 使得更多型別的檔案得以成為"可執行"檔案.linux核心本身支援elf、a.out、指令碼(也就是上面所說的第一行#!指定直譯器的方式)這集中"可執行檔案".但它還提供了乙個稱為binfmt_misc的核心模組, 通過這個模組可以動態註冊一些"可執行檔案格式",註冊之後我們就可以直接"執行"這個程式檔案了.

❞通過buildx打包支援多架構的映象

文件:首先需要開啟這個實驗性的功能,怎麼開啟看這裡:

docker cloent: 在~/.docker/config.json 加入``寫入"experimental":「enabled」

dcoker daemon: 啟動引數上加上–experimental或者/etc/docker/daemon.json寫入"experimental": true

「進行初始化:」

docker buildx create --name builderx

docker buildx use builderx

docker buildx inspect --bootstrap #這一步會從外網拉取moby/buildkit映象,貌似還改不了

「接下來你就可以通過如下命令去構建多種架構的映象:」

docker buildx build --platform linux/amd64,linux/arm64 -f dockerfile -t silenceper/reverse-proxy . --push

–push引數表示構建完成之後,並push到映象倉庫當中。

因為映象倉庫支援乙個倉庫上傳多種架構,並且會根據構建平台pull相匹配架構的映象,所以我們可以在乙個dockerfile,並且通過乙個命令打包映象並push。

這裡用到的dockerfile在這裡:

「通過docker的多階段構建將編譯和打包放在一起了,隔離了環境的差異。」

from alpine

maintainer silenceper [email protected]

參考

x86 64 核心堆疊

switch to.h中 define switch to prev,next,last do while 0 會切換將切換前的程序核心堆疊指標用彙編movl esp,prev sp 儲存。其中被儲存的位址 prev sp 是prev thread.sp 切換後的程序esp從儲存中恢復使用彙編 mo...

x86 64彙編 控制

跳轉指令 條件分支 迴圈switch語句 總結自 深入理解計算機系統 第三版 cpu還維護一組單個位的條件碼暫存器,用來描述最近的算術和邏輯操作的屬性。常用 cf 無符號溢位 of 有符號溢位 zf 零標誌 sf 符號標誌 注意 test指令與and指令一樣,而不改變dest暫存器 用法 兩個運算元...

在x86 64平台上編譯龍芯平台go執行環境

系統 deepin v20 平台 x86 64 交叉編譯器 mips loongson gcc7.3 2019.06 29 linux gnu,即gcc 7.3.1。待後續更正 wget交叉編譯化境搭建見在x86 64平台上搭建龍芯mips64交叉編譯環境 安裝git sudo apt instal...