当前位置:   article > 正文

Rockchip RK3588 - 移植uboot 2017.09 & linux 6.1(友善之家脚本方式)

linux-dtb-legacy-rockchip-rk3588_1.1.8_arm64.deb

----------------------------------------------------------------------------------------------------------------------------

开发板NanoPC-T6开发板eMMC256GBLPDDR416GB
显示屏15.6英寸HDMI接口显示屏u-boot2017.09linux6.1
----------------------------------------------------------------------------------------------------------------------------

本节将会介绍官方固件方式uboot 2017.09以及linux 6.1内核的编译过程,教程来自友善之家官方手册。

一、下载工具和固件

1.1 下载工具
  1. root@zhengyang:/work/sambashare/rk3588/friendly# git clone https://github.com/friendlyarm/sd-fuse_rk3588.git --single-branch -b kernel-6.1.y
  2. root@zhengyang:/work/sambashare/rk3588/friendly# git clone https://521github.com/friendlyarm/sd-fuse_rk3588.git --single-branch -b kernel-6.1.y #同上,二选一
  3. root@zhengyang:/work/sambashare/rk3588/friendly# cd sd-fuse_rk3588/

如果第一个下载比较慢,可以尝试使用第二个命令,切换镜像源。后面涉及到的github源码下载,均可切换为521github

1.2 下载固件

系统镜像,这里我们以debian-bullseye-desktop-arm64 为例,下载地址:https://download.friendlyelec.com/NanoPC-T6

debian-bullseye-desktop-arm64-images.tgz(位于"\03_分区镜像文件"目录下,以实际下载的文件为准)拷贝到/work/sambashare/rk3588/friendly/sd-fuse_rk3588目录下;

  1. root@zhengyang:/work/sambashare/rk3588/sd-fuse_rk3588# ll debian*
  2. -rwxrw-rw- 1 root root 1590466719 Dec 3 01:49 debian-bullseye-desktop-arm64-images.tgz*
  3. -rwxrw-rw- 1 root root 75 Nov 18 19:05 debian-bullseye-desktop-arm64-images.tgz.hash.md5*
  4. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# tar -xvzf debian-bullseye-desktop-arm64-images.tgz

解压得到debian-bullseye-desktop-arm64文件夹;

  1. root@zhengyang:/work/sambashare/rk3588/sd-fuse_rk3588# ll debian-bullseye-desktop-arm64
  2. -rw-r--r-- 1 root root 8072140 May 28 2023 boot.img
  3. -rw-r--r-- 1 root root 1424 May 28 2023 dtbo.img
  4. -rw-r--r-- 1 root root 307200 Sep 8 23:33 idbloader.img
  5. -rw-r--r-- 1 root root 64 Nov 17 10:03 info.conf
  6. -rw-r--r-- 1 root root 35551252 Nov 16 16:17 kernel.img
  7. -rw-r--r-- 1 root root 471488 Sep 8 23:33 MiniLoaderAll.bin
  8. -rw-r--r-- 1 root root 49152 May 28 2023 misc.img
  9. -rw-r--r-- 1 root root 470 Nov 17 10:03 parameter.txt
  10. -rw-r--r-- 1 root root 6227456 Nov 16 16:17 resource.img
  11. -rw-r--r-- 1 root root 3992675220 Nov 17 10:03 rootfs.img
  12. -rw-r--r-- 1 root root 4194304 Sep 8 23:33 uboot.img
  13. -rw-r--r-- 1 root root 159868 Nov 17 10:03 userdata.img

二、编译内核

2.1 下载内核源码

下载内核源代码:

root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi6-v6.1.y kernel-rk3588

保存到当前路径kernel-rk3588文件夹中。

2.2 修改build-kernel.sh脚本

在编译内核之前我们需要修改build-kernel.sh脚本;

根据自己安装的交叉编译环境,这里我需要替换如下代码为:

CROSS_COMPILE=aarch64-linux-gnu-  修改为 CROSS_COMPILE=arm-linux-

并且将如下代码移除:

  1. export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
  2. if [ ! -d /opt/FriendlyARM/toolchain/11.3-aarch64 ]; then
  3. echo "please install aarch64-gcc-11.3 first, using these commands: "
  4. echo " git clone https://github.com/friendlyarm/prebuilts.git -b master --depth 1"
  5. echo " cd prebuilts/gcc-x64"
  6. echo " sudo tar xvf toolchain-11.3-aarch64.tar.xz -C /"
  7. exit 1
  8. fi

我安装的交叉编译环境位于/usr/local/arm/12.2.1,并且我已经将其配置为全局环境变量了。

此外我们还需要修改./tools/update_kernel_bin_to_img.sh,配置;

CROSS_COMPILE=arm-linux-
2.3 编译内核

执行编译内核命令,编译完成后会自动更新debian-bullseye-desktop-arm64目录下的相关镜像文件,包括文件系统中的内核模块 (rootfs.img会被解包并重新打包,即更新/lib/modules下的驱动模块);

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# KERNEL_SRC=$PWD/kernel-rk3588 ./build-kernel.sh debian-bullseye-desktop-arm64
  2. using official logo.
  3. using official kernel logo.
  4. HOSTCC scripts/basic/fixdep
  5. HOSTCC scripts/kconfig/conf.o
  6. YACC scripts/kconfig/zconf.tab.c
  7. LEX scripts/kconfig/zconf.lex.c
  8. HOSTCC scripts/kconfig/zconf.tab.o
  9. HOSTLD scripts/kconfig/conf
  10. #
  11. # configuration written to .config
  12. #
  13. WRAP arch/arm64/include/generated/uapi/asm/errno.h
  14. WRAP arch/arm64/include/generated/uapi/asm/ioctl.h
  15. ......

其中:

  • KERNEL_SRC配置为内核源码所在路径;
  • $1配置为目标OS系统debian-bullseye-desktop-arm64

如果需要修改开机logo,只需要替换kernel-rockchip目录下的logo.bmplogo_kernel.bmp文件即可。

编译完成后会在./out路径下生成若干文件:ogo_kernel.bmp文件即可;

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll out/
  2. drwxr-xr-x 7 root root 4096 Dec 4 22:43 cryptodev-linux/
  3. drwxr-xr-x 4 root root 4096 Dec 4 22:43 nft-fullcone/
  4. drwxr-xr-x 3 root root 4096 Dec 4 22:42 output_rk3588_kmodules/
  5. drwxr-xr-x 3 root root 4096 Dec 4 22:43 r8125/
  6. drwxr-xr-x 22 root root 4096 Dec 4 22:47 rootfs_new/
  7. drwxr-xr-x 8 root root 4096 Dec 4 22:46 rtl8812au/
  8. drwxr-xr-x 9 root root 4096 Dec 4 22:44 rtl8821CU/
  9. drwxr-xr-x 8 root root 4096 Dec 4 22:45 rtl8822bu/
  10. drwxr-xr-x 8 root root 4096 Dec 4 22:45 rtl8822cs/
  11. drwxr-xr-x 4 root root 16384 Dec 4 22:43 rtw88/

其中:

  • cryptodev-linuxrtl8812aurtl8821CUrtl8822burtl8822csrtw88cryptodev以及usb wifi驱动源码;
  • output_rk3588_kmodules:为内核驱动模块;
  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ls out/output_rk3588_kmodules/lib/modules/6.1.25/
  2. cryptodev.ko modules.builtin.bin modules.softdep rtl8821CU.ko rtw_8723du.ko rtw_8822bs.ko rtw_sdio.ko
  3. kernel modules.builtin.modinfo modules.symbols rtl8822bu.ko rtw_8821ce.ko rtw_8822ce.ko rtw_usb.ko
  4. modules.alias modules.dep modules.symbols.bin rtl8822cs.ko rtw_8821c.ko rtw_8822c.ko
  5. modules.alias.bin modules.dep.bin nft_fullcone.ko rtw_8723de.ko rtw_8821cs.ko rtw_8822cs.ko
  6. modules.builtin modules.devname r8125.ko rtw_8723d.ko rtw_8822be.ko rtw_core.ko
  7. modules.builtin.alias.bin modules.order rtl8812au.ko rtw_8723ds.ko rtw_8822b.ko rtw_pci.ko
  • rootfs_new:新的根文件系统的源码;

此外debian-bullseye-desktop-arm64目录下的内核镜像和根文件系统被更新了;

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll debian-bullseye-desktop-arm64
  2. 总用量 3962492
  3. drwxr-xr-x 2 root root 4096 Dec 4 22:48 ./
  4. drwxr-xr-x 11 root root 4096 Dec 4 22:42 ../
  5. -rw-r--r-- 1 root root 8072140 May 28 2023 boot.img
  6. -rw-r--r-- 1 root root 1424 May 28 2023 dtbo.img
  7. -rw-r--r-- 1 root root 307200 Sep 8 23:33 idbloader.img
  8. -rw-r--r-- 1 root root 64 Nov 17 10:03 info.conf
  9. -rw-r--r-- 1 root root 37910548 Dec 4 22:46 kernel.img # 更新了
  10. -rw-r--r-- 1 root root 471488 Sep 8 23:33 MiniLoaderAll.bin
  11. -rw-r--r-- 1 root root 49152 May 28 2023 misc.img
  12. -rw-r--r-- 1 root root 470 Dec 4 22:48 parameter.txt # 更新了
  13. -rw-r--r-- 1 root root 5785600 Dec 4 22:46 resource.img # 更新了
  14. -rw-r--r-- 1 root root 4000600956 Dec 4 22:48 rootfs.img # 更新了
  15. -rw-r--r-- 1 root root 4194304 Sep 8 23:33 uboot.img
  16. -rw-r--r-- 1 root root 159868 Nov 17 10:03 userdata.img
2.4 build-kernel.sh分析

如果感兴趣可以分析一下./build-kernel.sh的主要工作流程。

2.4.1 配置内核

首先配置内核:

  1. cd ${KERNEL_SRC}
  2. [ -d .git ] && git clean -dxf # 如果不想每次都重新编译,将改行屏蔽
  3. touch .scmversion
  4. make CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} ${KCFG}

其中:

  • CROSS_COMPILE被配置成arm-linux-
  • ARCH被配置成arm64
  • KCFG被配置成nanopi6_linux_defconfig;
2.4.2 编译内核
make CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} ${KALL} -j$(nproc)

其中:

  • KALL被配置成nanopi6-images;编译规则定义在arch/arm64/Makefile文件;
  • $(nproc):用于获取系统中可用的处理器核心数;

arch/arm64/Makefile文件;

  1. # 编译生成kernel.img
  2. kernel.img: Image
  3. $(Q)scripts/mkkrnlimg $(objtree)/arch/arm64/boot/Image $(objtree)/kernel.img >/dev/null
  4. @echo ' Image: kernel.img is ready'
  5. ifeq ($(CONFIG_VENDOR_FRIENDLYELEC),y)
  6. DTBS := rk3*-nanopi*-rev*.dtb
  7. # 调用scripts/mkimg编译生成resource.img(由设备树、图片资源文件组成,不包含内核)
  8. nanopi4-images: dtbs kernel.img $(LOGO) $(LOGO_KERNEL)
  9. $(Q)$(srctree)/scripts/mkimg --dtb $(DTBS) --keep-dtb-name
  10. nanopi5-images: nanopi4-images
  11. nanopi6-images: nanopi4-images
  12. PHONY += nanopi4-images nanopi5-images nanopi6-images
  13. endif

