为了实验ebpf,需要自己编译内核开启相关选项,正好手头有树莓派的板子,所以正好用上。
更换内核
首先我自己用官方工具在sd卡上烧录了64位无桌面的系统,然后按照官方的文档,进行了内核的交叉编译,更换后使用uname -a发现确实更换成功了。wsl2挂载sd卡,折腾了好久,详见WSL2简单探索
挂载sd卡:
#!/bin/bashsudo mkdir -p /mnt
sudo mkdir -p /mnt/fat32
sudo mkdir -p /mnt/ext4
sudo mount /dev/sdd1 /mnt/fat32
sudo mount /dev/sdd2 /mnt/ext4
卸载sd卡
#!/bin/bashsudo umount /mnt/fat32
sudo umount /mnt/ext4
编译:
#!/bin/bashKERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs -j12
安装:
#!/bin/bash
root=/mnt
bootfs=${root}/fat32
rootfs=${root}/ext4
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=${rootfs} modules_install
#sudo mkdir -p ${bootfs}
#sudo mkdir -p ${bootfs}/overlays/
sudo cp arch/arm64/boot/Image ${bootfs}/kernel-myconfig.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb ${bootfs}/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* ${bootfs}/overlays/
sudo cp arch/arm64/boot/dts/overlays/README ${bootfs}/overlays/
#tar -acvf output.tar.gz output/
#sudo scp output.tar.gz pi@link.local:/home/pi
安装uboot使用tftp升级。
使用以下脚本编译一次成功
#!/bin/bash
ARCH=arm64
CROSS_COMPILE=aarch64-linux-gnu-
make rpi_3_defconfig
make -j 12
config.h的配置,最主要的可能是这一句。
kernel=u-boot.bin
然而编好改完启动不起来,怀疑是配置有问题,但是看了官方文档,确认64位 3b的板子就是这个defconfig.
重新编译另一个defconfig,成功加载。
#!/bin/bash
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
#make rpi_3_defconfig
make rpi_arm64_defconfig
make -j 12
最终uboot能成功加载,并且从sd卡启动系统成功:
U-Boot> help
? - alias for 'help'
...
fatload - load binary file from a dos filesystem
fatls - list files in a directory (default /)
mmc - MMC sub system
U-Boot> mmc partPartition Map for MMC device 0 -- Partition Type: DOSPart Start Sector Num Sectors UUID Type1 8192 524288 95d33193-01 0c2 532480 61988864 95d33193-02 83
U-Boot> fatls mmc 0:1 overlays/29707 bcm2710-rpi-2-b.dtb18693 COPYING.linux1594 LICENCE.broadcom145 issue.txt
...52476 bootcode.bin131 cmdline.txt2217 config.txt
...8219600 kernel8.img624640 u-boot.bin
...21590528 kernel-myconfig.img
41 file(s), 4 dir(s)U-Boot> fatload mmc 0:1 ${kernel_addr_r} kernel-myconfig.img
21590528 bytes read in 903 ms (22.8 MiB/s)
U-Boot> booti ${kernel_addr_r} - ${fdt_addr}
Moving Image from 0x80000 to 0x200000, end=17e0000
## Flattened Device Tree blob at 2eff7f00Booting using the fdt blob at 0x2eff7f00
Working FDT set to 2eff7f00Using Device Tree in place at 000000002eff7f00, end 000000002f002ffe
Working FDT set to 2eff7f00
树莓派4B U-boot移植并加载裸机程序
在树莓派3b上运行uboot
树莓派4 嵌入式Linux开发过程详解
使用U-Boot让树莓派从U盘启动
RPI 3 booting from U-boot