求熟悉 Linux 内核编译的小伙伴指导以下 rock5b plus 板子的 Linux 内核编译问题

147 天前
 freedomforlong

问题:我修改 rock5b plus linux 内核编译配置,修改之后编译也正常,但是新打出来的 deb 包提取的编译配置还是和我设置的对不上,一直无法生效,我提取的是 git 中 linux-rockchip/arch/arm64/configs/rockchip_linux_defconfig 这个配置文件,但是调整配置 重新回写之后感觉根本就没使用,我是如下操作的,想请各位老师看看哪里出问题

最近在家研究 rock5b 开发板的 linux 内核,主要是想学习 ebpf 相关的一些知识用于安卓沙箱开发 目前用的 https://github.com/Joshua-Riek/ubuntu-rockchip/blob/main/build.sh 这个项目专门做了 rock5b 开发板适配,我先通过 git 拉取到代码之后进行了一次原版编译 没有任何问题,整个是可以编译下来的

git clone https://github.com/Joshua-Riek/ubuntu-rockchip.git
cd ubuntu-rockchip
sudo ./build.sh --board=rock-5b --suite=noble --flavor=desktop --kernel-only

接下来我修改 scripts/build-kernel.sh 中每次拉更新的代码,先将他屏蔽防止覆盖我修改的代码

cat -n scripts/build-kernel.sh
...
22	# Clone the kernel repo
23	#if ! git -C "${KERNEL_CLONE_DIR}" pull; then
24	#    git clone --progress -b "${KERNEL_BRANCH}" "${KERNEL_REPO}" "${KERNEL_CLONE_DIR}" --depth=2
25	#fi
26
27	cd "${KERNEL_CLONE_DIR}"
28	#git checkout "${KERNEL_BRANCH}"

下面是我修改的 ebpf 相关的参考 https://github.com/Joshua-Riek/ubuntu-rockchip/issues/483 这里的相关 config 配置 这里是直接从源代码目录中拷贝配置文件,修改配置选项之后重新生成配置文件回写到源文件,编译一切正常,但是从新的打出来的 deb 提取的 config 和我设置的开关对不上,所以怀疑根本没有生效,我怀疑是没有使用我这个配置,有什么办法可以让他使用我这个配置文件进行内核编译么

sudo cp /home/rock/ebpf/testkernel/ubuntu-rockchip/build/linux-rockchip/arch/arm64/configs/rockchip_linux_defconfig /home/rock/ebpf/testkernel/ubuntu-rockchip/build/linux-rockchip/.config


make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 savedefconfig
cp defconfig arch/arm64/configs/rockchip_linux_defconfig

rm -rf .config

1962 次点击
所在节点    Linux
22 条回复
foool
147 天前
你想问为什么自己修改了内核配置 config 文件,但编译的时候似乎没有按照你修改的配置 config 文件进行内核编译,但你应该学习下如何提问,不要在问题中掺杂太多无关记录和没有先验知识的描述。
NoobPhper
147 天前
看了遍好累 , 貌似问题是 重新编译内核。在 config 里 打开 ebpf 但是编译不生效是吧, 你把你改前的 改后的 diff 下 发出来看看
AFOX
147 天前
改错了吧,rock5b 有自己的 config 文件,不是 rockchip 的
AFOX
147 天前
@AFOX 刚看了,好像没错,抱歉
diivL
147 天前
set -x
V=1
strace -e trace=openat
zzxx3322
147 天前
直接修改 build 目录下的.config 内容,然后 make menuconfig 进图形化界面检查你的开关是否正常开启,确认没问题了再编译测试,持久化保存.config 的修改将.config 复制到另外一个地方存起来
NessajCN
147 天前
你是不是之前编译完了原版以后没把生成的 build 目录删掉?
看脚本里如果 build/linux-image-*.deb 存在就不编译直接拿现成的打包
https://github.com/Joshua-Riek/ubuntu-rockchip/blob/main/build.sh
213 行
PTLin
147 天前
感觉根本没用可还行,起码 zcat /proc/config.gz 然后 grep 下看看有没有对应选项吧。
feather12315
147 天前
我看懂 op 的意思了。

