树莓派3的64位内核构建及移植系统以及构建一个自己的系统

树莓派3的终极玩法

chainsx

喜欢

5460
浏览
3
喜欢

> 更多图片

项目状态:填坑进行中
开放度:公开
所属分类:软件
发布时间:2017-10-27
最近更新:2017-12-17

标签

描述

对于树莓派3的64位内核构建,系统移植(包括64位),系统构建(包括64位)


详细说明

树莓派 3 配有 Broadcom BCM2837 64 位 ARMv8 四核 Cortex A53 处理器,它是一个 64 位 CPU!!!

可是树莓派3没有官方的64位系统

有的只是SLES(openSUSE)

我们想用64位的ubuntu,debian,centos怎么办?

等官方出?那要猴年马月啊!所以,自己动手,丰衣足食

通过运行以下命令
uname -a
Linux raspberrypi 4.4.34-v7+#930 SMP WedNov2315:20:41 GMT 2016 armv7l GNU/Linux
这是一个32位内核,不过,官方给出了64位的内核,所以,我们可以自己编译
这里,先上一个自己移植的64位Ubuntu15.10
github地址

链接表


文件库

dtbs.tar.gz
内核设备数 [4777 Bytes at 2017-11-26, 1 次下载]

Image.tar.gz
内核文件 [5101220 Bytes at 2017-11-26, 3 次下载]



教程

组件清单
  • 树莓派一只 × 1
  • ubuntu/debian的x86架构PC(可选,最好是x86_64的) × 1
  • 无线飞鼠(可选) × 1

这里,你可以通过ubuntu16.04交叉编译,也可以直接在树莓派上编译
这里,我们遵循树莓派官方的内核编译引导
这里,感谢bamarni的思路提供

在电脑上交叉编译

构建内核

你需要一个Ubuntu16.04的64位版本
安装交叉编译环境
apt-get update
apt-get install -y bc build-essential gcc-aarch64-linux-gnu git unzip
获取源码
git clone https://github.com/raspberrypi/linux.git
接下来,,开始你的构建,分别运行以下命令
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
这时,你可以去泡杯茶,看看电视,或者吃鸡。。。。
因为这要一点时间

准备一个系统

这里,我拿raspbian做例子(有些数字你要自己改,不要太死板)
先从官网下载raspbian(建议下载lite)
解压后得到img文件
然后,
我们可以用kpartx工具来进行挂载img文件
apt-get install kpartx
先添加镜像文件
kpartx -av raspbian.img
接着挂载分区
lsblk
会有以下信息
add map loop0p1 (254:0): 0 131072 linear /dev/loop0 2048
add map loop0p2 (254:1): 0 765952 linear /dev/loop0 133120
执行
mount /dev/mapper/loop0p2 /mnt
mount /dev/mapper/loop0p1 /mnt/boot

安装内核

执行以下命令,将编译好的内核以及设备树复制到系统中(前提是你编译完了)
cp arch/arm64/boot/Image/mnt/boot/ kernel8.img
cp arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dtb /mnt/boot/
执行以下命令,安装内核模块
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu INSTALL_MOD_PATH=/mnt modules_install
执行以下命令,调整config.txt
echo kernel=kernel8.img >> /mnt/boot/config.txt
不过,保险起见,你还是手动修改,
如果没有的话,加上kernel=kernel8.img
有的话,修改为kernel=kernel8.img

卸载分区

umount /mnt/boot && umount /boot

大功告成

在树莓派上编译

其实差不多。。。。就是不用交叉编译工具罢了,,,,不过,时间有点久。

注意,要使用aarch64(arm64)的系统进行编译,

不过,这里有现成的Debian | Ubuntu(如果你用Ubuntu的话,请将源换成中科院的mirrors.opencas.org)

安装依赖

apt-get update
apt-get install -y bc build-essential

获取源码包

git clone https://github.com/raspberrypi/linux.git

开始编译

make ARCH=arm64 bcmrpi3_defconfig
make ARCH=arm64
这时,考验你心态的时候到了,,,,,可能要一个多小时吧!
如果你想多核编译,使用-j4参数

准备一个要移植的系统

这里,给几个推荐
ubuntu 15.10   |   CentOS
下载下来后,按照上面方法挂载,或直接写入sd卡

安装内核

执行以下命令,将编译好的内核以及设备树复制到系统中(前提是你编译完了)
cp arch/arm64/boot/Image/mnt/boot/ kernel8.img
cp arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dtb /mnt/boot/
执行以下命令,安装内核模块
make ARCH=arm64 INSTALL_MOD_PATH=/mnt modules_install
执行以下命令,调整config.txt
echo kernel=kernel8.img >> /mnt/boot/config.txt
不过,保险起见,你还是手动修改,
如果没有的话,加上kernel=kernel8.img
有的话,修改为kernel=kernel8.img

卸载分区

umount /mnt/boot && umount /mnt

至此,大功告成

制作一个自己的系统

提供一个教程

这里,简要说一下制作根分区(rootfs)的思路
如果你熟悉 debootstrap,用它构建你自己的(这回比较棘手,因为它需要一些手工调整,它最初的目的是在已经运行的主机上进行 chroot,而不是为其他机器构建根文件系统)
我建议使用 multistrap,这里有一个很好的教程:http://free-electrons.com/blog/embdebian-with-multistrap/

同样,提供几个根分区的压缩文件
Ubuntu 17.04   |   CentOS