主包是站在大佬们的肩膀上完成的,感谢两位b站大佬:
热心网友003
Kindavid
搭建编译环境
理论上虚拟机,真机都可以,主包的主机是拯救者,系统是fedora43,所以主包这里参考嘉立创官方搭建docker环境。
首先建立一个文件夹专门用来给这个docker:
mkdir docker_tspi cd docker_tspi mkdir DISK vim dockerfiledockerfile如下:
FROM ubuntu:22.04 ENV DEBIAN_FRONTEND=noninteractive # 备份原源列表并替换为华为云镜像(修正正则) RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \ sed -i 's@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g' /etc/apt/sources.list && \ sed -i 's@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g' /etc/apt/sources.list # 更新并安装基础软件包(包括 locales 和编译所需工具) RUN apt update && apt install -y --no-install-recommends \ locales \ sudo \ gcc-aarch64-linux-gnu \ make \ && rm -rf /var/lib/apt/lists/* # 生成并设置 locale RUN locale-gen en_US.UTF-8 ENV LANG=en_US.UTF-8 # 创建用户 lckfb 并设置无密码 sudo RUN useradd -c 'lckfb user' -m -d /home/lckfb -s /bin/bash lckfb && \ echo '%sudo ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/nopasswd-sudo && \ chmod 440 /etc/sudoers.d/nopasswd-sudo && \ usermod -a -G sudo lckfb USER lckfb WORKDIR /home/lckfb创建docker镜像:
docker build -t lckfb_sdk_cmp .创建docker容器:
docker run --privileged --mount type=bind,source=🔴你的目录🔴/docker_tspi/DISK,target=/home/lckfb --name="lckfb_sdk_cmp_container" -h lckfb -it -v /dev:/dev lckfb_sdk_cmp安装编译linux内核需要的工具链:
wget https://developer.arm.com/-/media/Files/downloads/gnu/15.2.rel1/binrel/arm-gnu-toolchain-15.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz tar -xvf arm-gnu-toolchain-15.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz sudo mv arm-gnu-toolchain-15.2.rel1-x86_64-aarch64-none-linux-gnu /usr/local/ vim /etc/profile追加以下内容:
export PATH=$PATH:/usr/local/arm-gnu-toolchain-15.2.rel1-x86_64-aarch64-none-linux-gnu/bin使得配置生效:
source /etc/profile下面编译过程中缺什么包就自己sudo apt install一下,比如:
sudo apt install python-is-python3编译uboot 和 miniloader
cd ~ git clone https://github.com/rockchip-linux/u-boot.git git clone https://github.com/rockchip-linux/rkbin.git cd u-boot ./make.sh rk3566 CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make u-boot.itb -j32目录下的u-boot.itb和rk356x_spl_loader_v1.23.114.bin复制出来备用
编译linux内核
主包这里使用6.19内核,推荐选择不带rc的版本,如果带rc的话,编译出来可能有后缀,那您就参考大佬热心网友003的这篇文章:
cd ~ git clone -b v6.19 https://github.com/torvalds/linux.git cd linux vim arch/arm64/Makefile在最下面追加:
MAKE_MODULES ?= y %.img: ifeq ("$(CONFIG_MODULES)$(MAKE_MODULES)$(srctree)","yy$(objtree)") $(Q)$(MAKE) rockchip/$*.dtb Image.lz4 modules else $(Q)$(MAKE) rockchip/$*.dtb Image.lz4 endif $(Q)$(srctree)/scripts/mkimg --dtb $*.dtb CLEAN_DIRS += out CLEAN_FILES += boot.img kernel.img resource.img zboot.img从泰山派官方的sdk里面提取三个脚本文件,这个sdk需要编译过的,刚刚解压的找不到resource_tool这个文件:
cp -a 🔴你的泰山派sdk的目录🔴/tspi-linux-sdk/kernel/scripts/mkimg scripts/ cp -a 🔴你的泰山派sdk的目录🔴/tspi-linux-sdk/kernel/scripts/resource_tool scripts/ cp -a 🔴你的泰山派sdk的目录🔴/tspi-linux-sdk/kernel/scripts/mkbootimg scripts/可能需要给一下权限:
chmod +x scripts/mkimg chmod +x scripts/resource_tool chmod +x scripts/mkbootimg然后去大佬教程里面下载这个tspi_defconfig,大佬给了两种生成.config的方式,主包选择第二种。下载好了把这个tspi_defconfig文件移动到:
mv tspi_defconfig arch/arm64/configs/tspi_defconfig然后执行:
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- tspi_defconfig然后修改设备树文件:
vim arch/arm64/boot/dts/rockchip/rk3566-lckfb-tspi.dts原厂的2+16的修改为(1+0的主包不知道了):
aliases { mmc0 = &sdhci; //emmc mmc1 = &sdmmc0; //sd卡 mmc2 = &sdmmc1; }; chosen: chosen { bootargs = "root=/dev/mmcblk0p3 rootfstype=ext4 rw rootwait console=ttyS2,1500000"; stdout-path = "serial2:1500000n8"; };下面搜索一下:sdmmc0的部分,大佬说:(标识sd卡,更改vccio_1.8v为vccio_sd,如果不改的话,能通过sd卡启动系统,但是在emmc的系统里检测不到sd卡),我没测试sd卡,但是先修改为:
&sdmmc0 { bus-width = <4>; cap-mmc-highspeed; cap-sd-highspeed; disable-wp; max-frequency = <150000000>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>; sd-uhs-sdr104; supports-sd; vmmc-supply = <&vcc3v3_sd>; vqmmc-supply = <&vccio_sd>; status = "okay"; };开始编译
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- menuconfig # 自己选自己要的功能什么的,不修改也行 make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- rk3566-lckfb-tspi.img -j32 make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- modules_install INSTALL_MOD_PATH=./modules然后目录下得到的boot.img复制出来备用。如果没有boot.img的话,检查mkimg,mkbootimg的权限。报错的话可以去rockchip官方的github里面下载这三个脚本试试。目录下的modules文件夹也拿出来给制作rootfs备用。
制作rootfs
这里我使用的是ubuntu24,据说ubuntu26的lts也快出了,主包有空再试试
cd ~ wget https://cdimage.ubuntu.com/ubuntu-base/releases/24.04/release/ubuntu-base-24.04.3-base-arm64.tar.gz sudo mkdir ubuntu2404-rootfs sudo tar -xvpf ubuntu-base-24.04.4-base-armhf.tar.gz -C ubuntu2404-rootfs sudo cp /etc/resolv.conf ./ubuntu2404-rootfs/etc/resolv.conf sudo mount -o bind /dev ./ubuntu2404-rootfs/dev sudo mount -o bind /proc ./ubuntu2404-rootfs/proc sudo mount -o bind /sys ./ubuntu2404-rootfs/sys sudo mount -o bind /run ./ubuntu2404-rootfs/run sudo chroot ./ubuntu2404-rootfs /bin/bash主包这里是x86的电脑,一般x86的电脑好像都会报错,得使用其他方法进去:
sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc echo ':qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:F' | sudo tee /proc/sys/fs/binfmt_misc/register sudo chroot ./ubuntu2404-rootfs /bin/bash变成
root@lckfb:/#
就是ok了,然后:
apt update apt upgrade -y apt install -y sudo udev vim wget net-tools ethtool ifupdown iputils-ping openssh-server git passwd root #自己设置一个root密码自己记住 exit sudo umount -l ./ubuntu2404-rootfs/run sudo umount -l ./ubuntu2404-rootfs/sys sudo umount -l ./ubuntu2404-rootfs/proc sudo umount -l ./ubuntu2404-rootfs/dev把编译linux内核时得到的modules移动到rootfs里面:
cp -r 🔴你的modules的目录🔴/modules/lib/modules/6.19.0/ ubuntu2404-rootfs/lib/modules/移植wifi和蓝牙固件:
这部分我还没完全测试好,测试好再修改,目前是拿: https://github.com/pathpass2/linux/tree/master/tspi_wifi_firmware 把名字改为: brcmfmac43430-sdio.bin brcmfmac43455-sdio.lckfb,tspi-rk3566.bin brcmfmac43430-sdio.txt brcmfmac43455-sdio.lckfb,tspi-rk3566.txt 然后放入: /lib/firmware/brcm/ 我的是这样: xiaogou@tspi:~$ ls /lib/firmware/brcm/ BCM43430A1.hcd brcmfmac43430-sdio.bin brcmfmac43455-sdio.lckfb,tspi-rk3566.bin bcm4329.hcd brcmfmac43430-sdio.txt brcmfmac43455-sdio.lckfb,tspi-rk3566.txt BCM43430A1.hcd和bcm4329.hcd是来自armbian/firmware仓库 目前情况是wifi和蓝牙可以正常使用,但是初始化会报错。然后制作rootfs的镜像:
sudo dd if=/dev/zero of=ubuntu2404_base.img bs=1M count=4096 sudo mkfs.ext4 -F -L rootfs ubuntu2404_base.img # 修正原命令卷标错误 mkdir -p mnt sudo mount -o loop ubuntu2404_base.img mnt/ sudo cp -rfp ./ubuntu2404-rootfs/* mnt/ sudo umount mnt/ rm -rf mnt/ sudo e2fsck -p -f ubuntu2404_base.img sudo resize2fs -M ubuntu2404_base.img得到的ubuntu2404_base.img拿出来备用
下载系统
目前我们已经得到了:
- rk356x_spl_loader_v1.23.114.bin
- u-boot.itb
- boot.img
- ubuntu2404_base.img
放到同一个文件夹下面,然后:
vim parameter.txt添加:
FIRMWARE_VER: 1.0 MACHINE_MODEL: RK3566 MACHINE_ID: 007 MANUFACTURER: heiyt MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: 0xffffffff CHECK_MASK: 0x80 PWR_HLD: 0,0,A,0,1 TYPE: GPT CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00020000@0x00008000(boot),0x00c00000@0x00040000(rootfs) uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9然后进入maskrom模式,烧录:
rkdeveloptool ld # 说明:执行后确认设备已识别 rkdeveloptool db rk356x_spl_loader_v1.23.114.bin rkdeveloptool ef rkdeveloptool gpt parameter.txt rkdeveloptool ppt rkdeveloptool ul rk356x_spl_loader_v1.23.114.bin rkdeveloptool wl 0x4000 u-boot.itb rkdeveloptool wl 0x8000 boot.img rkdeveloptool wl 0x40000 ubuntu2404_base.img rkdeveloptool rd然后就好了:
xiaogou@tspi:~$ neofetch .-/+oossssoo+/-. xiaogou@tspi `:+ssssssssssssssssss+:` ------------ -+ssssssssssssssssssyyssss+- OS: Ubuntu 24.04.4 LTS aarch64 .ossssssssssssssssssdMMMNysssso. Host: LCKFB Taishan Pi RK3566 /ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 6.19.0 +ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 2 hours, 58 mins /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 575 (dpkg) .ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.2.21 +sssshhhyNMMNyssssssssssssyNMMMysssssss+ Terminal: /dev/pts/0 ossyNMMMNyMMhsssssssssssssshmmmhssssssso CPU: (4) @ 1.800GHz ossyNMMMNyMMhsssssssssssssshmmmhssssssso Memory: 378MiB / 1951MiB +sssshhhyNMMNyssssssssssssyNMMMysssssss+ .ssssssssdMMMNhsssssssssshNMMMdssssssss. /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/ +sssssssssdmydMMMMMMMMddddyssssssss+ /ssssssssssshdmNNNNmyNMMMMhssssss/ .ossssssssssssssssssdMMMNysssso. -+sssssssssssssssssyyyssss+- `:+ssssssssssssssssss+:` .-/+oossssoo+/-.参考大佬们的文章:
https://share.note.youdao.com/s/9fsjQWIg https://blog.csdn.net/u010398722/article/details/158538655?sharetype=blogdetail&sharerId=158538655&sharerefer=PC&sharesource=u010398722&spm=1011.2480.3001.8118