最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

使用QEMU運行基于LoongArch64架構的Linux系統(tǒng)

2023-06-29 10:16 作者:gracefeld  | 我要投稿

(Qemu For LoongArch64) 作者:孫海勇



1 前言

  龍芯中科于2021年推出了全新指令集架構LoongArch,其中64位指令集稱為LoongArch64。
  基于LoongArch64指令集的操作系統(tǒng)需要運行在使用龍芯3A5000 CPU的機器上,在沒有這樣的機器的情況下如果想簡單的體驗就需要使用到QEMU這個模擬器。
  本文的目標是通過一步一步的制作使用QEMU運行一個基于LoongArch64制作的Linux系統(tǒng)。

  文末有已編譯好不同架構的QEMU文件可供下載,簡化使用過程。

  本文涉及一些編譯軟件相關的操作,如果你想簡單點來使用,可以參考簡化版的文檔:
  https://kgithub.com/sunhaiyong1978/CLFS-for-LoongArch/blob/main/Qemu_For_LoongArch64-Simple.md

2 編譯QEMU

  本文將采用編譯QEMU源代碼的方式來創(chuàng)建可執(zhí)行的QEMU,因當前大多數(shù)系統(tǒng)中的QEMU并未支持LoongArch64指令,所以接下來先從下載和編譯QEMU開始說起。

準備編譯環(huán)境

  QEMU支持從不同的指令架構機器上模擬目標指令架構的環(huán)境,因此用的機器只要是能運行QEMU就可以了,當然這個用來運行QEMU的機器我們建議安裝一個“正?!钡腖inux系統(tǒng),因為后續(xù)還需要進行編譯,所以必須能提供編譯QEMU的開發(fā)環(huán)境。

  因在不同架構的機器上制作QEMU并運行LoongArch64的Linux系統(tǒng)與架構本身并沒有太大關系,主要差異僅在具體的Linux系統(tǒng)準備編譯環(huán)境的步驟上會因為Linux所使用的包管理工具不同而有所不同,但在使用QEMU上幾乎沒有差異,所以接下來我們將以一個使用Fedora Linux發(fā)行版系統(tǒng)的環(huán)境來講解。

  如果你使用的是X86的機器,那么可以選擇的系統(tǒng)版本非常多,而如果你用的是非X86架構的機器那么就要確定可使用的版本,接下來我們會以龍芯3A4000的機器上可以運行的Fedora28為例進行制作和使用的講解,當然這些步驟也同樣適合例如同樣在3A4000上的Fedora 32這樣更新的版本,或者在X86機器上的Fedora 34或者其他Linux系統(tǒng)上。

創(chuàng)建一個普通用戶

  不建議使用root用戶來編譯制作軟件包,所以我們在一開始創(chuàng)建一個普通用戶,比如“l(fā)oongson”,如果系統(tǒng)中已經(jīng)有了這個用戶可以創(chuàng)建其他名字的用戶或者跳過這個步驟。

  創(chuàng)建命令如下:

useradd -m loongson

  參數(shù)“-m”的用處是給這個新用戶創(chuàng)建家目錄,接下來我們會需要用到用戶的家目錄。

  注意:創(chuàng)建用戶的工作必須由具有root權限的用戶來進行。

切換用戶

  創(chuàng)建好普通用戶后,就可以切換到該用戶下,使用如下命令:

su loongson

  通過root用戶切換到普通用戶可以避免輸入密碼。

  默認情況下切換用戶后會自動進入該用戶的家目錄,之后的工作將在家目錄中進行。

下載QEMU的源代碼

  QEMU中支持LoongArch64的代碼目前還沒有進入到QEMU的上游源代碼倉庫中,因此,我們需要下載一個有LoongArch64指令支持的QEMU源代碼。

  使用以下命令下載QEMU代碼:

git clone https://kgithub.com/loongson/qemu.git -b tcg-dev

經(jīng)過一段時間的下載過程后我們就擁有了支持LoongArch64指令集的QEMU源代碼。

QEMU的支持模式

  接下來就是最為關鍵的編譯過程。

  進入QEMU的源代碼目錄:

