1 说明
- 我依照官方手册编译单独编译linux内核,安装后重启出现内核启动失败的问题,编译和安装步骤如下:
# 1. 克隆源码 git clone --depth=1 -b orange-pi-6.1-rk35xx https://github.com/orangepi-xunlong/linux-orangepi # 2 配置源码 make rockchip_linux_defconfig # 3 编译 make -j10 # 4 安装内核模块 sudo make modules_install # 5 安装内核镜像 sudo make install # 6 安装设备树 sudo make dtbs_install INSTALL_DTBS_PATH=/boot/dtb/
- 重新启动开发板,打印如下信息, 最终卡在 ** Starting kernel … ** 无法启动,
## Executing script at 09000000 Fdt Ramdisk skip relocation No misc partition ## Loading init Ramdisk from Legacy Image at 0a200000 ... Image Name: uInitrd Image Type: AArch64 Linux RAMDisk Image (gzip compressed) Data Size: 14780165 Bytes = 14.1 MiB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK ## Flattened Device Tree blob at 0x08300000 Booting using the fdt blob at 0x08300000 reserving fdt memory region: addr=8300000 size=ab000 Using Device Tree in place at 0000000008300000, end 00000000083adfff WARNING: could not set reg FDT_ERR_BADOFFSET. ## reserved-memory: cma: addr=10000000 size=10000000 ramoops@110000: addr=110000 size=e0000 Adding bank: 0x00200000 - 0xf0000000 (size: 0xefe00000) Adding bank: 0x100000000 - 0x200000000 (size: 0x100000000) Adding bank: 0x2f0000000 - 0x300000000 (size: 0x10000000) Total: 14507.300/14540.380 ms Starting kernel ...
2 分析思路
-
我在使用SDK进行编译时,编译出的内核是可以正常启动的,尝试使用SDK单独编译内核看看:
可以看到使用SDK编译内核前使用 linux-rockchip-rk3588-current.config 对内核进行了配置,而之前在单独编译内核前并没有使用这个配置文件 -
将两个配置文件(.config)进行对比,如下图所示,区别还是很大的,所以解决思路是使用 linux-rockchip-rk3588-current.config 对内核进行配置,而不使用文档中给出的配置文件。
3 实验
- 直接使用 SDK内核路径下的 .config 替换 内核目录下的.config,然后直接开始编译安装,内核正常启动。
-
# 1. 克隆源码 git clone --depth=1 -b orange-pi-6.1-rk35xx https://github.com/orangepi-xunlong/linux-orangepi # 2 配置源码(直接使用SDK内核路径下的 .config 替换当前源码路径下的.config, .config_sdk是从SDK中复制出来的.config然后重命名,路径根据自己的位置进行修改) cp .config_sdk ./.config # 3 编译 make -j10 # 4 安装内核模块 sudo make modules_install # 5 安装内核镜像 sudo make install # 6 安装设备树 sudo make dtbs_install INSTALL_DTBS_PATH=/boot/dtb/