為樹莓派 3 構建 64 位內核
樹莓派 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 內核分支,它為它們的設備特別裁剪過,同時定期地從上游合併。
我們將會遵照這個頁面的指導來構建一個 64 位內核。
我們不能使用「本地構建」的方法,因為它需要一塊 64 位的樹莓派,這個我們明顯還沒有。因此我們需要交叉編譯它,Ubuntu 是推薦的系統。我個人沒有 Ubuntu,因此我在一個有 2 個 CPU 的 Ubuntu 16.04 Digital Ocean 實例上構建,這應該花費我 $0.03。如果你也想這麼做,你可以通過這個鏈接得到 $10 的免費額度。或者你可以通過使用 Virtualbox 中的 Ubuntu VM 作為實例。
首先,我們需要一些構建工具以及 aarch64 交叉編譯器:
apt-get update
apt-get install -y bc build-essential gcc-aarch64-linux-gnu git unzip
接著我們可以下載 Linux 內核源碼:
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 移植版。得到它基本有三種方式:
- 下載一個預構建的根文件系統,這很可能會如頁面中提到的那樣給你一個過期的版本。
- 如果你熟悉 debootstrap,用它構建你自己的(這回比較棘手,因為它需要一些手工調整,它最初的目的是在已經運行的主機上進行 chroot,而不是為其他機器構建根文件系統)
- 我建議使用 multistrap,這裡有一個很好的教程:http://free-electrons.com/blog/embdebian-with-multistrap/
回到 Raspbian,我們現在可以下載官方系統,並開始準備了。
打開一個新的 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 內核誕生了!
現在你可以壓縮鏡像,通過 scp 下載下來,並按照標準的步驟放到你的 SD 卡中。
最後你會得到:
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 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive