首頁 > 軟體

為樹莓派 3 構建 64 位核心

2020-06-16 17:11:02

編輯:在寫完這個這篇文章之後,我在樹莓派 3 上基於 Debian 開始打造 64 位的系統。你可以在這裡找到

樹莓派 3 配有 Broadcom BCM2837 64 位 ARMv8 四核 Cortex A53 處理器,它是一個 64 位 CPU。如果你有一塊,執行以下命令可能會讓你感到驚訝:

  1. uname-a
  2. Linux raspberrypi 4.4.34-v7+#930 SMP WedNov2315:20:41 GMT 2016 armv7l GNU/Linux

是的,這是一個 32 位核心。這是因為樹莓派基金會還沒有為官方的樹莓派系統 Raspbian 提供 64 位版本。然而你可以構建一個,多虧了 Electron752 提供的許多修補程式。

 

構建核心

樹莓派基金會維護著它們自己的 Linux 核心分支,它為它們的裝置特別裁剪過,同時定期地從上游合併。

我們將會遵照這個頁面的指導來構建一個 64 位核心

我們不能使用“本地構建”的方法,因為它需要一塊 64 位的樹莓派,這個我們明顯還沒有。因此我們需要交叉編譯它,Ubuntu 是推薦的系統。我個人沒有 Ubuntu,因此我在一個有 2 個 CPU 的 Ubuntu 16.04 Digital Ocean 範例上構建,這應該花費我 $0.03。如果你也想這麼做,你可以通過這個連結得到 $10 的免費額度。或者你可以通過使用 Virtualbox 中的 Ubuntu VM 作為範例。

首先,我們需要一些構建工具以及** aarch64 交叉編譯器**:

  1. apt-get update
  2. apt-get install -y bc build-essential gcc-aarch64-linux-gnu git unzip

接著我們可以下載 Linux 核心原始碼

  1. gitclonedepth=1-b rpi-4.8.y https://github.com/raspberrypi/linux.git

進入到建立的 git 目錄。另外你可以為你的核心新增額外的版本標籤,可以通過編輯 Makefile 的開始幾行完成:

  1. VERSION =4
  2. PATCHLEVEL =8
  3. SUBLEVEL =13
  4. EXTRAVERSION =+bilal

為了構建它,執行下面的命令:

  1. make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig
  2. make-j 3 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

第一個應該很快。第二個則會完全不同,我沒有精確計時,但是對我來說大概要半個小時。根據你的 CPU 數(nproc * 1.5)調整 -j 標誌。

 

選擇一個 Linux 發行版

在核心編譯的時候,我們可以開始準備它的 Linux 發行版了。在本教學中為了簡單我使用 Raspbian,即使這是一個只有 32 位的發行版。

如果你想要一直用 64 位系統,你應該選一個有 aarch64 支援的發行版,Debian 有一個健壯的 ARM64 移植版。得到它基本有三種方式:

  • 下載一個預構建的根檔案系統,這很可能會如頁面中提到的那樣給你一個過期的版本。
  • 如果你熟悉 debootstrap,用它構建你自己的(這回比較棘手,因為它需要一些手工調整,它最初的目的是在已經執行的主機上進行 chroot,而不是為其他機器構建根檔案系統)
  • 我建議使用 multistrap,這裡有一個很好的教學:http://free-electrons.com/blog/embdebian-with-multistrap/

回到 Raspbian,我們現在可以下載官方系統,並開始準備了。

開啟一個新的 shell 對談並執行下面的命令:

  1. wget-O raspbian.zip https://downloads.raspberrypi.org/raspbian_lite_latest
  2. unzip raspbian.zip

我們用下面的命令審查:

  1. fdisk-l 2016-11-25-raspbian-jessie-lite.img
  2. Disk2016-11-25-raspbian-jessie-lite.img:1.3GiB,1390411776 bytes,2715648 sectors
  3. Units: sectors of 1*512=512 bytes
  4. Sectorsize(logical/physical):512 bytes /512 bytes
  5. I/O size(minimum/optimal):512 bytes /512 bytes
  6. Disklabel type: dos
  7. Disk identifier:0x244b8248
  8. DeviceBootStartEndSectorsSizeIdType
  9. 2016-11-25-raspbian-jessie-lite.img1 819213721512902463M c W95 FAT32 (LBA)
  10. 2016-11-25-raspbian-jessie-lite.img2 137216271564725784321.2G83Linux

我們可以看到它有兩個分割區。第一個是啟動分割區,它主要包含了 bootloader、Linux 核心以及少量組態檔。第二個是根分割區

我們可以在我們的檔案系統上掛載這些分割區,從根分割區開始:

  1. mount-o loop,offset=702545922016-11-25-raspbian-jessie-lite.img /mnt

offset 取決於磁區大小(512):70254592 = 512 * 137216

接著是啟動分割區

  1. mount-o loop,offset=4194304,sizelimit=660602882016-11-25-raspbian-jessie-lite.img /mnt/boot

offset :4194304 = 512 * 8192,sizelimit:66060288 = 512 * 129024 。

樹莓派系統現在應該可以在 /mnt 中看到了。我們基本要完成了。

 

打包核心

核心編譯完成後,最後一步包括複製 Linux 核心以及裝置樹到啟動分割區中:

  1. cp arch/arm64/boot/Image/mnt/boot/kernel8.img
  2. cp arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dtb /mnt/boot/

調整 config.txt :

  1. echokernel=kernel8.img>>/mnt/boot/config.txt

安裝核心模組 :

  1. make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu INSTALL_MOD_PATH=/mnt modules_install
  2. umount/mnt/boot
  3. umount/mnt

就是這樣了,用於樹莓派 3 的** ARM64 Linux 核心**誕生了!

現在你可以壓縮映象,通過 scp 下載下來,並按照標準的步驟放到你的 SD 卡中。

最後你會得到:

  1. uname-a
  2. Linux raspberrypi 4.8.13+bilal-v8+#1 SMP WedDec1414:09:38 UTC 2016 aarch64 GNU/Linux

via: https://devsidestory.com/build-a-64-bit-kernel-for-your-raspberry-pi-3/

作者:Bilal Amarni 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-07/145433.htm


IT145.com E-mail:sddin#qq.com