自行移植树莓派64位内核系统的方法介绍


不久前我们推荐了 chainsx 的《树莓派 Ubuntu 64位系统玩家体验版》。作者进一步提供了自行编译上述系统并制作镜像文件的方法,分别介绍了如何通过交叉编译和在树莓派上直接编译,授人以渔啦~

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

在电脑上交叉编译

构建内核
你需要一个Ubuntu16.04的64位版本。
安装交叉编译环境

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

获取源码

gitclone–depth=1-b rpi-4.8.y 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文件。
然后,我们用下面的命令审查:

fdisk- l raspbian-jessie-lite.img
Diskraspbian-jessie-lite.img:1.3GiB,1390411776 bytes,2715648 sectors
Units: sectors of 1*512=512 bytes
Sectorsize(logical/physical):512 bytes /512 bytes
I/O size(minimum/optimal):512 bytes /512 bytes
Disklabel type: dos
Disk identifier:0x244b8248
DeviceBootStartEndSectorsSizeIdType
raspbian-jessie-lite.img1 8192 137215 129024 63M c W95 FAT32 (LBA)
raspbian-jessie-lite.img2 137216 2715647 2578432 1.2G83Linux

注意,上面两条很关键!

我们可以在我们的文件系统上挂载这些分区(当然,你也可以直接写入sd卡),从根分区开始:

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

offset 取决于扇区大小(512):70254592 = 512 * 137216
接着是启动分区:

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

offset :4194304 = 512 8192,sizelimit:66060288 = 512 129024
安装内核
执行以下命令,将编译好的内核以及设备树复制到系统中(前提是你编译完了):

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

小贴士:对于第一次使用树莓派 64位 Ubuntu 的用户,建议将 Ubuntu15.10 的源换成中科院的源 mirrors.opencas.org 不然的话将无法使用哦。
项目 GitHub:https://github.com/chainsx/ubuntu64-rpi
Maker 趣无尽项目主页:http://make.quwj.com/project/28

这是一篇发布于 6年 前的文章,其中的信息可能已经有所发展或是发生改变,请了解。


9 评论

  1. 欢迎大家分享自己制作的64位系统,,,,,,
    而且,
    写的有什么不妥,还请大家提出!
    有什么更好的方法,
    请不要吝啬!!!

  2. 其实真正的移植过程要复杂得多,例如还要编译u-boot等,但是在树莓派上移植过程也就简化了

  3. 哥们,那个64位系统对于arm64的支持赶得上ubuntu吗?
    本来就是玩玩,
    再说了,你见过谁用OpenSUSE搞gpio的,
    现在arm64位如果有一个wringpi就无敌了。

  4. 教程里用的官方32位raspbian,以及自己编译的64位内核,这……能启动吗?算是64位系统吗?
    顺便想问一下dbian有官方构建的aarch64 rootfs吗?

1 Trackback / Pingback

  1. 自行移植树莓派64位内核系统的方法介绍 – Log@X.X.B

发表评论

你的邮件地址不会公开


*