自己制作树莓派3B+ 64位系统(编译内核+rootfs制作)

本文章可通过微信公众平台观看: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
(原创不易,转发请标注出处)
如有问题,可留言讨论

下面是我自己运营的微信小程序“但行趣事”和公众号“微电脑”,更多的技术文章以及视频我会放到小程序和公众号当中,有志同道合的小伙伴也可以在小程序(联系客服按钮)或者公众号(直接留言)当中联系我们

但行趣事小程序
微电脑公众号
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Ubuntu 16.04 上建立交叉编译环境,可以按照以下步骤进行: 1. 安装交叉编译工具链 在命令行中执行以下命令: ``` sudo apt-get update sudo apt-get install gcc-arm-linux-gnueabihf ``` 这将安装 ARM 架构的交叉编译器。如果你要编译其他架构的内核,需要安装相应的交叉编译器。 2. 下载内核代码 可以从官网下载 Linux 内核代码,也可以使用 git 命令从官方仓库下载代码。例如,从官方仓库下载 Linux 5.14.6 版本的代码: ``` git clone --depth 1 --branch v5.14.6 git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git ``` 3. 配置编译选项 进入内核代码的目录,执行以下命令: ``` make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig ``` 这将打开内核配置界面,在这里可以选择编译选项,包括编译成模块还是静态链接,支持哪些硬件等等。 4. 编译内核 执行以下命令编译内核: ``` make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 ``` 其中 -j4 表示使用 4 个线程并行编译,可以根据自己的电脑配置调整。 5. 安装内核 执行以下命令安装内核: ``` sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=<path_to_rootfs> modules_install ``` 其中 <path_to_rootfs> 是根文件系统的路径,可以将内核模块安装到对应的目录下。 6. 生成镜像 执行以下命令生成内核镜像: ``` make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage ``` 这将生成 zImage 文件,可以使用该文件启动 ARM 设备。 以上就是在 Ubuntu 16.04 上建立交叉编译环境,并配置编译内核的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我雯子小姐的小爷

是雯子吖

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值