动手编译树莓派3B+ 64位系统

本文章可通过微信公众平台观看:https://mp.weixin.qq.com/s/VH3Y0uIvfH-Mma1h56m6aQ 更多文章以及资源下载可前往微信公众平台。

由于树莓派本身编译较慢,所以选择在Ubuntu上面进行交叉编译。

新建一个build文件夹,我们在这个文件夹中完成我们的编译工作

mkdir ~/build 
cd ~/build

配置安装环境

sudo apt install git lrzsz bison flex libssl-dev zip libncurses-dev make bc

首先准备交叉编译器

sudo wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
#解压
tar -xvf  gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz

下载树莓派内核源码(https://github.com/raspberrypi/linux)

git clone --depth=1 --branch rpi-4.19.y https://github.com/raspberrypi/linux

下载树莓派BOOT文件

git clone --depth=1 https://github.com/raspberrypi/firmware/

配置交叉编译环境

配置环境变量(编译64位内核)
echo "export ARCH_HOME=$PATH/aarch64-linux-gnu" >> env.sh
echo "export PATH=$PATH:$ARCH_HOME/bin" >> env.sh
source env.sh

开始编译内核

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

其中-j8代表编译系统使用的线程数,可根据自己电脑进行配置,整个过程大概需要10分钟(与电脑配置有关)

安装内核

#使用root身份进行安装
su
#记得将[user]换成你自己的名字
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/home/[user]/build modules_install
#切换回自己的用户
exit

到这里,内核部分就结束了,接下来我们开始制作rootfs文件系统 以使用Debian9为例,本部分参考https://juejin.im/post/5d70b78b6fb9a06ad3474b26

sudo apt-get install debian-archive-keyring

我们还是在build文件夹中

cd ~/build

安装必要的依赖

sudo apt-get install qemu qemu-user-static binfmt-support debootstrap kpartx rsync

开始构建Debian文件系统

#使用root用户
su
#构建文件系统,--arch==arm64 指定系统构架  --foreign 指定与主机架构不同 stretch 为Debian9的代号,这里使用清华的镜像站,速度较快
debootstrap --arch=arm64 --foreign stretch linux-rootfs https://mirrors.tuna.tsinghua.edu.cn/debian/

#退回自己的用户
exit
#将qemu-aarch64-static拷贝进rootfs中
sudo cp -a /usr/bin/qemu-aarch64-static linux-rootfs/usr/bin/qemu-aarch64-static
#使用chroot命令进入rootfs文件系统中
sudo chroot linux-rootfs
#此时会显示
“I have no name!@ubuntu:”
#然后对系统进行初始化
debootstrap/debootstrap --second-stage
#初始化结束后退出文件系统
exit

然后可以重新进入文件系统对系统进行定制

sudo chroot linux-rootfs
#更换国内http源

cp /etc/apt/sources.list /etc/apt/sources.list_bak
vim.tiny /etc/apt/sources.list
#将这几句复制进去
deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
#更新升级
apt update
#开启https源支持
apt install apt-transport-https
#设置root密码
passwd
#可以安装一些你所需要的软件
apt-get install alsa-utils libasound2-dev net-tools vim ssh udev sudo wget curl git
#配置网络
HOST=localhost
echo $HOST > /etc/hostname
echo "127.0.0.1    localhost.localdomain localhost" > /etc/hosts
echo "127.0.0.1    $HOST" >> /etc/hosts
echo "auto eth0" > /etc/network/interfaces.d/eth0
echo "iface eth0 inet dhcp" >> /etc/network/interfaces.d/eth0
exit

到这里,rootfs就结束了,下面开始制作树莓派的img镜像,还是在~/build文件夹中操作

cd ~/build
#创建一个空镜像,实际大小根据你的roofs文件系统大小设定,可使用 du -h ~/build/linux-rootfs 命令查看
fallocate -l 1024M rootfs.img
#对空白镜像进行分区
fdisk rootfs.img
  1. 输入o,对分区进行初始化,
  2. 输入n,然后默认p回车,起始扇区默认,终止扇区输入+150M,表示第一个扇区150M大小(BOOT分区),
  3. 输入t,然后输入c,设置第一个分区格式为W95 FAT32 (LBA)4. 输入n,然后全部默认敲击回车,将剩余空间全部设置为第二个分区,
  5. 输入w,保存并退出。
#可使用命令查看新的分区
fdisk -l rootfs.img
#挂载分区
sudo kpartx -av rootfs.img
#格式化分区
sudo mkfs.vfat -n BOOT /dev/mapper/loop15p1
sudo mkfs.ext4 -F -L ROOTFS -O "^has_journal" /dev/mapper/loop15p2
#挂载到电脑上
sudo mkdir {/mnt/loopXp1,/mnt/loopXp2}
sudo mount /dev/mapper/loop15p1 /mnt/loopXp1
sudo mount /dev/mapper/loop15p2 /mnt/loopXp2
#复制至boot分区
sudo cp -r firmware/boot/* /mnt/loopXp1/
sudo cp linux/arch/arm64/boot/dts/broadcom/*.dtb /mnt/loopXp1
sudo cp linux/arch/arm64/boot/dts/overlays/*.dtb* /mnt/loopXp1/overlays/
sudo cp linux/arch/arm64/boot/dts/overlays/README /mnt/loopXp1/overlays/
sudo cp linux/arch/arm64/boot/Image /mnt/loopXp1/kernel8.img

写入cmdline.txt和config.txt

#cmdline.txt
sudo vim /mnt/loopXp1/cmdline.txt
console=serial0,115200 console=tty1 loglevel=2 root=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait fsck.repair=yes
#config.txt
# 以64位读取内核
arm_64bit=1
# 想要以ARMV8的模式启动,设置此选项
arm_control=0x200
# 内核的名字
kernel=kernel8.img
# u-boot进行引导kernel时延迟几秒
boot_delay=1
gpu_mem=16

将rootfs文件系统写入

cd ~/build/linux-rootfs/
sudo rsync -HPavz -q ./ /mnt/loopXp2

如果需要显示/boot 目录,可写入挂载信息

sudo vi /mnt/loopXp2/etc/fstab
LABEL=BOOT      /boot            vfat     defaults   0      1

将内核模块拷贝进来

cd ~/build
sudo cp -r lib/modules/ /mnt/loopXp2/lib/

取消挂载

sudo umount /mnt/loopXp*
sudo kpartx -dv rootfs.img

到这里镜像文件就制作完成了,加下来就能烧录点亮了,过几天我会更新一个镜像包供大家下载交流使用。 如果觉得有用也可以关注我的微信公众号: "微电脑",id: MRweidiannao (原创不易,转发请标注出处) 如有问题,可留言讨论

results matching ""

    No results matching ""