文章目录
- 前言
- rk镜像概念
-
- rk镜像构成
- 生成sd卡镜像
- 制作根文件系统流程概述
-
- 文件概述
- 执行流程
-
- 执行./mk-base-debian.sh
- 执行mk-buster-rootfs.sh
- 执行./mk-image.sh
- 执行./mk-base-debian.sh
- 总结
- 使用docker容器基于鲁班猫的仓库制作泰山派的ubuntu22.04根文件系统
-
- 前言
- 流程
-
- 制作docker镜像
- 启动docker容器
- 进入容器
- 进入容器后执行
-
- step1.准备
* step2.构建基础 Ubuntu 系统。
* step3.添加 rk overlay 层,并打包ubuntu-rootfs镜像
- step1.准备
- 制作docker镜像
- 总结
- 使用泰山派sdk编译5.10内核问题记录
-
- 背景
- 问题1:内核配置没选好编译工具链,报失败
-
- 报错日志
- 解决方案
- 报错日志
- 问题2:环境中lz4工具版本过低,导致编译失败
-
- 报错日志
- 解决方案
- 报错日志
- 问题3:手动安装bcmdhd.ko内核模块报错
-
- 报错日志
- 原因排查
- 解决方案
- 报错日志
- wifi固件路径不正确,导致wifi有问题
- 泰山派调整分区大小【TODO】
- 安装docker之后,docker服务一直启动报错【还没解决,之后】
前言
完整梳理制作镜像流程
rk镜像概念
这里描述的镜像就是指最终能烧写到sd卡种的一个文件(使用Rockchip的sdk生成的update.img文件)
rk镜像构成
使用Rockchip的sdk去执行./build.sh all和./mkfirmware.sh脚本后,会在rockdev目录下生成下列文件,这些文件是构成sd卡烧录镜像的组成成分
1boot.img -> ../kernel/boot.img # 内核 2MiniLoaderAll.bin -> ../u-boot/rk356x_spl_loader_v1.13.112.bin # Secondary Bootloader(SPL) 3misc.img -> ../device/rockchip/rockimg/wipe_all-misc.img* # misc镜像 4oem.img # 不熟悉可能和重置系统相关 5parameter.txt -> ../device/rockchip/rk356x/parameter-buildroot-fit.txt # 分区配置文件 6recovery.img -> ../buildroot/output/rockchip_rk356x_recovery/images/recovery.img # 不熟悉可能和重置系统相关 7rootfs.ext4 -> ubuntu-xfce-rootfs.img # 根文件系统,指向ubuntu-xfce-rootfs.img 8rootfs.img -> ubuntu-xfce-rootfs.img # 根文件系统,指向ubuntu-xfce-rootfs.img 9uboot.img -> ../u-boot/uboot.img # uboot 10ubuntu-xfce-rootfs.img # 根文件系统 11userdata.img # 不熟悉,用户数据img 12
在 Rockchip 的启动流程中:
BootROM → 2. MiniLoaderAll.bin (SPL) → 3. U-Boot → 4. Kernel
生成sd卡镜像
执行./build.sh updateimg后生成名为update.img的sd卡镜像,可以使用Rockchip烧录工具烧录到sd卡中,插入泰山派sd卡卡槽中,就可以直接启动。
./build.sh updateimg执行日志如下,
1root@lckfb:/home/lckfb# ./build.sh updateimg 2processing option: updateimg 3Make update.img 4start to make update.img... 5Android Firmware Package Tool v2.0 6------ PACKAGE ------ 7Add file: ./package-file 8package-file,Add file: ./package-file done,offset=0x800,size=0x28b,userspace=0x1 9Add file: ./Image/MiniLoaderAll.bin 10bootloader,Add file: ./Image/MiniLoaderAll.bin done,offset=0x1000,size=0x719c0,userspace=0xe4 11Add file: ./Image/parameter.txt 12parameter,Add file: ./Image/parameter.txt done,offset=0x73000,size=0x1f4,userspace=0x1 13Add file: ./Image/uboot.img 14uboot,Add file: ./Image/uboot.img done,offset=0x73800,size=0x400000,userspace=0x800 15Add file: ./Image/misc.img 16misc,Add file: ./Image/misc.img done,offset=0x473800,size=0xc000,userspace=0x18 17Add file: ./Image/boot.img 18boot,Add file: ./Image/boot.img done,offset=0x47f800,size=0x16eea00,userspace=0x2dde 19Add file: ./Image/recovery.img 20recovery,Add file: ./Image/recovery.img done,offset=0x1b6e800,size=0x1e5fa00,userspace=0x3cc0 21Add file: ./Image/rootfs.img 22rootfs,Add file: ./Image/rootfs.img done,offset=0x39ce800,size=0xec827000,userspace=0x1d904e 23Add file: ./Image/oem.img 24oem,Add file: ./Image/oem.img done,offset=0xf01f5800,size=0x10a6000,userspace=0x214c 25Add file: ./Image/userdata.img 26userdata,Add file: ./Image/userdata.img done,offset=0xf129b800,size=0x444000,userspace=0x888 27Add CRC... 28Make firmware OK! 29------ OK ------ 30********rkImageMaker ver 2.0******** 31Generating new image, please wait... 32Writing head info... 33Writing boot file... 34Writing firmware... 35 36Generating MD5 data... 37MD5 data generated successfully! 38New image generated successfully! 39Making ./Image/update.img OK. 40Running build_updateimg succeeded. 41
最终生成update.img文件,从日志中可以看出,update.img文件就是由其他文件组成的而已。这次我主要关注根文件系统(rootfs)的制作,可以根据自己的需求,去制作不同的根文件,其他部分可以复用。替换rootfs.ext4和rootfs.img软链到自己制作的根文件系统之后,就可以做出对应的镜像文件。
制作根文件系统流程概述
这里这要分析制作debian和ubuntu根文件系统的流程,不涉及buildroot根文件系统(sdk默认生成的就是buildroot根文件系统)。主要是粗略解读一下Rockchip sdk中的制作debian根文件系统的框架,这里也主要参考了鲁班猫的文档。
文件概述
进入debian目录下,有以下文件.
1-rwxrwxr-x 1 1.1K 3月 10 11:04 mk-base-debian.sh 2-rwxrwxr-x 1 8.1K 3月 10 11:25 mk-buster-rootfs.sh 3-rwxrwxr-x 1 477 3月 10 10:49 mk-image.sh 4-rwxrwxr-x 1 441 12月 26 15:18 mk-rootfs.sh 5drwxrwxr-x 7 67 11月 30 11:19 overlay 6drwxrwxr-x 5 49 11月 30 11:19 overlay-debug 7drwxrwxr-x 4 28 11月 30 11:19 overlay-firmware 8drwxrwxr-x 3 19 11月 30 11:19 packages 9drwxrwxr-x 5 47 11月 30 11:19 packages-patches 10-rwxrwxr-x 1 3.0K 11月 30 11:19 post-build.sh 11-rw-rw-r-- 1 2.6K 3月 10 11:17 readme.md 12drwxrwxr-x 7 164 11月 30 11:19 ubuntu-build-service 13
- mk-base-debian.sh:清理构建目录并调用live build开始构建。
- mk-buster-rootfs.sh:添加Rockchip overlay层。
- mk-image.sh:将根文件系统打包成img镜像文件
- overlay:Rockchip overlay层,主要是rootfs中的配置文件
- overlay-debug:Rockchip overlay层,主要是debug脚本和工具
- overlay-firmware:Rockchip overlay层,主要是wifi/bt/npu的固件
- packages:硬件加速包
- ubuntu-build-service:用于搭建构建环境的依赖文件和live build配置文件
packages目录下有很多重要的deb包,和Rockchip芯片适配的硬件固件和加速包
1├── chromium 2├── glmark2 3├── gst-plugins-bad1.0 4├── gst-plugins-base1.0 5├── gst-plugins-good1.0 6├── gst-plugins-ugly1.0 7├── gstreamer 8├── gst-rkmpp 9├── libdrm 10├── libdrm-cursor 11├── libmali 12├── libv4l 13├── mpp 14├── openbox 15├── pcmanfm 16├── pulseaudio 17├── rga 18├── rga2 19├── rkaiq 20├── rkisp 21├── rknpu2 22├── rktoolkit 23├── rkwifibt # 这个里面有泰山派使用的博通网卡的固件 24└── xserver 25
执行流程
Rockchip sdk中编译debian根文件系统的函数
1function build_debian(){ 2 ARCH=${RK_DEBIAN_ARCH:-${RK_ARCH}} 3 case $ARCH in 4 arm|armhf) ARCH=armhf ;; 5 *) ARCH=arm64 ;; 6 esac 7 8 echo "=========Start building debian for $ARCH=========" 9 10 cd debian 11 if [ ! -e linaro-$RK_DEBIAN_VERSION-alip-*.tar.gz ]; then 12 RELEASE=$RK_DEBIAN_VERSION TARGET=desktop ARCH=$ARCH ./mk-base-debian.sh 13 ln -rsf linaro-$RK_DEBIAN_VERSION-alip-*.tar.gz linaro-$RK_DEBIAN_VERSION-$ARCH.tar.gz 14 fi 15 16 VERSION=debug ARCH=$ARCH ./mk-rootfs-$RK_DEBIAN_VERSION.sh 17 ./mk-image.sh 18 19 finish_build 20} 21
从上面函数可以看出,执行流程分三步
- 1、执行./mk-base-debian.sh
- 2、执行./mk-rootfs-$RK_DEBIAN_VERSION.sh(这里也就是mk-buster-rootfs.sh)
- 3、执行./mk-image.sh
执行./mk-base-debian.sh
这里主要是使用debian的livebuild工具,去做出一个基础的debian根文件系统
执行mk-buster-rootfs.sh
这里在上面的生成的根文件系统基础上,安装Rockchip相关的东西。主要是把overlay、 overlay-debug、overlay-firmware、packages相关的东西装进去。
鲁班猫在这一步会调用./mk-image.sh,所以就不用单独执行下面的脚本了。
执行./mk-image.sh
将上一步的内容打包成一个img文件,这个就是根文件系统文件。
总结
制作debian、ubuntu根文件系统的基本思路就是:
- 先做一个基本的镜像(可以成为base镜像),debian是用live build工具,ubuntu是从官网下载一个基础镜像。这个基础镜像只提供基本的能力,缺乏对应硬件厂商的加速包(比如rk的mpp、libdrm、libmali等)和一些固件(比如:博通的wifi网卡固件)。
- 在上面基础镜像的基础上,安装对应硬件厂商的加速包和一些固件,以及一些适配硬件的软件:比如chromium、gstreamer等等(这些应该也是适配了rk底层硬件的,能使用rk硬件解码,不然cpu软件解码性能很差);然后有些自己需要的可能和硬件无关的软件,比如vim、gcc、git等。
- 调用工具将上述镜像打包成一个img根文件系统文件,供后续和内核、uboot等其他组件部分合并成一个完整的可以烧录的镜像。
使用docker容器基于鲁班猫的仓库制作泰山派的ubuntu22.04根文件系统
前言
这里我参考了鲁班猫的ubuntu仓库。我从中fork了一份,主要是添加了泰山派博通网卡的固件和内核模块,制作了一个可以在泰山派中跑的ubuntu22.04的镜像。
我fork的仓库地址,仓库中我只适配了ubuntu22.04分支,其他分支我没适配。在readme中我也添加了完整的流程说明,这里也在稍微记录下。
流程
制作docker镜像
首先使用仓库中给定的dockerfile去构建docker镜像
1docker build -t lubancat_build_rootfs:v2 . -f Docker/Dockerfile 2
启动docker容器
1docker run --privileged -d \ 2--name lubancat_build_ubuntu \ 3--hostname build_ubuntu \ 4-v /root/new_workspace/tspi_ubuntu:/ubuntu \ # 这里/root/new_workspace/tspi_ubuntu换成你们本地的仓库根路径 5-it lubancat_build_rootfs:v2 /bin/bash 6
这里有两个注意点:
- 1、这里做了目录映射,主要是把宿主机的仓库目录映射到容器中,这样在宿主机中就可以拿到生成的根文件系统
- 2、这里必须使用–privileged,使得容器拥有比较大的权限,可以执行mount、chroot等一些命令,不然可能有问题
进入容器
1docker ps|grep lubancat_build_ubuntu # 查看容器id,输出的第一列就是 2docker exec -it ${容器id} /bin/bash # 执行这个命令进入容器 3
进入容器后执行
下面的步骤都是在容器中执行的
step1.准备
1cd /ubuntu 2# 注册binfmts,在x86的容器中,执行跨架构命令依赖这个,如果是arm的容器,应该就不需要 3update-binfmts --enable qemu-aarch64 4# 安装依赖 5sudo dpkg -i ubuntu-build-service/packages/* 6sudo apt-get install -f 7
这里有个关键点
- 如果是x86的机器,可能需要手动执行update-binfmts --enable qemu-aarch64去注册binfmts,在x86的容器中,执行跨架构命令依赖这个,如果是arm的容器,应该就不需要。我之前的文章中描述我在容器中无法制作成功,应该就是没有执行它,导致chroot后,arm64的可执行文件无法被自动翻译执行,导致有问题。这个有可能是自动生效的,但是如果没生效,就需要执行下这个了。
step2.构建基础 Ubuntu 系统。
1# 运行以下脚本,根据提示选择要构建的版本 2./mk-base-ubuntu.sh 3
step3.添加 rk overlay 层,并打包ubuntu-rootfs镜像
1# 运行以下脚本,根据提示选择要构建处理器版本和ubuntu的版本 2./mk-ubuntu-rootfs.sh 3
总结
我现在自测这个流程是非常ok的,而且我基于鲁班猫的这个仓库做的ubuntu22.04的xfce桌面的镜像,使用chromium浏览器播放视频还算流畅。实测播放b站上面的720p及以下分辨率的视频还是比较流畅;播放1080p的视频就完全不行了,非常卡顿了。估计这也是到达了rk3566这款soc的极限性能了吧。这已经比我之前做的镜像好多了,我之前应该是没有配置好rk硬件加速包之类的,直接播放任意流畅度的b站视频都无比卡顿。感谢鲁班猫,提供的资料很详细,yyds;之后高低整一块鲁班猫的板子。
这样就能在docker容器中完整制作根文件系统了,不用在像之前的文章介绍的使用qemu虚拟机去做了,就方便太多了0.0
使用泰山派sdk编译5.10内核问题记录
背景
我使用的是从鲁班猫仓库获取的内核,fork了一份:仓库地址,里面有5.10版本的内核
我使用的是ubuntu18.04.6的容器去进行泰山派sdk的编译操作
问题1:内核配置没选好编译工具链,报失败
报错日志
失败日志如下:
1arch/arm64/Makefile:25: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum 2arch/arm64/Makefile:33: LSE atomics not supported by binutils 3arch/arm64/Makefile:44: Detected assembler with broken .inst; disassembly will be unreliable 4arch/arm64/Makefile:25: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum 5arch/arm64/Makefile:33: LSE atomics not supported by binutils 6arch/arm64/Makefile:44: Detected assembler with broken .inst; disassembly will be unreliable 7 CC scripts/mod/empty.o 8 CC scripts/mod/devicetable-offsets.s 9gcc: error: unrecognized command line option '-mlittle-endian'; did you mean '-fconvert=little-endian'? 10gcc: error: unrecognized command line option '-mlittle-endian'; did you mean '-fconvert=little-endian'? 11scripts/Makefile.build:273: recipe for target 'scripts/mod/empty.o' failed 12make[2]: *** [scripts/mod/empty.o] Error 1 13make[2]: *** Waiting for unfinished jobs.... 14scripts/Makefile.build:117: recipe for target 'scripts/mod/devicetable-offsets.s' failed 15make[2]: *** [scripts/mod/devicetable-offsets.s] Error 1 16Makefile:1354: recipe for target 'prepare0' failed 17make[1]: *** [prepare0] Error 2 18arch/arm64/Makefile:214: recipe for target 'tspi-rk3566-user-v10-linux.img' failed 19make: *** [tspi-rk3566-user-v10-linux.img] Error 2 20ERROR: Running build_kernel failed! 21ERROR: exit code 2 from line 656: 22 make ARCH=$RK_ARCH $RK_KERNEL_DTS.img -j$RK_JOBS 23
解决方案
后面发现是没搞好内核的编译器的配置,需要修改kernel中的Makefile为自己的编译器(kernel/Makefile里)。【这里有点奇怪的是,编译泰山派sdk原来的4.19版本的内核也没这样显式的去写,但是是ok的,这里后面有时间再看看,现在就先这样搞吧】