因此该步骤执行完成后,会在./kernel-rk3588目录下生成·kernel.imgresource.img`文件 ;

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll ./kernel-rk3588/kernel.img
  2. -rw-r--r-- 1 root root 37910548 Dec 4 22:54 ./kernel-rk3588/kernel.img
  3. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll ./kernel-rk3588/resource.img
  4. -rw-r--r-- 1 root root 5785600 Dec 4 22:54 ./kernel-rk3588/resource.img
2.4.3 编译驱动模块

执行make modules命令编译驱动模块:

  1. rm -rf ${KMODULES_OUTDIR}
  2. mkdir -p ${KMODULES_OUTDIR}
  3. make CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} INSTALL_MOD_PATH=${KMODULES_OUTDIR} modules -j$(nproc)
  4. if [ $? -ne 0 ]; then
  5. echo "failed to build kernel modules."
  6. exit 1
  7. fi

其中:

  • 内核模块路径KMODULES_OUTDIR被配置为./out/output_rk3588_kmodules
  1. TOPPATH=$PWD
  2. OUT=$TOPPATH/out
  3. if [ ! -d $OUT ]; then
  4. echo "path not found: $OUT"
  5. exit 1
  6. fi
  7. KMODULES_OUTDIR="${OUT}/output_${SOC}_kmodules" # out/output_rk3588_kmodules
2.4.4 安装驱动模块

执行make modules_install命令安装驱动模块:

  1. make CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} INSTALL_MOD_PATH=${KMODULES_OUTDIR} modules_install
  2. if [ $? -ne 0 ]; then
  3. echo "failed to build kernel modules."
  4. exit 1
  5. fi
  6. # 用于构建并输出内核版本号
  7. KERNEL_VER=`make CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} kernelrelease`
  8. # 如果模块依赖文件modules.dep不存在,则生成内核模块的依赖关系
  9. [ ! -f "${KMODULES_OUTDIR}/lib/modules/${KERNEL_VER}/modules.dep" ] && depmod -b ${KMODULES_OUTDIR} -E Module.symvers -F System.map -w ${KERNEL_VER}
  10. # 去除驱动中的符号信息
  11. (cd ${KMODULES_OUTDIR} && find . -name \*.ko | xargs ${CROSS_COMPILE}strip --strip-unneeded)

(1) 接着编译cryptodev.ko驱动,并拷贝到内核模块路径out/output_rk3588_kmodules/lib/modules/6.1.25/

  1. # build cryptodev-linux
  2. (cd ${OUT} && {
  3. if [ ! -d cryptodev-linux ]; then
  4. git clone https://github.com/cryptodev-linux/cryptodev-linux.git -b master cryptodev-linux
  5. fi
  6. (cd cryptodev-linux && {
  7. make CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} KERNEL_DIR=${KERNEL_SRC}
  8. cp cryptodev.ko ${KMODULES_OUTDIR}/lib/modules/${KERNEL_VER} -afv
  9. })
  10. })

cryptodev-linux 是一个linux内核模块,它提供了一个加密硬件的接口,可在用户空间中使用该接口来执行加密和解密操作。

(2) 接着编译usb wifi driver

  1. if [ ${BUILD_THIRD_PARTY_DRIVER} -eq 1 ]; then
  2. for (( i=0; i<${#KERNEL_3RD_DRIVERS[@]}; i++ ));
  3. do
  4. build_external_module ${KERNEL_3RD_DRIVERS[$i]} ${KERNEL_3RD_DRIVER_BRANCHES[$i]} ${KERNEL_3RD_DRIVER_NAME[$i]}
  5. done
  6. fi
2.4.5 更新内核模块依赖

使用depmod命令更新内核模块依赖:

  1. (cd ${KMODULES_OUTDIR}/lib/modules/${KERNEL_VER}/ && {
  2. rm -rf ./build ./source
  3. echo "depmod ${KMODULES_OUTDIR} ${KERNEL_VER} ..."
  4. depmod -a -b ${KMODULES_OUTDIR} ${KERNEL_VER}
  5. })

其中:

  • -a 选项表示更新所有已经加载或已知的内核模块的依赖关系;
  • -b 选项用于指定内核模块所在的目录;
2.4.6 重新打包rootfs.img

执行./tools/update_kernel_bin_to_img.sh脚本解压并重新打包rootfs.img

./tools/update_kernel_bin_to_img.sh ${OUT} ${KERNEL_SRC} ${TARGET_OS} ${TOPPATH}/prebuilt

其中:

  • OUT配置为./out
  • KERNEL_SRC配置为./kernel-rk3588
  • TARGET_OS配置为debian-bullseye-desktop-arm64
  • TOPPATH配置为./

其主要工作就是:

  • 挂载根文件系统./debian-bullseye-desktop-arm64/rootfs.img到某个路径;
  • 删除原有的驱动模块,即mount_point/lib/modules/*文件
  • 使用cp -af将新编译的驱动模块拷贝到mount_point/lib/modules
  • 如果存在固件(./out/output_rk3588_kmodules/lib//lib/firmware目录下),使用cp -af将新编译的固件库拷贝到mount_point/lib/firmware
  • 重新制作根文件系统镜像文件;

update_kernel_bin_to_img.sh脚本源码如下:

  1. #!/bin/bash
  2. set -eu
  3. [ -f ${PWD}/mk-emmc-image.sh ] || {
  4. echo "Error: please run at the script's home dir"
  5. exit 1
  6. }
  7. # Automatically re-run script under sudo if not root
  8. if [ $(id -u) -ne 0 ]; then
  9. echo "Re-running script under sudo..."
  10. sudo --preserve-env "$0" "$@"
  11. exit
  12. fi
  13. TOP=$PWD
  14. export MKE2FS_CONFIG="${TOP}/tools/mke2fs.conf"
  15. if [ ! -f ${MKE2FS_CONFIG} ]; then
  16. echo "error: ${MKE2FS_CONFIG} not found."
  17. exit 1
  18. fi
  19. true ${MKFS:="${TOP}/tools/mke2fs"}
  20. true ${SOC:=rk3588}
  21. ARCH=arm64
  22. KCFG=nanopi5_linux_defconfig
  23. KIMG=kernel.img
  24. KDTB=resource.img
  25. CROSS_COMPILE=arm-linux- #aarch64-linux-gnu-
  26. # ${OUT} ${KERNEL_SRC} ${TOPPATH}/${TARGET_OS} ${TOPPATH}/prebuilt
  27. if [ $# -ne 4 ]; then
  28. echo "bug: missing arg, $0 needs four args"
  29. exit
  30. fi
  31. OUT=$1
  32. KERNEL_BUILD_DIR=$2
  33. TARGET_OS=$3
  34. PREBUILT=$4
  35. KMODULES_OUTDIR="${OUT}/output_${SOC}_kmodules"
  36. (cd ${KERNEL_BUILD_DIR} && {
  37. cp ${KIMG} ${KDTB} ${TOP}/${TARGET_OS}/
  38. })
  39. # copy kernel modules to rootfs.img
  40. if [ -f ${TARGET_OS}/rootfs.img ]; then # 进入,重新打包rootfs.img
  41. echo "copying kernel module and firmware to rootfs ..."
  42. # Extract rootfs from img
  43. simg2img ${TARGET_OS}/rootfs.img ${TARGET_OS}/r.img
  44. mkdir -p ${OUT}/rootfs_mnt
  45. mkdir -p ${OUT}/rootfs_new
  46. mount -t ext4 -o loop ${TARGET_OS}/r.img ${OUT}/rootfs_mnt
  47. if [ $? -ne 0 ]; then
  48. echo "failed to mount ${TARGET_OS}/r.img."
  49. exit 1
  50. fi
  51. rm -rf ${OUT}/rootfs_new/*
  52. cp -af ${OUT}/rootfs_mnt/* ${OUT}/rootfs_new/
  53. umount ${OUT}/rootfs_mnt
  54. rm -rf ${OUT}/rootfs_mnt
  55. rm -f ${TARGET_OS}/r.img
  56. # Processing rootfs_new
  57. # Here s5pxx18 is different from h3/h5
  58. [ -d ${KMODULES_OUTDIR}/lib/firmware ] && cp -af ${KMODULES_OUTDIR}/lib/firmware/* ${OUT}/rootfs_new/lib/firmware/
  59. rm -rf ${OUT}/rootfs_new/lib/modules/*
  60. cp -af ${KMODULES_OUTDIR}/lib/modules/* ${OUT}/rootfs_new/lib/modules/
  61. MKFS_OPTS="-E android_sparse -t ext4 -L rootfs -M /root -b 4096"
  62. case ${TARGET_OS} in
  63. friendlywrt* | buildroot*)
  64. # set default uid/gid to 0
  65. MKFS_OPTS="-0 ${MKFS_OPTS}"
  66. ;;
  67. *)
  68. ;;
  69. esac
  70. # Make rootfs.img
  71. ROOTFS_DIR=${OUT}/rootfs_new
  72. case ${TARGET_OS} in
  73. friendlywrt*)
  74. echo "prepare kernel modules for friendlywrt ..."
  75. ${TOP}/tools/prepare_friendlywrt_kernelmodules.sh ${ROOTFS_DIR}
  76. ;;
  77. *)
  78. ;;
  79. esac
  80. # clean device files
  81. (cd ${ROOTFS_DIR}/dev && find . ! -type d -exec rm {} \;)
  82. # calc image size
  83. IMG_SIZE=$(((`du -s -B64M ${ROOTFS_DIR} | cut -f1` + 3) * 1024 * 1024 * 64))
  84. IMG_BLK=$((${IMG_SIZE} / 4096))
  85. INODE_SIZE=$((`find ${ROOTFS_DIR} | wc -l` + 128))
  86. # make fs
  87. [ -f ${TARGET_OS}/rootfs.img ] && rm -f ${TARGET_OS}/rootfs.img
  88. ${MKFS} -N ${INODE_SIZE} ${MKFS_OPTS} -d ${ROOTFS_DIR} ${TARGET_OS}/rootfs.img ${IMG_BLK}
  89. if [ ${TARGET_OS} != "eflasher" ]; then
  90. case ${TARGET_OS} in
  91. openmediavault-*)
  92. # disable overlayfs for openmediavault
  93. cp ${TOP}/prebuilt/parameter-ext4.txt ${TOP}/${TARGET_OS}/parameter.txt
  94. ;;
  95. *)
  96. ${TOP}/tools/generate-partmap-txt.sh ${IMG_SIZE} ${TARGET_OS}
  97. ;;
  98. esac
  99. fi
  100. else
  101. echo "not found ${TARGET_OS}/rootfs.img"
  102. exit 1
  103. fi
2.5 编译内核头文件

编译内核头文件运行如下命令:

root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# MK_HEADERS_DEB=1 BUILD_THIRD_PARTY_DRIVER=0 KERNEL_SRC=$PWD/kernel-rk3588 ./build-kernel.sh debian-bullseye-desktop-arm64

这里设置了MK_HEADERS_DEB=1表示编译内核头文件;

这里我们分析一下内核头文件的编译过程,其实现代码如下:

  1. if [ ${MK_HEADERS_DEB} -eq 1 ]; then
  2. # 设置内核头文件dep包路径为 ./out/linux-headers-6.1.25.deb
  3. KERNEL_HEADERS_DEB=${OUT}/linux-headers-${KERNEL_VER}.deb
  4. rm -f ${KERNEL_HEADERS_DEB}
  5. # 1. 重点 构建debian包
  6. make CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} bindeb-pkg
  7. if [ $? -ne 0 ]; then
  8. echo "failed to build kernel header."
  9. exit 1
  10. fi
  11. # 跳转到 ./kernel-rk3588/debian/linux-headers目录下
  12. (cd ${KERNEL_SRC}/debian/linux-headers && {
  13. # 删除usr/src/linux-headers*/scripts/子目录下以 .o 结尾的文件和以 .*.cmd结尾的隐藏文件
  14. find usr/src/linux-headers*/scripts/ \
  15. -name "*.o" -o -name ".*.cmd" | xargs rm -rf
  16. # 2. 设置头文件脚本目录./files/linux-headers-5.10-bin_arm64/scripts
  17. HEADERS_SCRIPT_DIR=${TOPPATH}/files/linux-headers-5.10-bin_arm64/scripts
  18. if [ -d ${HEADERS_SCRIPT_DIR} ]; then
  19. # 拷贝脚本文件到 ./kernel-rk3588/debian/linux-headers/usr/src/linux-headers-6.1.25/scripts/
  20. cp -avf ${HEADERS_SCRIPT_DIR}/* ./usr/src/linux-headers-*${KERNEL_VER}*/scripts/
  21. if [ $? -ne 0 ]; then
  22. echo "failed to copy bin file to /usr/src/linux-headers-${KERNEL_VER}."
  23. exit 1
  24. fi
  25. else
  26. echo "not found files/linux-headers-x.y.z-bin_arm64, why?"
  27. exit 1
  28. fi
  29. find . -type f ! -path './DEBIAN/*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums
  30. })
  31. # 3. 使用dpkg工具将指定的目录打包成一个debian软件包
  32. dpkg-deb -Zgzip -b ${KERNEL_SRC}/debian/linux-headers ${KERNEL_HEADERS_DEB}
  33. if [ $? -ne 0 ]; then
  34. echo "failed to re-make deb package."
  35. exit 1
  36. fi
  37. # clean up 移除./路径下的xxx.deb文件
  38. (cd $TOPPATH && {
  39. rm -f linux-*${KERNEL_VER}*_arm64.buildinfo
  40. rm -f linux-*${KERNEL_VER}*_arm64.changes
  41. rm -f linux-headers-*${KERNEL_VER}*_arm64.deb
  42. rm -f linux-image-*${KERNEL_VER}*_arm64.deb
  43. rm -f linux-libc-dev_*${KERNEL_VER}*_arm64.deb
  44. })
  45. fi

接下来我们分析一下这段代码,主要涉及三大步骤。

2.5.1 make bindeb-pkg

这里其中有一条比较重要的命令:

make CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH} bindeb-pkgmkae bindeb-pkg

make bindeb-pkg是一个用于构建debian包的命令,它通常用于编译linux内核并生成对应的debian软件包。

当执行make bindeb-pkg 命令时,它会读取当前目录下的linux内核源代码,并根据配置文件进行内核编译。

编译过程将包括编译内核、生成模块、创建initramfs等步骤。最后,它将生成一组二进制文件和相关的debian控制文件,用于创建 debian包。

对于kernel-rk3588执行完成会在内核源码debian目录生成以下文件;

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll kernel-rk3588/debian/
  2. -rw-r--r-- 1 root root 6 Dec 4 22:54 arch
  3. -rw-r--r-- 1 root root 137 Dec 4 22:54 changelog
  4. -rw-r--r-- 1 root root 1250 Dec 4 22:54 control
  5. -rw-r--r-- 1 root root 692 Dec 4 22:54 copyright
  6. -rw-r--r-- 1 root root 272 Dec 4 22:57 files
  7. drwxr-xr-x 5 root root 4096 Dec 4 22:55 linux-headers/
  8. drwxr-xr-x 7 root root 4096 Dec 4 22:55 linux-image/
  9. drwxr-xr-x 4 root root 4096 Dec 4 22:56 linux-image-dbg/
  10. drwxr-xr-x 4 root root 4096 Dec 4 22:56 linux-libc-dev/
  11. -rwxr-xr-x 1 root root 384 Dec 4 22:54 rules*
  12. drwxr-xr-x 2 root root 4096 Dec 4 22:54 source/

同时会在kernel-rk3588上一级目录下生成如下deb包:

  • linux-image-<version>.deb:内核镜像文件,用于安装和引导新的内核;
  • linux-headers-<version>.deb:内核头文件,用于开发其他软件或编译内核模块;
  • linux-libc-dev_<version>.deb:用于构建用户空间软件的头文件和静态库;

这些生成的debian包可以在 debian或基于debian的系统上安装和使用;

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll ./
  2. -rw-r--r-- 1 root root 8547400 Dec 4 22:56 linux-headers-6.1.25_6.1.25-3_arm64.deb
  3. -rw-r--r-- 1 root root 32745044 Dec 4 22:56 linux-image-6.1.25_6.1.25-3_arm64.deb
  4. -rw-r--r-- 1 root root 84501592 Dec 4 22:57 linux-image-6.1.25-dbg_6.1.25-3_arm64.deb
  5. -rw-r--r-- 1 root root 1319152 Dec 4 22:56 linux-libc-dev_6.1.25-3_arm64.deb
  6. -rw-r--r-- 1 root root 5660 Dec 4 22:57 linux-upstream_6.1.25-3_arm64.buildinfo
  7. ......

需要注意的是:这些deb文件在脚本执行的最后会被删除。

2.5.2 工具拷贝

拷贝./files/linux-headers-5.10-bin_arm64/scripts/下的编译相关的工具到./kernel-rk3588/debian/linux-headers/usr/src/linux-headers-6.1.25/scripts下;

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll ./files/linux-headers-5.10-bin_arm64/scripts/
  2. -rwxr-xr-x 1 root root 32688 Dec 4 21:13 asn1_compiler*
  3. drwxr-xr-x 2 root root 4096 Dec 4 21:13 basic/
  4. drwxr-xr-x 2 root root 4096 Dec 4 21:13 dtc/
  5. -rwxr-xr-x 1 root root 15096 Dec 4 21:13 extract-cert*
  6. drwxr-xr-x 2 root root 4096 Dec 4 21:13 genksyms/
  7. -rwxr-xr-x 1 root root 23896 Dec 4 21:13 kallsyms*
  8. drwxr-xr-x 2 root root 4096 Dec 4 21:13 kconfig/
  9. drwxr-xr-x 2 root root 4096 Dec 4 21:13 mod/
  10. -rwxr-xr-x 1 root root 29896 Dec 4 21:13 recordmcount*
  11. drwxr-xr-x 4 root root 4096 Dec 4 21:13 selinux/
  12. -rwxr-xr-x 1 root root 18792 Dec 4 21:13 sorttable*
  13. -rwxr-xr-x 1 root root 43096 Dec 4 21:13 unifdef*
2.5.3 dpkg-deb

使用dpkg-deb工具将指定的目录打包成一个debian软件包;

dpkg-deb -Zgzip -b ${KERNEL_SRC}/debian/linux-headers ${KERNEL_HEADERS_DEB}

dpkg-deb命令的含义:

  • dpkg-deb: 这是一个debian软件包管理工具,用于创建、操作和管理debian软件包;
  • -Zgzip: 这是一个选项,表示使用 gzip 压缩格式来压缩数据;
  • -b ${KERNEL_SRC}/debian/linux-headers ${KERNEL_HEADERS_DEB}: 这部分指定了要打包的目录以及输出的软件包路径;
    • ${KERNEL_SRC}/debian/linux-headers 是要打包的目录,即./kernel-rk3588/debian/linux-headers目录;
    • ${KERNEL_HEADERS_DEB} 是输出的debian软件包路径,即./out/linux-headers-6.1.25.deb目录;

这里将./kernel-rk3588/debian/linux-headers打包成debian软件包,软件包名称为./out/linux-headers-6.1.25.deb

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll out/
  2. drwxr-xr-x 7 root root 4096 Dec 4 22:54 cryptodev-linux/
  3. -rw-r--r-- 1 root root 11283434 Dec 4 22:57 linux-headers-6.1.25.deb # 生成的dep软件包
  4. drwxr-xr-x 4 root root 4096 Dec 4 22:43 nft-fullcone/
  5. drwxr-xr-x 3 root root 4096 Dec 4 22:54 output_rk3588_kmodules/
  6. drwxr-xr-x 3 root root 4096 Dec 4 22:54 r8125/
  7. drwxr-xr-x 22 root root 4096 Dec 4 22:58 rootfs_new/
  8. drwxr-xr-x 8 root root 4096 Dec 4 22:46 rtl8812au/
  9. drwxr-xr-x 9 root root 4096 Dec 4 22:44 rtl8821CU/
  10. drwxr-xr-x 8 root root 4096 Dec 4 22:45 rtl8822bu/
  11. drwxr-xr-x 8 root root 4096 Dec 4 22:45 rtl8822cs/
  12. drwxr-xr-x 4 root root 16384 Dec 4 22:54 rtw88/

三、编译uboot

3.1 下载uboot

下载uboot源代码并编译,编译完成后会自动更新debian-bullseye-desktop-arm64目录下的相关镜像文件:

root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# git clone https://github.com/friendlyarm/uboot-rockchip --depth 1 -b nanopi6-v2017.09
3.2 修改脚本
3.2.1 修改build-uboot.sh脚本

在编译内核之前我们需要修改build-uboot.sh脚本;将如下代码移除:

  1. export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
  2. if [ ! -d /opt/FriendlyARM/toolchain/11.3-aarch64 ]; then
  3. echo "please install aarch64-gcc-11.3 first, using these commands: "
  4. echo " git clone https://github.com/friendlyarm/prebuilts.git -b master --depth 1"
  5. echo " cd prebuilts/gcc-x64"
  6. echo " sudo tar xvf toolchain-11.3-aarch64.tar.xz -C /"
  7. exit 1
  8. fi
3.2.2 修改./uboot-rockchip/make.sh脚本

根据自己安装的交叉编译环境,修改make.sh设置交叉编译工具路径::

  1. PREBUILTS_GCC_ARM32=/usr/local/arm/12.2.1/bin
  2. PREBUILTS_GCC_ARM64=/usr/local/arm/12.2.1/bin

同时将select_toolchain函数以下代码:

  1. CROSS_COMPILE_ARM32=arm-linux-gnueabihf-
  2. CROSS_COMPILE_ARM64=aarch64-linux-gnu-

修改为:

  1. CROSS_COMPILE_ARM32=arm-none-linux-gnueabihf-
  2. CROSS_COMPILE_ARM64=aarch64-none-linux-gnu-

我安装的交叉编译环境位于/usr/local/arm/12.2.1,并且我已经将其配置为全局环境变量了。

3.3 编译uboot
  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# rm -rf rkbin # 删除的目的,是为了重新下载rkbin
  2. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# UBOOT_SRC=$PWD/uboot-rockchip ./build-uboot.sh debian-bullseye-desktop-arm64

编译完成后debian-bullseye-desktop-arm64目录下的uboot.img被更新了;

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll out/ll debian-bullseye-desktop-arm64
  2. -rw-r--r-- 1 root root 8072140 May 28 2023 boot.img
  3. -rw-r--r-- 1 root root 1424 May 28 2023 dtbo.img
  4. -rw-r--r-- 1 root root 307200 Sep 8 23:33 idbloader.img
  5. -rw-r--r-- 1 root root 64 Nov 17 10:03 info.conf
  6. -rw-r--r-- 1 root root 37910548 Dec 4 22:57 kernel.img
  7. -rw-r--r-- 1 root root 471488 Dec 4 23:26 MiniLoaderAll.bin # 更新了
  8. -rw-r--r-- 1 root root 49152 May 28 2023 misc.img
  9. -rw-r--r-- 1 root root 470 Dec 4 22:59 parameter.txt
  10. -rw-r--r-- 1 root root 5785600 Dec 4 22:57 resource.img
  11. -rw-r--r-- 1 root root 3986211708 Dec 4 22:59 rootfs.img
  12. -rw-r--r-- 1 root root 4194304 Dec 4 23:26 uboot.img # 更新了
  13. -rw-r--r-- 1 root root 159868 Nov 17 10:03 userdata.img
3.4 build-uboot.sh分析

如果感兴趣可以分析一下./build-uboot.sh的主要工作流程。

3.4.1 make.sh nanopi6

进入uboot-rockchip目录下执行如下命令 :

  1. cd ${UBOOT_SRC}
  2. make distclean
  3. ./make.sh nanopi6

其中:UBOOT_SRC./uboot-rockchip,即uboot源码目录。

有关make.sh文件我们在博客Rockchip RK3399 - TPL/SPL方式加载uboot中有提及到,这是官方提供的一个自动构建的脚本。

我们在命令行输入:

root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/uboot-rockchip# ./make.sh help

查看具体编译指令,如下图:

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/uboot-rockchip# ./make.sh help
  2. Usage:
  3. ./make.sh [board|sub-command]
  4. - board: board name of defconfig
  5. - sub-command: elf*|loader|trust|uboot|--spl|--tpl|itb|map|sym|<addr>
  6. - ini: ini file to pack trust/loader
  7. Output:
  8. When board built okay, there are uboot/trust/loader images in current directory
  9. Example:
  10. 1. Build:
  11. ./make.sh evb-rk3588 --- build for evb-rk3588_defconfig
  12. ./make.sh firefly-rk3288 --- build for firefly-rk3288_defconfig
  13. ./make.sh EXT_DTB=rk-kernel.dtb --- build with exist .config and external dtb
  14. ./make.sh --- build with exist .config
  15. ./make.sh env --- build envtools
  16. 2. Pack:
  17. ./make.sh uboot --- pack uboot.img
  18. ./make.sh trust --- pack trust.img
  19. ./make.sh trust <ini> --- pack trust img with assigned ini file
  20. ./make.sh loader --- pack loader bin
  21. ./make.sh loader <ini> --- pack loader img with assigned ini file
  22. ./make.sh --spl --- pack loader with u-boot-spl.bin
  23. ./make.sh --tpl --- pack loader with u-boot-tpl.bin
  24. ./make.sh --tpl --spl --- pack loader with u-boot-tpl.bin and u-boot-spl.bin
  25. 3. Debug:
  26. ./make.sh elf --- dump elf file with -D(default)
  27. ./make.sh elf-S --- dump elf file with -S
  28. ./make.sh elf-d --- dump elf file with -d
  29. ./make.sh elf-* --- dump elf file with -*
  30. ./make.sh <no reloc_addr> --- unwind address(no relocated)
  31. ./make.sh <reloc_addr-reloc_off> --- unwind address(relocated)
  32. ./make.sh map --- cat u-boot.map
  33. ./make.sh sym --- cat u-boot.sym

因此当执行./make.sh nanopi6时,实际上编译使用的defonfig文件为configs/nanopi6_defconfig。由于该脚本内容较多,这里就不去分析其编译流程了。

编译完成后会在./uboot-rockchip目录下生成uboot.imgrk3588_spl_loader_v1.08.111.bin文件;

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll uboot-rockchip/uboot.img
  2. -rw-r--r-- 1 root root 4194304 Dec 4 23:26 uboot-rockchip/uboot.img
  3. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll uboot-rockchip/rk3588_spl_loader_v1.12.112.bin
  4. -rw-r--r-- 1 root root 471488 Dec 4 23:26 uboot-rockchip/rk3588_spl_loader_v1.12.112.bin
3.4.2 update_uboot_bin.sh

update_uboot_bin.sh脚本用于更新./debian-bullseye-desktop-arm64目录下的MiniLoaderAll.binuboot.img

./tools/update_uboot_bin.sh ${UBOOT_SRC} ${TOPPATH}/${TARGET_OS}

其中:

  • UBOOT_SRC./uboot-rockchip,即uboot源码目录;
  • ${TOPPATH}/${TARGET_OS}./debian-bullseye-desktop-arm64

update_uboot_bin.sh 源码如下:

  1. #!/bin/bash
  2. set -eu
  3. [ -f ${PWD}/mk-emmc-image.sh ] || {
  4. echo "Error: please run at the script's home dir"
  5. exit 1
  6. }
  7. if [ $# -ne 2 ]; then
  8. echo "number of args must be 2"
  9. exit 1
  10. fi
  11. # LOADER_DOT_BIN=./uboot-rockchip/rk3588_spl_loader_v1.12.112.bin
  12. LOADER_DOT_BIN==`ls $1/rk3588_spl_loader_*.bin 2>/dev/null | sort -n | tail -1`
  13. if [ -f ${LOADER_DOT_BIN} ]; then
  14. cp -f ${LOADER_DOT_BIN} $2/MiniLoaderAll.bin # 拷贝 1
  15. else
  16. echo "not found $1/rk3588_spl_loader_*.bin, pls build u-boot first."
  17. exit 1
  18. fi
  19. cp -f $1/uboot.img $2/ # 拷贝 2
  20. exit $?

四、制作SD卡固件

固件文件一般有两种:

  • 单个统一固件:统一固件是由分区表、bootloaderubootkernelsystem等所有文件打包合并成的单个文件。一般官方正式发布的固件都是采用统一固件格式,升级统一固件将会更新主板上所有分区的数据和分区表,并且擦除主板上所有数据;
  • 多个分区镜像:即各个功能独立的文件,如分区表、bootloaderkernel等,在开发阶段生成。独立分区镜像可以只更新指定的分区,而保持其它分区数据不被破坏,在开发过程中会很方便调试;

通过统一固件解包/打包工具,可以把统一固件解包为多个分区镜像,也可以将多个分区镜像合并为一个统一固件。

4.1 生成统一固件

debian-bullseye-desktop-arm64目录下的镜像文件重新打包成SD卡固件:

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ./mk-sd-image.sh debian-bullseye-desktop-arm64
  2. Creating RAW image: out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20231205.img (7800 MB)
  3. ---------------------------------
  4. 记录了0+0 的读入
  5. 记录了0+0 的写出
  6. 0字节已复制,0.000145548 s,0.0 kB/s
  7. ----------------------------------------------------------------
  8. [out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20231205.img] capacity = 7438MB, 7799999488 bytes
  9. current out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20231205.img partition:
  10. ----------------------------------------------------------------
  11. parsing ./debian-bullseye-desktop-arm64/parameter.txt:
  12. create new GPT 9:
  13. ----------------------------------------------------------------
  14. copy from: ./debian-bullseye-desktop-arm64 to out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20231205.img
  15. [RAW. 0]: 300 KB | ./debian-bullseye-desktop-arm64/idbloader.img > 100% : done.
  16. [RAW. 1]: 4096 KB | ./debian-bullseye-desktop-arm64/uboot.img > 100% : done.
  17. [RAW. 2]: 48 KB | ./debian-bullseye-desktop-arm64/misc.img > 100% : done.
  18. [RAW. 3]: 1 KB | ./debian-bullseye-desktop-arm64/dtbo.img > 100% : done.
  19. [RAW. 4]: 5650 KB | ./debian-bullseye-desktop-arm64/resource.img > 100% : done.
  20. [RAW. 5]: 37022 KB | ./debian-bullseye-desktop-arm64/kernel.img > 100% : done.
  21. [RAW. 6]: 7882 KB | ./debian-bullseye-desktop-arm64/boot.img > 100% : done.
  22. [RAW. 8]: 3892784 KB | ./debian-bullseye-desktop-arm64/rootfs.img > 100% : done.
  23. [RAW. 9]: 156 KB | ./debian-bullseye-desktop-arm64/userdata.img > 100% : done.
  24. ----------------------------------------------------------------
  25. ---------------------------------
  26. RAW image successfully created (00:04:45).
  27. -rw-r--r-- 1 root root 7799999488 Dec 5 00:04 out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20231205.img
  28. Tip: You can compress it to save disk space.

sh脚本内部调用了Rochchip官方提供的打包工具生成的统一固件,由于打包工具并不开源,所以无法研究源码。

命令完成后,生成的统一固件位于out目录,可以用dd命令制作SD启动卡。

4.2 制作SD启动卡

我们将SD卡插入PC上,在虚拟机ubuntu中运行demsg查看新接入的设备;

  1. [32908.310364] loop7: detected capacity change from 0 to 8257536
  2. [32909.079216] EXT4-fs (loop7): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
  3. [33991.894980] loop7: detected capacity change from 0 to 8126464
  4. [33991.948702] EXT4-fs (loop7): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
  5. [35745.808031] usb 1-1: new high-speed USB device number 2 using ehci-pci
  6. [35746.078673] usb 1-1: New USB device found, idVendor=14cd, idProduct=1212, bcdDevice= 1.00
  7. [35746.078714] usb 1-1: New USB device strings: Mfr=1, Product=3, SerialNumber=2
  8. [35746.078716] usb 1-1: Product: Mass Storage Device
  9. [35746.078717] usb 1-1: Manufacturer: Generic
  10. [35746.078718] usb 1-1: SerialNumber: 121220160204
  11. [35747.340887] usb-storage 1-1:1.0: USB Mass Storage device detected
  12. [35747.341582] scsi host33: usb-storage 1-1:1.0
  13. [35747.342608] usbcore: registered new interface driver usb-storage
  14. [35747.403944] usbcore: registered new interface driver uas
  15. [35748.377640] scsi 33:0:0:0: Direct-Access Mass Storage Device 1.00 PQ: 0 ANSI: 0 CCS
  16. [35748.378504] sd 33:0:0:0: Attached scsi generic sg3 type 0
  17. [35748.522897] sd 33:0:0:0: [sdc] 31211520 512-byte logical blocks: (16.0 GB/14.9 GiB)
  18. [35748.526150] sd 33:0:0:0: [sdc] Write Protect is off
  19. [35748.526152] sd 33:0:0:0: [sdc] Mode Sense: 03 00 00 00
  20. [35748.528185] sd 33:0:0:0: [sdc] No Caching mode page found
  21. [35748.528254] sd 33:0:0:0: [sdc] Assuming drive cache: write through
  22. [35748.551595] sdc: sdc1 sdc2
  23. [35748.571109] sd 33:0:0:0: [sdc] Attached SCSI removable disk
  24. [35802.517787] rfkill: input handler enabled

可以看到SD卡对应的设备节点为/dev/sdc,对应两个分区sdc1sdc2

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ls /dev/sdc*
  2. /dev/sdc /dev/sdc1 /dev/sdc2
  3. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# df -hT
  4. 文件系统 类型 容量 已用 可用 已用% 挂载点
  5. udev devtmpfs 3.9G 0 3.9G 0% /dev
  6. tmpfs tmpfs 791M 3.6M 787M 1% /run
  7. /dev/sda5 ext4 98G 69G 24G 75% /
  8. tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
  9. tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
  10. tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
  11. /dev/sda1 vfat 511M 4.0K 511M 1% /boot/efi
  12. /dev/loop15 squashfs 497M 497M 0 100% /snap/gnome-42-2204/132
  13. tmpfs tmpfs 791M 0 791M 0% /run/user/0
  14. tmpfs tmpfs 791M 36K 791M 1% /run/user/1000
  15. /dev/sdc2 ext4 11G 311M 9.8G 4% /media/zhengyang/userdata
  16. /dev/sdc1 ext4 4.5G 4.4G 35M 100% /media/zhengyang/rootfs

开始制作SD启动卡:

root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# dd if=out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20231205.img of=/dev/sdc bs=1M

五、Linux下烧录固件

Linux下烧录固件到eMMC有多种方法:

  • 其一是将RK3588进入到MASKROM升级模式或者LOADER升级模式,然后通过upgrade_tool工具进行烧录,这个是Rockchip官方提供的linux环境下的烧录工具;
  • 通过dd命令将image文件烧写至image对应的分区;
  • 通过搭建TFTP服务器,通过tftp命令进行下载,这个我们后面的文章会涉及;

注:upgrade_toolRockchip提供的Linux下的命令行工具(Linux_Upgrade_Tool),需要使用v2以上版本。

5.1 upgrade_tool工具烧录
5.1.1 安装upgrade_tool_v2.17_for_linux

下载 upgrade_tool_v2.17_for_linux.zip(位于"05_工具软件"目录下), 并按以下方法安装到系统中,方便调用:

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# unzip upgrade_tool_v2.17_for_linux.zip
  2. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# cd upgrade_tool_v2.17_for_linux
  3. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo cp upgrade_tool /usr/local/bin
  4. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo chown root:root /usr/local/bin/upgrade_tool
  5. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo chmod a+x /usr/local/bin/upgrade_tool
  6. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo apt-get install lib32stdc++6
5.1.2 进入升级模式

将开发板连接上电源,并且通过HDMI接口连接到显示设备,连接Type-C数据线到PC

(1) 进入MASKROM模式

硬件方式:按住Mask键再长按Power键开机(保持按下Mask键5秒以上),将强制进入MASKROM模式;

软件方式:这一步的前提是eMMC已经烧录过固件,比如debian-bullseye-desktop,具体参考上一篇文章:Rockchip RK3588 - NanoPC-T6开发板介绍有关Windows下通过RKDevTool.exe工具烧录的内容。按下Power键开发板启动,串口终端按下CRTL+C进入uboot命令行,通过在串口调试终端输入reboot loader进入MASKROM模式;

  1. => reboot loader # 进入uboot,输入该命令
  2. ## Reboot mode: loader(5242c301)

(2) 进入LOADER模式

由于我使用的开发板不支持硬件进入LOADER模式,因此只能通过软件方式进入LOADER模式;

这一步的前提是eMMC已经烧录过固件,比如debian-bullseye-desktop,具体参考上一篇文章:Windows下通过RKDevTool.exe工具烧录。

按下Power键开发板启动,根文件系统加载完成后,通过在桌面终端输入reboot loader进入LOADER模式;

  1. pi@NanoPC-T6:~$ sudo reboot loader
  2. Stopping Session 1 of user pi.
  3. Stopping Session 3 of user pi.
  4. .....

注意:必须从桌面终端输入reboot loader才会进入LOADER模式,如果是在串口调试终端输入reboot loader那么将进入MASKROM模式。

5.1.3 烧写统一固件

按住Mask键再长按Power键开机(保持按下Mask键5秒以上),将强制进入MASKROM模式;

进入MASKROM模式后,运行upgrade_tool后可以看到连接设备中有个Maskrom的提示:

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# sudo upgrade_tool LD
  2. List of rockusb connected(1)
  3. DevNo=1 Vid=0x2207,Pid=0x350b,LocationID=11 Mode=Maskrom SerialNo=

烧写统一固件update.img

root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool uf update.img

由于我没有统一固件,这里就不演示了。

5.1.4 烧写分区镜像

我们在开发过程中,经常会对内核、根文件系统、uboot进行修改,在这种情况下我们只需要替换我们修改的镜像文件即可。

这里我们可以尝试在MASKROM模式以及LOADER模式下烧录分区镜像。

(1) 按住Mask键再长按Power键开机(保持按下Mask键5秒以上),将强制进入MASKROM模式,在ubuntu宿主机烧写分区镜像;

  1. root@zhengyang:/work/sambashare/rk3399/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool ul MiniLoaderAll.bin
  2. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -p parameter.txt
  3. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -uboot uboot.img
  4. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -misc misc.img
  5. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -dtbo dtbo.img
  6. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -resource resource.img
  7. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -k kernel.img
  8. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -boot boot.img
  9. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -rootfs rootfs.img
  10. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -userdata userdata.img
  11. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool RD

对于MASKROM模式,其中前两步和最后一步是必须的,中间的步骤根据实际情况进行调整。

由于SoC进入到MASKROM模式后,目标板子会运行Rockusb驱动程序。在MASKROM模式下,烧写镜像需要使用到DDR,因此需要下载固件进行DDR的初始化,所以升级之前第一步要做的就是执行sudo upgrade_tool ul MiniLoaderAll.bin

在测试的时候发现了一个问题,烧录完MiniLoaderAll.bin之后,系统自动重启了,因此通过这种方法没法继续烧录其它的镜像文件了。

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool ul MiniLoaderAll.bin
  2. Loading loader...
  3. Support Type:RK3588 Loader ver:1.0b Loader Time:2023-12-04 23:26:21
  4. Start to upgrade loader...
  5. Download Boot Start
  6. Download Boot Success
  7. Wait For Maskrom Start
  8. Wait For Maskrom Success
  9. Test Device Start
  10. Test Device Success
  11. Check Chip Start
  12. Check Chip Success
  13. Get FlashInfo Start
  14. Get FlashInfo Success
  15. Prepare IDB Start
  16. Prepare IDB Success
  17. Download IDB Start
  18. Download IDB Success
  19. Upgrade loader ok.

(2) 按照前面介绍的方法尝试软件方式进入LOADER模式,然后烧录除了MiniLoaderAll.bin之后的所有镜像文件;

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool LD
  2. List of rockusb connected(1)
  3. DevNo=1 Vid=0x2207,Pid=0x350b,LocationID=11 Mode=Loader SerialNo=1f0bee682f135e89
  4. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -p parameter.txt
  5. ......

注意:采用这种方式烧录各个分区,在完成烧录之后,测试发现ubootlinux内核均能正常加载,但是挂载根文件系统的时候却失败了,相关错误详情如下,具体原因尚不可知;

  1. Begin: Loading essential drivers ... done.
  2. Begin: Running /scripts/init-premount ... done.
  3. Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
  4. Begin: Running /scripts/local-premount ... done.
  5. [ 6.219797] EXT4-fs error (device mmcblk2p8): ext4_get_journal_inode:5728: inode #8: comm mount: iget: bad extra_isize 1487 (inode size 256)
  6. [ 6.219971] EXT4-fs (mmcblk2p8): no journal found
  7. mount: mounting /dev/mmcblk2p8 on /root failed: Invalid argument
  8. Begin: Will now check userdata file system ... fsck from util-linux 2.37.2
  9. [/usr/sbin/fsck.ext4 (1) -- /dev/mmcblk2p9] fsck.ext4 -a -C0 /dev/mmcblk2p9
  10. userdata: clean, 11/12800 files, 4958/51200 blocks
  11. done.
  12. [ 6.305282] EXT4-fs (mmcblk2p9): mounted filesystem with ordered data mode. Quota mode: none.
  13. [ 6.308585] EXT4-fs (mmcblk2p9): unmounting filesystem.
  14. Begin: Resizing ext4 file system on /dev/mmcblk2p9 ... Model: MMC A3A444 (sd/mmc)
  15. Disk /dev/mmcblk2: 100%
  16. Sector size (logical/physical): 512B/512B
  17. Partition Table: gpt
  18. Disk Flags:
  19. Number Start End Size File system Name Flags
  20. 1 0.00% 0.01% 0.00% uboot
  21. 2 0.01% 0.01% 0.00% misc
  22. 3 0.01% 0.01% 0.00% dtbo
  23. 4 0.01% 0.02% 0.01% resource
  24. 5 0.02% 0.03% 0.02% kernel
  25. 6 0.03% 0.05% 0.01% boot
  26. 7 0.05% 0.06% 0.01% recovery
  27. 8 0.06% 1.74% 1.68% ext4 rootfs
  28. 9 1.74% 100% 98.3% ext4 userdata
  29. [ 6.473741] mmcblk2: p1 p2 p3 p4 p5 p6 p7 p8 p9
  30. [ 6.477599] mmcblk2: p1 p2 p3 p4 p5 p6 p7 p8 p9
  31. resize2fs 1.46.5 (30-Dec-2021)
  32. Resizing the filesystem on /dev/mmcblk2p9 to 59364347 (4k) blocks.
  33. The filesystem on /dev/mmcblk2p9 is now 59364347 (4k) blocks long.
  34. done.
  35. [ 6.693921] EXT4-fs (mmcblk2p9): mounted filesystem with ordered data mode. Quota mode: none.
  36. [ 6.708138] overlayfs: fs on '/root' does not support file handles, falling back to index=off,nfs_export=off.
  37. done.
  38. [ 6.708159] overlayfs: fs on '/root' does not support file handles, falling back to xino=off.
  39. Begin: Running /scripts/local-bottom ... done.
  40. Begin: Running /scripts/init-bottom ... mount: mounting /dev on /overlay/dev failed: No such file or directory
  41. mount: mounting /dev on /overlay/dev failed: No such file or directory
  42. done.
  43. mount: mounting /run on /overlay/run failed: No such file or directory
  44. run-init: can't execute '/sbin/init': No such file or directory
  45. Target filesystem doesn't have requested /sbin/init.
  46. run-init: can't execute '/sbin/init': No such file or directory
  47. run-init: can't execute '/etc/init': No such file or directory
  48. run-init: can't execute '/bin/init': No such file or directory
  49. run-init: can't execute '/bin/sh': No such file or directory
  50. run-init: can't execute '': No such file or directory
  51. No init found. Try passing init= bootarg.
  52. [ 6.845429] rk_hdmirx fdee0000.hdmirx-controller: hdmirx_cancel_cpu_limit_freq freq qos nod add
  53. BusyBox v1.30.1 (Ubuntu 1:1.30.1-7ubuntu3) built-in shell (ash)
  54. Enter 'help' for a list of built-in commands.
  55. (initramfs) [ 7.177250] rk-pcie fe150000.pcie: PCIe Link Fail
  56. [ 7.177285] rk-pcie fe150000.pcie: failed to initialize host
  57. [ 7.687244] rk-pcie fe180000.pcie: PCIe Link Fail
  58. [ 7.687271] rk-pcie fe180000.pcie: failed to initialize host
  59. [ 14.941768] platform mtd_vendor_storage: deferred probe pending
  60. (initramfs)

后来我将rootfs.img单独拷贝到Windows系统后,通过RKDevTool.exe工具单独烧录根文件系统之后,系统可以正常启动起来。因此我猜测可能是upgrade_tool烧录过程中出现了什么问题。

(3) 如果想查看分区情况,执行如下命令,该命令会读取设备上的分区表信息,支持parametergpt

  1. root@zhengyang:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool pl
  2. Partition Info(gpt):
  3. NO LBA Size Name
  4. 01 0x00004000 0x00002000 uboot
  5. 02 0x00006000 0x00002000 misc
  6. 03 0x00008000 0x00002000 dtbo
  7. 04 0x0000a000 0x00008000 resource
  8. 05 0x00012000 0x00014000 kernel
  9. 06 0x00026000 0x00010000 boot
  10. 07 0x00036000 0x00010000 recovery
  11. 08 0x00046000 0x007c0000 rootfs
  12. 09 0x00806000 0x1c4e9fc0 userdata

此时rootfs占用0x007c0000个扇区,每个扇区512字节,一共4,160,749,568字节,大于rootfs.img的大小。

5.2 dd命令烧录

由于RK3588OS默认均采用GPT分区, 可以用dd命令将image文件烧写至image对应的分区,SD卡与eMMC的设备节点如下:

  • SD/TF Card设备节点为/dev/mmcblk0
  • eMMC设备节点为/dev/mmcblk2

下面步骤的前提是eMMC已经烧录过固件,比如debian-bullseye-desktop,具体参考上一篇文章:Rockchip RK3588 - NanoPC-T6开发板介绍有关Windows下通过RKDevTool.exe工具烧录的内容。

下面将演示如何将内核更新到eMMC,开发板上电进入操作系统终端命令行,使用parted命令查看分区布局;

  1. pi@NanoPC-T6:~$ sudo parted /dev/mmcblk2 print
  2. Model: MMC A3A444 (sd/mmc)
  3. Disk /dev/mmcblk2: 247GB
  4. Sector size (logical/physical): 512B/512B
  5. Partition Table: gpt
  6. Disk Flags:
  7. Number Start End Size File system Name Flags
  8. 1 8389kB 12.6MB 4194kB uboot
  9. 2 12.6MB 16.8MB 4194kB misc
  10. 3 16.8MB 21.0MB 4194kB dtbo
  11. 4 21.0MB 37.7MB 16.8MB resource
  12. 5 37.7MB 79.7MB 41.9MB kernel
  13. 6 79.7MB 113MB 33.6MB boot
  14. 7 113MB 147MB 33.6MB recovery
  15. 8 147MB 4308MB 4161MB ext4 rootfs
  16. 9 4308MB 247GB 243GB ext4 userdata

其中:

  • uboot分区的序号为1,对应的设备节点为/dev/mmcblk2p1
  • resource分区的序号为4,对应的设备节点为/dev/mmcblk2p4
  • kernel分区的序号为5,对应的设备节点为/dev/mmcblk2p5
  • rootfs分区的序号为8,对应的设备节点为/dev/mmcblk2p8

dd命令如下:

  1. dd if=uboot.img of=/dev/mmcblk2p1 bs=1M
  2. dd if=resource.img of=/dev/mmcblk2p4 bs=1M
  3. dd if=kernel.img of=/dev/mmcblk2p5 bs=1M
  4. dd if=rootfs.img of=/dev/mmcblk2p8 bs=1M

如果要更新kernel.img

  1. root@NanoPC-T6:/opt# sudo scp root@192.168.0.200://work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64/kernel.img ./
  2. root@NanoPC-T6:/opt# sudo dd if=kernel.img of=/dev/mmcblk2p5 bs=1M
  3. 36+1 records in
  4. 36+1 records out
  5. 37910548 bytes (38 MB, 36 MiB) copied, 0.296491 s, 128 MB/s

通过这种方式烧录的rootfs.img好像存在和upgrade_tool烧录一样的问题。

六、调试

6.1 串口连接

使用准备好的USB转串口适配器和连接线(需另购),连接开发板,其使用的是RK3588UART2

引脚开发板接口USB转串口
1GNDGND
2UART2_TX_M0_DEBUGRX
3UART2_RX_M0_DEBUGTX

其电路原理图如下:

6.2 MobaXterm

这里我使用的串口调试工具是MobaXterm,选择串口端口,设置波特率为1500000,8位数据位,1位停止位。

img
6.3 上电测试
点击查看代码
  1. DDR V1.12 52218f4949 cym 23/07/06-19:46:50
  2. LPDDR4X, 2112MHz
  3. channel[0] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=8 Size=4096MB
  4. channel[1] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=8 Size=4096MB
  5. channel[2] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=8 Size=4096MB
  6. channel[3] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=8 Size=4096MB
  7. Manufacturer ID:0x1
  8. CH0 RX Vref:27.5%, TX Vref:21.8%,22.8%
  9. CH1 RX Vref:25.8%, TX Vref:22.8%,22.8%
  10. CH2 RX Vref:28.4%, TX Vref:21.8%,21.8%
  11. CH3 RX Vref:27.9%, TX Vref:20.8%,22.8%
  12. change to F1: 528MHz
  13. change to F2: 1068MHz
  14. change to F3: 1560MHz
  15. change to F0: 2112MHz
  16. out
  17. U-Boot SPL board init
  18. U-Boot SPL 2017.09-g5f53abfa1e-221223 #zzz (Dec 26 2022 - 09:10:09)
  19. Trying to boot from MMC2
  20. MMC: no card present
  21. mmc_init: -123, time 0
  22. spl: mmc init failed with error: -123
  23. Trying to boot from MMC1
  24. SPL: A/B-slot: _a, successful: 0, tries-remain: 7
  25. Trying fit image at 0x4000 sector
  26. ## Verified-boot: 0
  27. ## Checking atf-1 0x00040000 ... sha256(b40ce543bb...) + OK
  28. ## Checking uboot 0x00200000 ... sha256(4e99df8c0e...) + OK
  29. ## Checking fdt 0x003326d8 ... sha256(a3ef1c0929...) + OK
  30. ## Checking atf-2 0x000f0000 ... sha256(f202de33d9...) + OK
  31. ## Checking atf-3 0xff100000 ... sha256(af08976afd...) + OK
  32. ## Checking optee 0x08400000 ... sha256(6193f4aac7...) + OK
  33. Jumping to U-Boot(0x00200000) via ARM Trusted Firmware(0x00040000)
  34. Total: 515.29 ms
  35. INFO: Preloader serial: 2
  36. NOTICE: BL31: v2.3():v2.3-616-gdc1125f48:finley.xiao
  37. NOTICE: BL31: Built : 16:41:17, Jul 13 2023
  38. INFO: spec: 0x1
  39. INFO: ext 32k is not valid
  40. INFO: ddr: stride-en 4CH
  41. INFO: GICv3 without legacy support detected.
  42. INFO: ARM GICv3 driver initialized in EL3
  43. INFO: valid_cpu_msk=0xff bcore0_rst = 0x0, bcore1_rst = 0x0
  44. INFO: system boots from cpu-hwid-0
  45. INFO: idle_st=0x21fff, pd_st=0x11fff9, repair_st=0xfff70001
  46. INFO: dfs DDR fsp_params[0].freq_mhz= 2112MHz
  47. INFO: dfs DDR fsp_params[1].freq_mhz= 528MHz
  48. INFO: dfs DDR fsp_params[2].freq_mhz= 1068MHz
  49. INFO: dfs DDR fsp_params[3].freq_mhz= 1560MHz
  50. INFO: BL31: Initialising Exception Handling Framework
  51. INFO: BL31: Initializing runtime services
  52. INFO: BL31: Initializing BL32
  53. I/TC:
  54. I/TC: OP-TEE version: 3.13.0-698-g7f1ea6d6e #hisping.lin (gcc version 10.2.1 20201103 (GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16))) #53 Wed Apr 19 14:30:22 CST 2023 aarch64
  55. I/TC: Primary CPU initializing
  56. I/TC: Primary CPU switching to normal world boot
  57. INFO: BL31: Preparing for EL3 exit to normal world
  58. INFO: Entry point address = 0x200000
  59. INFO: SPSR = 0x3c9
  60. U-Boot 2017.09-g8241716-dirty #root (Dec 04 2023 - 23:25:57 +0800)
  61. Board: NanoPi R6S
  62. PreSerial: 2, raw, 0xfeb50000
  63. DRAM: 16 GiB
  64. Sysmem: init
  65. Relocation Offset: eda2b000
  66. Relocation fdt: eb9fa3a0 - eb9fecc8
  67. CR: M/C/I
  68. Using default environment
  69. DM: v2
  70. mmc@fe2c0000: 1, mmc@fe2e0000: 0
  71. Bootdev(atags): mmc 0
  72. MMC0: HS400 Enhanced Strobe, 200Mhz
  73. PartType: EFI
  74. boot mode: normal
  75. RESC: 'resource', blk@0x0000a000
  76. optee api revision: 2.0
  77. TEEC: Waring: Could not find security partition
  78. lib/avb/libavb_user/avb_ops_user.c: trusty_read_lock_state failed
  79. Error determining whether device is unlocked.
  80. Device is: UNLOCKED
  81. DTB: rk3588-nanopi6-rev01.dtb (270114)
  82. HASH(c): OK
  83. ANDROID: fdt overlay OK
  84. I2c0 speed: 100000Hz
  85. vsel-gpios- not found!
  86. en-gpios- not found!
  87. vdd_cpu_big0_s0 675000 uV
  88. vsel-gpios- not found!
  89. en-gpios- not found!
  90. vdd_cpu_big1_s0 675000 uV
  91. I2c2 speed: 100000Hz
  92. vsel-gpios- not found!
  93. en-gpios- not found!
  94. vdd_npu_s0 800000 uV
  95. spi2: RK806: 2
  96. ON=0x00, OFF=0x00
  97. vdd_gpu_s0 750000 uV
  98. vdd_cpu_lit_s0 750000 uV
  99. vdd_log_s0 750000 uV
  100. vdd_vdenc_s0 init 750000 uV
  101. vdd_ddr_s0 850000 uV
  102. get vp0 plane mask:0x7, primary id:0, cursor_plane:2, from dts
  103. get vp1 plane mask:0x148, primary id:6, cursor_plane:3, from dts
  104. get vp2 plane mask:0x280, primary id:7, cursor_plane:9, from dts
  105. Could not find baseparameter partition
  106. I2c6 speed: 200000Hz
  107. Rockchip UBOOT DRM driver version: v1.0.1
  108. vp0 have layer nr:3[0 1 2 ], primary plane: 0
  109. vp1 have layer nr:3[3 6 8 ], primary plane: 6
  110. vp2 have layer nr:2[7 9 ], primary plane: 7
  111. vp3 have layer nr:0[], primary plane: 0
  112. Could not find baseparameter partition
  113. color_format:1
  114. hdmi_select_link_config use tmds mode
  115. mode:1920x1080 bus_format:0x2025
  116. hdmi@fde80000: detailed mode clock 148500 kHz, flags[5]
  117. H: 1920 2008 2052 2200
  118. V: 1080 1084 1089 1125
  119. bus_format: 2025
  120. VOP update mode to: 1920x1080p60, type: HDMI0 for VP0
  121. dclk:148500,if_pixclk_div;2,if_dclk_div:4
  122. VP0 set crtc_clock to 148500KHz
  123. VOP VP0 enable Cluster0[800x480->800x480@560x300] fmt[1] addr[0xee01a000]
  124. CEA mode used vic=16
  125. mtmdsclock:148500000
  126. hdptx_ropll_cmn_config bus_width:16a8c8 rate:1485000
  127. hdptx phy pll locked!
  128. dw_hdmi_setup HDMI mode
  129. don't use dsc mode
  130. dw hdmi qp use tmds mode
  131. bus_width:0x16a8c8,bit_rate:1485000
  132. hdptx phy lane locked!
  133. CLK: (sync kernel. arm: enter 1008000 KHz, init 1008000 KHz, kernel 0N/A)
  134. b0pll 24000 KHz
  135. b1pll 24000 KHz
  136. lpll 24000 KHz
  137. v0pll 24000 KHz
  138. aupll 786431 KHz
  139. cpll 1500000 KHz
  140. gpll 1188000 KHz
  141. npll 850000 KHz
  142. ppll 1100000 KHz
  143. aclk_center_root 702000 KHz
  144. pclk_center_root 100000 KHz
  145. hclk_center_root 396000 KHz
  146. aclk_center_low_root 500000 KHz
  147. aclk_top_root 750000 KHz
  148. pclk_top_root 100000 KHz
  149. aclk_low_top_root 396000 KHz
  150. vdd_usbc 12597 mV
  151. Net: No ethernet found.
  152. Hit key to stop autoboot('CTRL+C'): 0
  153. ## Booting FIT Image FIT: No fit blob
  154. FIT: No FIT image
  155. ANDROID: reboot reason: "(none)"
  156. Not AVB images, AVB skip
  157. No valid android hdr
  158. Android image load failed
  159. Android boot failed, error -1.
  160. ## Booting Rockchip Format Image
  161. fdt @ 0x08300000 (0x000421c2)
  162. kernel @ 0x00400000 (0x02427808)
  163. ramdisk @ 0x0a200000 (0x007b2bc0)
  164. Fdt Ramdisk skip relocation
  165. ## Flattened Device Tree blob at 0x08300000
  166. Booting using the fdt blob at 0x08300000
  167. Using Device Tree in place at 0000000008300000, end 00000000083451c1
  168. ## reserved-memory:
  169. cma: addr=10000000 size=8000000
  170. drm-logo@00000000: addr=edf00000 size=468000
  171. vendor-storage-rm@00000000: addr=ebcd4000 size=10000
  172. ramoops@110000: addr=110000 size=e0000
  173. Adding bank: 0x00200000 - 0x08400000 (size: 0x08200000)
  174. Adding bank: 0x09400000 - 0xf0000000 (size: 0xe6c00000)
  175. Adding bank: 0x100000000 - 0x3fc000000 (size: 0x2fc000000)
  176. Adding bank: 0x3fc500000 - 0x3fff00000 (size: 0x03a00000)
  177. Adding bank: 0x4f0000000 - 0x500000000 (size: 0x10000000)
  178. Total: 1900.996/2658.940 ms
  179. Starting kernel ...
  180. [ 2.669526] Booting Linux on physical CPU 0x0000000000 [0x412fd050]
  181. [ 2.669550] Linux version 6.1.25 (root@zhengyang) (arm-linux-gcc (Arm GNU Toolchain 12.2.Rel1 (Build arm-12.24)) 12.2.1 20221205, GNU ld (Arm GNU Toolchain 12.2.Rel1 (Build arm-12.24)) 2.39.0.20221210) #2 SMP Mon Dec 4 22:42:15 CST 2023
  182. [ 2.676552] Machine model: FriendlyElec NanoPC-T6
  183. [ 2.683905] earlycon: uart8250 at MMIO32 0x00000000feb50000 (options '')
  184. [ 2.687452] printk: bootconsole [uart8250] enabled
  185. [ 2.690226] OF: fdt: Reserved memory: failed to reserve memory for node 'drm-cubic-lut@00000000': base 0x0000000000000000, size 0 MiB
  186. [ 2.691392] Reserved memory: created CMA memory pool at 0x0000000010000000, size 128 MiB
  187. [ 2.692135] OF: reserved mem: initialized node cma, compatible id shared-dma-pool
  188. [ 2.919840] Zone ranges:
  189. [ 2.920083] DMA [mem 0x0000000000200000-0x00000000ffffffff]
  190. [ 2.920656] DMA32 empty
  191. [ 2.920923] Normal [mem 0x0000000100000000-0x00000004ffffffff]
  192. [ 2.921493] Movable zone start for each node
  193. [ 2.921885] Early memory node ranges
  194. [ 2.922213] node 0: [mem 0x0000000000200000-0x00000000083fffff]
  195. [ 2.922789] node 0: [mem 0x0000000009400000-0x00000000efffffff]
  196. [ 2.923367] node 0: [mem 0x0000000100000000-0x00000003fbffffff]
  197. [ 2.923946] node 0: [mem 0x00000003fc500000-0x00000003ffefffff]
  198. [ 2.924522] node 0: [mem 0x00000004f0000000-0x00000004ffffffff]
  199. [ 2.925098] Initmem setup node 0 [mem 0x0000000000200000-0x00000004ffffffff]
  200. [ 2.926614] On node 0, zone DMA: 512 pages in unavailable ranges
  201. [ 2.950600] On node 0, zone DMA: 4096 pages in unavailable ranges
  202. [ 3.030372] On node 0, zone Normal: 1280 pages in unavailable ranges
  203. [ 3.032635] On node 0, zone Normal: 256 pages in unavailable ranges
  204. [ 3.033375] psci: probing for conduit method from DT.
  205. [ 3.034420] psci: PSCIv1.1 detected in firmware.
  206. [ 3.034846] psci: Using standard PSCI v0.2 function IDs
  207. [ 3.035328] psci: Trusted OS migration not required
  208. [ 3.035812] psci: SMC Calling Convention v1.2
  209. [ 3.036562] percpu: Embedded 28 pages/cpu s75256 r8192 d31240 u114688
  210. [ 3.037343] Detected VIPT I-cache on CPU0
  211. [ 3.037751] CPU features: detected: GIC system register CPU interface
  212. [ 3.038342] CPU features: detected: Virtualization Host Extensions
  213. [ 3.038916] CPU features: detected: Qualcomm erratum 1009, or ARM erratum 1286807, 2441009
  214. [ 3.039674] CPU features: detected: ARM errata 1165522, 1319367, or 1530923
  215. [ 3.040314] alternatives: applying boot alternatives
  216. [ 3.042430] Built 1 zonelists, mobility grouping on. Total pages: 4122720
  217. [ 3.043068] Kernel command line: storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normal androidboot.dtbo_idx=0 androidboot.verifiedbootstate=orange earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 coherent_pool=1m irqchip.gicv3_pseudo_nmi=0 rw root=/dev/mmcblk2p8 rootfstype=ext4 rootflags=discard data=/dev/mmcblk2p9 consoleblank=0 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1
  218. [ 3.046741] The swapaccount= commandline option is deprecated. Please report your usecase to linux-mm@kvack.org if you depend on this functionality.
  219. [ 3.047971] Unknown kernel command line parameters "storagemedia=emmc data=/dev/mmcblk2p9 cgroup_enable=memory cgroup_memory=1", will be passed to user space.
  220. [ 3.050821] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes, linear)
  221. [ 3.052337] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes, linear)
  222. [ 3.053068] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
  223. [ 3.053693] software IO TLB: area num 8.
  224. [ 3.066518] software IO TLB: mapped [mem 0x00000000e7cd4000-0x00000000ebcd4000] (64MB)
  225. [ 3.176264] Memory: 16182760K/16752640K available (17728K kernel code, 3486K rwdata, 6008K rodata, 9664K init, 925K bss, 438808K reserved, 131072K cma-reserved)
  226. [ 3.177706] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
  227. [ 3.178337] ftrace: allocating 58377 entries in 229 pages
  228. [ 3.265209] ftrace: allocated 229 pages with 5 groups
  229. [ 3.265767] trace event string verifier disabled
  230. [ 3.266378] rcu: Hierarchical RCU implementation.
  231. [ 3.266814] rcu: RCU event tracing is enabled.
  232. [ 3.267231] Rude variant of Tasks RCU enabled.
  233. [ 3.267647] Tracing variant of Tasks RCU enabled.
  234. [ 3.268087] rcu: RCU calculated value of scheduler-enlistment delay is 30 jiffies.
  235. [ 3.273592] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
  236. [ 3.276747] GICv3: GIC: Using split EOI/Deactivate mode
  237. [ 3.277231] GICv3: 480 SPIs implemented
  238. [ 3.277585] GICv3: 0 Extended SPIs implemented
  239. [ 3.278020] Root IRQ handler: gic_handle_irq
  240. [ 3.278425] GICv3: GICv3 features: 16 PPIs
  241. [ 3.278841] GICv3: CPU0: found redistributor 0 region 0:0x00000000fe680000
  242. [ 3.279790] ITS [mem 0xfe640000-0xfe65ffff]
  243. [ 3.280217] ITS@0x00000000fe640000: allocated 8192 Devices @1000e0000 (indirect, esz 8, psz 64K, shr 0)
  244. [ 3.281101] ITS@0x00000000fe640000: allocated 32768 Interrupt Collections @1000f0000 (flat, esz 2, psz 64K, shr 0)
  245. [ 3.282057] ITS: using cache flushing for cmd queue
  246. [ 3.282533] ITS [mem 0xfe660000-0xfe67ffff]
  247. [ 3.282953] ITS@0x00000000fe660000: allocated 8192 Devices @100110000 (indirect, esz 8, psz 64K, shr 0)
  248. [ 3.283834] ITS@0x00000000fe660000: allocated 32768 Interrupt Collections @100120000 (flat, esz 2, psz 64K, shr 0)
  249. [ 3.284790] ITS: using cache flushing for cmd queue
  250. [ 3.285429] GICv3: using LPI property table @0x0000000100130000
  251. [ 3.286085] GIC: using cache flushing for LPI property table
  252. [ 3.286608] GICv3: CPU0: using allocated LPI pending table @0x0000000100140000
  253. [ 3.287321] rcu: srcu_init: Setting srcu_struct sizes based on contention.
  254. [ 3.401093] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
  255. [ 3.401653] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
  256. [ 3.402633] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
  257. [ 3.404566] Console: colour dummy device 80x25
  258. [ 3.405005] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=80000)
  259. [ 3.405936] pid_max: default: 32768 minimum: 301
  260. [ 3.406408] LSM: Security Framework initializing
  261. [ 3.406921] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
  262. [ 3.407636] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
  263. [ 3.409921] cblist_init_generic: Setting adjustable number of callback queues.
  264. [ 3.410582] cblist_init_generic: Setting shift to 3 and lim to 1.
  265. [ 3.411212] cblist_init_generic: Setting shift to 3 and lim to 1.
  266. [ 3.411937] rcu: Hierarchical SRCU implementation.
  267. [ 3.412374] rcu: Max phase no-delay instances is 1000.
  268. [ 3.413575] Platform MSI: msi-controller@fe640000 domain created
  269. [ 3.414131] Platform MSI: msi-controller@fe660000 domain created
  270. [ 3.415024] PCI/MSI: /interrupt-controller@fe600000/msi-controller@fe640000 domain created
  271. [ 3.415823] PCI/MSI: /interrupt-controller@fe600000/msi-controller@fe660000 domain created
  272. [ 3.417191] smp: Bringing up secondary CPUs ...
  273. I/TC: Secondary CPU 1 initializing
  274. I/TC: Secondary CPU 1 switching to normal world boot
  275. I/TC: Secondary CPU 2 initializing
  276. I/TC: Secondary CPU 2 switching to normal world boot
  277. I/TC: Secondary CPU 3 initializing
  278. I/TC: Secondary CPU 3 switching to normal world boot
  279. I/TC: Secondary CPU 4 initializing
  280. I/TC: Secondary CPU 4 switching to normal world boot
  281. I/TC: Secondary CPU 5 initializing
  282. I/TC: Secondary CPU 5 switching to normal world boot
  283. I/TC: Secondary CPU 6 initializing
  284. I/TC: Secondary CPU 6 switching to normal world boot
  285. I/TC: Secondary CPU 7 initializing
  286. I/TC: Secondary CPU 7 switching to normal world boot
  287. [ 3.418768] Detected VIPT I-cache on CPU1
  288. [ 3.418844] GICv3: CPU1: found redistributor 100 region 0:0x00000000fe6a0000
  289. [ 3.418861] GICv3: CPU1: using allocated LPI pending table @0x0000000100150000
  290. [ 3.418898] CPU1: Booted secondary processor 0x0000000100 [0x412fd050]
  291. [ 3.420116] Detected VIPT I-cache on CPU2
  292. [ 3.420188] GICv3: CPU2: found redistributor 200 region 0:0x00000000fe6c0000
  293. [ 3.420204] GICv3: CPU2: using allocated LPI pending table @0x0000000100160000
  294. [ 3.420238] CPU2: Booted secondary processor 0x0000000200 [0x412fd050]
  295. [ 3.421428] Detected VIPT I-cache on CPU3
  296. [ 3.421498] GICv3: CPU3: found redistributor 300 region 0:0x00000000fe6e0000
  297. [ 3.421514] GICv3: CPU3: using allocated LPI pending table @0x0000000100170000
  298. [ 3.421546] CPU3: Booted secondary processor 0x0000000300 [0x412fd050]
  299. [ 3.422704] CPU features: detected: Spectre-v4
  300. [ 3.422708] CPU features: detected: Spectre-BHB
  301. [ 3.422711] Detected PIPT I-cache on CPU4
  302. [ 3.422758] GICv3: CPU4: found redistributor 400 region 0:0x00000000fe700000
  303. [ 3.422769] GICv3: CPU4: using allocated LPI pending table @0x0000000100180000
  304. [ 3.422791] CPU4: Booted secondary processor 0x0000000400 [0x414fd0b0]
  305. [ 3.423969] Detected PIPT I-cache on CPU5
  306. [ 3.424024] GICv3: CPU5: found redistributor 500 region 0:0x00000000fe720000
  307. [ 3.424034] GICv3: CPU5: using allocated LPI pending table @0x0000000100190000
  308. [ 3.424058] CPU5: Booted secondary processor 0x0000000500 [0x414fd0b0]
  309. [ 3.425199] Detected PIPT I-cache on CPU6
  310. [ 3.425253] GICv3: CPU6: found redistributor 600 region 0:0x00000000fe740000
  311. [ 3.425264] GICv3: CPU6: using allocated LPI pending table @0x00000001001a0000
  312. [ 3.425287] CPU6: Booted secondary processor 0x0000000600 [0x414fd0b0]
  313. [ 3.426435] Detected PIPT I-cache on CPU7
  314. [ 3.426491] GICv3: CPU7: found redistributor 700 region 0:0x00000000fe760000
  315. [ 3.426502] GICv3: CPU7: using allocated LPI pending table @0x00000001001b0000
  316. [ 3.426525] CPU7: Booted secondary processor 0x0000000700 [0x414fd0b0]
  317. [ 3.426580] smp: Brought up 1 node, 8 CPUs
  318. [ 3.443379] SMP: Total of 8 processors activated.
  319. [ 3.443811] CPU features: detected: 32-bit EL0 Support
  320. [ 3.444275] CPU features: detected: Data cache clean to the PoU not required for I/D coherence
  321. [ 3.445052] CPU features: detected: Common not Private translations
  322. [ 3.445617] CPU features: detected: CRC32 instructions
  323. [ 3.446083] CPU features: detected: RCpc load-acquire (LDAPR)
  324. [ 3.446603] CPU features: detected: LSE atomic instructions
  325. [ 3.447106] CPU features: detected: Privileged Access Never
  326. [ 3.447614] CPU features: detected: RAS Extension Support
  327. [ 3.448104] CPU features: detected: Speculative Store Bypassing Safe (SSBS)
  328. [ 3.448799] CPU: All CPU(s) started at EL2
  329. [ 3.449171] alternatives: applying system-wide alternatives
  330. [ 3.457044] devtmpfs: initialized
  331. [ 3.470147] Registered cp15_barrier emulation handler
  332. [ 3.470606] Registered setend emulation handler
  333. [ 3.471082] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6370867519511994 ns
  334. [ 3.471951] futex hash table entries: 2048 (order: 5, 131072 bytes, linear)
  335. [ 3.473543] pinctrl core: initialized pinctrl subsystem
  336. [ 3.474513] NET: Registered PF_NETLINK/PF_ROUTE protocol family
  337. [ 3.475539] DMA: preallocated 1024 KiB GFP_KERNEL pool for atomic allocations
  338. [ 3.476350] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
  339. [ 3.477211] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
  340. [ 3.477939] audit: initializing netlink subsys (disabled)
  341. [ 3.478494] audit: type=2000 audit(0.069:1): state=initialized audit_enabled=0 res=1
  342. [ 3.478971] Registered FIQ tty driver
  343. [ 3.479633] thermal_sys: Registered thermal governor 'fair_share'
  344. [ 3.479636] thermal_sys: Registered thermal governor 'step_wise'
  345. [ 3.480176] thermal_sys: Registered thermal governor 'user_space'
  346. [ 3.480722] cpuidle: using governor menu
  347. [ 3.481729] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
  348. [ 3.482423] ASID allocator initialised with 65536 entries
  349. [ 3.484764] ramoops: dmesg-0 0x18000@0x0000000000110000
  350. [ 3.485230] ramoops: dmesg-1 0x18000@0x0000000000128000
  351. [ 3.485715] ramoops: console 0x80000@0x0000000000140000
  352. [ 3.486185] ramoops: pmsg 0x30000@0x00000000001c0000
  353. [ 3.486888] printk: console [ramoops-1] enabled
  354. [ 3.487398] pstore: Registered ramoops as persistent store backend
  355. [ 3.487947] ramoops: using 0xe0000@0x110000, ecc: 0
  356. [ 3.518876] platform fdd90000.vop: Fixed dependency cycle(s) with /dp@fde50000
  357. [ 3.519867] platform fdd90000.vop: Fixed dependency cycle(s) with /hdmi@fde80000
  358. [ 3.526647] platform fed80000.phy: Fixed dependency cycle(s) with /i2c@fec80000/fusb302@22/connector
  359. [ 3.534739] rockchip-gpio fd8a0000.gpio: probed /pinctrl/gpio@fd8a0000
  360. [ 3.535522] rockchip-gpio fec20000.gpio: probed /pinctrl/gpio@fec20000
  361. [ 3.536279] rockchip-gpio fec30000.gpio: probed /pinctrl/gpio@fec30000
  362. [ 3.537035] rockchip-gpio fec40000.gpio: probed /pinctrl/gpio@fec40000
  363. [ 3.537853] rockchip-gpio fec50000.gpio: probed /pinctrl/gpio@fec50000
  364. [ 3.538488] rockchip-pinctrl pinctrl: probed pinctrl
  365. [ 3.540276] platform fdd90000.vop: Fixed dependency cycle(s) with /hdmi@fdea0000
  366. [ 3.544611] KASLR disabled due to lack of seed
  367. [ 3.549059] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
  368. [ 3.549666] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
  369. [ 3.550229] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
  370. [ 3.550832] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
  371. [ 3.551385] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
  372. [ 3.551988] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
  373. [ 3.552552] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
  374. [ 3.553161] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
  375. [ 3.554019] cryptd: max_cpu_qlen set to 1000
  376. [ 3.555307] fiq_debugger fiq_debugger.0: error -ENXIO: IRQ fiq not found
  377. [ 3.555921] fiq_debugger fiq_debugger.0: error -ENXIO: IRQ wakeup not found
  378. [ 3.556546] fiq_debugger_probe: could not install nmi irq handler
  379. [[ 3.557129] printk: console [ttyFIQ0] enabled
  380. 3.557129] printk: console [ttyFIQ0] enabled
  381. [ 3.557899] printk: bootconsole [uart8250] disabled
  382. [ 3.557899] printk: bootconsole [uart8250] disabled
  383. [ 3.558410] Registered fiq debugger ttyFIQ0
  384. [ 3.569482] iommu: Default domain type: Translated
  385. [ 3.569488] iommu: DMA domain TLB invalidation policy: strict mode
  386. [ 3.569624] SCSI subsystem initialized
  387. [ 3.569694] usbcore: registered new interface driver usbfs
  388. [ 3.569709] usbcore: registered new interface driver hub
  389. [ 3.569724] usbcore: registered new device driver usb
  390. [ 3.569866] mc: Linux media interface: v0.10
  391. [ 3.569882] videodev: Linux video capture interface: v2.00
  392. [ 3.569911] pps_core: LinuxPPS API ver. 1 registered
  393. [ 3.569915] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
  394. [ 3.569923] PTP clock support registered
  395. [ 3.570122] arm-scmi firmware:scmi: Enabled polling mode TX channel - prot_id:16
  396. [ 3.570170] arm-scmi firmware:scmi: SCMI Notifications - Core Enabled.
  397. [ 3.570199] arm-scmi firmware:scmi: SCMI Protocol v2.0 'rockchip:' Firmware version 0x0
  398. [ 3.571240] Advanced Linux Sound Architecture Driver Initialized.
  399. [ 3.571492] Bluetooth: Core ver 2.22
  400. [ 3.571506] NET: Registered PF_BLUETOOTH protocol family
  401. [ 3.571510] Bluetooth: HCI device and connection manager initialized
  402. [ 3.571518] Bluetooth: HCI socket layer initialized
  403. [ 3.571523] Bluetooth: L2CAP socket layer initialized
  404. [ 3.571530] Bluetooth: SCO socket layer initialized
  405. [ 3.571540] NetLabel: Initializing
  406. [ 3.571543] NetLabel: domain hash size = 128
  407. [ 3.571547] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO
  408. [ 3.571573] NetLabel: unlabeled traffic allowed by default
  409. [ 3.572806] rockchip-cpuinfo cpuinfo: SoC : 35880000
  410. [ 3.572813] rockchip-cpuinfo cpuinfo: Serial : 1f0bee682f135e89
  411. [ 4.267285] clocksource: Switched to clocksource arch_sys_counter
  412. [ 4.267417] VFS: Disk quotas dquot_6.6.0
  413. [ 4.267439] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
  414. [ 4.267486] FS-Cache: Loaded
  415. [ 4.271922] NET: Registered PF_INET protocol family
  416. [ 4.272131] IP idents hash table entries: 262144 (order: 9, 2097152 bytes, linear)
  417. [ 4.279208] tcp_listen_portaddr_hash hash table entries: 8192 (order: 6, 262144 bytes, linear)
  418. [ 4.279332] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
  419. [ 4.279363] TCP established hash table entries: 131072 (order: 8, 1048576 bytes, linear)
  420. [ 4.280205] TCP bind hash table entries: 65536 (order: 10, 4194304 bytes, linear)
  421. [ 4.283813] TCP: Hash tables configured (established 131072 bind 65536)
  422. [ 4.283878] UDP hash table entries: 8192 (order: 7, 786432 bytes, linear)
  423. [ 4.284245] UDP-Lite hash table entries: 8192 (order: 7, 786432 bytes, linear)
  424. [ 4.284662] NET: Registered PF_UNIX/PF_LOCAL protocol family
  425. [ 4.284881] RPC: Registered named UNIX socket transport module.
  426. [ 4.284887] RPC: Registered udp transport module.
  427. [ 4.284891] RPC: Registered tcp transport module.
  428. [ 4.284895] RPC: Registered tcp NFSv4.1 backchannel transport module.
  429. [ 4.284987] PCI: CLS 0 bytes, default 64
  430. [ 4.285079] Trying to unpack rootfs image as initramfs...
  431. [ 4.285517] rockchip-thermal fec00000.tsadc: Missing rockchip,grf property
  432. [ 4.286214] rockchip-thermal fec00000.tsadc: tsadc is probed successfully!
  433. [ 4.289539] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
  434. [ 4.290631] Initialise system trusted keyrings
  435. [ 4.290735] workingset: timestamp_bits=46 max_order=22 bucket_order=0
  436. [ 4.292670] zbud: loaded
  437. [ 4.293173] squashfs: version 4.0 (2009/01/31) Phillip Lougher
  438. [ 4.293504] NFS: Registering the id_resolver key type
  439. [ 4.293519] Key type id_resolver registered
  440. [ 4.293524] Key type id_legacy registered
  441. [ 4.293554] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
  442. [ 4.293562] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
  443. [ 4.293637] fuse: init (API version 7.37)
  444. [ 4.318986] Key type asymmetric registered
  445. [ 4.318994] Asymmetric key parser 'x509' registered
  446. [ 4.319018] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 242)
  447. [ 4.319098] io scheduler mq-deadline registered
  448. [ 4.319103] io scheduler kyber registered
  449. [ 4.319141] io scheduler bfq registered
  450. [ 4.327736] rockchip-hdptx-phy-hdmi fed60000.hdmiphy: hdptx phy init success
  451. [ 4.328470] rockchip-hdptx-phy-hdmi fed70000.hdmiphy: hdptx phy init success
  452. [ 4.330981] rk-pcie fe180000.pcie: invalid prsnt-gpios property in node
  453. [ 4.331208] rk-pcie fe150000.pcie: invalid prsnt-gpios property in node
  454. [ 4.331477] iep: Module initialized.
  455. [ 4.331516] mpp_service mpp-srv: 889af935b author: jensen 2023-11-16 ARM64: dts: rockchip: Fix PCI bus dtc warnings for nanopi5/6
  456. [ 4.331523] mpp_service mpp-srv: probe start
  457. [ 4.333007] mpp_vepu2 jpege-ccu: probing start
  458. [ 4.333014] mpp_vepu2 jpege-ccu: probing finish
  459. [ 4.333793] mpp_rkvdec2 fdc30000.rkvdec-ccu: rkvdec-ccu, probing start
  460. [ 4.333854] mpp_rkvdec2 fdc30000.rkvdec-ccu: ccu-mode: 1
  461. [ 4.333859] mpp_rkvdec2 fdc30000.rkvdec-ccu: probing finish
  462. [ 4.334151] mpp_rkvenc2 rkvenc-ccu: probing start
  463. [ 4.334158] mpp_rkvenc2 rkvenc-ccu: probing finish
  464. [ 4.334536] mpp_service mpp-srv: probe success
  465. [ 4.343603] dma-pl330 fea10000.dma-controller: Loaded driver for PL330 DMAC-241330
  466. [ 4.343617] dma-pl330 fea10000.dma-controller: DBUFF-128x8bytes Num_Chans-8 Num_Peri-32 Num_Events-16
  467. [ 4.344400] dma-pl330 fea30000.dma-controller: Loaded driver for PL330 DMAC-241330
  468. [ 4.344408] dma-pl330 fea30000.dma-controller: DBUFF-128x8bytes Num_Chans-8 Num_Peri-32 Num_Events-16
  469. [ 4.345184] dma-pl330 fed10000.dma-controller: Loaded driver for PL330 DMAC-241330
  470. [ 4.345192] dma-pl330 fed10000.dma-controller: DBUFF-128x8bytes Num_Chans-8 Num_Peri-32 Num_Events-16
  471. [ 4.345543] rockchip-pvtm fda40000.pvtm: pvtm@0 probed
  472. [ 4.345602] rockchip-pvtm fda50000.pvtm: pvtm@1 probed
  473. [ 4.345651] rockchip-pvtm fda60000.pvtm: pvtm@2 probed
  474. [ 4.345700] rockchip-pvtm fdaf0000.pvtm: pvtm@3 probed
  475. [ 4.345746] rockchip-pvtm fdb30000.pvtm: pvtm@4 probed
  476. [ 4.346221] rockchip-system-monitor rockchip-system-monitor: system monitor probe
  477. [ 4.347022] Serial: 8250/16550 driver, 10 ports, IRQ sharing disabled
  478. [ 4.347379] rk-pcie fe150000.pcie: host bridge /pcie@fe150000 ranges:
  479. [ 4.347426] rk-pcie fe150000.pcie: IO 0x00f0100000..0x00f01fffff -> 0x00f0100000
  480. [ 4.347456] rk-pcie fe150000.pcie: MEM 0x00f0200000..0x00f0ffffff -> 0x00f0200000
  481. [ 4.347478] rk-pcie fe150000.pcie: MEM 0x0900000000..0x093fffffff -> 0x0900000000
  482. [ 4.347508] feb90000.serial: ttyS6 at MMIO 0xfeb90000 (irq = 36, base_baud = 1500000) is a 16550A
  483. [ 4.347541] rk-pcie fe150000.pcie: iATU unroll: enabled
  484. [ 4.347555] rk-pcie fe150000.pcie: iATU regions: 8 ob, 8 ib, align 64K, limit 8G
  485. [ 4.348797] random: crng init done
  486. [ 4.353656] rk_iommu fdca0000.iommu: av1d iommu enabled
  487. [ 4.354818] rockchip-vop2 fdd90000.vop: Adding to iommu group 15
  488. [ 4.362089] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] vp0 assign plane mask: 0x7, primary plane phy id: 0
  489. [ 4.362114] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] vp1 assign plane mask: 0x148, primary plane phy id: 6
  490. [ 4.362125] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] vp2 assign plane mask: 0x280, primary plane phy id: 7
  491. [ 4.362136] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] vp3 assign plane mask: 0x0, primary plane phy id: -1
  492. [ 4.362216] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] Esmart0-win0 as cursor plane for vp0
  493. [ 4.362290] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] Esmart1-win0 as cursor plane for vp1
  494. [ 4.362359] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] Esmart3-win0 as cursor plane for vp2
  495. [ 4.372025] rockchip-drm display-subsystem: bound fdd90000.vop (ops 0xffffffc009276328)
  496. [ 4.372477] dwhdmi-rockchip fde80000.hdmi: registered ddc I2C bus driver
  497. [ 4.372876] rockchip-drm display-subsystem: bound fde80000.hdmi (ops 0xffffffc009288c78)
  498. [ 4.373290] dwhdmi-rockchip fdea0000.hdmi: registered ddc I2C bus driver
  499. [ 4.373628] rockchip-drm display-subsystem: bound fdea0000.hdmi (ops 0xffffffc009288c78)
  500. [ 4.373817] rockchip-drm display-subsystem: bound fde50000.dp (ops 0xffffffc00928bc40)
  501. [ 4.479499] dwhdmi-rockchip fde80000.hdmi: i2c read err!
  502. [ 4.480253] [drm] Initialized rockchip 3.0.0 20140818 for display-subsystem on minor 0
  503. [ 4.555097] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
  504. [ 4.569297] Freeing initrd memory: 7880K
  505. [ 4.580647] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
  506. [ 4.607310] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
  507. [ 4.618516] Console: switching to colour frame buffer device 240x67
  508. [ 4.633974] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
  509. [ 4.635195] rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device
  510. [ 4.638637] SPI driver panel-simple-spi has no spi_device_id for simple-panel-spi
  511. [ 4.642718] brd: module loaded
  512. [ 4.645367] loop: module loaded
  513. [ 4.645494] lkdtm: No crash points registered, enable through debugfs
  514. [ 4.646370] SPI driver spidev has no spi_device_id for rockchip,spidev
  515. [ 4.647313] rockchip-spi feb20000.spi: no high_speed pinctrl state
  516. [ 4.648373] rk806 spi2.0: chip id: RK806,ver:0x2, 0x1
  517. [ 4.648511] rk806 spi2.0: ON: 0x80 OFF:0x4
  518. [ 4.660656] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x1
  519. [ 4.662120] rk806 spi2.0: no sleep-setting state
  520. [ 4.662131] rk806 spi2.0: no reset-setting pinctrl state
  521. [ 4.662137] rk806 spi2.0: no dvs-setting pinctrl state
  522. [ 4.663508] rockchip-spi feb20000.spi: probed, poll=0, rsd=0, cs-inactive=0, ready=0
  523. [ 4.665163] PPP generic driver version 2.4.2
  524. [ 4.665265] usbcore: registered new interface driver asix
  525. [ 4.665291] usbcore: registered new interface driver ax88179_178a
  526. [ 4.665306] usbcore: registered new interface driver cdc_ether
  527. [ 4.665321] usbcore: registered new interface driver rndis_host
  528. [ 4.665337] usbcore: registered new interface driver qmi_wwan
  529. [ 4.665694] platform fc000000.usb: Fixed dependency cycle(s) with /i2c@fec80000/fusb302@22
  530. [ 4.677930] phy phy-fd5d4000.syscon:usb2-phy@4000.3: illegal mode
  531. [ 4.677945] xhci-hcd xhci-hcd.9.auto: xHCI Host Controller
  532. [ 4.677958] xhci-hcd xhci-hcd.9.auto: new USB bus registered, assigned bus number 1
  533. [ 4.678047] xhci-hcd xhci-hcd.9.auto: hcc params 0x0220fe64 hci version 0x110 quirks 0x0000200002010010
  534. [ 4.678076] xhci-hcd xhci-hcd.9.auto: irq 73, io mem 0xfc400000
  535. [ 4.678156] xhci-hcd xhci-hcd.9.auto: xHCI Host Controller
  536. [ 4.678165] xhci-hcd xhci-hcd.9.auto: new USB bus registered, assigned bus number 2
  537. [ 4.678174] xhci-hcd xhci-hcd.9.auto: Host supports USB 3.0 SuperSpeed
  538. [ 4.678241] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.01
  539. [ 4.678251] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
  540. [ 4.678258] usb usb1: Product: xHCI Host Controller
  541. [ 4.678264] usb usb1: Manufacturer: Linux 6.1.25 xhci-hcd
  542. [ 4.678270] usb usb1: SerialNumber: xhci-hcd.9.auto
  543. [ 4.678502] hub 1-0:1.0: USB hub found
  544. [ 4.678519] hub 1-0:1.0: 1 port detected
  545. [ 4.678666] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
  546. [ 4.678707] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 6.01
  547. [ 4.678715] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
  548. [ 4.678722] usb usb2: Product: xHCI Host Controller
  549. [ 4.678728] usb usb2: Manufacturer: Linux 6.1.25 xhci-hcd
  550. [ 4.678734] usb usb2: SerialNumber: xhci-hcd.9.auto
  551. [ 4.678923] hub 2-0:1.0: USB hub found
  552. [ 4.678937] hub 2-0:1.0: 1 port detected
  553. [ 4.679093] usbcore: registered new interface driver cdc_acm
  554. [ 4.679100] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
  555. [ 4.679117] usbcore: registered new interface driver cdc_wdm
  556. [ 4.679185] usbcore: registered new interface driver uas
  557. [ 4.679217] usbcore: registered new interface driver usb-storage
  558. [ 4.679251] usbcore: registered new interface driver usbserial_generic
  559. [ 4.679262] usbserial: USB Serial support registered for generic
  560. [ 4.679279] usbcore: registered new interface driver ch341
  561. [ 4.679292] usbserial: USB Serial support registered for ch341-uart
  562. [ 4.679308] usbcore: registered new interface driver cp210x
  563. [ 4.679318] usbserial: USB Serial support registered for cp210x
  564. [ 4.679339] usbcore: registered new interface driver ftdi_sio
  565. [ 4.679350] usbserial: USB Serial support registered for FTDI USB Serial Device
  566. [ 4.679384] usbcore: registered new interface driver option
  567. [ 4.679394] usbserial: USB Serial support registered for GSM modem (1-port)
  568. [ 4.679421] ehci-platform fc800000.usb: EHCI Host Controller
  569. [ 4.679429] ohci-platform fc840000.usb: Generic Platform OHCI controller
  570. [ 4.679439] ehci-platform fc800000.usb: new USB bus registered, assigned bus number 3
  571. [ 4.679440] usbcore: registered new interface driver pl2303
  572. [ 4.679446] ohci-platform fc840000.usb: new USB bus registered, assigned bus number 4
  573. [ 4.679448] usbserial: USB Serial support registered for pl2303
  574. [ 4.679462] usbcore: registered new interface driver qcserial
  575. [ 4.679474] usbserial: USB Serial support registered for Qualcomm USB modem
  576. [ 4.679476] ehci-platform fc880000.usb: EHCI Host Controller
  577. [ 4.679494] ehci-platform fc880000.usb: new USB bus registered, assigned bus number 5
  578. [ 4.679495] ohci-platform fc8c0000.usb: Generic Platform OHCI controller
  579. [ 4.679508] ohci-platform fc840000.usb: irq 76, io mem 0xfc840000
  580. [ 4.679518] ohci-platform fc8c0000.usb: new USB bus registered, assigned bus number 6
  581. [ 4.679525] ehci-platform fc800000.usb: irq 74, io mem 0xfc800000
  582. [ 4.679567] ehci-platform fc880000.usb: irq 75, io mem 0xfc880000
  583. [ 4.679648] ohci-platform fc8c0000.usb: irq 77, io mem 0xfc8c0000
  584. [ 4.679693] mousedev: PS/2 mouse device common for all mice
  585. [ 4.680068] .. rk pwm remotectl v2.0 init
  586. [ 4.680192] input: fd8b0030.pwm as /devices/platform/fd8b0030.pwm/input/input0
  587. [ 4.680382] remotectl-pwm fd8b0030.pwm: pwm version is 0x2130000
  588. [ 4.680423] remotectl-pwm fd8b0030.pwm: Controller support pwrkey capture
  589. [ 4.681393] input: rk805 pwrkey as /devices/platform/feb20000.spi/spi_master/spi2/spi2.0/rk805-pwrkey.7.auto/input/input1
  590. [ 4.681593] i2c_dev: i2c /dev entries driver
  591. [ 4.687317] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
  592. [ 4.690635] ehci-platform fc800000.usb: USB 2.0 started, EHCI 1.00
  593. [ 4.690785] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.01
  594. [ 4.690797] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
  595. [ 4.690805] usb usb3: Product: EHCI Host Controller
  596. [ 4.690811] usb usb3: Manufacturer: Linux 6.1.25 ehci_hcd
  597. [ 4.690817] usb usb3: SerialNumber: fc800000.usb
  598. [ 4.691052] hub 3-0:1.0: USB hub found
  599. [ 4.691077] hub 3-0:1.0: 1 port detected
  600. [ 4.703975] ehci-platform fc880000.usb: USB 2.0 started, EHCI 1.00
  601. [ 4.704192] rtc-hym8563 6-0051: rtc information is valid
  602. [ 4.704214] usb usb5: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.01
  603. [ 4.704226] usb usb5: New USB device strings: Mfr=3, Product=2, SerialNumber=1
  604. [ 4.704234] usb usb5: Product: EHCI Host Controller
  605. [ 4.704240] usb usb5: Manufacturer: Linux 6.1.25 ehci_hcd
  606. [ 4.704246] usb usb5: SerialNumber: fc880000.usb
  607. [ 4.704563] hub 5-0:1.0: USB hub found
  608. [ 4.704612] hub 5-0:1.0: 1 port detected
  609. [ 4.708095] rtc-hym8563 6-0051: registered as rtc0
  610. [ 4.708609] rtc-hym8563 6-0051: setting system clock to 2023-12-06T17:00:27 UTC (1701882027)
  611. [ 4.713977] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
  612. [ 4.715206] IR NEC protocol handler initialized
  613. [ 4.717331] rk_hdmirx fdee0000.hdmirx-controller: No reserved memory for HDMIRX, use default CMA
  614. [ 4.717359] rk_hdmirx fdee0000.hdmirx-controller: hdmirx_probe: cpu_aff:0x400, Bound_cpu:4, wdt_cfg_bound_cpu:5
  615. [ 4.717855] rk_hdmirx fdee0000.hdmirx-controller: hdmirx_audio_interrupts_setup: 0
  616. [ 4.718508] rk_hdmirx fdee0000.hdmirx-controller: rk_hdmirx_hdcp_register success
  617. [ 4.718530] rk_hdmirx fdee0000.hdmirx-controller: fdee0000.hdmirx-controller driver probe ok!
  618. [ 4.719500] __power_supply_register: Expected proper parent device for 'test_ac'
  619. [ 4.719604] __power_supply_register: Expected proper parent device for 'test_battery'
  620. [ 4.719775] __power_supply_register: Expected proper parent device for 'test_usb'
  621. [ 4.720484] device-mapper: uevent: version 1.0.3
  622. [ 4.720604] device-mapper: ioctl: 4.47.0-ioctl (2022-07-28) initialised: dm-devel@redhat.com
  623. [ 4.721345] cpu cpu0: bin=0
  624. [ 4.721524] cpu cpu0: leakage=8
  625. [ 4.722962] cpu cpu0: pvtm=1406
  626. [ 4.723100] cpu cpu0: pvtm-volt-sel=0
  627. [ 4.725089] cpu cpu4: bin=0
  628. [ 4.725264] cpu cpu4: leakage=7
  629. [ 4.731827] cpu cpu4: pvtm=1639
  630. [ 4.735886] cpu cpu4: pvtm-volt-sel=2
  631. [ 4.738041] usb usb4: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 6.01
  632. [ 4.738055] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
  633. [ 4.738063] usb usb4: Product: Generic Platform OHCI controller
  634. [ 4.738070] usb usb4: Manufacturer: Linux 6.1.25 ohci_hcd
  635. [ 4.738076] usb usb4: SerialNumber: fc840000.usb
  636. [ 4.738304] hub 4-0:1.0: USB hub found
  637. [ 4.738320] hub 4-0:1.0: 1 port detected
  638. [ 4.738598] usb usb6: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 6.01
  639. [ 4.738621] usb usb6: New USB device strings: Mfr=3, Product=2, SerialNumber=1
  640. [ 4.738633] cpu cpu6: bin=0
  641. [ 4.738636] usb usb6: Product: Generic Platform OHCI controller
  642. [ 4.738644] usb usb6: Manufacturer: Linux 6.1.25 ohci_hcd
  643. [ 4.738658] usb usb6: SerialNumber: fc8c0000.usb
  644. [ 4.738812] cpu cpu6: leakage=7
  645. [ 4.739057] hub 6-0:1.0: USB hub found
  646. [ 4.739098] hub 6-0:1.0: 1 port detected
  647. [ 4.740635] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
  648. [ 4.745397] cpu cpu6: pvtm=1635
  649. [ 4.749424] cpu cpu6: pvtm-volt-sel=2
  650. [ 4.751469] cpu cpu0: avs=0
  651. [ 4.752745] cpu cpu4: avs=0
  652. [ 4.753852] cpu cpu6: avs=0
  653. [ 4.753960] cpu cpu0: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=1608000000 h_table=0
  654. [ 4.754317] cpu cpu0: EM: created perf domain
  655. [ 4.754721] cpu cpu4: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=2208000000 h_table=0
  656. [ 4.761128] cpu cpu4: EM: created perf domain
  657. [ 4.761754] cpu cpu6: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=2208000000 h_table=0
  658. [ 4.767337] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
  659. [ 4.768177] cpu cpu6: EM: created perf domain
  660. [ 4.769268] sdhci: Secure Digital Host Controller Interface driver
  661. [ 4.769279] sdhci: Copyright(c) Pierre Ossman
  662. [ 4.769284] Synopsys Designware Multimedia Card Interface Driver
  663. [ 4.769637] sdhci-pltfm: SDHCI platform and OF driver helper
  664. [ 4.771128] ledtrig-cpu: registered to indicate activity on CPUs
  665. [ 4.771151] arm-scmi firmware:scmi: Failed. SCMI protocol 17 not active.
  666. [ 4.771189] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
  667. [ 4.771222] hid: raw HID events driver (C) Jiri Kosina
  668. [ 4.771415] usbcore: registered new interface driver usbhid
  669. [ 4.771423] usbhid: USB HID core driver
  670. [ 4.779873] optee: probing for conduit method.
  671. [ 4.779899] optee: revision 3.13 (7f1ea6d6)
  672. [ 4.780195] optee: dynamic shared memory is enabled
  673. [ 4.780327] optee: initialized driver
  674. [ 4.794094] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
  675. [ 4.800189] rockchip-i2s-tdm fddf0000.i2s: CLK-ALWAYS-ON: mclk: 12288000, bclk: 3072000, fsync: 48000
  676. [ 4.801560] rockchip-i2s-tdm fddf4000.i2s: CLK-ALWAYS-ON: mclk: 12288000, bclk: 3072000, fsync: 48000
  677. [ 4.805172] mmc2: SDHCI controller on fe2e0000.mmc [fe2e0000.mmc] using ADMA
  678. [ 4.805581] debugfs: File 'Capture' in directory 'dapm' already present!
  679. [ 4.807920] debugfs: File 'Capture' in directory 'dapm' already present!
  680. [ 4.819778] input: rockchip,hdmiin rockchip,hdmiin as /devices/platform/hdmiin-sound/sound/card3/input2
  681. [ 4.820627] Initializing XFRM netlink socket
  682. [ 4.820645] IPsec XFRM device driver
  683. [ 4.820928] NET: Registered PF_INET6 protocol family
  684. [ 4.822053] Segment Routing with IPv6
  685. [ 4.822079] In-situ OAM (IOAM) with IPv6
  686. [ 4.825513] bpfilter: Loaded bpfilter_umh pid 149
  687. [ 4.825901] NET: Registered PF_PACKET protocol family
  688. [ 4.826075] Bluetooth: RFCOMM TTY layer initialized
  689. [ 4.826085] Bluetooth: RFCOMM socket layer initialized
  690. [ 4.826099] Bluetooth: RFCOMM ver 1.11
  691. [ 4.826109] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
  692. [ 4.826126] Bluetooth: HIDP socket layer initialized
  693. [ 4.826164] [BT_RFKILL]: Enter rfkill_rk_init
  694. [ 4.826170] [WLAN_RFKILL]: Enter rfkill_wlan_init
  695. [ 4.826546] Key type dns_resolver registered
  696. [ 4.827720] registered taskstats version 1
  697. [ 4.827750] Loading compiled-in X.509 certificates
  698. [ 4.828466] zswap: loaded using pool lzo/zbud
  699. [ 4.829087] pstore: Using crash dump compression: deflate
  700. [ 4.841267] rga3_core0 fdb60000.rga: Adding to iommu group 2
  701. [ 4.841546] rga: rga3_core0, irq = 41, match scheduler
  702. [ 4.841769] rga: rga3_core0 hardware loaded successfully, hw_version:3.0.76831.
  703. [ 4.841854] rga: rga3_core0 probe successfully
  704. [ 4.842246] rga3_core1 fdb70000.rga: Adding to iommu group 3
  705. [ 4.842392] rga: rga3_core1, irq = 42, match scheduler
  706. [ 4.842575] rga: rga3_core1 hardware loaded successfully, hw_version:3.0.76831.
  707. [ 4.842618] rga: rga3_core1 probe successfully
  708. [ 4.843036] rga: rga2, irq = 97, match scheduler
  709. [ 4.843330] rga: rga2 hardware loaded successfully, hw_version:3.2.63318.
  710. [ 4.843386] rga: rga2 probe successfully
  711. [ 4.843564] rga_iommu: IOMMU binding successfully, default mapping core[0x1]
  712. [ 4.843723] rga: Module initialized. v1.2.27
  713. [ 4.848433] rk-pcie fe180000.pcie: host bridge /pcie@fe180000 ranges:
  714. [ 4.848500] rk-pcie fe180000.pcie: IO 0x00f3100000..0x00f31fffff -> 0x00f3100000
  715. [ 4.848545] rk-pcie fe180000.pcie: MEM 0x00f3200000..0x00f3ffffff -> 0x00f3200000
  716. [ 4.848578] rk-pcie fe180000.pcie: MEM 0x09c0000000..0x09ffffffff -> 0x09c0000000
  717. [ 4.848676] rk-pcie fe180000.pcie: iATU unroll: enabled
  718. [ 4.848697] rk-pcie fe180000.pcie: iATU regions: 8 ob, 8 ib, align 64K, limit 8G
  719. [ 4.871940] friendlyelec-board board: Serial : 1f0bee682f135e89
  720. [ 4.874008] rk-pcie fe190000.pcie: invalid prsnt-gpios property in node
  721. [ 4.874695] rk-pcie fe170000.pcie: invalid prsnt-gpios property in node
  722. [ 4.874835] rk-pcie fe190000.pcie: host bridge /pcie@fe190000 ranges:
  723. [ 4.874860] mpp_vdpu1 fdb51000.avsd-plus: Adding to iommu group 1
  724. [ 4.874874] rk-pcie fe190000.pcie: IO 0x00f4100000..0x00f41fffff -> 0x00f4100000
  725. [ 4.874908] rk-pcie fe190000.pcie: MEM 0x00f4200000..0x00f4ffffff -> 0x00f4200000
  726. [ 4.874928] rk-pcie fe190000.pcie: MEM 0x0a00000000..0x0a3fffffff -> 0x0a00000000
  727. [ 4.874988] rk-pcie fe190000.pcie: iATU unroll: enabled
  728. [ 4.875001] rk-pcie fe190000.pcie: iATU regions: 8 ob, 8 ib, align 64K, limit 8G
  729. [ 4.875249] mpp_vdpu1 fdb51000.avsd-plus: probe device
  730. [ 4.875530] mpp_vdpu1 fdb51000.avsd-plus: reset_group->rw_sem_on=0
  731. [ 4.875552] mpp_vdpu1 fdb51000.avsd-plus: reset_group->rw_sem_on=0
  732. [ 4.875923] mpp_vdpu1 fdb51000.avsd-plus: probing finish
  733. [ 4.876230] mpp_vdpu2 fdb50400.vdpu: Adding to iommu group 1
  734. [ 4.876323] mpp_vdpu2 fdb50400.vdpu: probe device
  735. [ 4.876530] mpp_vdpu2 fdb50400.vdpu: reset_group->rw_sem_on=0
  736. [ 4.876546] mpp_vdpu2 fdb50400.vdpu: reset_group->rw_sem_on=0
  737. [ 4.876866] mpp_vdpu2 fdb50400.vdpu: probing finish
  738. [ 4.877158] mpp_vepu2 fdba0000.jpege-core: Adding to iommu group 5
  739. [ 4.877325] mpp_vepu2 fdba0000.jpege-core: probing start
  740. [ 4.877619] mpp_vepu2 fdba0000.jpege-core: attach ccu success
  741. [ 4.878199] mpp_vepu2 fdba0000.jpege-core: probing finish
  742. [ 4.878545] mpp_vepu2 fdba4000.jpege-core: Adding to iommu group 6
  743. [ 4.878683] mpp_vepu2 fdba4000.jpege-core: probing start
  744. [ 4.878961] mpp_vepu2 fdba4000.jpege-core: attach ccu success
  745. [ 4.879371] mpp_vepu2 fdba4000.jpege-core: probing finish
  746. [ 4.879712] mpp_vepu2 fdba8000.jpege-core: Adding to iommu group 7
  747. [ 4.879856] mpp_vepu2 fdba8000.jpege-core: probing start
  748. [ 4.880133] mpp_vepu2 fdba8000.jpege-core: attach ccu success
  749. [ 4.880469] mpp_vepu2 fdba8000.jpege-core: probing finish
  750. [ 4.880833] mpp_vepu2 fdbac000.jpege-core: Adding to iommu group 8
  751. [ 4.880979] mpp_vepu2 fdbac000.jpege-core: probing start
  752. [ 4.881255] mpp_vepu2 fdbac000.jpege-core: attach ccu success
  753. [ 4.881830] mpp_vepu2 fdbac000.jpege-core: probing finish
  754. [ 4.882177] mpp-iep2 fdbb0000.iep: Adding to iommu group 9
  755. [ 4.882320] mpp-iep2 fdbb0000.iep: probe device
  756. [ 4.882595] mpp-iep2 fdbb0000.iep: allocate roi buffer failed
  757. [ 4.882928] mpp-iep2 fdbb0000.iep: probing finish
  758. [ 4.883276] mpp_jpgdec fdb90000.jpegd: Adding to iommu group 4
  759. [ 4.883596] mpp_jpgdec fdb90000.jpegd: probe device
  760. [ 4.884357] mpp_jpgdec fdb90000.jpegd: probing finish
  761. [ 4.884717] mpp_rkvdec2 fdc38100.rkvdec-core: Adding to iommu group 12
  762. [ 4.885239] mpp_rkvdec2 fdc38100.rkvdec-core: rkvdec-core, probing start
  763. [ 4.885547] mpp_rkvdec2 fdc38100.rkvdec-core: shared_niu_a is not found!
  764. [ 4.885561] rkvdec2_init:982: No niu aclk reset resource define
  765. [ 4.885575] mpp_rkvdec2 fdc38100.rkvdec-core: shared_niu_h is not found!
  766. [ 4.885584] rkvdec2_init:985: No niu hclk reset resource define
  767. [ 4.885667] mpp_rkvdec2 fdc38100.rkvdec-core: no regulator, devfreq is disabled
  768. [ 4.885785] mpp_rkvdec2 fdc38100.rkvdec-core: core_mask=00010001
  769. [ 4.885799] mpp_rkvdec2 fdc38100.rkvdec-core: attach ccu as core 0
  770. [ 4.886136] mpp_rkvdec2 fdc38100.rkvdec-core: sram_start 0x00000000ff001000
  771. [ 4.886149] mpp_rkvdec2 fdc38100.rkvdec-core: rcb_iova 0x00000000fff00000
  772. [ 4.886161] mpp_rkvdec2 fdc38100.rkvdec-core: sram_size 491520
  773. [ 4.886172] mpp_rkvdec2 fdc38100.rkvdec-core: rcb_size 1048576
  774. [ 4.886185] mpp_rkvdec2 fdc38100.rkvdec-core: min_width 512
  775. [ 4.886200] mpp_rkvdec2 fdc38100.rkvdec-core: rcb_info_count 20
  776. [ 4.886210] mpp_rkvdec2 fdc38100.rkvdec-core: [136, 24576]
  777. [ 4.886223] mpp_rkvdec2 fdc38100.rkvdec-core: [137, 49152]
  778. [ 4.886234] mpp_rkvdec2 fdc38100.rkvdec-core: [141, 90112]
  779. [ 4.886245] mpp_rkvdec2 fdc38100.rkvdec-core: [140, 49152]
  780. [ 4.886256] mpp_rkvdec2 fdc38100.rkvdec-core: [139, 180224]
  781. [ 4.886267] mpp_rkvdec2 fdc38100.rkvdec-core: [133, 49152]
  782. [ 4.886277] mpp_rkvdec2 fdc38100.rkvdec-core: [134, 8192]
  783. [ 4.886289] mpp_rkvdec2 fdc38100.rkvdec-core: [135, 4352]
  784. [ 4.886299] mpp_rkvdec2 fdc38100.rkvdec-core: [138, 13056]
  785. [ 4.886310] mpp_rkvdec2 fdc38100.rkvdec-core: [142, 291584]
  786. [ 4.886371] mpp_rkvdec2 fdc38100.rkvdec-core: probing finish
  787. [ 4.886682] mpp_rkvdec2 fdc48100.rkvdec-core: Adding to iommu group 13
  788. [ 4.887104] mpp_rkvdec2 fdc48100.rkvdec-core: rkvdec-core, probing start
  789. [ 4.887405] mpp_rkvdec2 fdc48100.rkvdec-core: shared_niu_a is not found!
  790. [ 4.887419] rkvdec2_init:982: No niu aclk reset resource define
  791. [ 4.887432] mpp_rkvdec2 fdc48100.rkvdec-core: shared_niu_h is not found!
  792. [ 4.887441] rkvdec2_init:985: No niu hclk reset resource define
  793. [ 4.887514] mpp_rkvdec2 fdc48100.rkvdec-core: no regulator, devfreq is disabled
  794. [ 4.887595] mpp_rkvdec2 fdc48100.rkvdec-core: core_mask=00020002
  795. [ 4.887625] mpp_rkvdec2 fdc48100.rkvdec-core: attach ccu as core 1
  796. [ 4.888020] mpp_rkvdec2 fdc48100.rkvdec-core: sram_start 0x00000000ff079000
  797. [ 4.888033] mpp_rkvdec2 fdc48100.rkvdec-core: rcb_iova 0x00000000ffe00000
  798. [ 4.888045] mpp_rkvdec2 fdc48100.rkvdec-core: sram_size 487424
  799. [ 4.888055] mpp_rkvdec2 fdc48100.rkvdec-core: rcb_size 1048576
  800. [ 4.888067] mpp_rkvdec2 fdc48100.rkvdec-core: min_width 512
  801. [ 4.888081] mpp_rkvdec2 fdc48100.rkvdec-core: rcb_info_count 20
  802. [ 4.888092] mpp_rkvdec2 fdc48100.rkvdec-core: [136, 24576]
  803. [ 4.888103] mpp_rkvdec2 fdc48100.rkvdec-core: [137, 49152]
  804. [ 4.888114] mpp_rkvdec2 fdc48100.rkvdec-core: [141, 90112]
  805. [ 4.888125] mpp_rkvdec2 fdc48100.rkvdec-core: [140, 49152]
  806. [ 4.888136] mpp_rkvdec2 fdc48100.rkvdec-core: [139, 180224]
  807. [ 4.888146] mpp_rkvdec2 fdc48100.rkvdec-core: [133, 49152]
  808. [ 4.888157] mpp_rkvdec2 fdc48100.rkvdec-core: [134, 8192]
  809. [ 4.888168] mpp_rkvdec2 fdc48100.rkvdec-core: [135, 4352]
  810. [ 4.888179] mpp_rkvdec2 fdc48100.rkvdec-core: [138, 13056]
  811. [ 4.888190] mpp_rkvdec2 fdc48100.rkvdec-core: [142, 291584]
  812. [ 4.888249] mpp_rkvdec2 fdc48100.rkvdec-core: probing finish
  813. [ 4.888554] mpp_rkvenc2 fdbd0000.rkvenc-core: Adding to iommu group 10
  814. [ 4.888835] mpp_rkvenc2 fdbd0000.rkvenc-core: probing start
  815. [ 4.890057] mpp_rkvenc2 fdbd0000.rkvenc-core: leakage=11
  816. [ 4.890086] mpp_rkvenc2 fdbd0000.rkvenc-core: leakage-volt-sel=1
  817. [ 4.891168] mpp_rkvenc2 fdbd0000.rkvenc-core: avs=0
  818. [ 4.891202] mpp_rkvenc2 fdbd0000.rkvenc-core: l=-2147483648 h=2147483647 hyst=0 l_limit=0 h_limit=0 h_table=0
  819. [ 4.892076] mpp_rkvenc2 fdbd0000.rkvenc-core: attach ccu as core 0
  820. [ 4.892373] mpp_rkvenc2 fdbd0000.rkvenc-core: probing finish
  821. [ 4.892714] mpp_rkvenc2 fdbe0000.rkvenc-core: Adding to iommu group 11
  822. [ 4.893039] mpp_rkvenc2 fdbe0000.rkvenc-core: probing start
  823. [ 4.893866] mpp_rkvenc2 fdbe0000.rkvenc-core: leakage=11
  824. [ 4.893886] mpp_rkvenc2 fdbe0000.rkvenc-core: leakage-volt-sel=1
  825. [ 4.895143] mpp_rkvenc2 fdbe0000.rkvenc-core: avs=0
  826. [ 4.895179] mpp_rkvenc2 fdbe0000.rkvenc-core: l=-2147483648 h=2147483647 hyst=0 l_limit=0 h_limit=0 h_table=0
  827. [ 4.895461] mpp_rkvenc2 fdbe0000.rkvenc-core: attach ccu as core 1
  828. [ 4.895733] mpp_rkvenc2 fdbe0000.rkvenc-core: probing finish
  829. [ 4.896058] mpp_av1dec fdc70000.av1d: Adding to iommu group 14
  830. [ 4.896481] mpp_av1dec fdc70000.av1d: probing start
  831. [ 4.897003] mpp_av1dec fdc70000.av1d: probing finish
  832. [ 4.898593] mali fb000000.gpu: Kernel DDK version g18p0-01eac0
  833. [ 4.898957] rockchip-dmc dmc: bin=0
  834. [ 4.899206] rockchip-dmc dmc: leakage=27
  835. [ 4.899225] rockchip-dmc dmc: leakage-volt-sel=0
  836. [ 4.899591] dwmmc_rockchip fe2c0000.mmc: No normal pinctrl state
  837. [ 4.899610] dwmmc_rockchip fe2c0000.mmc: No idle pinctrl state
  838. [ 4.899737] dwmmc_rockchip fe2c0000.mmc: IDMAC supports 32-bit address mode.
  839. [ 4.899783] dwmmc_rockchip fe2c0000.mmc: Using internal DMA controller.
  840. [ 4.899799] dwmmc_rockchip fe2c0000.mmc: Version ID is 270a
  841. [ 4.899838] dwmmc_rockchip fe2c0000.mmc: DW MMC controller at irq 117,32 bit host data width,256 deep fifo
  842. [ 4.899871] mali fb000000.gpu: bin=0
  843. [ 4.900067] mali fb000000.gpu: leakage=11
  844. [ 4.900137] debugfs: Directory 'fb000000.gpu-mali' with parent 'vdd_gpu_s0' already present!
  845. [ 4.900802] rockchip-dmc dmc: avs=0
  846. [ 4.900827] rockchip-dmc dmc: current ATF version 0x100
  847. [ 4.900952] rockchip-dmc dmc: normal_rate = 1560000000
  848. [ 4.900962] rockchip-dmc dmc: reboot_rate = 2112000000
  849. [ 4.900970] rockchip-dmc dmc: suspend_rate = 528000000
  850. [ 4.900978] rockchip-dmc dmc: video_4k_rate = 1560000000
  851. [ 4.900986] rockchip-dmc dmc: video_4k_10b_rate = 1560000000
  852. [ 4.900994] rockchip-dmc dmc: video_svep_rate = 1560000000
  853. [ 4.901002] rockchip-dmc dmc: boost_rate = 2112000000
  854. [ 4.901010] rockchip-dmc dmc: fixed_rate(isp|cif0|cif1|dualview) = 2112000000
  855. [ 4.901019] rockchip-dmc dmc: performance_rate = 2112000000
  856. [ 4.901027] rockchip-dmc dmc: hdmirx_rate = 2112000000
  857. [ 4.901039] rockchip-dmc dmc: failed to get vop bandwidth to dmc rate
  858. [ 4.901046] rockchip-dmc dmc: failed to get vop pn to msch rl
  859. [ 4.901498] mali fb000000.gpu: pvtm=826
  860. [ 4.901528] rockchip-dmc dmc: l=10000 h=2147483647 hyst=5000 l_limit=0 h_limit=0 h_table=0
  861. [ 4.901732] mali fb000000.gpu: pvtm-volt-sel=1
  862. [ 4.901830] debugfs: Directory 'fb000000.gpu-mali' with parent 'vdd_gpu_s0' already present!
  863. [ 4.903638] mali fb000000.gpu: avs=0
  864. [ 4.903692] W : [File] : drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_rk.c; [Line] : 144; [Func] : kbase_platform_rk_init(); power-off-delay-ms not available.
  865. [ 4.904034] mali fb000000.gpu: r0p0 status 5 not found in HW issues table;
  866. [ 4.904053] mali fb000000.gpu: falling back to closest match: r0p0 status 0
  867. [ 4.904067] mali fb000000.gpu: Execution proceeding normally with fallback match
  868. [ 4.904078] mali fb000000.gpu: GPU identified as 0x7 arch 10.8.6 r0p0 status 0
  869. [ 4.904142] mali fb000000.gpu: No priority control manager is configured
  870. [ 4.904321] mali fb000000.gpu: No memory group manager is configured
  871. [ 4.904363] mali fb000000.gpu: Protected memory allocator not available
  872. [ 4.905223] mali fb000000.gpu: Capping CSF_FIRMWARE_TIMEOUT to CSF_FIRMWARE_PING_TIMEOUT
  873. [ 4.905779] mali fb000000.gpu: EM: created perf domain
  874. [ 4.906308] mali fb000000.gpu: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=800000000 h_table=0
  875. [ 4.907054] mali fb000000.gpu: Probed as mali0
  876. [ 4.909312] mmc2: Host Software Queue enabled
  877. [ 4.909331] mmc2: new HS400 Enhanced strobe MMC card at address 0001
  878. [ 4.909690] mmcblk2: mmc2:0001 A3A444 230 GiB
  879. [ 4.911857] mmcblk2: p1 p2 p3 p4 p5 p6 p7 p8 p9
  880. [ 4.912709] mmcblk2boot0: mmc2:0001 A3A444 4.00 MiB
  881. [ 4.913585] mmcblk2boot1: mmc2:0001 A3A444 4.00 MiB
  882. [ 4.913668] mmc_host mmc0: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)
  883. [ 4.914382] mmcblk2rpmb: mmc2:0001 A3A444 4.00 MiB, chardev (236:0)
  884. [ 4.918522] input: realtek,rt5616-codec Headphone Jack as /devices/platform/rt5616-sound/sound/card4/input3
  885. [ 4.921117] RKNPU fdab0000.npu: Adding to iommu group 0
  886. [ 4.921243] RKNPU fdab0000.npu: RKNPU: rknpu iommu is enabled, using iommu mode
  887. [ 4.922551] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdab0000-0xfdabffff]
  888. [ 4.922577] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdac0000-0xfdacffff]
  889. [ 4.922589] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdad0000-0xfdadffff]
  890. [ 4.922980] [drm] Initialized rknpu 0.9.2 20231018 for fdab0000.npu on minor 1
  891. [ 4.925031] rockchip-pm rockchip-suspend: not set pwm-regulator-config
  892. [ 4.925044] rockchip-suspend not set sleep-mode-config for mem-lite
  893. Loading, please wait...
  894. [ 4.925050] rockchip-suspend not set wakeup-config for mem-lite
  895. [ 4.925055] rockchip-suspend not set sleep-mode-config for mem-ultra
  896. [ 4.925060] rockchip-suspend not set wakeup-config for mem-ultra
  897. [ 4.925474] ALSA device list:
  898. [ 4.925479] #0: rockchip,hdmi0
  899. [ 4.925484] #1: rockchip,dp0
  900. [ 4.925490] #2: rockchip,hdmi1
  901. [ 4.925495] #3: rockchip,hdmiin
  902. [ 4.925499] #4: realtek,rt5616-codec
  903. [ 4.927460] usb 1-1: new high-speed USB device number 2 using xhci-hcd
  904. [ 4.930898] Freeing unused kernel memory: 9664K
  905. [ 4.954301] Run /init as init process
  906. [ 4.958937] vendor storage:20190527 ret = 0
  907. [ 4.981964] rk-pcie fe170000.pcie: host bridge /pcie@fe170000 ranges:
  908. [ 4.982025] rk-pcie fe170000.pcie: IO 0x00f2100000..0x00f21fffff -> 0x00f2100000
  909. [ 4.982056] rk-pcie fe170000.pcie: MEM 0x00f2200000..0x00f2ffffff -> 0x00f2200000
  910. [ 4.982077] rk-pcie fe170000.pcie: MEM 0x0980000000..0x09bfffffff -> 0x0980000000
  911. [ 4.982173] rk-pcie fe170000.pcie: iATU unroll: enabled
  912. [ 4.982187] rk-pcie fe170000.pcie: iATU regions: 8 ob, 8 ib, align 64K, limit 8G
  913. Starting version 249.11-0ubuntu3.7
  914. [ 5.071752] usb 1-1: New USB device found, idVendor=14cd, idProduct=8601, bcdDevice= 0.00
  915. [ 5.071789] usb 1-1: New USB device strings: Mfr=1, Product=3, SerialNumber=0
  916. [ 5.071802] usb 1-1: Product: USB 2.0 Hub
  917. [ 5.071811] usb 1-1: Manufacturer: USB Device
  918. [ 5.128924] hub 1-1:1.0: USB hub found
  919. [ 5.129053] hub 1-1:1.0: 4 ports detected
  920. [ 5.143984] rk-pcie fe190000.pcie: PCIe Link up, LTSSM is 0x130011
  921. [ 5.144030] rk-pcie fe190000.pcie: PCIe Gen.2 x1 link up
  922. [ 5.144207] rk-pcie fe190000.pcie: PCI host bridge to bus 0004:40
  923. [ 5.144229] pci_bus 0004:40: root bus resource [bus 40-4f]
  924. [ 5.144247] pci_bus 0004:40: root bus resource [io 0x200000-0x2fffff] (bus address [0xf4100000-0xf41fffff])
  925. [ 5.144260] pci_bus 0004:40: root bus resource [mem 0xf4200000-0xf4ffffff]
  926. [ 5.144272] pci_bus 0004:40: root bus resource [mem 0xa00000000-0xa3fffffff pref]
  927. [ 5.144317] pci 0004:40:00.0: [1d87:3588] type 01 class 0x060400
  928. [ 5.144349] pci 0004:40:00.0: reg 0x38: [mem 0x00000000-0x0000ffff pref]
  929. [ 5.144415] pci 0004:40:00.0: supports D1 D2
  930. [ 5.144427] pci 0004:40:00.0: PME# supported from D0 D1 D3hot
  931. [ 5.154117] pci 0004:40:00.0: Primary bus is hard wired to 0
  932. [ 5.154141] pci 0004:40:00.0: bridge configuration invalid ([bus 01-ff]), reconfiguring
  933. [ 5.154330] pci 0004:41:00.0: [10ec:8125] type 00 class 0x020000
  934. [ 5.154390] pci 0004:41:00.0: reg 0x10: [io 0x0000-0x00ff]
  935. [ 5.154459] pci 0004:41:00.0: reg 0x18: [mem 0x00000000-0x0000ffff 64bit]
  936. [ 5.154505] pci 0004:41:00.0: reg 0x20: [mem 0x00000000-0x00003fff 64bit]
  937. [ 5.154852] pci 0004:41:00.0: supports D1 D2
  938. [ 5.154862] pci 0004:41:00.0: PME# supported from D0 D1 D2 D3hot D3cold
  939. [ 5.164190] pci_bus 0004:41: busn_res: [bus 41-4f] end is updated to 41
  940. [ 5.164235] pci 0004:40:00.0: BAR 8: assigned [mem 0xf4200000-0xf42fffff]
  941. [ 5.164250] pci 0004:40:00.0: BAR 6: assigned [mem 0xf4300000-0xf430ffff pref]
  942. [ 5.164262] pci 0004:40:00.0: BAR 7: assigned [io 0x200000-0x200fff]
  943. [ 5.164276] pci 0004:41:00.0: BAR 2: assigned [mem 0xf4200000-0xf420ffff 64bit]
  944. [ 5.164315] pci 0004:41:00.0: BAR 4: assigned [mem 0xf4210000-0xf4213fff 64bit]
  945. [ 5.164353] pci 0004:41:00.0: BAR 0: assigned [io 0x200000-0x2000ff]
  946. [ 5.164373] pci 0004:40:00.0: PCI bridge to [bus 41]
  947. [ 5.164383] pci 0004:40:00.0: bridge window [io 0x200000-0x200fff]
  948. [ 5.164393] pci 0004:40:00.0: bridge window [mem 0xf4200000-0xf42fffff]
  949. [ 5.166237] pcieport 0004:40:00.0: PME: Signaling with IRQ 131
  950. [ 5.247381] rk-pcie fe170000.pcie: PCIe Link up, LTSSM is 0x130011
  951. [ 5.247423] rk-pcie fe170000.pcie: PCIe Gen.2 x1 link up
  952. [ 5.247620] rk-pcie fe170000.pcie: PCI host bridge to bus 0002:20
  953. [ 5.247637] pci_bus 0002:20: root bus resource [bus 20-2f]
  954. [ 5.247651] pci_bus 0002:20: root bus resource [io 0x300000-0x3fffff] (bus address [0xf2100000-0xf21fffff])
  955. [ 5.247663] pci_bus 0002:20: root bus resource [mem 0xf2200000-0xf2ffffff]
  956. [ 5.247673] pci_bus 0002:20: root bus resource [mem 0x980000000-0x9bfffffff pref]
  957. [ 5.247718] pci 0002:20:00.0: [1d87:3588] type 01 class 0x060400
  958. [ 5.247746] pci 0002:20:00.0: reg 0x38: [mem 0x00000000-0x0000ffff pref]
  959. [ 5.247809] pci 0002:20:00.0: supports D1 D2
  960. [ 5.247819] pci 0002:20:00.0: PME# supported from D0 D1 D3hot
  961. [ 5.258022] pci 0002:20:00.0: Primary bus is hard wired to 0
  962. [ 5.258056] pci 0002:20:00.0: bridge configuration invalid ([bus 01-ff]), reconfiguring
  963. [ 5.258355] pci 0002:21:00.0: [10ec:8125] type 00 class 0x020000
  964. [ 5.258419] pci 0002:21:00.0: reg 0x10: [io 0x0000-0x00ff]
  965. [ 5.258488] pci 0002:21:00.0: reg 0x18: [mem 0x00000000-0x0000ffff 64bit]
  966. [ 5.258535] pci 0002:21:00.0: reg 0x20: [mem 0x00000000-0x00003fff 64bit]
  967. [ 5.258880] pci 0002:21:00.0: supports D1 D2
  968. [ 5.258891] pci 0002:21:00.0: PME# supported from D0 D1 D2 D3hot D3cold
  969. [ 5.267512] pci_bus 0002:21: busn_res: [bus 21-2f] end is updated to 21
  970. [ 5.267569] pci 0002:20:00.0: BAR 8: assigned [mem 0xf2200000-0xf22fffff]
  971. [ 5.267584] pci 0002:20:00.0: BAR 6: assigned [mem 0xf2300000-0xf230ffff pref]
  972. [ 5.267598] pci 0002:20:00.0: BAR 7: assigned [io 0x300000-0x300fff]
  973. [ 5.267615] pci 0002:21:00.0: BAR 2: assigned [mem 0xf2200000-0xf220ffff 64bit]
  974. [ 5.267656] pci 0002:21:00.0: BAR 4: assigned [mem 0xf2210000-0xf2213fff 64bit]
  975. [ 5.267696] pci 0002:21:00.0: BAR 0: assigned [io 0x300000-0x3000ff]
  976. [ 5.267716] pci 0002:20:00.0: PCI bridge to [bus 21]
  977. [ 5.267727] pci 0002:20:00.0: bridge window [io 0x300000-0x300fff]
  978. [ 5.267739] pci 0002:20:00.0: bridge window [mem 0xf2200000-0xf22fffff]
  979. [ 5.270968] pcieport 0002:20:00.0: PME: Signaling with IRQ 141
  980. [ 5.407324] usb 1-1.1: new full-speed USB device number 3 using xhci-hcd
  981. [ 5.500285] usb 1-1.1: New USB device found, idVendor=03eb, idProduct=8a6e, bcdDevice=10.34
  982. [ 5.500332] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
  983. [ 5.500343] usb 1-1.1: Product: Atmel maXTouch Digitizer
  984. [ 5.500353] usb 1-1.1: Manufacturer: Atmel
  985. [ 5.500362] usb 1-1.1: SerialNumber: I22R077080
  986. [ 5.621336] Freeing drm_logo memory: 4512K
  987. [ 5.643788] hid-generic 0003:03EB:8A6E.0001: hiddev96,hidraw0: USB HID v1.11 Device [Atmel Atmel maXTouch Digitizer] on usb-xhci-hcd.9.auto-1.1/input0
  988. [ 5.648732] input: Atmel Atmel maXTouch Digitizer as /devices/platform/usbdrd3_1/fc400000.usb/xhci-hcd.9.auto/usb1/1-1/1-1.1/1-1.1:1.1/0003:03EB:8A6E.0002/input/input4
  989. [ 5.704288] hid-generic 0003:03EB:8A6E.0002: input,hidraw1: USB HID v1.11 Device [Atmel Atmel maXTouch Digitizer] on usb-xhci-hcd.9.auto-1.1/input1
  990. [ 5.706742] input: Atmel Atmel maXTouch Digitizer as /devices/platform/usbdrd3_1/fc400000.usb/xhci-hcd.9.auto/usb1/1-1/1-1.1/1-1.1:1.2/0003:03EB:8A6E.0003/input/input5
  991. [ 5.761215] hid-generic 0003:03EB:8A6E.0003: input,hiddev97,hidraw2: USB HID v1.11 Pointer [Atmel Atmel maXTouch Digitizer] on usb-xhci-hcd.9.auto-1.1/input2
  992. [ 5.834268] usb 1-1.4: new low-speed USB device number 4 using xhci-hcd
  993. [ 5.931151] usb 1-1.4: New USB device found, idVendor=1a2c, idProduct=4d7e, bcdDevice= 1.10
  994. [ 5.931214] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
  995. [ 5.931252] usb 1-1.4: Product: USB Keyboard
  996. [ 5.931281] usb 1-1.4: Manufacturer: SEMICO
  997. [ 6.031499] input: SEMICO USB Keyboard as /devices/platform/usbdrd3_1/fc400000.usb/xhci-hcd.9.auto/usb1/1-1/1-1.4/1-1.4:1.0/0003:1A2C:4D7E.0004/input/input6
  998. [ 6.089534] hid-generic 0003:1A2C:4D7E.0004: input,hidraw3: USB HID v1.10 Keyboard [SEMICO USB Keyboard] on usb-xhci-hcd.9.auto-1.4/input0
  999. [ 6.100030] input: SEMICO USB Keyboard Consumer Control as /devices/platform/usbdrd3_1/fc400000.usb/xhci-hcd.9.auto/usb1/1-1/1-1.4/1-1.4:1.1/0003:1A2C:4D7E.0005/input/input7
  1000. [ 6.154899] input: SEMICO USB Keyboard System Control as /devices/platform/usbdrd3_1/fc400000.usb/xhci-hcd.9.auto/usb1/1-1/1-1.4/1-1.4:1.1/0003:1A2C:4D7E.0005/input/input8
  1001. [ 6.155651] input: SEMICO USB Keyboard as /devices/platform/usbdrd3_1/fc400000.usb/xhci-hcd.9.auto/usb1/1-1/1-1.4/1-1.4:1.1/0003:1A2C:4D7E.0005/input/input10
  1002. [ 6.156705] hid-generic 0003:1A2C:4D7E.0005: input,hiddev98,hidraw4: USB HID v1.10 Keyboard [SEMICO USB Keyboard] on usb-xhci-hcd.9.auto-1.4/input1
  1003. Begin: Loading essential drivers ... done.
  1004. Begin: Running /scripts/init-premount ... done.
  1005. Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
  1006. Begin: Running /scripts/local-premount ... done.
  1007. [ 6.316076] EXT4-fs (mmcblk2p8): mounted filesystem with ordered data mode. Quota mode: none.
  1008. Begin: Will now check userdata file system ... fsck from util-linux 2.37.2
  1009. [/usr/sbin/fsck.ext4 (1) -- /dev/mmcblk2p9] fsck.ext4 -a -C0 /dev/mmcblk2p9
  1010. userdata: recovering journal
  1011. userdata: Clearing orphaned inode 4320362 (uid=0, gid=0, mode=0100644, size=35024)
  1012. userdata: Clearing orphaned inode 4320300 (uid=0, gid=0, mode=0100644, size=1685536)
  1013. userdata: Clearing orphaned inode 4320197 (uid=0, gid=0, mode=0100644, size=326176)
  1014. userdata: Clearing orphaned inode 4320182 (uid=0, gid=0, mode=0100644, size=9346096)
  1015. userdata: Clearing orphaned inode 4320151 (uid=0, gid=0, mode=0100644, size=10016)
  1016. userdata: Clearing orphaned inode 4319972 (uid=0, gid=0, mode=0100644, size=210808)
  1017. userdata: Clearing orphaned inode 4319950 (uid=0, gid=0, mode=0100644, size=583024)
  1018. userdata: Clearing orphaned inode 4319910 (uid=0, gid=0, mode=0100644, size=79920)
  1019. userdata: Clearing orphaned inode 4319888 (uid=0, gid=0, mode=0100644, size=2341288)
  1020. userdata: Clearing orphaned inode 4319777 (uid=0, gid=0, mode=0100644, size=174424)
  1021. userdata: Clearing orphaned inode 4319745 (uid=0, gid=110, mode=0100600, size=350344)
  1022. userdata: Clearing orphaned inode 4319674 (uid=0, gid=0, mode=0100755, size=884408)
  1023. userdata: Clearing orphaned inode 4319642 (uid=0, gid=0, mode=0100755, size=133328)
  1024. userdata: Clearing orphaned inode 4319476 (uid=0, gid=0, mode=0100644, size=187704)
  1025. userdata: Clearing orphaned inode 4319393 (uid=0, gid=0, mode=0100644, size=577176)
  1026. userdata: Clearing orphaned inode 4319330 (uid=0, gid=0, mode=0100644, size=2727664)
  1027. userdata: Clearing orphaned inode 4319253 (uid=0, gid=0, mode=0100644, size=318480)
  1028. userdata: Clearing orphaned inode 4319290 (uid=0, gid=0, mode=0100644, size=887816)
  1029. userdata: Clearing orphaned inode 4319076 (uid=0, gid=0, mode=0100644, size=52208)
  1030. userdata: Clearing orphaned inode 4319400 (uid=0, gid=0, mode=0100644, size=183104)
  1031. userdata: Clearing orphaned inode 4319270 (uid=0, gid=0, mode=0100644, size=157952)
  1032. userdata: Clearing orphaned inode 4319653 (uid=0, gid=0, mode=0100755, size=256440)
  1033. userdata: Clearing orphaned inode 4319629 (uid=0, gid=0, mode=0100755, size=1687072)
  1034. userdata: Clearing orphaned inode 4319277 (uid=0, gid=0, mode=0100644, size=2734352)
  1035. userdata: Clearing orphaned inode 4319216 (uid=0, gid=0, mode=0100644, size=742816)
  1036. userdata: Clearing orphaned inode 4319047 (uid=0, gid=0, mode=0100644, size=456064)
  1037. userdata: Clearing orphaned inode 4319284 (uid=0, gid=0, mode=0100755, size=240720)
  1038. userdata: Clearing orphaned inode 4319257 (uid=0, gid=0, mode=0100755, size=26544)
  1039. userdata: Clearing orphaned inode 4319226 (uid=0, gid=0, mode=0100644, size=5776)
  1040. userdata: Clearing orphaned inode 4319180 (uid=0, gid=0, mode=0100644, size=1309136)
  1041. userdata: Clearing orphaned inode 4319157 (uid=0, gid=0, mode=0100644, size=3360)
  1042. userdata: Clearing orphaned inode 4319156 (uid=0, gid=0, mode=0100644, size=47)
  1043. userdata: Clearing orphaned inode 4319154 (uid=0, gid=0, mode=0100644, size=34)
  1044. userdata: Clearing orphaned inode 4319152 (uid=0, gid=0, mode=0100644, size=50)
  1045. userdata: Clearing orphaned inode 4319150 (uid=0, gid=0, mode=0100644, size=62)
  1046. userdata: Clearing orphaned inode 4319148 (uid=0, gid=0, mode=0100644, size=270)
  1047. userdata: Clearing orphaned inode 4319146 (uid=0, gid=0, mode=0100644, size=48)
  1048. userdata: Clearing orphaned inode 4319144 (uid=0, gid=0, mode=0100644, size=23)
  1049. userdata: Clearing orphaned inode 4319142 (uid=0, gid=0, mode=0100644, size=252)
  1050. userdata: Clearing orphaned inode 4319140 (uid=0, gid=0, mode=0100644, size=346132)
  1051. userdata: Clearing orphaned inode 4319138 (uid=0, gid=0, mode=0100644, size=1519554)
  1052. userdata: Clearing orphaned inode 4319132 (uid=0, gid=0, mode=0100644, size=131)
  1053. userdata: Clearing orphaned inode 4319488 (uid=0, gid=0, mode=0100644, size=27004)
  1054. userdata: Clearing orphaned inode 4319412 (uid=0, gid=0, mode=0100644, size=10280)
  1055. userdata: Clearing orphaned inode 4319136 (uid=0, gid=0, mode=0100644, size=14672)
  1056. userdata: Clearing orphaned inode 4319130 (uid=0, gid=0, mode=0100644, size=31576)
  1057. userdata: Clearing orphaned inode 4319126 (uid=0, gid=0, mode=0100644, size=84720)
  1058. userdata: Clearing orphaned inode 4319122 (uid=0, gid=0, mode=0100755, size=160200)
  1059. userdata: Clearing orphaned inode 4319109 (uid=0, gid=0, mode=0100644, size=51640)
  1060. userdata: Clearing orphaned inode 4319105 (uid=0, gid=0, mode=0100644, size=22800)
  1061. userdata: Clearing orphaned inode 4319091 (uid=0, gid=0, mode=0100644, size=633000)
  1062. userdata: Clearing orphaned inode 4319087 (uid=0, gid=0, mode=0100644, size=14560)
  1063. userdata: Clearing orphaned inode 4319082 (uid=0, gid=0, mode=0100755, size=1451024)
  1064. userdata: Clearing orphaned inode 4319063 (uid=0, gid=0, mode=0100755, size=145328)
  1065. userdata: Clearing orphaned inode 4301026 (uid=1000, gid=1000, mode=0100644, size=32768)
  1066. userdata: Clearing orphaned inode 4300839 (uid=1000, gid=1000, mode=0100600, size=64)
  1067. userdata: clean, 34334/11596800 files, 1013206/59364347 blocks
  1068. done.
  1069. [ 6.689644] EXT4-fs (mmcblk2p9): mounted filesystem with ordered data mode. Quota mode: none.
  1070. [ 6.696702] EXT4-fs (mmcblk2p9): re-mounted. Quota mode: none.
  1071. [ 6.703059] overlayfs: "xino" feature enabled using 32 upper inode bits.
  1072. done.
  1073. Begin: Running /scripts/local-bottom ... done.
  1074. Begin: Running /scripts/init-bottom ... done.
  1075. [ 6.885800] rk_hdmirx fdee0000.hdmirx-controller: hdmirx_cancel_cpu_limit_freq freq qos nod add
  1076. Welcome to Debian GNU/Linux 11 (bullseye)!
  1077. Configuration file /lib/systemd/system/rkaiq_3A.service is marked world-writable. Please remove world writability permission bits. Proceeding anyway.
  1078. [ 7.237408] rk-pcie fe150000.pcie: PCIe Link Fail
  1079. [ 7.237458] rk-pcie fe150000.pcie: failed to initialize host
  1080. /lib/systemd/system/bootanim.service:9: Unit configured to use KillMode=none. This is unsafe, as it disables systemd's process lifecycle management for the service. Please update your service to use a safer KillMode=, such as 'mixed' or 'control-group'. Support for KillMode=none is deprecated and will eventually be removed.
  1081. [ OK ] Created slice system-getty.slice.
  1082. [ OK ] Created slice system-modprobe.slice.
  1083. [ OK ] Created slice system-serial\x2dgetty.slice.
  1084. [ OK ] Created slice User and Session Slice.
  1085. [ OK ] Started Dispatch Password …ts to Console Directory Watch.
  1086. [ OK ] Started Forward Password R…uests to Wall Directory Watch.
  1087. [ OK ] Set up automount Arbitrary…s File System Automount Point.
  1088. [ OK ] Reached target Local Encrypted Volumes.
  1089. [ OK ] Reached target Remote File Systems.
  1090. [ OK ] Reached target Slices.
  1091. [ OK ] Reached target Swap.
  1092. [ OK ] Listening on Syslog Socket.
  1093. [ OK ] Listening on initctl Compatibility Named Pipe.
  1094. [ OK ] Listening on Journal Audit Socket.
  1095. [ OK ] Listening on Journal Socket (/dev/log).
  1096. [ OK ] Listening on Journal Socket.
  1097. [ OK ] Listening on udev Control Socket.
  1098. [ OK ] Listening on udev Kernel Socket.
  1099. Mounting Huge Pages File System...
  1100. Mounting POSIX Message Queue File System...
  1101. Mounting Kernel Debug File System...
  1102. Mounting Kernel Trace File System...
  1103. Starting Set the console keyboard layout...
  1104. Starting Create list of st…odes for the current kernel...
  1105. Starting Load Kernel Module configfs...
  1106. Starting Load Kernel Module drm...
  1107. Starting Load Kernel Module fuse...
  1108. [ OK ] Started Nameserver information manager.
  1109. [ OK ] Reached target Network (Pre).
  1110. Starting Enable Rockchip camera engine rkaiq...
  1111. Starting Journal Service...
  1112. Starting Load Kernel Modules...
  1113. Starting Remount Root and Kernel File Systems...
  1114. Starting Coldplug All udev Devices...
  1115. [ OK ] Mounted Huge Pages File System.
  1116. [ OK ] Mounted POSIX Message Queue File System.
  1117. [ OK ] Mounted Kernel Debug File System.
  1118. [ OK ] Mounted Kernel Trace File System.
  1119. [ OK ] Finished Create list of st… nodes for the current kernel.
  1120. [ OK ] Finished Load Kernel Module configfs.
  1121. [ OK ] Finished Load Kernel Module drm.
  1122. [ OK ] Finished Load Kernel Module fuse.
  1123. [ OK ] Started Enable Rockchip camera engine rkaiq.
  1124. Mounting FUSE Control File System...
  1125. Mounting Kernel Configuration File System...
  1126. [ OK ] Finished Remount Root and Kernel File Systems.
  1127. Starting Platform Persistent Storage Archival...
  1128. Starting Load/Save Random Seed...
  1129. Starting Create System Users...
  1130. [ OK ] Mounted FUSE Control File System.
  1131. [ OK ] Mounted Kernel Configuration File System.
  1132. [ 7.370327] r8125: loading out-of-tree module taints kernel.
  1133. [ 7.372975] r8125 2.5Gigabit Ethernet driver 9.010.01-NAPI loaded
  1134. [ 7.373110] r8125 0004:41:00.0: enabling device (0000 -> 0003)
  1135. [ OK ] Finished Platform Persistent Storage Archival.
  1136. [ 7.391429] r8125: This product is covered by one or more of the following patents: US6,570,884, US6,115,776, and US6,327,625.
  1137. [ 7.393495] r8125 Copyright (C) 2022 Realtek NIC software team <nicfae@realtek.com>
  1138. [ OK ] Finished Create System Users.
  1139. [ 7.393495] This program comes with ABSOLUTELY NO WARRANTY; for details, please see <http://www.gnu.org/licenses/>.
  1140. [ 7.393495] This is free software, and you are welcome to redistribute it under certain conditions; see <http://www.gnu.org/licenses/>.
  1141. [ 7.393788] r8125 2.5Gigabit Ethernet driver 9.010.01-NAPI loaded
  1142. Starting Create Static Device Nodes in /dev...
  1143. [ 7.393881] r8125 0002:21:00.0: enabling device (0000 -> 0003)
  1144. [ OK ] Finished Load/Save Random Seed.
  1145. [ 7.413576] r8125: This product is covered by one or more of the following patents: US6,570,884, US6,115,776, and US6,327,625.
  1146. [ OK ] Finished Create Static Device Nodes in /dev.
  1147. [ 7.415607] r8125 Copyright (C) 2022 Realtek NIC software team <nicfae@realtek.com>
  1148. [ 7.415607] This program comes with ABSOLUTELY NO WARRANTY; for details, please see <http://www.gnu.org/licenses/>.
  1149. [ 7.415607] This is free software, and you are welcome to redistribute it under certain conditions; see <http://www.gnu.org/licenses/>.
  1150. Starting Rule-based Manage…for Device Events and Files...
  1151. [ OK ] Finished Load Kernel Modules.
  1152. Starting Apply Kernel Variables...
  1153. [ OK ] Finished Set the console keyboard layout.
  1154. [ OK ] Reached target Local File Systems (Pre).
  1155. [ OK ] Reached target Local File Systems.
  1156. Starting Enable support fo…l executable binary formats...
  1157. Starting Boot time animation...
  1158. Starting Set console font and keymap...
  1159. Starting Manage USB device functions...
  1160. Mounting Arbitrary Executable File Formats File System...
  1161. [ OK ] Finished Apply Kernel Variables.
  1162. [ OK ] Finished Set console font and keymap.
  1163. [ OK ] Mounted Arbitrary Executable File Formats File System.
  1164. [ OK ] Finished Enable support fo…nal executable binary formats.
  1165. [ OK ] Started Boot time animation.
  1166. [ OK ] Started Rule-based Manager for Device Events and Files.
  1167. [ OK ] Started Journal Service.
  1168. Starting Flush Journal to Persistent Storage...
  1169. [ 7.549472] systemd-journald[399]: Received client request to flush runtime journal.
  1170. [ OK ] Finished Coldplug All udev Devices.
  1171. Starting Helper to synchronize boot up for ifupdown...
  1172. [ OK ] Finished Helper to synchronize boot up for ifupdown.
  1173. Starting Raise network interfaces...
  1174. [ OK ] Finished Flush Journal to Persistent Storage.
  1175. [ 7.691586] at24 6-0053: supply vcc not found, using dummy regulator
  1176. Starting Create Volatile Files and Directories...
  1177. [ OK ] Found device /dev/ttyFIQ0.
  1178. [ 7.711004] cryptodev: driver 1.12 loaded.
  1179. [ 7.728963] rk-crypto fe370000.crypto: invalid resource
  1180. [ 7.739179] rk-crypto fe370000.crypto: register to cryptodev ok!
  1181. [ 7.739201] rk-crypto fe370000.crypto: CRYPTO V2.0.0.0 Accelerator successfully registered
  1182. [ OK ] Reached target Hardware activated USB gadget.
  1183. [ 7.750638] rk-pcie fe180000.pcie: PCIe Link Fail
  1184. [ 7.750675] rk-pcie fe180000.pcie: failed to initialize host
  1185. [ OK ] Finished Create Volatile Files and Directories.
  1186. Starting Update UTMP about System Boot/Shutdown...
  1187. Starting Enable Rockchip camera engine rkaiq...
  1188. [ OK ] Finished Raise network interfaces.
  1189. [ OK ] Finished Update UTMP about System Boot/Shutdown.
  1190. [ OK ] Started Enable Rockchip camera engine rkaiq.
  1191. [ OK ] Reached target System Initialization.
  1192. [ OK ] Started ACPI Events Check.
  1193. [ OK ] Started Trigger anacron every hour.
  1194. [ OK ] Started Daily apt download activities.
  1195. [ OK ] Started Daily apt upgrade and clean activities.
  1196. [ OK ] Started Periodic ext4 Onli…ata Check for All Filesystems.
  1197. [ OK ] Started Discard unused blocks once a week.
  1198. [ OK ] Started Daily man-db regeneration.
  1199. [ OK ] Started Daily Cleanup of Temporary Directories.
  1200. [ OK ] Reached target Paths.
  1201. [ OK ] Reached target Timers.
  1202. [ OK ] Listening on ACPID Listen Socket.
  1203. [ OK ] Listening on D-Bus System Message Bus Socket.
  1204. [ OK ] Listening on Load/Save RF …itch Status /dev/rfkill Watch.
  1205. [ OK ] Listening on triggerhappy.socket.
  1206. [ OK ] Reached target Sockets.
  1207. [ OK ] Reached target Basic System.
  1208. [ OK ] Started ACPI event daemon.
  1209. Starting Save/Restore Sound Card State...
  1210. [ OK ] Started Run anacron jobs.
  1211. [ 7.923125] file system registered
  1212. [ 7.929554] input: Atmel Atmel maXTouch Digitizer as /devices/platform/usbdrd3_1/fc400000.usb/xhci-hcd.9.auto/usb1/1-1/1-1.1/1-1.1:1.1/0003:03EB:8A6E.0002/input/input11
  1213. Starting enable ASYNC for Debian Display...
  1214. Starting Bluetooth management mechanism...
  1215. [ OK ] Started D-Bus System Message Bus.
  1216. Starting Network Manager...
  1217. Starting Remove Stale Onli…t4 Metadata Check Snapshots...
  1218. Starting Init board...
  1219. Starting Init Onboard LEDs...
  1220. Starting LSB: Load kernel …d to enable cpufreq scaling...
  1221. Starting LSB: Run /etc/rc.local if it exist...
  1222. Starting rkisp 3A engine...
  1223. Starting System Logging Service...
  1224. Starting User Login Management...
  1225. Starting triggerhappy global hotkey daemon...
  1226. Starting Disk Manager...
  1227. Starting WPA supplicant...
  1228. [ OK ] Finished Save/Restore Sound Card State.
  1229. [ OK ] Finished Init board.
  1230. [ OK ] Finished Init Onboard LEDs.
  1231. [ OK ] Reached target Sound Card.
  1232. [ OK ] Started rkisp 3A engine.
  1233. [ 7.983380] read descriptors
  1234. [ 7.983412] read strings
  1235. [ 7.987513] hid-multitouch 0003:03EB:8A6E.0002: input,hidraw1: USB HID v1.11 Device [Atmel Atmel maXTouch Digitizer] on usb-xhci-hcd.9.auto-1.1/input1
  1236. [ OK ] Started triggerhappy global hotkey daemon.
  1237. [ OK ] Started System Logging Service.
  1238. [ OK ] Started LSB: Load kernel m…ded to enable cpufreq scaling.
  1239. Starting LSB: set CPUFreq kernel parameters...
  1240. [ OK ] Started LSB: Run /etc/rc.local if it exist.
  1241. [ OK ] Started Manage USB device functions.
  1242. [ OK ] Started User Login Management.
  1243. [ OK ] Finished Remove Stale Onli…ext4 Metadata Check Snapshots.
  1244. [ OK ] Started WPA supplicant.
  1245. Starting Authorization Manager...
  1246. [ OK ] Started LSB: set CPUFreq kernel parameters.
  1247. [ OK ] Started Network Manager.
  1248. [ OK ] Reached target Network.
  1249. [ OK ] Reached target Network is Online.
  1250. [ OK ] Started lcd2usb.
  1251. Starting Network Time Service...
  1252. Starting OpenVPN service...
  1253. Starting /etc/rc.local Compatibility...
  1254. Starting Sets network devices IRQ and RPS...
  1255. Starting OpenBSD Secure Shell server...
  1256. [ OK ] Started strongSwan IPsec I…IKEv2 daemon using ipsec.conf.
  1257. Starting Hostname Service...
  1258. Starting Permit User Sessions...
  1259. Starting LSB: layer 2 tunelling protocol daemon...
  1260. [ OK ] Finished OpenVPN service.
  1261. [ OK ] Started Authorization Manager.
  1262. [ OK ] Finished Sets network devices IRQ and RPS.
  1263. [ OK ] Finished Permit User Sessions.
  1264. Starting Light Display Manager...
  1265. [ 8.215866] NET: Registered PF_PPPOX protocol family
  1266. [ OK ] Started /etc/rc.local Compatibility.
  1267. [ OK ] Started Getty on tty1.
  1268. [ OK ] Started Serial Getty on ttyFIQ0.
  1269. [ OK ] Reached target Login Prompts.
  1270. [ OK ] Started Hostname Service.
  1271. [ 8.242921] l2tp_core: L2TP core driver, V2.0
  1272. [ 8.246466] l2tp_netlink: L2TP netlink interface
  1273. [ 8.249127] l2tp_ppp: PPPoL2TP kernel driver, V2.0
  1274. [ OK ] Started Network Time Service.
  1275. [ OK ] Started LSB: layer 2 tunelling protocol daemon.
  1276. [ OK ] Started Light Display Manager.
  1277. Starting Network Manager Script Dispatcher Service...
  1278. [ OK ] Started Disk Manager.
  1279. [ OK ] Started OpenBSD Secure Shell server.
  1280. [ 8.291038] eth0: 0xffffffc00b280000, 7a:03:14:91:cd:b6, IRQ 142
  1281. [ 8.299625] dwc3 fc000000.usb: device reset
  1282. [ OK ] Started Network Manager Script Dispatcher Service.
  1283. [ 8.342904] eth1: 0xffffffc00b250000, 7e:03:14:91:cd:b6, IRQ 174
  1284. [ 8.347759] android_work: sent uevent USB_STATE=CONNECTED
  1285. [ 8.510196] mali fb000000.gpu: Loading Mali firmware 0x1010000
  1286. [ 8.513441] mali fb000000.gpu: Mali firmware git_sha: ee476db42870778306fa8d559a605a73f13e455c
  1287. [ OK ] Started Bluetooth management mechanism.
  1288. [ 9.898563] r8125: eth0: link up
  1289. [ 9.898670] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
  1290. [ OK ] Created slice User Slice of UID 1000.
  1291. Starting User Runtime Directory /run/user/1000...
  1292. [ OK ] Finished User Runtime Directory /run/user/1000.
  1293. Starting User Manager for UID 1000...
  1294. [ OK ] Started User Manager for UID 1000.
  1295. [ OK ] Started Session 1 of user pi.
  1296. [ OK ] Started enable ASYNC for Debian Display.
  1297. [ OK ] Reached target Multi-User System.
  1298. [ OK ] Reached target Graphical Interface.
  1299. [ OK ] Started Setup rockchip platform environment.
  1300. Starting Update UTMP about System Runlevel Changes...
  1301. [ OK ] Finished Update UTMP about System Runlevel Changes.
  1302. [ 11.292158] ttyFIQ ttyFIQ0: tty_port_close_start: tty->count = 1 port count = 2
  1303. [ 11.495522] rk_hdmirx fdee0000.hdmirx-controller: hdmirx_audio_startup: device is no connected or audio is off
  1304. [ 11.882093] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
  1305. [ 11.882140] Bluetooth: BNEP filters: protocol multicast
  1306. [ 11.882163] Bluetooth: BNEP socket layer initialized
  1307. Debian GNU/Linux 11 NanoPC-T6 ttyFIQ0
  1308. NanoPC-T6 login: [ 18.181721] platform mtd_vendor_storage: deferred probe pending
  1309. [ 18.334982] dwc3 fc000000.usb: device reset
  1310. [ 18.397829] android_work: sent uevent USB_STATE=CONFIGURED
  1311. NanoPC-T6 login: root
  1312. Password:
  1313. Linux NanoPC-T6 6.1.25 #2 SMP Mon Dec 4 22:42:15 CST 2023 aarch64
  1314. The programs included with the Debian GNU/Linux system are free software;
  1315. the exact distribution terms for each program are described in the
  1316. individual files in /usr/share/doc/*/copyright.
  1317. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  1318. permitted by applicable law.
  1319. root@NanoPC-T6:~#
6.4 磁盘测试
6.4.1 查看块设备

查看eMMC块设备文件:

  1. pi@NanoPC-T6:~$ ls /dev/mmc* -l
  2. brw-rw---- 1 root disk 179, 0 Dec 6 14:33 /dev/mmcblk2
  3. brw-rw---- 1 root disk 179, 32 Dec 6 13:47 /dev/mmcblk2boot0
  4. brw-rw---- 1 root disk 179, 64 Dec 6 13:47 /dev/mmcblk2boot1
  5. brw-rw---- 1 root disk 179, 1 Dec 6 14:33 /dev/mmcblk2p1
  6. brw-rw---- 1 root disk 179, 2 Dec 6 14:33 /dev/mmcblk2p2
  7. brw-rw---- 1 root disk 179, 3 Dec 6 14:33 /dev/mmcblk2p3
  8. brw-rw---- 1 root disk 179, 4 Dec 6 14:33 /dev/mmcblk2p4
  9. brw-rw---- 1 root disk 179, 5 Dec 6 14:33 /dev/mmcblk2p5
  10. brw-rw---- 1 root disk 179, 6 Dec 6 14:33 /dev/mmcblk2p6
  11. brw-rw---- 1 root disk 179, 7 Dec 6 14:33 /dev/mmcblk2p7
  12. brw-rw---- 1 root disk 179, 8 Dec 6 14:33 /dev/mmcblk2p8
  13. brw-rw---- 1 root disk 179, 9 Dec 6 14:33 /dev/mmcblk2p9
  14. crw------- 1 root root 236, 0 Dec 6 13:47 /dev/mmcblk2rpmb

这里一共有12个块设备节点和1个字符设备节点;其中:

  • /dev/mmcblk2表示的是eMMC这个设备,其主设备号为179,次设备号为0;
  • mmcblk2boot0mmcblk2boot1对应两个Boot Area Partition;每一个Boot Area Partition大小都是4MB
  • mmcblk2rpmb则为RPMB Partition;大小为4MB
  • mmcblk2pxUser Data Area划分出来的SW Partitions;实际上就是通过解析GPT分区表创建的分区,分区编号依次为1,2,3,4,5,6,7,8,9;

使用cat /proc/partitions,可以查看全部分区信息:

  1. pi@NanoPC-T6:~$ cat /proc/partitions
  2. major minor #blocks name
  3. 1 0 4096 ram0
  4. 1 1 4096 ram1
  5. 1 2 4096 ram2
  6. 1 3 4096 ram3
  7. 1 4 4096 ram4
  8. 1 5 4096 ram5
  9. 1 6 4096 ram6
  10. 1 7 4096 ram7
  11. 179 0 241664000 mmcblk2
  12. 179 1 4096 mmcblk2p1
  13. 179 2 4096 mmcblk2p2
  14. 179 3 4096 mmcblk2p3
  15. 179 4 16384 mmcblk2p4
  16. 179 5 40960 mmcblk2p5
  17. 179 6 32768 mmcblk2p6
  18. 179 7 32768 mmcblk2p7
  19. 179 8 4063232 mmcblk2p8
  20. 179 9 237457391 mmcblk2p9
  21. 179 32 4096 mmcblk2boot0
  22. 179 64 4096 mmcblk2boot1

其中blocks表示分区的容量,每个blocks1KB。这里:

  • mmcblk2p1对应uboot分区,大小为4MB
  • mmcblk2p2对应misc分区,大小为4MB
  • mmcblk2p3对应dtbo分区,大小为4MB
  • mmcblk2p4对应resource分区,大小为16MB
  • mmcblk2p5对应kernel分区,大小为40MB
  • mmcblk2p6对应boot分区,大小为32MB
  • mmcblk2p7对应recovery分区,大小为32MB
  • mmcblk2p8对应rootfs分区,大小为3968MB
  • mmcblk2p9对应userdata分区,大小为剩余所有空间;
6.4.2 查看磁盘空间

这里我们可以通过df -hT查看磁盘空间信息;

  1. pi@NanoPC-T6:~$ df -hT
  2. Filesystem Type Size Used Avail Use% Mounted on
  3. udev devtmpfs 7.8G 8.0K 7.8G 1% /dev
  4. tmpfs tmpfs 1.6G 2.0M 1.6G 1% /run
  5. overlay overlay 224G 28M 213G 1% /
  6. tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
  7. tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
  8. tmpfs tmpfs 1.6G 52K 1.6G 1% /run/user/1000

显示内容参数说明:

  • Filesystem:文件系统;
  • Type:文件系统类型;
  • Size: 分区大小;
  • Used: 已使用容量;
  • Avail: 还可以使用的容量;
  • Use%: 已用百分比;
  • Mounted on: 挂载点; 

udevtmpfs是虚拟文件系统,它们通常用于设备和临时文件系统,并且占用的空间很小。

overlay是一个联合文件系统,挂载在根目录/,总容量为224GB,已使用空间为28MB,剩余可用空间为213GB,已使用空间占总容量的比例为1%

其他的 tmpfs 文件系统用于临时存储,例如 /dev/shm/run/lock/run/user/1000

6.5 ssh远程连接

查看网络服务状态:

  1. pi@NanoPC-T6:~$ sudo systemctl status NetworkManager.service
  2. ● NetworkManager.service - Network Manager
  3. Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendo>
  4. Active: active (running) since Wed 2023-12-06 15:17:24 UTC; 19min ago
  5. Docs: man:NetworkManager(8)
  6. Main PID: 748 (NetworkManager)
  7. Tasks: 3 (limit: 18964)
  8. Memory: 14.0M
  9. CPU: 374ms
  10. CGroup: /system.slice/NetworkManager.service
  11. └─748 /usr/sbin/NetworkManager --no-daemon
  12. Dec 06 15:17:26 NanoPC-T6 NetworkManager[748]: <info> [1701875846.1472] device>
  13. Dec 06 15:17:26 NanoPC-T6 NetworkManager[748]: <info> [1701875846.1478] device>
  14. Dec 06 15:17:26 NanoPC-T6 NetworkManager[748]: <info> [1701875846.1491] manage>
  15. Dec 06 15:17:26 NanoPC-T6 NetworkManager[748]: <info> [1701875846.1519] manage>
  16. Dec 06 15:17:26 NanoPC-T6 NetworkManager[748]: <info> [1701875846.1522] policy>
  17. Dec 06 15:17:26 NanoPC-T6 NetworkManager[748]: <info> [1701875846.1531] dns-mg>
  18. Dec 06 15:17:26 NanoPC-T6 NetworkManager[748]: <info> [1701875846.2094] device>
  19. Dec 06 15:17:26 NanoPC-T6 NetworkManager[748]: <info> [1701875846.2126] manage>
  20. Dec 06 15:17:30 NanoPC-T6 NetworkManager[748]: <info> [1701875850.5638] manage>
  21. Dec 06 15:17:32 NanoPC-T6 NetworkManager[748]: <info> [1701875852.6026] agent->

输入ifconfig命令后,可以看到网络配置信息,其中包含了两个有线网卡;

  1. pi@NanoPC-T6:~$ sudo ifconfig
  2. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  3. inet 192.168.0.101 netmask 255.255.255.0 broadcast 192.168.0.255
  4. inet6 fe80::a761:1d58:f857:735b prefixlen 64 scopeid 0x20<link>
  5. ether 7a:03:14:91:cd:b6 txqueuelen 1000 (Ethernet)
  6. RX packets 454 bytes 44063 (43.0 KiB)
  7. RX errors 0 dropped 0 overruns 0 frame 0
  8. TX packets 256 bytes 19362 (18.9 KiB)
  9. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  10. device interrupt 142
  11. eth1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
  12. ether 7e:03:14:91:cd:b6 txqueuelen 1000 (Ethernet)
  13. RX packets 0 bytes 0 (0.0 B)
  14. RX errors 0 dropped 0 overruns 0 frame 0
  15. TX packets 0 bytes 0 (0.0 B)
  16. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  17. device interrupt 174
  18. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  19. inet 127.0.0.1 netmask 255.0.0.0
  20. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  21. loop txqueuelen 1000 (Local Loopback)
  22. RX packets 0 bytes 0 (0.0 B)
  23. RX errors 0 dropped 0 overruns 0 frame 0
  24. TX packets 0 bytes 0 (0.0 B)
  25. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

我们可以看到开发板的ip地址为192.168.0.101,因此我们可以使用ping测试和我们宿主机之间的网络通不通;

  1. pi@NanoPC-T6:~$ sudo ping 192.168.0.200
  2. PING 192.168.0.200 (192.168.0.200) 56(84) bytes of data.
  3. 64 bytes from 192.168.0.200: icmp_seq=1 ttl=64 time=1.63 ms
  4. 64 bytes from 192.168.0.200: icmp_seq=2 ttl=64 time=0.976 ms
  5. 64 bytes from 192.168.0.200: icmp_seq=3 ttl=64 time=0.905 ms
  6. ^C
  7. --- 192.168.0.200 ping statistics ---
  8. 3 packets transmitted, 3 received, 0% packet loss, time 2003ms
  9. rtt min/avg/max/mdev = 0.905/1.169/1.628/0.325 ms

既然网络是通过的,那么我们就可以通过ssh远程连接工具连接我们的开发板,这里我使用的是MobaXtermdebain系统默认账号密码如下:

  1. 普通用户:
  2. 用户名: pi
  3. 密码: pi
  4. Root用户:
  5. 默认没有设置root密码,可通过sudo passwd root命令配置root密码

这里我们使用Mobaxterm工具以root用户登录,登录之后如下所示;

  1. ┌────────────────────────────────────────────────────────────────────┐
  2. │ • MobaXterm 11.1 • │
  3. │ (SSH client, X-server and networking tools) │
  4. │ │
  5. │ ➤ SSH session to pi@192.168.0.101 │
  6. │ • SSH compression : ✔ │
  7. │ • SSH-browser : ✔ │
  8. │ • X11-forwarding : ✔ (remote display is forwarded through SSH) │
  9. │ • DISPLAY : ✔ (automatically set on remote server) │
  10. │ │
  11. │ ➤ For more info, ctrl+click on help or visit our website │
  12. └────────────────────────────────────────────────────────────────────┘
  13. Linux NanoPC-T6 6.1.25 #2 SMP Mon Dec 4 22:42:15 CST 2023 aarch64
  14. The programs included with the Debian GNU/Linux system are free software;
  15. the exact distribution terms for each program are described in the
  16. individual files in /usr/share/doc/*/copyright.
  17. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  18. permitted by applicable law.
  19. Last login: Wed Dec 6 15:17:52 2023
  20. pi@NanoPC-T6:~$

通过sudo passwd root命令配置root密码:

  1. pi@NanoPC-T6:~$ sudo passwd root
  2. New password:
  3. Retype new password:
  4. passwd: password updated successfully

这里我将root密码设置为123456,我们可以使用su命令切换到root用户:

  1. pi@NanoPC-T6:~$ su root
  2. Password:
  3. root@NanoPC-T6:/home/pi#
6.6 安装内核头文件

在根文件系统/opt目录下存放着linux-header安装包,可以直接安装;

  1. root@NanoPC-T6:/home/pi# cd /opt/
  2. root@NanoPC-T6:/opt# ls -l
  3. -rw-r--r-- 1 root root 7765064 Jun 27 10:12 linux-headers-5.10.160-1.deb
  4. -rw-r--r-- 1 root root 8436016 Nov 9 11:38 linux-headers-6.1.25-1.deb
  5. root@NanoPC-T6:/opt# rm -rf *

当然我们也可以安装我们编译生成的linux-header安装包;

  1. root@NanoPC-T6:/opt# scp root@192.168.0.200://work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/linux-headers-6.1.25.deb ./
  2. root@192.168.0.200's password:
  3. linux-headers-6.1.25.deb 100% 11MB 11.2MB/s 00:00
  4. root@NanoPC-T6:/opt# sudo dpkg -i /opt/linux-headers-*.deb

安装完成后,我们可以看一下/usr/src目录下是否创建了linux-headers-$(uname-r)文件;

  1. root@NanoPC-T6:/opt# ls -l /usr/src/
  2. drwxr-xr-x 5 pi pi 4096 Dec 6 15:43 linux-headers-5.10.160
  3. drwxr-xr-x 5 pi pi 4096 Dec 6 15:48 linux-headers-6.1.25
  4. root@NanoPC-T6:/opt# ls -l /usr/src/linux-headers-6.1.25/
  5. -rw-r--r-- 1 root root 71902 Dec 4 13:48 Makefile
  6. -rw-r--r-- 1 root root 1124563 Dec 4 14:55 Module.symvers
  7. drwxr-xr-x 3 pi pi 4096 Dec 6 15:43 arch
  8. drwxr-xr-x 33 pi pi 4096 Dec 6 15:43 include
  9. drwxr-xr-x 17 pi pi 24576 Dec 6 15:48 scripts

在开发版测试编译内核模块并安装:

  1. pi@NanoPC-T6:/opt$ sudo apt update
  2. pi@NanoPC-T6:/opt$ sudo apt install git gcc make bc
  3. pi@NanoPC-T6:/opt$ git clone https://github.com/RinCat/RTL88x2BU-Linux-Driver.git
  4. pi@NanoPC-T6:/opt$ cd RTL88x2BU-Linux-Driver
  5. pi@NanoPC-T6:/opt$ sudo make -j$(nproc)
  6. pi@NanoPC-T6:/opt$ sudo make install
  7. pi@NanoPC-T6:/opt$ sudo modprobe 88x2bu

如果出现内核编译gcc版本和debiangcc版本不一致问题;

  1. warning: the compiler differs from the one used to build the kernel
  2. The kernel was built by: arm-linux-gcc (Arm GNU Toolchain 12.2.Rel1 (Build arm-12.24)) 12.2.1 20221205
  3. You are using: gcc (Debian 10.2.1-6) 10.2.1 20210110

则按照接下来的教程升级debiangcc版本即可:

6.6.1 查看gcc版本
  1. root@NanoPC-T6:/opt/RTL88x2BU-Linux-Driver# gcc -v
  2. Using built-in specs.
  3. COLLECT_GCC=gcc
  4. COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/10/lto-wrapper
  5. Target: aarch64-linux-gnu
  6. Configured with: ../src/configure -v --with-pkgversion='Debian 10.2.1-6' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-mutex
  7. Thread model: posix
  8. Supported LTO compression algorithms: zlib zstd
  9. gcc version 10.2.1 20210110 (Debian 10.2.1-6)

此处安装的gcc版本为10.2.1

6.6.2 安装aptitude

安装aptitudeaptitudeapt-get一样,是debian及其衍生系统中功能极其强大的包管理工具。

aptitude整合了dselectapt-get的所有功能, 并提供的更多特性,特别是在依赖关系处理上。

  1. pi@NanoPC-T6:/$ sudo apt-get update
  2. pi@NanoPC-T6:/$ sudo apt-get install aptitude

常用命令:

  1. aptitude update 更新可用的包列表
  2. aptitude upgrade 升级可用的包
  3. aptitude dist-upgrade 将系统升级到新的发行版
  4. aptitude install pkgname 安装包
  5. aptitude remove pkgname 删除包
  6. aptitude purge pkgname 删除包及其配置文件
  7. aptitude search string 搜索包
  8. aptitude show pkgname 显示包的详细信息
  9. aptitude clean 删除下载的包文件
  10. aptitude autoclean 仅删除过期的包文件
6.6.3 配置软件源

配置软件源:

pi@NanoPC-T6:/$ sudo vim /etc/apt/sources.list

这里需要把原内容删除,全部替换为:

  1. # 默认注释了源码镜像以提高 apt update 速度
  2. # 官方 sid表示最新的,每天都更新
  3. deb http://ftp.cn.debian.org/debian/ sid main contrib non-free
  4. #deb-src http://ftp.cn.debian.org/debian/ sid main contrib non-free
  5. deb http://ftp.de.debian.org/debian/ sid main contrib non-free
  6. #deb-src http://ftp.de.debian.org/debian/ sid main contrib non-free
  7. # 清华大学的软件源
  8. deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
  9. # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
  10. deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
  11. # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
  12. deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
  13. # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
  14. deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
  15. # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
  16. # 阿里云的软件源
  17. deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
  18. # deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
  19. deb https://mirrors.aliyun.com/debian-security/ bullseye-security main
  20. # deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main
  21. deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
  22. # deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
  23. deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
  24. # deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
  25. # 中科大的软件源
  26. deb https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
  27. # deb-src https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
  28. deb https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
  29. # deb-src https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
  30. deb https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
  31. # deb-src https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
  32. deb https://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib non-free
  33. # deb-src https://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib non-free
  34. # 腾讯的软件源
  35. deb http://mirrors.cloud.tencent.com/debian bullseye main contrib non-free
  36. #deb-src http://mirrors.cloud.tencent.com/debian bullseye main contrib non-free
  37. deb http://mirrors.cloud.tencent.com/debian bullseye-updates main contrib non-free
  38. #deb-src http://mirrors.cloud.tencent.com/debian bullseye-updates main contrib non-free
  39. deb http://mirrors.cloud.tencent.com/debian bullseye-backports main contrib non-free
  40. #deb-src http://mirrors.cloud.tencent.com/debian bullseye-backports main contrib non-free
  41. deb http://mirrors.cloud.tencent.com/debian-security/ bullseye-security main contrib non-free
  42. #deb-src http://mirrors.cloud.tencent.com/debian-security/ bullseye-security main contrib non-free

更新库:

  1. pi@NanoPC-T6:/$ sudo aptitude clean
  2. pi@NanoPC-T6:/$ sudo aptitude update

aptitude search可以看到aptitude库里边有了:

  1. pi@NanoPC-T6:/$ sudo aptitude search gcc-12
  2. p gcc-12 - GNU C compiler
  3. p gcc-12-arm-linux-gnueabi - GNU C compiler (cross compiler for armel architecture)
  4. ......
6.6.4 安装gcc

Linux系统下,可以通过安装不同的gcc版本实现版本切换。首先,需要安装需要的gcc版本。

  1. pi@NanoPC-T6:/$ sudo aptitude install gcc-12 g++-12 # 第一次执行
  2. .... # 前面一直选择n
  3. The following actions will resolve these dependencies:
  4. Remove the following packages:
  5. 1) binutils [2.35.2-2 (now, oldstable)]
  6. 2) binutils-aarch64-linux-gnu [2.35.2-2 (now, oldstable)]
  7. 3) gcc [4:10.2.1-1 (now, oldstable)]
  8. 4) gcc-10 [10.2.1-6 (now, oldstable)]
  9. 5) libbinutils [2.35.2-2 (now, oldstable)]
  10. 6) libctf0 [2.35.2-2 (now, oldstable)]
  11. 7) libgcc-10-dev [10.2.1-6 (now, oldstable)]
  12. 8) libubsan1 [10.2.1-6 (now, oldstable)]
  13. Keep the following packages at their current version:
  14. 9) cpp-12 [Not Installed]
  15. 10) g++-12 [Not Installed]
  16. 11) gcc-12 [Not Installed]
  17. 12) libasan8 [Not Installed]
  18. 13) libc-bin [2.31-13+deb11u6 (now, oldstable)]
  19. 14) libc6 [2.31-13+deb11u6 (now, oldstable)]
  20. 15) libgcc-12-dev [Not Installed]
  21. 16) libgcc-s1 [10.2.1-6 (now, oldstable)]
  22. 17) libgomp1 [10.2.1-6 (now, oldstable)]
  23. 18) libgprofng0 [Not Installed]
  24. 19) libhwasan0 [Not Installed]
  25. 20) libitm1 [10.2.1-6 (now, oldstable)]
  26. 21) liblsan0 [10.2.1-6 (now, oldstable)]
  27. 22) libstdc++-12-dev [Not Installed]
  28. 23) libstdc++6 [10.2.1-6 (now, oldstable)]
  29. 24) libtsan2 [Not Installed]
  30. 25) libzstd1 [1.4.8+dfsg-2.1 (now, oldstable)]
  31. 26) locales [2.31-13+deb11u6 (now, oldstable)]
  32. Accept this solution? [Y/n/q/?] y # 最后一次设置为y
  33. pi@NanoPC-T6:/$ sudo aptitude install gcc-12 g++-12 # 第二次执行
  34. root@NanoPC-T6:/# sudo aptitude install gcc-12 g++-12
  35. The following NEW packages will be installed:
  36. binutils{a} binutils-aarch64-linux-gnu{a} binutils-common{a} cpp-12{a} g++-12 gcc-12 gcc-12-base{a} libasan8{a} libbinutils{a} libcc1-0{a}
  37. libctf-nobfd0{a} libctf0{a} libgcc-12-dev{a} libgprofng0{a} libhwasan0{a} libitm1{a} liblsan0{a} libsframe1{a} libstdc++-12-dev{a} libtsan2{a}
  38. libubsan1{a}
  39. The following packages will be upgraded:
  40. libc-bin libc6 libgcc-s1 libgomp1 libstdc++6 libzstd1 locales
  41. The following packages are RECOMMENDED but will NOT be installed:
  42. manpages
  43. 7 packages upgraded, 21 newly installed, 0 to remove and 1161 not upgraded.
  44. Need to get 59.4 MB of archives. After unpacking 234 MB will be used.
  45. The following packages have unmet dependencies:
  46. libc-dev-bin : Depends: libc6 (< 2.32) but 2.37-13 is to be installed
  47. libc6-dev : Depends: libc6 (= 2.31-13+deb11u6) but 2.37-13 is to be installed
  48. The following actions will resolve these dependencies:
  49. Install the following packages:
  50. 1) libffi8 [3.4.4-2 (unstable)]
  51. 2) rpcsvc-proto [1.4.3-1 (unstable)]
  52. Upgrade the following packages:
  53. 3) libc-dev-bin [2.31-13+deb11u6 (now, oldstable) -> 2.37-13 (unstable)]
  54. 4) libc6-dev [2.31-13+deb11u6 (now, oldstable) -> 2.37-13 (unstable)]
  55. 5) libglib2.0-0 [2.66.8-1 (now, oldstable) -> 2.78.2-1 (unstable)]
  56. 6) libglib2.0-bin [2.66.8-1 (now, oldstable) -> 2.78.2-1 (unstable)]
  57. 7) libglib2.0-dev [2.66.8-1 (now, oldstable) -> 2.78.2-1 (unstable)]
  58. 8) libglib2.0-dev-bin [2.66.8-1 (now, oldstable) -> 2.78.2-1 (unstable)]
  59. Accept this solution? [Y/n/q/?] y # 第一次选择y

安装完后,可以在终端中使用下面的命令查看已安装的gcc版本:

  1. root@NanoPC-T6:/# dpkg --list | grep gcc
  2. ii gcc-10-base:arm64 10.2.1-6 arm64 GCC, the GNU Compiler Collection (base package)
  3. ii gcc-12 12.3.0-12 arm64 GNU C compiler
  4. ii gcc-12-base:arm64 12.3.0-12 arm64 GCC, the GNU Compiler Collection (base package)
  5. ii gcc-13-base:arm64 13.2.0-8 arm64 GCC, the GNU Compiler Collection (base package)
  6. ii gcc-9-base:arm64 9.3.0-22 arm64 GCC, the GNU Compiler Collection (base package)
  7. ii libgcc-12-dev:arm64 12.3.0-12 arm64 GCC support library (development files)
  8. ii libgcc-s1:arm64 13.2.0-8 arm64 GCC support library

如果安装多个gcc版本后,可以使用update-alternatives工具切换版本。

使用下面的命令添加gcc-12为备选项:

  1. pi@NanoPC-T6:/$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 60
  2. update-alternatives: using /usr/bin/gcc-12 to provide /usr/bin/gcc (gcc) in auto mode

同样,数字60表示优先级,数字越大优先级越高。这里为了便于理解,将优先级设置为了不同的数字。

使用下面的命令查看gcc相关的备选项:

  1. pi@NanoPC-T6:/$ sudo update-alternatives --config gcc
  2. There is only one alternative in link group gcc (providing /usr/bin/gcc): /usr/bin/gcc-12
  3. Nothing to configure.

查看gcc版本,并创建cc的软链接;

  1. pi@NanoPC-T6:/$ gcc -v # 命令1
  2. Using built-in specs.
  3. COLLECT_GCC=gcc
  4. COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/12/lto-wrapper
  5. Target: aarch64-linux-gnu
  6. Configured with: ../src/configure -v --with-pkgversion='Debian 12.3.0-12' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu
  7. Thread model: posix
  8. Supported LTO compression algorithms: zlib zstd
  9. gcc version 12.3.0 (Debian 12.3.0-12)
  10. pi@NanoPC-T6:/$ sudo ln -s /usr/bin/gcc /usr/bin/cc # 命令2

然后可以按照前文介绍的流程继续编译RTL88x2BU-Linux-Driver,编译后安装88x2bu.ko驱动;

  1. pi@NanoPC-T6:/opt/RTL88x2BU-Linux-Driver$ sudo modprobe 88x2bu
  2. pi@NanoPC-T6:/opt/RTL88x2BU-Linux-Driver$ lsmod
  3. Module Size Used by
  4. 88x2bu 3092480 0
  5. cfg80211 749568 1 88x2bu # 这里
  6. nfnetlink 20480 1
  7. hid_logitech_hidpp 45056 0
  8. hid_logitech_dj 28672 0
  9. hid_multitouch 28672 0
  10. bnep 28672 2
  11. l2tp_ppp 28672 0
  12. l2tp_netlink 24576 1 l2tp_ppp
  13. l2tp_core 40960 2 l2tp_ppp,l2tp_netlink
  14. ip6_udp_tunnel 16384 1 l2tp_core
  15. udp_tunnel 20480 1 l2tp_core
  16. pppox 20480 1 l2tp_ppp
  17. joydev 32768 0
  18. at24 24576 0
  19. r8169 86016 0
  20. rk_crypto 147456 0
  21. cryptodev 81920 1 rk_crypto
  22. uio_pdrv_genirq 20480 0
  23. uio 24576 1 uio_pdrv_genirq
  24. binfmt_misc 24576 1
  25. r8125 163840 0
  26. ledtrig_netdev 16384 0
  27. ip_tables 32768 0
6.7 安装libusb-1.0-0-dev
root@SOM-RK3399v2:/opt# sudo apt install libusb-dev libusb-1.0-0-dev

在使用libusb库的时候需要指定:

  • 头文件libusb.h安装到了/usr/include/libusb-1.0路径;
  • 动态库libusb-1.0.so安装到了/usr/lib/aarch64-linux-gnu/路径;

/opt/libusb目录下编写测试应用程序listdev.c

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <libusb.h>
  4. static void print_devs(libusb_device **devs)
  5. {
  6. libusb_device *dev;
  7. int i = 0;
  8. while ((dev = devs[i++]) != NULL) {
  9. struct libusb_device_descriptor desc;
  10. int r = libusb_get_device_descriptor(dev, &desc);
  11. if (r < 0) {
  12. fprintf(stderr, "failed to get device descriptor");
  13. return;
  14. }
  15. printf("%04x:%04x (bus %d, device %d)\n",
  16. desc.idVendor, desc.idProduct,
  17. libusb_get_bus_number(dev), libusb_get_device_address(dev));
  18. }
  19. }
  20. int main(void)
  21. {
  22. libusb_device **devs;
  23. int r;
  24. ssize_t cnt;
  25. r = libusb_init(NULL);
  26. if (r < 0)
  27. return r;
  28. cnt = libusb_get_device_list(NULL, &devs);
  29. if (cnt < 0)
  30. return (int) cnt;
  31. print_devs(devs);
  32. libusb_free_device_list(devs, 1);
  33. libusb_exit(NULL);
  34. return 0;
  35. }

编译并运行:

  1. pi@NanoPC-T6:/opt/libusb$ sudo gcc -o listdev listdev.c -I/usr/include/libusb-1.0 -lusb-1.0
  2. pi@NanoPC-T6:/opt/libusb$ ./listdev
  3. 1d6b:0003 (bus 2, device 1)
  4. 1a2c:4d7e (bus 1, device 5)
  5. 046d:c52b (bus 1, device 4)
  6. 03eb:8a6e (bus 1, device 3)
  7. 14cd:8601 (bus 1, device 2)
  8. 1d6b:0002 (bus 1, device 1)
  9. 1d6b:0001 (bus 6, device 1)
  10. 1d6b:0002 (bus 5, device 1)
  11. 1d6b:0001 (bus 4, device 1)
  12. 1d6b:0002 (bus 3, device 1)
6.8 安装x11vnc远程桌面

x11vnc是一个VNC服务器,安装后我们可以不依赖外部的显示设备,,通过网络远程登debia桌面。

6.8.1 安装x11vnc
  1. pi@NanoPC-T6:/$ sudo aptitude install x11vnc
  2. # 一直选择y

设置VNC客户端登录密码,这里我设置为123456

pi@NanoPC-T6:/$ sudo x11vnc -storepasswd /etc/x11vnc.pwd

设置x11vnc在开机时自动启动,新建如下文件:

pi@NanoPC-T6:/$ sudo vi /lib/systemd/system/x11vnc.service

内容如下:

  1. [Unit]
  2. Description=Start x11vnc at startup.
  3. Requires=display-manager.service
  4. After=syslog.target network-online.target
  5. Wants=syslog.target network-online.target
  6. [Service]
  7. Type=simple
  8. ExecStart=/usr/bin/x11vnc -display :0 -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pwd -rfbport 5900 -shared -capslock -nomodtweak
  9. ExecStop=/usr/bin/x11vnc -R stop
  10. Restart=on-failure
  11. [Install]
  12. WantedBy=multi-user.target

设置systemd服务:

  1. pi@NanoPC-T6:/$ sudo systemctl daemon-reload
  2. pi@NanoPC-T6:/$ sudo systemctl enable x11vnc.service
  3. pi@NanoPC-T6:/$ sudo systemctl start x11vnc
6.8.2 测试远程桌面

Windows电脑上安装VNC Viewe,下载地址Download VNC Viewer for Windows | VNC® Connect

安装完成后启动VNC客户端软件, 在地址栏输入: IP地址:5900连接即可,效果如下图所示;

图中设备IP地址为192.168.0.101, 使用端口5900进行连接。

6.8.3 禁止用户自动休眠

执行如下命令查看休眠模式的情况:

  1. pi@NanoPC-T6:/$ sudo systemctl status sleep.target
  2. ● sleep.target - Sleep
  3. Loaded: loaded (/lib/systemd/system/sleep.target; static)
  4. Active: inactive (dead)
  5. Docs: man:systemd.special(7)

可以看出,sleep状态是loaded,也就是处于开启状态。接下来,执行如下命令关闭系统的自动休眠开关:

  1. pi@NanoPC-T6:/$ sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
  2. Created symlink /etc/systemd/system/sleep.target → /dev/null.
  3. Created symlink /etc/systemd/system/suspend.target → /dev/null.
  4. Created symlink /etc/systemd/system/hibernate.target → /dev/null.
  5. Created symlink /etc/systemd/system/hybrid-sleep.target → /dev/null.

再次执行如下命令,查看休眠设置:

  1. pi@NanoPC-T6:/$ sudo systemctl status sleep.target
  2. ○ sleep.target
  3. Loaded: masked (Reason: Unit sleep.target is masked.)
  4. Active: inactive (dead)

可以看到sleep的状态已经变成了masked,也就是关闭了。

虽然吧,这个解决方案看上去挺合理的。但实际上,它也无效,后来电脑还是会每晚自动休眠。

尝试如下命令;

  1. pi@NanoPC-T6:/$ sudo gsettings set org.gnome.desktop.screensaver lock-enabled false
  2. pi@NanoPC-T6:/$ sudo gsettings set org.gnome.desktop.session idle-delay 0

七、debain系统设置

7.1 更改时区

检查当前时区:

  1. pi@NanoPC-T6:/$ timedatectl
  2. Local time: Fri 2023-12-08 15:06:08 UTC
  3. Universal time: Fri 2023-12-08 15:06:08 UTC
  4. RTC time: Fri 2023-12-08 15:06:08
  5. Time zone: Etc/UTC (UTC, +0000)
  6. System clock synchronized: yes
  7. NTP service: n/a
  8. RTC in local TZ: no

列出所有时区:

pi@NanoPC-T6:/$ timedatectl list-timezones

设置时区 (比如上海):

  1. pi@NanoPC-T6:/$ sudo timedatectl set-timezone Asia/Shanghai
  2. pi@NanoPC-T6:/$ timedatectl
  3. Local time: Fri 2023-12-08 23:06:34 CST
  4. Universal time: Fri 2023-12-08 15:06:34 UTC
  5. RTC time: Fri 2023-12-08 15:06:34
  6. Time zone: Asia/Shanghai (CST, +0800)
  7. System clock synchronized: yes
  8. NTP service: n/a
  9. RTC in local TZ: no
7.2 更换桌面墙纸

修改如下配置文件:

pi@NanoPC-T6:/$ vim /home/pi/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
7.3 设置中文语言与输入法
7.3.1 设置中文语言

输入以下命令:

  1. pi@NanoPC-T6:/$ sudo dpkg-reconfigure locales
  2. Generating locales (this might take a while)...
  3. zh_CN.UTF-8... done
  4. Generation complete.

执行之后可以使用空格选择,Tab键跳转光标,这里用空格选中 zh_CN.UTF-8

添加环境变量到.bashrc,这个文件主要用于设置系统的locale

  1. pi@NanoPC-T6:/$ echo "export LC_ALL=zh_CN.UTF-8" >> ~/.bashrc
  2. pi@NanoPC-T6:/$ echo "export LANG=zh_CN.UTF-8" >> ~/.bashrc
  3. pi@NanoPC-T6:/$ echo "export LANGUAGE=zh_CN.UTF-8" >> ~/.bashrc

使配置立即生效:

  1. pi@NanoPC-T6:/$ source ~/.bashrc
  2. -bash: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8): No such file or directory

根据上面登录警告提示可知,系统已经设置了默认地区_语言.字符集为zh_CN.UTF-8,但是在系统中没有定义对应的locale文件,
所以只需要手动生成这个locale文件即可。

查看系统所有可用的locale

  1. pi@NanoPC-T6:/$ sudo locale -a
  2. C
  3. C.utf8
  4. POSIX
  5. zh_CN.utf8

但是看到zh_CN.utf8已经安装,因此我们忽略上面那个警告。

使用locale命令可以查询当前环境中所有的本地化信息,包括语言、字符集、货币格式等,具体操作如下:

  1. pi@NanoPC-T6:/$ locale
  2. LANG=zh_CN.UTF-8
  3. LANGUAGE=zh_CN.UTF-8
  4. LC_CTYPE="zh_CN.UTF-8"
  5. LC_NUMERIC="zh_CN.UTF-8"
  6. LC_TIME="zh_CN.UTF-8"
  7. LC_COLLATE="zh_CN.UTF-8"
  8. LC_MONETARY="zh_CN.UTF-8"
  9. LC_MESSAGES="zh_CN.UTF-8"
  10. LC_PAPER="zh_CN.UTF-8"
  11. LC_NAME="zh_CN.UTF-8"
  12. LC_ADDRESS="zh_CN.UTF-8"
  13. LC_TELEPHONE="zh_CN.UTF-8"
  14. LC_MEASUREMENT="zh_CN.UTF-8"
  15. LC_IDENTIFICATION="zh_CN.UTF-8"
  16. LC_ALL=zh_CN.UTF-8
7.3.2 安装中文输入法

Fcitx (Flexible Input Method Framework) :即小企鹅输入法,它是一个以GPL方式发布的输入法平台(即原来的G五笔),包括五笔、拼音(全拼和双拼)、二笔、区位等输入模块,支持简入繁出,是在Linux操作系统中常用的中文输入法。它的优点是,短小精悍、跟程序的兼容性比较好。

输入如下命令安装fcitx

  1. pi@NanoPC-T6:/$ sudo aptitude install fcitx
  2. pi@NanoPC-T6:/$ sudo aptitude install im-config
  3. pi@NanoPC-T6:/$ sudo aptitude install fcitx-ui-classic fcitx-ui-light
  4. pi@NanoPC-T6:/$ sudo aptitude install fcitx-frontend-gtk2
  5. pi@NanoPC-T6:/$ sudo aptitude install fcitx-frontend-gtk3

听说搜狗输入法很多Bug,还占性能。所以选择Google,终端输入以下:

pi@NanoPC-T6:/$ sudo apt install fcitx-googlepinyin

重启后,在桌面环境按Ctrl+Space即可切换中英文输入法, 右上角也出现了输入法图标,右击右上角的输入法图标,,在弹出菜单中可以切换输入法, 如下图所示:

7.4 测试OpenGL ES性能

glmark2是一款比较出名的GPU benchmark测试程序,支持OpenGL 2.0OpenGL ES 2.0

进入debain桌面环境打开命令行终端,输入以下命令即可测试:

  1. pi@NanoPC-T6:/$ glmark2-es2
  2. arm_release_ver: g13p0-01eac0, rk_so_ver: 10
  3. =======================================================
  4. glmark2 2021.12
  5. =======================================================
  6. OpenGL Information
  7. GL_VENDOR: ARM
  8. GL_RENDERER: Mali-G610
  9. GL_VERSION: OpenGL ES 3.2 v1.g13p0-01eac0.a8b6f0c7e1f83c654c60d1775112dbe4
  10. Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=0
  11. Surface Size: 800x600 windowed
  12. =======================================================
  13. [build] use-vbo=false: FPS: 1122 FrameTime: 0.891 ms
  14. [build] use-vbo=true: FPS: 1191 FrameTime: 0.840 ms
  15. [texture] texture-filter=nearest: FPS: 1189 FrameTime: 0.841 ms
  16. [texture] texture-filter=linear: FPS: 1221 FrameTime: 0.819 ms
  17. [texture] texture-filter=mipmap: FPS: 1210 FrameTime: 0.826 ms
  18. [shading] shading=gouraud: FPS: 1124 FrameTime: 0.890 ms
  19. [shading] shading=blinn-phong-inf: FPS: 1272 FrameTime: 0.786 ms
  20. [shading] shading=phong: FPS: 1194 FrameTime: 0.838 ms
  21. [shading] shading=cel: FPS: 1244 FrameTime: 0.804 ms
  22. [bump] bump-render=high-poly: FPS: 852 FrameTime: 1.174 ms
  23. [bump] bump-render=normals: FPS: 1426 FrameTime: 0.701 ms
  24. [bump] bump-render=height: FPS: 1415 FrameTime: 0.707 ms
  25. [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 1406 FrameTime: 0.711 ms
  26. [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 1088 FrameTime: 0.919 ms
  27. [pulsar] light=false:quads=5:texture=false: FPS: 1335 FrameTime: 0.749 ms
  28. [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 640 FrameTime: 1.562 ms
  29. [desktop] effect=shadow:windows=4: FPS: 1203 FrameTime: 0.831 ms
  30. [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 278 FrameTime: 3.597 ms
  31. [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 258 FrameTime: 3.876 ms
  32. [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 485 FrameTime: 2.062 ms
  33. [ideas] speed=duration: FPS: 713 FrameTime: 1.403 ms
  34. [jellyfish] <default>: FPS: 1053 FrameTime: 0.950 ms
  35. [terrain] <default>: FPS: 256 FrameTime: 3.906 ms
  36. [shadow] <default>: FPS: 1207 FrameTime: 0.829 ms
  37. [refract] <default>: FPS: 375 FrameTime: 2.667 ms
  38. [conditionals] fragment-steps=0:vertex-steps=0: FPS: 1293 FrameTime: 0.773 ms
  39. [conditionals] fragment-steps=5:vertex-steps=0: FPS: 1178 FrameTime: 0.849 ms
  40. [conditionals] fragment-steps=0:vertex-steps=5: FPS: 1185 FrameTime: 0.844 ms
  41. [function] fragment-complexity=low:fragment-steps=5: FPS: 1167 FrameTime: 0.857 ms
  42. [function] fragment-complexity=medium:fragment-steps=5: FPS: 1265 FrameTime: 0.791 ms
  43. [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1264 FrameTime: 0.791 ms
  44. [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1282 FrameTime: 0.780 ms
  45. [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1310 FrameTime: 0.763 ms
  46. =======================================================
  47. glmark2 Score: 1051
  48. =======================================================

可以看到这个跑分比RK3399421高多了。

7.5 HDMI设置
7.5.1 设置HDMI/DP屏幕分辨率

进入桌面系统左上角菜单Settings -> Display界面进行设置即可;

7.5.2 设置HiDPI屏幕缩放

Xfce支持HiDPI缩放,可以使用设置管理器启用。

进入桌面系统左上角菜单Settings >Settings Manager >Appearance > Settings > Window Scaling,选择2作为缩放系数。

或者编辑文件~/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml

7.5.3 查看当前分辨率

在桌面系统打开终端,运行如下命令查看当前分辨率:

  1. pi@NanoPC-T6:~$ xrandr -q
  2. Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
  3. HDMI-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
  4. 1920x1080 60.00*+ 60.00 50.00
  5. 1280x1024 60.02
  6. 1280x720 60.00
  7. 800x600 56.25
  8. 720x576 50.00
  9. 720x480 59.94 59.94
  10. HDMI-2 disconnected (normal left inverted right x axis y axis)
  11. DP-1 disconnected (normal left inverted right x axis y axis)
7.5.5 设置分辨率

如果要设置分辨率为1920x1080@60Hz,在桌面系统终端运行如下命令:

pi@NanoPC-T6:/$  xrandr --output HDMI-1 --mode 1920x1080 --refresh 60
7.5.6 设节HDMI输出边界

For example, the transformation scaling horizontal coordinates by 0.8, vertical coordinates by 1.04 and moving the screen by 35 pixels right and 19 pixels down:

pi@NanoPC-T6:/$ xrandr --output HDMI-1 --transform 0.80,0,-35,0,1.04,-19,0,0,1
7.5.7 开机自动调整

编辑~/.config/autostart/lxrandr-autostart.desktop,将完整的xrandr命令写入到Exec=开头的键中,如下所示:

  1. [Desktop Entry]
  2. Type=Application
  3. Name=LXRandR autostart
  4. Comment=Start xrandr with settings done in LXRandR
  5. Exec=sh -c 'xrandr --output HDMI-1 --mode 1920x1080 --refresh 50 --transform 1.04,0,-35,0,1.05,-30,0,0,1'
7.6 chromium网页浏览器
7.6.1 GPU支持情况

系统预装的Chromium网页浏览器已经默认启用硬件加速,支持WebGL,可以通过输入网址chrome://gpu了解硬件加速情况,如下图所示:

7.6.2 VPU支持情况

在浏览器上播放一个视频,查看CPU的利用率:

然后在命令行使用fuser查看mpp设备节点的使用情况来确认已经调用了vpu:

  1. pi@NanoPC-T6:~$ sudo fuser /dev/mpp_service
  2. /dev/mpp_service: 1754

如果fuser命令没有内容输出, 则表示当前是软解。

7.6.3 查看支持的硬解格式

在浏览器地址栏输入about://gpu,翻页到页面最底部,查看 Video Acceleration Information表格;

播放一个视频后,再在浏览器地址栏输入about://media-internals,可以查看最近播放的视频是否启用了硬解;

7.7 测试mpp视频硬件编码

在桌面环境运行如下命令:

  1. pi@NanoPC-T6:/$ sudo mpi_enc_test -w 1920 -h 1080 -t 7 -f 0 -o test.h264 -n 300
  2. pi@NanoPC-T6:/$ export XDG_RUNTIME_DIR=/run/user/0
  3. pi@NanoPC-T6:/$ sudo ffplay test.h264
  4. Input #0, h264, from 'test.h264': 0KB vq= 0KB sq= 0B f=0/0
  5. Duration: N/A, bitrate: N/A
  6. Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080, 30 fps, 30 tbr, 1200k tbn, 60 tbc
  7. nan M-V: nan fd= 92 aq= 0KB vq= 0KB sq= 0B f=0/0
7.8 HDMI-IN的使用

找一台主机或者开发板,将其HDMI输出连接到NandPC-T6开发板HDMI-IN输入接口,这里我是将NandPC-T4开发板作为HDMI输出源。

7.8.1 使用脚本

debian集成了hdmirx_preview.sh测试脚本,直接运行该脚本即可,可以看到NandPC-T4开发板ubuntu的界面;

  1. pi@NanoPC-T6:/$ hdmirx_preview.sh
  2. HDMI-In info:
  3. -------------------------
  4. device: /dev/video0
  5. width: 1920
  6. heigh: 1080
  7. format: BGR3
  8. 设置暂停管道 ...
  9. 管道正在实用且不需要 REBOOT ...
  10. 管道被 PREROLLED ...
  11. 设置播放管道 ...
  12. New clock: GstAudioSrcClock
  13. 重新分配延迟时间...
  14. 重新分配延迟时间...
  15. 重新分配延迟时间...
  16. ^Chandling interrupt.
  17. 中断:中止管道 ...
  18. Execution ended after 0:05:05.634882586
  19. 设置 NULL 管道 ...
  20. Ctrl+C is captured

脚本路径:/usr/local/bin/hdmirx_preview.sh;源码如下:

  1. #!/bin/bash
  2. trap 'onCtrlC' INT
  3. function onCtrlC () {
  4. echo 'Ctrl+C is captured'
  5. killall gst-launch-1.0
  6. exit 0
  7. }
  8. device_id=$(v4l2-ctl --list-devices | grep -A1 hdmirx | grep -v hdmirx | awk -F ' ' '{print $NF}')
  9. v4l2-ctl -d $device_id --set-dv-bt-timings query 2>&1 > /dev/null
  10. width=$(v4l2-ctl -d $device_id --get-dv-timings | grep "Active width" |awk -F ' ' '{print $NF}')
  11. heigh=$(v4l2-ctl -d $device_id --get-dv-timings | grep "Active heigh" |awk -F ' ' '{print $NF}')
  12. format=$(v4l2-ctl -d $device_id -V -D | grep "Pixel Format" | cut -d ':' -f 2 | cut -d "'" -f 2)
  13. status=$(cat /sys/class/hdmirx/hdmirx/status)
  14. if [ "$status" = "disconnected" ]; then
  15. echo "Please connect a device to the HDMI-IN port."
  16. exit 1
  17. fi
  18. echo "HDMI-In info:"
  19. echo "-------------------------"
  20. echo " device: $device_id"
  21. echo " width: $width"
  22. echo " heigh: $heigh"
  23. echo " format: $format"
  24. echo ""
  25. rt5616_card=$(aplay -l | grep "rt5616" | cut -d ':' -f 1 | cut -d ' ' -f 2)
  26. hdmi0_card=$(aplay -l | grep "hdmi0" | cut -d ':' -f 1 | cut -d ' ' -f 2)
  27. hdmi1_card=$(aplay -l | grep "hdmi1" | cut -d ':' -f 1 | cut -d ' ' -f 2)
  28. hdmiin_card=$(arecord -l | grep "hdmiin" | cut -d ":" -f 1 | cut -d ' ' -f 2)
  29. [ -e /usr/lib/aarch64-linux-gnu/libGLdispatch.so.0 ] && \
  30. export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libGLdispatch.so.0:$LD_PRELOAD
  31. case $format in
  32. NV12)
  33. DISPLAY=:0.0 gst-launch-1.0 v4l2src device=${device_id} ! video/x-raw,format=${format},width=${width},height=${heigh},framerate=60/1 \
  34. ! queue ! xvimagesink 2>&1 > /dev/null &
  35. ;;
  36. BGR3)
  37. DISPLAY=:0.0 gst-launch-1.0 v4l2src device=${device_id} ! video/x-raw,format=BGR,width=${width},height=${heigh},framerate=60/1 \
  38. ! queue ! glimagesink 2>&1 > /dev/null &
  39. ;;
  40. *)
  41. echo "Warning: the pixel format is not NV12, possible poor performance."
  42. DISPLAY=:0.0 gst-launch-1.0 v4l2src device=${device_id} ! video/x-raw,format=${format},width=${width},height=${heigh},framerate=15/1 \
  43. ! videoconvert ! video/x-raw,width=${width},height=${heigh},format=NV12,framerate=15/1 ! queue ! xvimagesink 2>&1 > /dev/null &
  44. ;;
  45. esac
  46. gst-launch-1.0 alsasrc device=hw:${hdmiin_card},0 ! audioconvert ! audioresample ! queue \
  47. ! tee name=t ! queue ! alsasink device="hw:${hdmi0_card},0" \
  48. t. ! queue ! alsasink device="hw:${rt5616_card},0" &
  49. while true
  50. do
  51. sleep 10
  52. done

请留意:只有NV12格式才能达到最佳性能,有关图像格式可以参考《linux驱动移植-USB摄像头采集图像实时显示(v4l2应用)》第四节。

7.8.2 使用V4L2命令

HDMI-IN设备的节点为:/dev/video0,可以通过v4l2的命令来操作它。

(1) 使用命令列出所有摄像头设备:

  1. pi@NanoPC-T6:/$ v4l2-ctl --list-devices
  2. rk_hdmirx (fdee0000.hdmirx-controller):
  3. /dev/video0

其中/dev/video0就是这个HDMI-IN的设备。

(2) 查看设备的预览支持格式:

  1. pi@NanoPC-T6:/$ v4l2-ctl -d0 --list-formats-ext
  2. ioctl: VIDIOC_ENUM_FMT
  3. Type: Video Capture Multiplanar
  4. [0]: 'BGR3' (24-bit BGR 8-8-8)
  5. [1]: 'NV24' (Y/UV 4:4:4)
  6. [2]: 'NV16' (Y/UV 4:2:2)
  7. [3]: 'NV12' (Y/UV 4:2:0)

(3) 查看设备的信息:

  1. pi@NanoPC-T6:/$ v4l2-ctl -d /dev/video0 -V -D
  2. Driver Info:
  3. Driver name : rk_hdmirx
  4. Card type : rk_hdmirx
  5. Bus info : fdee0000.hdmirx-controller
  6. Driver version : 6.1.25
  7. Capabilities : 0x84201000
  8. Video Capture Multiplanar
  9. Streaming
  10. Extended Pix Format
  11. Device Capabilities
  12. Device Caps : 0x04201000
  13. Video Capture Multiplanar
  14. Streaming
  15. Extended Pix Format
  16. Format Video Capture Multiplanar:
  17. Width/Height : 1920/1080
  18. Pixel Format : 'BGR3' (24-bit BGR 8-8-8)
  19. Field : None
  20. Number of planes : 1
  21. Flags :
  22. Colorspace : sRGB
  23. Transfer Function : Default
  24. YCbCr/HSV Encoding: Default
  25. Quantization : Limited Range
  26. Plane 0 :
  27. Bytes per Line : 5760
  28. Size Image : 6220800

(4) 查看当前连接的设备的分辨率与图像格式:

  1. pi@NanoPC-T6:/$ v4l2-ctl -d /dev/video0 --get-fmt-video
  2. Format Video Capture Multiplanar:
  3. Width/Height : 1920/1080
  4. Pixel Format : 'BGR3' (24-bit BGR 8-8-8)
  5. Field : None
  6. Number of planes : 1
  7. Flags :
  8. Colorspace : sRGB
  9. Transfer Function : Default
  10. YCbCr/HSV Encoding: Default
  11. Quantization : Limited Range
  12. Plane 0 :
  13. Bytes per Line : 5760
  14. Size Image : 6220800

(5) 使用v4l2-ctl抓一帧图片:

pi@NanoPC-T6:/$ v4l2-ctl  -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='BGR3' --stream-mmap=4 --stream-skip=10  --stream-to=/home/pi/1080p_bgr24.yuv --stream-count=1 --stream-poll

其中:

  • -d: 摄像头对应设备文件;
  • --set-fmt-video:指定了帧宽高及pxielformat
  • --stream-mmap:指定buffer的类型为mmap(内存映射方式),即将内核空间的缓存映射到用户空间;
  • --stream-to:指定帧数据保存的文件路径;
  • --stream-skip:指定丢弃(不保存到文件)前10帧;
  • --stream-count:指定抓取的帧数,不包括--stream-skip丢弃的数量;

(6) 使用v4l2-ctl录制视频:

pi@NanoPC-T6:/$ v4l2-ctl  -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='BGR3' --stream-mmap=4 --set-selection=target=crop,flags=0,top=0,left=0,width=1920,height=1080 --stream-to=/home/pi/video.yuv
7.8.3 ffplay

使用ffplay预览抓取的一帧图片,ffplayFFmpeg提供的一个极为简单的音视频媒体播放器(由ffmpeg库和SDL库开发),可以用于音视频播放、可视化分析 ,提供音视频显示和播放相关的图像信息、音频的波形等信息,也可以用作FFmpeg API的测试工具使用。

(1) 使用ffplay非常简单,只需在终端中运行以下命令来播放媒体文件:

  1. pi@NanoPC-T6:/$ ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 /home/pi/1080p_bgr24.yuv
  2. [rawvideo @ 0x7f10000bb0] Estimating duration from bitrate, this may be inaccurate
  3. Input #0, rawvideo, from '/home/pi/1080p_bgr8.yuv':
  4. Duration: 00:00:00.04, start: 0.000000, bitrate: 1244160 kb/s
  5. Stream #0:0: Video: rawvideo (BGR[24] / 0x18524742), bgr24, 1920x1080, 1244160 kb/s, 25 tbr, 25 tbn, 25 tbc
  6. 2.18 M-V: 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0

其中:

  • -video_size显示图片大小;
  • -pixel_format指定像素格式,非常重要,我这里的图片格式为BGR24

关于pix_fmt参数可以使用如下命令查看,并找到与图像对应的:

  1. pi@NanoPC-T6:/$ ffmpeg -pix_fmts | grep bgr
  2. Pixel formats:
  3. I.... = Supported Input format for conversion
  4. .O... = Supported Output format for conversion
  5. ..H.. = Hardware accelerated format
  6. ...P. = Paletted format
  7. ....B = Bitstream format
  8. FLAGS NAME NB_COMPONENTS BITS_PER_PIXEL
  9. IO... bgr24 3 24
  10. IO... bgr8 3 8
  11. .O..B bgr4 3 4
  12. IO... bgr4_byte 3 4
  13. IO... abgr 4 32
  14. IO... bgra 4 32
  15. IO... bgr565be 3 16
  16. IO... bgr565le 3 16
  17. IO... bgr555be 3 15
  18. IO... bgr555le 3 15
  19. IO... bgr444le 3 12
  20. IO... bgr444be 3 12
  21. IO... bgr48be 3 48
  22. IO... bgr48le 3 48
  23. IO... bgra64be 4 64
  24. IO... bgra64le 4 64
  25. IO... 0bgr 3 24
  26. IO... bgr0 3 24

显示效果如下:

(2) 使用ffplay播放录制的视频:

pi@NanoPC-T6:/$ ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 /home/pi/video.yuv
7.8.4 HDMI-IN音频

查看HDMI-IN音频设备

  1. pi@NanoPC-T6:/$ cat /proc/asound/card*
  2. cat: /proc/asound/card0: 是一个目录
  3. cat: /proc/asound/card1: 是一个目录
  4. cat: /proc/asound/card2: 是一个目录
  5. cat: /proc/asound/card3: 是一个目录
  6. cat: /proc/asound/card4: 是一个目录
  7. 0 [rockchiphdmi0 ]: rockchip_hdmi0 - rockchip,hdmi0
  8. rockchip,hdmi0
  9. 1 [rockchipdp0 ]: rockchip_dp0 - rockchip,dp0
  10. rockchip,dp0
  11. 2 [rockchiphdmi1 ]: rockchip_hdmi1 - rockchip,hdmi1
  12. rockchip,hdmi1
  13. 3 [rockchiphdmiin ]: rockchip_hdmiin - rockchip,hdmiin
  14. rockchip,hdmiin
  15. 4 [realtekrt5616co]: simple-card - realtek,rt5616-codec
  16. realtek,rt5616-codec

可以看到,rockchiphdmiin的声卡号为3。

录制音频(录制10秒):

pi@NanoPC-T6:/$ sudo arecord -D hw:3,0 -f cd /home/pi/test.wav -d 10

其中:

  • -D hw:3,0:指定录音使用的声卡设备;
  • -d:录音的持续时间,以秒为单位;
  • -f:录音的格式,可以根据实际情况选择;这里设置录制的音频格式为CD音质,即16比特、44.1kHz采样率;
  • test.wav:指定保存音频的文件名为 test.wav

回放所录制的音频(输出到HDMI-IN):

pi@NanoPC-T6:/$ sudo aplay /home/pi/test.wav -D 'hw:rockchiphdmiin'
7.8.5 使用GStreamer

GStreamer是一种多媒体框架,你可以使用它来构建自定义的多媒体应用程序,捕获摄像头视频,进行处理和展示。

你可以使用以下GStreamer管道捕获视频:

pi@NanoPC-T6:/$ DISPLAY=:0.0 gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=BGR,width=1920,height=1080,framerate=60/1 ! queue ! glimagesink

其中:

  • DISPLAY=:0.0DISPLAY 环境变量允许用户指定应用程序应在哪个显示和屏幕上运行,格式如 hostname:display.screen;在这个设置中,:0.0 表示X Window System中的第一个显示和第一个屏幕;
  • v4l2srcv4l2src 是一个GStreamer插件,用于从V4L2设备(比如摄像头、HDMI-IN)读取视频数据;
  • device=/dev/video0: 指定了要使用的设备文件路径;
  • video/x-raw:指定输出数据格式为原始视频,format参数设置为BGRwidth设置为1920height设置为1080framerate设置为60fps
  • queue:是一个GStreamer插件,用于在管道中创建一个缓冲区队列,以平衡数据流的处理速度;
  • glimagesink:是一个GStreamer插件,用于将视频数据显示在图形界面上;

实时捕获HDMI-IN(声卡3)音频,并通过声卡0、声卡4输出:

pi@NanoPC-T6:/$ gst-launch-1.0 alsasrc device=hw:3,0 ! audioconvert ! audioresample ! queue ! tee name=t ! queue ! alsasink device="hw:0,0" t. ! queue ! alsasink device="hw:4,0"

音视频录制:

pi@NanoPC-T6:/$ DISPLAY=:0.0 gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=BGR,width=1920,height=1080,framerate=60/1 ! queue ! mpph265enc ! h265parse ! queue ! mux. alsasrc device=hw:3,0 ! audio/x-raw,channels=2 ! audioconvert ! voaacenc ! queue ! mux. matroskamux name=mux ! filesink location=/home/pi/1080p60.mkv

参考文章:

[1] Rockchip RK3399 - 移植uboot 2017.09 & linux 4.19(友善之家脚本方式)

[2] NanoPC-T6开发手册

[3] gcc/c++ 版本不一致问题导致的

[4] 软件包:gcc-12(12.3.0-12 以及其他的)

[5] ArmSom--摄像头开发指南(二)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/309266
推荐阅读
相关标签
  

闽ICP备14008679号