cd ~/qemu

  注意:這里假定源代碼是下載到當前用戶的家目錄中。

  接下來,如果代碼有需要打補丁或者修正問題的,可以在這個時候進行,例如下面修復一個在配置階段可能出現(xiàn)的問題:

sed -i '/compile_prog/s@"\$glib_cflags"@"\$glib_cflags -Werror"@g' configuresed -i 's@"loongarch"@"loongarch64"@g' linux-user/loongarch64/target_syscall.h

  QEMU的編譯參數(shù)非常的多,可以通過以下命令查看:

./configure --help

  這里我們關心的參數(shù)主要是“--target-list”,通過查看該參數(shù)支持的內(nèi)容會發(fā)現(xiàn),QEMU主要有兩種使用方式,分別是:softmmu和linux-user,前者是系統(tǒng)仿真,而后者是linux用戶模式仿真,簡單的理解就是前面模擬了一臺主機,后者模擬了Linux內(nèi)核環(huán)境可以直接運行l(wèi)inux命令。

  目前開放出來的支持LoongArch架構的QEMU源代碼僅支持Linux-User模式,因此接下來按照該模式進行編譯和使用。

安裝編譯依賴環(huán)境

  在編譯前需要安裝一些系統(tǒng)軟件開發(fā)包,這些軟件包是編譯QEMU時所需要的,通常在./configure配置階段會給出目前系統(tǒng)中缺少的軟件包名稱,如果有確實就及時安裝上,比如需要glib2的開發(fā)包,可以使用如下命令:

dnf install glib2-devel

  除了安裝必要的軟件包的開發(fā)文件外,針對Linux-User模式還會用到一些靜態(tài)庫,因此也一并安裝到系統(tǒng)中,例如:

dnf install glib2-static pcre-static zlib-static

  注意,此時需要使用root權限的用戶進行安裝,或者給當前用戶增加sudo執(zhí)行的權限然后通過sudo命令進行安裝。

Linux-User模式

配置步驟

  使用如下步驟先進行配置:

./configure --prefix=/usr --target-list=loongarch64-linux-user \ ? ? ? ? ? ?--disable-werror --static --disable-docs

  配置參數(shù)解釋:
  --prefix=/usr:設置安裝的基礎目錄。
  --target-list=loongarch64-linux-user:此配置參數(shù)是關鍵項,這里指定了loongarch64-linux-user,“l(fā)oongarch64”代表支持LoongArch64架構,“l(fā)inux-user”代表是Linux-User模式。
  --disable-werror:防止語法警告變成錯誤,這可能導致高版本的gcc編譯QEMU時出現(xiàn)錯誤。
  --static:這個配置參數(shù)也時關鍵項,用于指定編譯出來的二進制命令文件是靜態(tài)鏈接的,這就需要系統(tǒng)中安裝編譯QEMU所需鏈接庫文件的靜態(tài)庫。
  --disble-docs:該參數(shù)不是必須的,該參數(shù)用來取消文檔文件的制作步驟,這樣可以減少一些編譯時間。

  在配置階段,需要保持聯(lián)網(wǎng)狀態(tài),因配置過程中會需要從網(wǎng)絡上下載一些文件,這個過程是一次性的,也就是第一次配置階段會進行,只要軟件源碼目錄沒有被刪除,后續(xù)重新配置時不再需要下載。

編譯步驟

  接下來進行編譯,編譯非常簡單,使用make命令即可,如下:

make

  當然,你要想加速編譯,可以增加“-jN”參數(shù),N需要替換成確定的數(shù)字,可以使用你當前"CPU核數(shù)*2+1"計算出的數(shù)字。   如果順利經(jīng)過一段時間(視機器性能)后即可完成編譯。

安裝步驟

  編譯完成后進行安裝,這里不必使用常見的make install命令進行安裝,因為當前我們只需要一個可執(zhí)行文件即可,該文件存放在build目錄中,切換到root用戶權限下并使用如下命令安裝:

strip --strip-all build/qemu-loongarch64 cp -a build/qemu-loongarch64 /bin/

  strip命令可以用來剝離可執(zhí)行文件中不需要的調(diào)試信息,可以極大的減少文件大小。

  qemu-loongarch64命令被復制到/bin目錄之后,就完成了安裝。

3 使用QEMU

Linux-User模式的使用

下載LoongArch的Linux系統(tǒng)

  在GitHub上有已經(jīng)制作好的LoongArch Linux系統(tǒng),使用以下地址步驟進行下載:

cd /tmp wget -c https://kgithub.com/sunhaiyong1978/CLFS-for-LoongArch/releases/download/20210903/loongarch64-clfs-system-20210903.tar.bz2

  以上下載的系統(tǒng)是一個完全使用已開放的源代碼構建的基于LoongArch指令集架構的Linux系統(tǒng)。

解壓縮Linux系統(tǒng)

  請使用root權限的用戶完成以下解壓縮的步驟:

cd /opt mkdir clfs-oscd clfs-os tar xvpf /tmp/loongarch64-clfs-system-20210903.tar.bz2

  經(jīng)過一段時間的解壓后,我們就在/opt/clfs-os目錄中擁有了一個基于LoongArch指令集制作的系統(tǒng)。

測試QEMU的Linux-User模式

  已經(jīng)安裝好QEMU和Linux系統(tǒng)后,就可以開始驗證QEMU的Linux-User模式工作是否正常了,使用如下命令:

/bin/qemu-loongarch64 -L /opt/clfs-os /opt/clfs-os/bin/ls /

  如果命令能正常執(zhí)行并列出了當前系統(tǒng)根目錄的內(nèi)容,那么就代表QEMU的Linux-User模式已經(jīng)能使用了。

注冊Binfmt信息

  當我們在測試Linux-User模式使用時會發(fā)現(xiàn),為了執(zhí)行一個命令,需要通過指定相關參數(shù)才行,這使得當我們想嘗試chroot到這個系統(tǒng)中時,會因為這些額外的參數(shù)指定而導致很多不方便處理的問題,能不能像執(zhí)行當前系統(tǒng)中的命令一樣使用呢?

  答案當然是可以,方案就是使用Binfmt方式執(zhí)行。

  Binfmt簡單來說就是在內(nèi)核中注冊一個可執(zhí)行文件的“頭信息”,當執(zhí)行的可執(zhí)行文件符合注冊的“頭信息”時就會調(diào)用注冊時指定的命令執(zhí)行文件。

  從上面的說明可以看出,Binfmt需要內(nèi)核支持才可以使用,所以先確認以下當前的系統(tǒng)是否支持,使用命令:

ls /proc/sys/fs/binfmt_misc/

  如果顯示該目錄下有以下文件:
  register ?status
  代表Binfmt功能是打開的,再看以下status文件的內(nèi)容:

cat /proc/sys/fs/binfmt_misc/status

  如果顯示為enable,則代表Binfmt功能目前內(nèi)核支持且可用。

  接下來就是注冊LoongArch可執(zhí)行文件的信息了,使用如下命令:

echo ":qemu-loongarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02\x01:\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/bin/qemu-loongarch64:" > /proc/sys/fs/binfmt_misc/register

  以上命令注冊了LoongArch可執(zhí)行文件“頭信息”,并指定符合條件的文件會使用"/bin/qemu-loongarch64"命令來執(zhí)行,所以這個"/bin/qemu-loongarch64"命令必須真實有效。

Chroot到LoongArch系統(tǒng)

  要想方便的通過QEMU的Linux-User模式chroot到LoongArch的系統(tǒng)中,Binfmt功能的注冊是必不可少的,當完成注冊后還需要如下的一次性步驟:

cp /bin/qemu-loongarch64 /opt/clfs-os/bin/

  我們將qemu-loongarch64這個命令文件復制到需要chroot的系統(tǒng)中,這個步驟非常關鍵,并且要保證qemu-loongarch64在這個chroot的系統(tǒng)中存放的相對位置與當前系統(tǒng)中該命令的目錄位置相同,也就是保證與Binfmt中注冊的路徑相同,只有這樣才能在chroot到新系統(tǒng)后Binfmt功能依舊能夠找到正確的模擬器命令。

  接下來,我們就是見證勝利的時候,使用root權限的用戶或者sudo命令進行chroot:

chroot /opt/clfs-os

  這個時候我們會看到熟悉的Bash提示符:

  bash-5.1#

  嘗試的輸入一些命令,比如ls、vi,你會發(fā)現(xiàn)可以完全直接就運行起來了。

  再輸入:

uname -m

  會返回:

  loongarch64

  代表當前環(huán)境正模擬的LoongArch的架構。

圖形程序的執(zhí)行

  在我們提供的LoongArch系統(tǒng)中,如果是在文本中斷使用的命令,那么可以很容易的執(zhí)行和操作,就跟本地架構的程序一樣,然而要想執(zhí)行一些圖形環(huán)境下的程序會怎么樣呢?

  接下來我們以嘗試運行一個圖形系統(tǒng)下的終端程序為例來進行介紹。

掛載必要的文件系統(tǒng)

  對于一個chroot的系統(tǒng)來說,缺少必要的文件系統(tǒng)會影響部分程序的運行,可以在chroot后掛載幾個必要的文件系統(tǒng),步驟如下:

mount -t proc proc /proc mount -t sysfs sys /sys mount -t devtmpfs dev /dev mount -t devpts devpts /dev/pts

創(chuàng)建普通用戶

  系統(tǒng)中有些程序對用戶有一定的要求,比如不能使用root用戶運行,然而chroot默認使用root用戶登錄,因此創(chuàng)建一個普通用戶,步驟如下:

/sbin/useradd -m testuser

  并且切換到該用戶

su testuser

執(zhí)行圖形化程序

  因本文下載的系統(tǒng)已經(jīng)包含了Xorg的圖形系統(tǒng),并有加入了少量的圖形應用程序,如果是在Xorg環(huán)境下chroot到LoongArch系統(tǒng)中的情況下,可以在該環(huán)境下運行LoongArch Linux系統(tǒng)中的圖形程序。

  在運行之前需要設置DISPLAY環(huán)境變量,以便圖形程序能夠鏈接到Xorg環(huán)境,參考如下命令:

export DISPLAY=:0

  設置完成后,可以運行一個圖形終端程序測試一下,命令:

xterm

  XTerm是一個簡易的X圖形系統(tǒng)下運行的終端程序,如果一切正常的話可以啟動XTerm,并顯示一個終端窗口,這個終端窗口就是LoongArch系統(tǒng)下的程序執(zhí)行顯示的。

開發(fā)環(huán)境

  通過以上的方式還可以運行其它程序或圖形程序,這包括各種開發(fā)工具,由于系統(tǒng)中提供了完整的開發(fā)環(huán)境,你也可以在LoongArch系統(tǒng)中自行編譯某個程序來執(zhí)行,一切看起來跟用真實的LoongArch機器相似。

附件

X86_64系統(tǒng)下的Qemu for loongarch64 linux-user 程序:

https://kgithub.com/sunhaiyong1978/CLFS-for-LoongArch/releases/download/20210903/qemu-x86_64-to-loongarch64

MIPS64EL系統(tǒng)下的Qemu for loongarch64 linux-user 程序:

https://kgithub.com/sunhaiyong1978/CLFS-for-LoongArch/releases/download/20210903/qemu-mips64el-to-loongarch64

結束

  本文會根據(jù)QEMU支持LoongArch的狀況不定期的進行更新。

  感謝大家支持,歡迎提出寶貴的意見。


使用QEMU運行基于LoongArch64架構的Linux系統(tǒng)的評論 (共 條)

分享到微博請遵守國家法律
天门市| 永仁县| 水富县| 拜城县| 武夷山市| 七台河市| 哈巴河县| 嘉峪关市| 龙州县| 淅川县| 东辽县| 东山县| 兰坪| 五莲县| 门源| 蓝田县| 民县| 格尔木市| 栾川县| 桓仁| 镇安县| 朝阳县| 石柱| 峡江县| 丰顺县| 离岛区| 葫芦岛市| 玉屏| 洛宁县| 婺源县| 太白县| 阿荣旗| 蓬安县| 凤城市| 来宾市| 定安县| 托克逊县| 朝阳区| 嘉定区| 金坛市| 嘉鱼县|