您的位置:首頁>科技>正文

為樹莓派 3 構建 64 位內核

因為樹莓派基金會還沒有為官方的樹莓派系統 Raspbian 提供 64 位版本。 然而你可以構建一個, 多虧了 Electron752 提供的許多補丁。 -- Bilal Amarni

本文導航

-構建內核 …… 12%

-選擇一個 Linux 發行版本 …… 40%

-打包內核 …… 79%

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

作者: Bilal Amarni

譯者: geekpi

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

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

uname -a

Linux raspberrypi 4.4.34-v7+ #930 SMP Wed Nov 23 15:20:41 GMT 2016 armv7l GNU/Linux

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

構建內核

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

我們將會遵照這個頁面[3]的指導來構建一個 64 位內核。

我們不能使用“本地構建”的方法, 因為它需要一塊 64 位元的樹莓派, 這個我們明顯還沒有。

因此我們需要交叉編譯它, Ubuntu 是推薦的系統。 我個人沒有 Ubuntu, 因此我在一個有 2 個 CPU 的 Ubuntu 16.04 Digital Ocean 實例上構建, 這應該花費我 $0.03。 如果你也想這麼做, 你可以通過這個連結[4]得到 $10 的免費額度。 或者你可以通過使用 Virtualbox 中的 Ubuntu VM 作為實例。

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

apt-get update

apt-get install -y bc build-essential gcc-aarch64-linux-gnu git unzip

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

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

VERSION = 4

PATCHLEVEL = 8

SUBLEVEL = 13

EXTRAVERSION = +bilal

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

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig

make -j 3 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

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

選擇一個 Linux 發行版本

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

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

如果你熟悉 debootstrap, 用它構建你自己的(這回比較棘手, 因為它需要一些手工調整, 它最初的目的是在已經運行的主機上進行 chroot, 而不是為其他機器構建根檔案系統)

我建議使用 multistrap, 這裡有一個很好的教程:http://free-electrons.com/blog/embdebian-with-multistrap/

打開一個新的 shell 會話並運行下面的命令:

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

unzip raspbian.zip

我們用下面的命令審查:

fdisk -l 2016-11-25-raspbian-jessie-lite.img

Disk 2016-11-25-raspbian-jessie-lite.img: 1.3 GiB, 1390411776 bytes, 2715648 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x244b8248

Device Boot Start End Sectors Size Id Type

2016-11-25-raspbian-jessie-lite.img1 8192 137215 129024 63M c W95 FAT32 (LBA)

2016-11-25-raspbian-jessie-lite.img2 137216 2715647 2578432 1.2G 83 Linux

我們可以看到它有兩個分區。 第一個是開機磁碟分割, 它主要包含了 bootloader、Linux 內核以及少量設定檔。 第二個是根分區。

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

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

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

接著是開機磁碟分割:

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

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

樹莓派系統現在應該可以在 /mnt 中看到了。

我們基本要完成了。

打包內核

內核編譯完成後, 最後一步包括複製 Linux 內核以及設備樹到開機磁碟分割中:

cp arch/arm64/boot/Image /mnt/boot/kernel8.img

cp arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dtb /mnt/boot/

調整 config.txt :

echo “kernel=kernel8.img” >> /mnt/boot/config.txt

安裝內核模組 :

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu INSTALL_MOD_PATH=/mnt modules_install

umount /mnt/boot

umount /mnt

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

最後你會得到:

uname -a

Linux raspberrypi 4.8.13+bilal-v8+ #1 SMP Wed Dec 14 14:09:38 UTC 2016 aarch64 GNU/Linux

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

作者:Bilal Amarni[6] 譯者:geekpi 校對:wxy

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

[1]: 在這裡找到 - https://github.com/bamarni/pi64

[2]: 它們自己的 Linux 內核分支 - https://github.com/raspberrypi/linux

[3]: 這個頁面 - https://www.raspberrypi.org/documentation/linux/kernel/building.md

[4]: 這個連結 - https://m.do.co/c/8ef9c5832a9c

[5]: ARM64 移植版 - https://wiki.debian.org/Arm64Port

[6]: Bilal Amarni - http://devsidestory.com/about-me

Next Article
喜欢就按个赞吧!!!
点击关闭提示