问题:我修改 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
不要嫌我啰嗦,我是小白,说多点是因为怕别人提出来是无效回复 1、已经修改了编译脚本,保证不会拉最新的代码下来覆盖配置 2、build目录下不能放.config 放了编译直接就报错了 3、我现在是先将linux-rockchip/arch/arm64/configs/rockchip_linux_defconfig保存到build目录下.config 然后通过scripts/config --enable 设置标志位,最后通过 下面的命令回写回刚才读出的配置
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 savedefconfig
cp defconfig arch/arm64/configs/rockchip_linux_defconfig
现在我的疑问就是,编译可能根本就没用到rockchip_linux_defconfig这个配置,在linux-rockchip/arch/arm64/configs/这个目录下其实是有一大堆配置的,我也没搞清楚到底怎么在编译脚本指定他用哪个配置
1
foool 140 天前
你想问为什么自己修改了内核配置 config 文件,但编译的时候似乎没有按照你修改的配置 config 文件进行内核编译,但你应该学习下如何提问,不要在问题中掺杂太多无关记录和没有先验知识的描述。
|
2
NoobPhper 140 天前
看了遍好累 , 貌似问题是 重新编译内核。在 config 里 打开 ebpf 但是编译不生效是吧, 你把你改前的 改后的 diff 下 发出来看看
|
3
AFOX 140 天前
改错了吧,rock5b 有自己的 config 文件,不是 rockchip 的
|
5
diivL 140 天前
set -x
V=1 strace -e trace=openat |
6
zzxx3322 140 天前 via Android
直接修改 build 目录下的.config 内容,然后 make menuconfig 进图形化界面检查你的开关是否正常开启,确认没问题了再编译测试,持久化保存.config 的修改将.config 复制到另外一个地方存起来
|
7
NessajCN 140 天前
你是不是之前编译完了原版以后没把生成的 build 目录删掉?
看脚本里如果 build/linux-image-*.deb 存在就不编译直接拿现成的打包 https://github.com/Joshua-Riek/ubuntu-rockchip/blob/main/build.sh 213 行 |
8
PTLin 140 天前
感觉根本没用可还行,起码 zcat /proc/config.gz 然后 grep 下看看有没有对应选项吧。
|
9
feather12315 140 天前
我看懂 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 ` |
10
feather12315 140 天前
@feather12315 #9
你可以在第 2 步后 grep 下有没有 BPF 选项 |
11
424778940 140 天前
rk 那个框架我记得是最外出脚本编译会覆盖你 menuconfig 配置过的.config 的
当时也被这个恶心了很久 |
12
freedomforlong OP @424778940 所以这里需要怎么调整编译配置让他生效呢
|
13
freedomforlong OP @zzxx3322 build 中不能存在.config 存在编译直接就会报错
|
14
424778940 140 天前
@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 } ``` |
15
424778940 140 天前
处理了一下 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 ``` |
16
freedomforlong OP @NessajCN 好问题 我还真没注意到 我只是感觉它每次都要差不多一个小时包才能出来 我试试看这里
|
17
valord577 139 天前
raxda 有自己的编译脚本
https://github.com/radxa-repo/bsp 不知道你的这个项目拉的内核源码中的 device tree 是否匹配 就算基于现在的编译仓库成功编译了 如果匹配不上 dtb 还是没办法让板子跑起来 |
18
kanadeblisst00 138 天前
我下载内核仓库来编译,https://github.com/Joshua-Riek/linux-rockchip ,发现编译完 deb 包安装到系统重启后启动不了了。然后又去编译整个系统,一直从 ppa.launchpad.net 下载东西,一个下午都没下完
|
19
kanadeblisst00 137 天前
@freedomforlong 如果只是构建内核的话,都不会走到 213 行,在 177 行执行完./scripts/build-kernel.sh 就停止了,所以应该不是这个原因。
|
20
freedomforlong OP @kanadeblisst00 我也发现了 你现在直接替换 deb 无法启动吗
|
21
kanadeblisst00 135 天前
@freedomforlong 现在可以了,之前弄错了。我自己看了编译的脚本,rockchip_linux_defconfig 这个文件确实是没用到,真正生成内核配置文件的是 linux-rockchip/debian/rules.d/2-binary-arch.mk 里的第 30 行,也就是用下面三个文件组合的
linux-rockchip/debian.rockchip/config/config.common.ubuntu linux-rockchip/debian.rockchip/config/arm64/config.common.arm64 linux-rockchip/debian.rockchip/config/arm64/config.flavour.rockchip 所以你修改这三个文件里的任何一个都可以 |
22
freedomforlong OP @kanadeblisst00 非常感谢 这段时间一直没上论坛 有空我试试看
|