按照如下步骤:
1. 准备好 .config
2. `make olddefconfig`
olddefconfig - Same as oldconfig but sets new symbols to their
default value without prompting

这步是补充依赖的 config
3. `make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 `
feather12315
147 天前
@feather12315 #9
你可以在第 2 步后 grep 下有没有 BPF 选项
424778940
147 天前
rk 那个框架我记得是最外出脚本编译会覆盖你 menuconfig 配置过的.config 的
当时也被这个恶心了很久
freedomforlong
147 天前
@424778940 所以这里需要怎么调整编译配置让他生效呢
freedomforlong
147 天前
@zzxx3322 build 中不能存在.config 存在编译直接就会报错
424778940
147 天前
@freedomforlong 我是自己写了一套脚本来编译, 就干脆不用他自带那一套了

下面是一些节选, env 你要自己准备了

```
#!/bin/bash

# check env
if [[ "$_BSP" != "114514" ]]; then
echo "You must source scripts/envsetup.sh first!"
exit -1
fi

# function
function kernel_build(){

cd $PATH_KERNEL

export KCONFIG_CONFIG=$BSP_KERNEL_USER_CONFIG

if [[ -f "$BSP_KERNEL_USER_CONFIG" ]]; then
# script/kconfig/merge_config.sh .config $BSP_KERNEL_USER_CONFIG
cp $BSP_KERNEL_USER_CONFIG $BSP_KERNEL_USER_CONFIG.bak_$(date +"%Y%m%d_%H%M%S")
else
echo "Warning: Using BSP DECONFIG since $BSP_KERNEL_USER_CONFIG file not found!!!"
make $BSP_KERNEL_DECONFIG $BSP_KERNEL_DEFCONFIG_FRAGMENT
fi

# kernel
make \
-j $HOST_CORE_COUNT

cd $PATH_BSP_ROOT
}

function kernel_extboot_build(){

cd $PATH_KERNEL

EXTBOOT_IMG=$PATH_KERNEL/extboot.img
EXTBOOT_DIR=$PATH_KERNEL/extboot

rm -rf ${EXTBOOT_DIR} && mkdir -p ${EXTBOOT_DIR}/extlinux

KERNEL_VERSION=$(cat include/config/kernel.release)
echo "label rk-kernel.dtb linux-$KERNEL_VERSION" > $EXTBOOT_DIR/extlinux/extlinux.conf

cp $BSP_KERNEL_ORG_KIMAGE_FILE $EXTBOOT_DIR/Image-$KERNEL_VERSION
echo -e "\tkernel /Image-$KERNEL_VERSION" >> $EXTBOOT_DIR/extlinux/extlinux.conf

cp arch/${ARCH}/boot/dts/rockchip/${BSP_KERNEL_DTS}.dtb $EXTBOOT_DIR
ln -sf ${BSP_KERNEL_DTS}.dtb $EXTBOOT_DIR/rk-kernel.dtb

echo -e "\tfdt /rk-kernel.dtb" >> $EXTBOOT_DIR/extlinux/extlinux.conf

if [[ -e/ramdisk.img ]]; then
cp $PATH_KERNEL/ramdisk.img $EXTBOOT_DIR/initrd-$KERNEL_VERSION
echo -e "\tinitrd /initrd-$KERNEL_VERSION" >> $EXTBOOT_DIR/extlinux/extlinux.conf
fi

cp $BSP_KERNEL_USER_CONFIG $EXTBOOT_DIR/config-$KERNEL_VERSION
cp $PATH_KERNEL/System.map $EXTBOOT_DIR/System.map-$KERNEL_VERSION
cp $PATH_KERNEL/logo.bmp $PATH_KERNEL/logo_kernel.bmp $EXTBOOT_DIR/ || true

make INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$EXTBOOT_DIR modules_install

rm -rf $EXTBOOT_IMG && truncate -s $BSP_KERNEL_EXTBOOT_SIZE $EXTBOOT_IMG
fakeroot mkfs.ext4 -Fq -L "boot" -d $EXTBOOT_DIR $EXTBOOT_IMG

cd $PATH_BSP_ROOT
}

function kernel_install(){

cd $PATH_KERNEL

# kernel
# ln -sf $PATH_OUTPUT/$BSP_KERNEL_FINAL_OUTPUT_FILE $PATH_OUTPUT/$BSP_KERNEL_INSTALL_NAME
mv $PATH_KERNEL/$BSP_KERNEL_FINAL_OUTPUT_FILE $PATH_OUTPUT/$BSP_KERNEL_INSTALL_NAME

# modules
rm -rf $PATH_OUTPUT/kernel_modules/*
make modules_install \
-j $HOST_CORE_COUNT \
INSTALL_MOD_STRIP=1 \
INSTALL_MOD_PATH=$PATH_OUTPUT/kernel_modules

cd $PATH_BSP_ROOT
}

function kernel_lazy(){
# task order matters!!!
kernel_build
kernel_extboot_build
# kernel_fit
kernel_install
}

```
424778940
147 天前
处理了一下 env