这里是参考文档:RK3566-移植5.10内核&Ubuntu22.04,去解决的。
问题2:环境中lz4工具版本过低,导致编译失败
报错日志
1arch/arm64/configs/rockchip_linux_defconfig:683:warning: override: reassigning to symbol NETFILTER 2# 3# No change to .config 4# 5 6 CALL scripts/atomic/check-atomics.sh 7 CALL scripts/checksyscalls.sh 8 CHK include/generated/compile.h 9 LZ4C arch/arm64/boot/Image.lz4 10Incorrect parameters 11Usage : 12 lz4 [arg] [input] [output] 13 14input : a filename 15 with no FILE, or when FILE is - or stdin, read standard input 16Arguments : 17 -1 : Fast compression (default) 18 -9 : High compression 19 -d : decompression (default for .lz4 extension) 20 -z : force compression 21 -f : overwrite output without prompting 22 -h/-H : display help/long help and exit 23arch/arm64/boot/Makefile:31: recipe for target 'arch/arm64/boot/Image.lz4' failed 24make[2]: *** [arch/arm64/boot/Image.lz4] Error 1 25make[2]: *** Deleting file 'arch/arm64/boot/Image.lz4' 26arch/arm64/Makefile:170: recipe for target 'Image.lz4' failed 27make[1]: *** [Image.lz4] Error 2 28make[1]: *** Waiting for unfinished jobs.... 29arch/arm64/Makefile:214: recipe for target 'tspi-rk3566-user-v10-linux.img' failed 30make: *** [tspi-rk3566-user-v10-linux.img] Error 2 31ERROR: Running build_kernel failed! 32ERROR: exit code 2 from line 656: 33 make ARCH=$RK_ARCH $RK_KERNEL_DTS.img -j$RK_JOBS 34
解决方案
升级工具版本,由于我的ubuntu版本太低,使用apt无法升级更新的,只能从源码安装
1# 1. 从 GitHub 下载最新源码 2git clone https://github.com/lz4/lz4.git 3cd lz4 4 5# 2. 编译并安装到系统路径 6make 7sudo make install 8 9# 3. 验证新版本 10lz4 --version 11
然后再执行./build.sh kernel就编译成功了。
问题3:手动安装bcmdhd.ko内核模块报错
报错日志
编译好这个5.10内核后,手动安装wifi的驱动bcmdhd.ko一直报错,报错如下
1insmod /system/lib/modules/bcmdhd.ko, 2 [ 162.699496] bcmdhd: Unknown symbol dhd_wlan_mem_prealloc (err -2 3
原因排查
刚开始不知道什么原因,以为缺少其他的一些内核模块,搞了好久也不行。
后面使用modinfo输出内容,让ds分析:
1modinfo /system/lib/modules/bcmdhd.ko 2 3filename: /system/lib/modules/bcmdhd.ko 4import_ns: VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver 5license: GPL and additional rights 6alias: sdio:c00v*d* 7alias: sdio:c*v02D0d449A* 8alias: sdio:c*v02D0d4499* 9alias: sdio:c*v02D0d4498* 10alias: sdio:c*v02D0dA805* 11alias: sdio:c*v02D0d4497* 12alias: sdio:c*v02D0d4496* 13alias: sdio:c*v02D0d4495* 14alias: sdio:c*v02D0dA806* 15alias: sdio:c*v02D0dA804* 16alias: sdio:c*v02D0dAAE8* 17alias: sdio:c*v02D0dAAE7* 18alias: sdio:c*v02D0d4362* 19alias: sdio:c*v02D0d0000* 20depends: dhd_static_buf 21intree: Y 22name: bcmdhd 23vermagic: 5.10.209 SMP mod_unload aarch64 24parm: dhd_doflow:uint 25parm: dhd_dpcpoll:uint 26parm: clockoverride:SDIO card clock override (int) 27parm: sd_msglevel:uint 28parm: sd_power:uint 29parm: sd_clock:uint 30parm: sd_divisor:uint 31parm: sd_sdmode:uint 32parm: sd_hiok:uint 33parm: sd_f2_blocksize:int 34parm: sd_f1_blocksize:int 35parm: fw_ap_select:uint 36parm: wl_reassoc_support:uint 37parm: g_assert_type:int 38parm: dhd_oob_gpio_num:DHD oob gpio number (int) 39parm: clm_path:string 40parm: info_string:string 41parm: op_mode:int 42parm: dhd_msg_level:int 43parm: iw_msg_level:int 44parm: wl_dbg_level:int 45parm: android_msg_level:int 46parm: config_msg_level:int 47parm: dhd_arp_mode:uint 48parm: disable_proptx:int 49parm: firmware_path:string 50parm: nvram_path:string 51parm: config_path:string 52parm: wl_event_enable:uint 53parm: logtrace_pkt_sendup:uint 54parm: dhd_watchdog_ms:uint 55parm: dhd_console_ms:uint 56parm: dhd_slpauto:uint 57parm: dhd_pkt_filter_enable:uint 58parm: dhd_pkt_filter_init:uint 59parm: dhd_master_mode:uint 60parm: dhd_watchdog_prio:int 61parm: dhd_dpc_prio:int 62parm: dhd_rxf_prio:int 63parm: dhd_dongle_ramsize:int 64parm: passive_channel_skip:int 65parm: instance_base:int 66parm: pcie_txs_metadata_enable:int 67parm: iface_name:string 68parm: dhd_idletime:int 69parm: dhd_poll:uint 70parm: dhd_intr:uint 71parm: dhd_sdiod_drive_strength:uint 72parm: dhd_txbound:uint 73parm: dhd_rxbound:uint 74parm: dhd_deferred_tx:uint 75parm: allow_delay_fwdl:int 76parm: enable_ecounter:uint 77parm: dhd_tcm_test_enable:uint 78这是加载失败的模块介绍,可以看出它加载失败的原因么? 79
ds输出结果
1一、核心问题分析 2**关键信息:depends: dhd_static_buf** 3这行输出明确告诉我们,bcmdhd.ko 依赖于另一个名为 **dhd_static_buf** 的模块。 4在 Linux 内核模块机制中,一个模块所依赖的所有符号(函数、变量)必须在其依赖模块加载后,由依赖模块提供。如果依赖模块未加载,内核就无法解析这些符号,从而导致 Unknown symbol 错误。 5结合您之前的错误信息: 6您之前的错误是 Unknown symbol dhd_wlan_mem_prealloc (err -2)。 7函数 dhd_wlan_mem_prealloc 极有可能就是由 dhd_static_buf.ko 这个模块导出的。 8因此,根本原因是 没有先加载 dhd_static_buf.ko。 9
从结果看是依赖一个dhd_static_buf.ko模块,然后看5.10内核目录,对应的modules.order文件中果然有这依赖项,但是4.19内核是没有,
5.10内核

4.19内核,就没这个依赖项,应该是模块代码有改动。。。。

解决方案
首先我把dhd_static_buf.ko模块也拷进去试试。
但是更好的版本应该是把内核模块安装到根文件系统之中,这就能按依赖自动加载内核模块了。参考命令:
- 1、将rootfs的img文件绑定挂载到指定目录(这里因为做出的rootfs是一个img文件,可以说是一个镜像,不是一个目录,无法直接操作,所以需要使用loop设备去挂载到一个目录(好像直接挂载这个img文件也是可以,不用loop也可以))
- mount -o ubuntu-xfce-rootfs.img ./ubuntu
- 这样就可以通过ubuntu目录去操作rootfs里面的内容
- 2、使用命令安装内核模块到根文件系统
- make ARCH=arm64 modules_install INSTALL_MOD_PATH=…/ubuntu
- 3、用完umount ubuntu就可以
这样应该就ok了

wifi固件路径不正确,导致wifi有问题
wifi固件路径要和内核模块放在一块,之前ko和固件都放在/system/lib下,后面ko放在/lib/modules下面了,但是固件没改,导致有问题,把/system/lib/firmware里面的固件都拷贝到/lib/firmware下面,就OK了。
泰山派调整分区大小【TODO】
还没做,之后可以做
- 参考:泰山派调整分区大小
安装docker之后,docker服务一直启动报错【还没解决,之后】
- 我只前做的是ubuntu22.04+4.19的内核,安装docker就不成功,主要是iptables有问题。后面网上搜索说因为ubuntu22.04得配置5.10内核,因为ubuntu22.04对应的iptables需要5.10内核的东西,我就准备升级5.10内核,现在换了5.10内核还没搞好,后面再看看。。。。。。
《【玩泰山派】4、制作ubuntu镜像-(5)总结制作ubuntu22.04镜像+5.10内核流程》 是转载文章,点击查看原文。
