立创·泰山派:Linux内核5.10移植(设备树移植+问题解决)


立创·泰山派:Linux内核5.10移植实战(设备树移植+源码获取)

【本文基于 立创·泰山派开发板 验证通过,注:需要编译老版本内核成功的SDK]


一、内核移植背景

1.1 为何选择Linux 5.10

  • 长期支持:LTS版本
  • 新特性
    • 改进的RISC-V架构支持
    • 增强的电源管理(适合低功耗设备)
    • 更新的驱动生态(WiFi/BT/GPU等)

1.2 移植目标

模块版本验证状态
内核核心5.10.160✔️
设备树rockchip+tspi✔️
系统编译ubuntu20.04✔️

二、源码获取与准备

2.1 官方源码仓库

# 进入泰山派工作目录,保存老内核目录
mv kernel kernel_old

# 克隆内核仓库,改名为 kernel
git clone --depth 1 -b 5.10.160-37 https://github.com/Joshua-Riek/linux-rockchip
mv linux-rockchip kernel
cd kernel

# 清除编译命令
make clean && make distclean

# 目录结构关键路径
├── arch/arm64/boot/   # Image
├── drivers/           # 驱动文件
└── arch/arm64/boot/dts/rockchip/  # 设备树文件

2.2 设备树文件备份与迁移(必看:关键操作)

# 从旧内核(4.19)复制设备树文件,当前在新的 kernel目录下
cp ../kernelold/arch/arm64/boot/.Image* ./arch/arm64/boot/
cp ../kernelold/arch/arm64/boot/Image* ./arch/arm64/boot/

cp ../kernelold/arch/arm64/boot/dts/rockchip/.tspi* ./arch/arm64/boot/dts/rockchip/
cp ../kernelold/arch/arm64/boot/dts/rockchip/tspi* ./arch/arm64/boot/dts/rockchip/

# 添加编译选项:
# 在 ./arch/arm64/boot/dts/rockchip/Makefile 内
# 在 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-rk817-tablet-v10.dtb 下一行添加
dtb-$(CONFIG_ARCH_ROCKCHIP) += tspi-rk3566-user-v10-linux.dtb

# 😀 问题3.1解决:目前在新建的 kernel 目录
# 在 ./Makefile 内
# 41 行 MAKEFLAGS 参数后 加一个 --include-dir=$(CURDIR)
MAKEFLAGS += -rR --include-dir=$(CURDIR)

# 384 行在 ARCH ?= $(SUBARCH) 下面 添加 
ifeq ($(ARCH),arm64)
ifneq ($(wildcard $(srctree)/../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu),)
CROSS_COMPILE	?= $(srctree)/../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
endif
ifneq ($(wildcard $(srctree)/../prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9),)
CROSS_COMPILE	?= $(srctree)/../prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-
endif
endif
ifeq ($(ARCH),arm)
ifneq ($(wildcard $(srctree)/../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf),)
CROSS_COMPILE	?= $(srctree)/../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
endif
ifneq ($(wildcard $(srctree)/../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9),)
CROSS_COMPILE	?= $(srctree)/../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androidkernel-
endif
endif

# 😀 问题3.2解决:目前在新建的 kernel 目录
# 进入 ./drivers/media/i2c/Makefile 内
# 找到 obj-$(CONFIG_VIDEO_SC4210) += sc4210.o 在其上方加CFLAGS_REMOVE_sc4210.o := -mgeneral-regs-only:如
CFLAGS_REMOVE_sc4210.o := -mgeneral-regs-only
obj-$(CONFIG_VIDEO_SC4210) += sc4210.o


三、遇到的问题与解决方案

3.1 编译工具链问题

问题现象

gcc:error:unrecognized command line option '-mlittle-endian'
make[2]: ***[scripts/Makefile.build:273:scripts/mod/empty.o] 错误1
make[2]: ***正在等待未完成的任务..
gcc:error:unrecognized command line option '-mlittle-endian'
make[2]:**[scripts/Makefile.build:117:scripts/mod/devicetable-offsets.s] 错误1
nake[1]:*[Makefile:1343:prepare0] 错误2
make[1]:*正在等待未完成的任务..
nake:**[arch/arm64/Makefile:214:tspi-rk3566-user-v10-linux.img]....

原因分析
gcc 默认是小端模式,通常不需要显式指定 -mlittle-endian,通常表明使用的是 gcc 或者其他工具链不匹配 ARM64 体系结构,

解决方案
修改编译内核时使用的工具链
SDK/kernel/Makefile 中使用 gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc 编译工具链
具体操作在 👆问题3.1解决


3.2 浮点数运算不兼容

问题现象

drivers/media/i2c/sc4210.c:In function 'sc4210_get_gain_reg':
drivers/media/i2c/sc4210.c:1687:13:error:'-mgeneral-regs-only'is incompatible with floating-point code
static void sc4210_get_gain_reg(u32 total_gain,u32 *again,u32 *again_fine,
drivers/media/i2c/sc4210.c:1687:13:error:'-mgeneral-regs-only'is incompatible with floating-point code
make[4]: ***[scripts/Makefile.build:273:drivers/media/i2c/sc4210.o] 错误1
make[3]: ***[scripts/Makefile.build:516:drivers/media/i2c] 错误2
make[2]: ***[scripts/Makefile.build:516:drivers/media] 错误2
make[2]:*正在等待未完成的任务..

原因分析
-mgeneral-regs-only 选项告诉编译器只使用通用寄存器(整数寄存器),但 sc4210_get_gain_reg 这个函数(或者它调用的函数)可能使用了浮点数计算,导致编译失败

解决方案
仅对 sc4210.c 禁用 -mgeneral-regs-only,添加 CFLAGS_REMOVE_sc4210.o := -mgeneral-regs-only
具体操作:👆问题3.2解决


四、内核编译与烧录

4.1 编译命令

# 配置平台参数,查看目前的配置
./build.sh -h kernel
输出如下:
[ ###Current SDK Default [ kernel ] Build Command###
cd kernel
make ARCH=arm64 rockchip_linux_defconfig 
make ARCH=arm64 tspi-rk3566-user-v10-linux.img -j16
]
# 如果不是 tspi-rk3566-user-v10-linux.img,运行
./build.sh lunch   进行选择

# 编译:
./build.sh kernel

4.2 烧录镜像

使用工具 RKDevTool.exe 烧录 boot.img


五、验证与调试

5.1 启动日志检查

# 查看内核版本
root@RK356X:/# uname -a
Linux RK356X 5.10.160 #1 SMP Thu Mar 27 14:31:45 CST 2025 aarch64 GNU/Linux


六、资源下载路径

资源类型获取地址
Linux 5.10内核源码在github上获取
百度网盘获取
配置好的内核源码 (只需编译)网盘获取

移植成果总结
通过适配设备树,泰山派成功运行Linux 5.10内核,关键功能均通过验证。后续可针对具体应用场景进行深度优化,如配置WIFI,网卡,NPU,GPU等。

问题交流
如在移植过程中遇到其他问题,欢迎在评论区留言,提供详细日志可获得针对性解答!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

银河码

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值