```shell
#!/bin/bash

# path setup
export PATH_SCRIPTS=$(dirname -- "$( readlink -f -- "$0"; )";)
export PATH_xxx_BSP_ROOT=$(readlink -f -- "$PATH_SCRIPTS/..";)
export PATH_RK_SDK=$PATH_xxx_BSP_ROOT/rk_sdk
export PATH_BOOTLOADER=$PATH_RK_SDK/u-boot
export PATH_KERNEL=$PATH_RK_SDK/kernel
export PATH_BUILDROOT=$PATH_xxx_BSP_ROOT/buildroot-2022.11
export PATH_ROOTFS_OVERLAY=$PATH_xxx_BSP_ROOT/rootfs_overlay
export PATH_SCRIPTS=$PATH_xxx_BSP_ROOT/scripts
export PATH_OUTPUT=$PATH_xxx_BSP_ROOT/output

# magic string for check if this file is sourced
export xxx_BSP="114514"

# build env setup
export HOST_CORE_COUNT=$(nproc)
export ARCH=arm64
# kernel 4.19 is too old to be built with latest GCC, use prebuilt old ones
export CROSS_COMPILE=$PATH_RK_SDK/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
# BSP env setup
export BSP_TARGET_PRODUCT=rk356x

## bootloader

export BSP_BOOTLOADER_USER_CONFIG=/home/localuser/Downloads/ROC-RK3566-PC/rk3566_xxx_bsp/___xxxconfig/rk/bootloader/.config
export BSP_BOOTLOADER_DECONFIG=firefly-rk3568_defconfig
export BSP_BOOTLOADER_DEFCONFIG_FRAGMENT=firefly-rk3566.config
# export BSP_BOOTLOADER_LOADER_FINAL_OUTPUT_FILE=*_loader_*.bin
export BSP_BOOTLOADER_LOADER_INSTALL_NAME=MiniLoaderAll.bin
export BSP_BOOTLOADER_UBOOT_FINAL_OUTPUT_FILE=uboot.img
export BSP_BOOTLOADER_UBOOT_INSTALL_NAME=uboot.img

## kernel
export BSP_KERNEL_USER_CONFIG=/home/localuser/Downloads/ROC-RK3566-PC/rk3566_xxx_bsp/___xxxconfig/rk/kernel/.config
export BSP_KERNEL_DECONFIG=firefly_linux_defconfig
export BSP_KERNEL_DEFCONFIG_FRAGMENT=rk356x_linux.config
export BSP_KERNEL_DTS=rk3566-firefly-roc-pc-mipi101_M101014_BE45_A1
export BSP_KERNEL_ORG_KIMAGE_FILE=arch/$ARCH/boot/Image
# export BSP_KERNEL_BOOT_IMG=extboot.img
export BSP_KERNEL_FIT_ITS=bootramdisk.its
# export BSP_KERNEL_FINAL_OUTPUT_FILE=boot.img.fit
export BSP_KERNEL_FINAL_OUTPUT_FILE=extboot.img
export BSP_KERNEL_INSTALL_NAME=boot.img
### extboot
export BSP_KERNEL_EXTBOOT_SIZE=64M

### BSP_KERNEL_USER_CONFIG must be a vaild path, not just file name

## buildroot
export BSP_BUILDROOT_USER_CONFIG=/home/localuser/Downloads/ROC-RK3566-PC/rk3566_xxx_bsp/___xxxconfig/buildroot/.config
export BSP_BUILDROOT_FINAL_OUTPUT_FILE=rootfs.ext2
export BSP_BUILDROOT_INSTALL_NAME=rootfs.img

## pack image
export BSP_PACKIMG_TOOL_PATH=$PATH_RK_SDK/tools/linux/Linux_Pack_Firmware/rockdev
export BSP_PACKIMG_SCRIPT_FILE=$BSP_PACKIMG_TOOL_PATH/rk356x-mkupdate.sh
export BSP_PACKIMG_AFPTOOL_FILE=$BSP_PACKIMG_TOOL_PATH/afptool
export BSP_PACKIMG_RKIMAGEMAKER_FILE=$BSP_PACKIMG_TOOL_PATH/rkImageMaker
# export BSP_PACKIMG_PACKAGE_FILE=$BSP_PACKIMG_TOOL_PATH/rk356x-package-file
# export BSP_PACKIMG_PARAMETER_FILE=/home/localuser/Downloads/ROC-RK3566-PC/rk3566_xxx_bsp/rk_sdk/device/rockchip/rk356x/parameter-buildroot-fit.txt
export BSP_PACKIMG_PACKAGE_FILE=/home/localuser/Downloads/ROC-RK3566-PC/rk3566_xxx_bsp/___xxxconfig/packimg/rk356x/rk356x-package-file
export BSP_PACKIMG_PARAMETER_FILE=/home/localuser/Downloads/ROC-RK3566-PC/rk3566_xxx_bsp/___xxxconfig/packimg/rk356x/parameter-buildroot-fit.txt
export BSP_PACKIMG_FINAL_OUTPUT_FILE=update.img
export BSP_PACKIMG_INSTALL_NAME=update.img

## flash
export BSP_FLASH_TOOL_PATH=$PATH_RK_SDK/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
export BSP_FLASH_TOOL_FILE=$BSP_FLASH_TOOL_PATH/upgrade_tool
```
freedomforlong
147 天前
@NessajCN 好问题 我还真没注意到 我只是感觉它每次都要差不多一个小时包才能出来 我试试看这里
valord577
146 天前
raxda 有自己的编译脚本

https://github.com/radxa-repo/bsp

不知道你的这个项目拉的内核源码中的 device tree 是否匹配

就算基于现在的编译仓库成功编译了 如果匹配不上 dtb 还是没办法让板子跑起来
kanadeblisst00
145 天前
我下载内核仓库来编译,https://github.com/Joshua-Riek/linux-rockchip ,发现编译完 deb 包安装到系统重启后启动不了了。然后又去编译整个系统,一直从 ppa.launchpad.net 下载东西,一个下午都没下完
kanadeblisst00
144 天前
@freedomforlong 如果只是构建内核的话,都不会走到 213 行,在 177 行执行完./scripts/build-kernel.sh 就停止了,所以应该不是这个原因。
freedomforlong
143 天前
@kanadeblisst00 我也发现了 你现在直接替换 deb 无法启动吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1052944

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX