求熟悉 Linux 内核编译的小伙伴指导以下 rock5b plus 板子的 Linux 内核编译问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
freedomforlong
V2EX    Linux
h1>求熟悉 Linux 内核编译的小伙伴指导以下 rock5b plus 板子的 Linux 内核编译问题
  •  
  •   freedomforlong 2024-06-27 05:38:02 +08:00 3084 次点击
    这是一个创建于 549 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题:我修改 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 条附言    2024-06-27 16:15:21 +08:00

    不要嫌我嗦,我是小白,说多点是因为怕别人提出来是无效回复 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/这个目录下其实是有一大堆配置的,我也没搞清楚到底怎么在编译脚本指定他用哪个配置

    22 条回复    2024-07-15 10:46:54 +08:00
    foool
        1
    foool  
       2024-06-27 08:55:24 +08:00
    你想问为什么自己修改了内核配置 config 文件,但编译的时候似乎没有按照你修改的配置 config 文件进行内核编译,但你应该学习下如何提问,不要在问题中掺杂太多无关记录和没有先验知识的描述。
    NoobPhper
        2
    NoobPhper  
       2024-06-27 08:58:37 +08:00
    看了遍好累 , 貌似问题是 重新编译内核。在 config 里 打开 ebpf 但是编译不生效是吧, 你把你改前的 改后的 diff 下 发出来看看
    AFOX
        3
    AFOX  
       2024-06-27 08:59:06 +08:00
    改错了吧,rock5b 有自己的 config 文件,不是 rockchip 的
    AFOX
        4
    AFOX  
       2024-06-27 09:05:06 +08:00
    @AFOX 刚看了,好像没错,抱歉
    diivL
        5
    diivL  
       2024-06-27 09:10:15 +08:00
    set -x
    V=1
    strace -e trace=openat
    zzxx3322
        6
    zzxx3322  
       2024-06-27 09:18:05 +08:00 via Android
    直接修改 build 目录下的.config 内容,然后 make menuconfig 进图形化界面检查你的开关是否正常开启,确认没问题了再编译测试,持久化保存.config 的修改将.config 复制到另外一个地方存起来
    NessajCN
        7
    NessajCN  
       2024-06-27 09:38:41 +08:00
    你是不是之前编译完了原版以后没把生成的 build 目录删掉?
    看脚本里如果 build/linux-image-*.deb 存在就不编译直接拿现成的打包
    https://github.com/Joshua-Riek/ubuntu-rockchip/blob/main/build.sh
    213 行
    PTLin
        8
    PTLin  
       2024-06-27 10:42:15 +08:00
    感觉根本没用可还行,起码 zcat /proc/config.gz 然后 grep 下看看有没有对应选项吧。
    feather12315
        9
    feather12315  
       2024-06-27 10:58:06 +08:00
    我看懂 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
        10
    feather12315  
       2024-06-27 10:58:44 +08:00
    @feather12315 #9
    你可以在第 2 步后 grep 下有没有 BPF 选项
    424778940
        11
    424778940  
       2024-06-27 12:16:12 +08:00
    rk 那个框架我记得是最外出脚本编译会覆盖你 menuconfig 配置过的.config 的
    当时也被这个恶心了很久
    freedomforlong
        12
    freedomforlong  
    OP
       2024-06-27 15:17:18 +08:00 via iPhone
    @424778940 所以这里需要怎么调整编译配置让他生效呢
    freedomforlong
        13
    freedomforlong  
    OP
       2024-06-27 15:18:11 +08:00 via iPhone
    @zzxx3322 build 中不能存在.config 存在编译直接就会报错
    424778940
        14
    424778940  
       2024-06-27 16:04:46 +08:00
    @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
        15
    424778940  
       2024-06-27 16:10:09 +08:00
    处理了一下 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
        16
    freedomforlong  
    OP
       2024-06-27 18:54:00 +08:00 via iPhone
    @NessajCN 好问题 我还真没注意到 我只是感觉它每次都要差不多一个小时包才能出来 我试试看这里
    valord577
        17
    valord577  
       2024-06-28 11:34:46 +08:00
    raxda 有自己的编译脚本

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

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

    就算基于现在的编译仓库成功编译了 如果匹配不上 dtb 还是没办法让板子跑起来
    kanadeblisst00
        18
    kanadeblisst00  
       2024-06-29 17:02:36 +08:00
    我下载内核仓库来编译,https://github.com/Joshua-Riek/linux-rockchip ,发现编译完 deb 包安装到系统重启后启动不了了。然后又去编译整个系统,一直从 ppa.launchpad.net 下载东西,一个下午都没下完
    kanadeblisst00
        19
    kanadeblisst00  
       2024-06-30 18:50:15 +08:00
    @freedomforlong 如果只是构建内核的话,都不会走到 213 行,在 177 行执行完./scripts/build-kernel.sh 就停止了,所以应该不是这个原因。
    freedomforlong
        20
    freedomforlong  
    OP
       2024-07-01 06:26:35 +08:00 via iPhone
    @kanadeblisst00 我也发现了 你现在直接替换 deb 无法启动吗
    kanadeblisst00
        21
    kanadeblisst00  
       2024-07-02 10:04:57 +08:00
    @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

    所以你修改这三个文件里的任何一个都可以
    freedomforlong
        22
    freedomforlong  
    OP
       2024-07-15 10:46:54 +08:00
    @kanadeblisst00 非常感谢 这段时间一直没上论坛 有空我试试看
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2623 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 06:46 PVG 14:46 LAX 22:46 JFK 01:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86