为树莓派 3 构建 64 位内核
创始人
2024-03-01 20:05:54
0

编辑:在写完这个这篇文章之后,我在树莓派 3 上基于 Debian 开始打造 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

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

通过Linux串口实现树莓...
目录 一  串口说明 二  USB—TTL模块 ● usb-ttl...
2025-06-01 20:44:00
linux 64位操作系统...
在linux 64位操作系统环境下,默认编译生成的可...
2025-05-28 12:59:11
嵌入式Linux入门必看!...
最近总有人问我:想学嵌入式Linux,到底该买哪块开发板?这问题就...
2025-05-10 12:17:26
在CentOS 64位系统...
在CentOS 64位系统上运行Windows程序:Wine配置与...
2025-04-18 07:45:36
不支持使用64位源和32位...
要解决这个问题,您需要确保使用的编译器兼容性,即使用相同位数的源和...
2025-01-11 23:01:24
不明白为什么在树莓派上使用...
在树莓派上使用join()函数会导致TypeError错误的原因是...
2024-12-26 22:02:04

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...