topeet RK3568 Linux5.10 ArchLinux编译
时间轴
2025-12-26
init
环境
OS
使用wsl的archlinux
compiler
ARM目前总共发布了8种架构:ARMv1、ARMv2、ARMv3、ARMv4、ARMv5、ARMv6、ARMv7、ARMv8。
针对于Cortex-A5x处理器可以使用aarch64-linux-gnu-gcc -march=armv8-a命令编译代码,ARM GNU编译器可通过下面的链接下载
使用archlinux上通过pacman下载的aarch64-linux-gnu-gcc版本是15.1.0
source code
源码是topeet提供的:
编译内核
编译
使用aarch64-linux-gnu-gcc 15.1.0版本编译器
1 | sudo pacman -Sy bc |
clangd 查看内核源码
生成compile_command.json
1 | ./scripts/clang-tools/gen_compile_commands.py |
使用clangd作为语言服务器要添加ComplieFlags,因为clangd对GCC的某些编译选项不识别:
1 | CompileFlags: |
sp报错
clangd报错:
1 | clang [asm_invalid_global_var_reg]: Register 'sp' unsuitable for global register variables on this target |
将变量 current_stack_pointer 绑定到 sp 寄存器(即当前栈指针),以便直接读取栈顶地址。这种写法在 GCC 编译 Linux 内核时是合法的(尤其在 ARM64 架构下),但 Clang 对此有更严格的限制。因此我们修改arch/arm64/include/asm/stack_pointer.h源码如下,对于__clang__使用内联汇编函数返回sp的值
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
编译uboot
1 | make rk3568_defconfig |
生成:
u-boot(ELF)u-boot.bin(原始二进制)spl/u-boot-spl.bin(如果启用 SPL)tpl/u-boot-tpl.bin(如果启用 TPL)u-boot.dtb(内嵌或外部设备树)
1 | tools/mkimage -n rk3568 -T rksd -d tpl/u-boot-tpl.bin idbloader.img |
这样生成的loader可能有点问题还待研究TODO
编译根文件系统
1 | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_rk3568_defconfig |
编译recover
TODO
烧写
TODO
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 常想一二,不思八九!
评论


