V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
freedomforlong
V2EX  ›  Linux

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

  •  
  •   freedomforlong · 179 天前 · 2024 次点击
    这是一个创建于 179 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题:我修改 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 条附言  ·  179 天前

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

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

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

    就算基于现在的编译仓库成功编译了 如果匹配不上 dtb 还是没办法让板子跑起来
    kanadeblisst00
        18
    kanadeblisst00  
       177 天前
    我下载内核仓库来编译,https://github.com/Joshua-Riek/linux-rockchip ,发现编译完 deb 包安装到系统重启后启动不了了。然后又去编译整个系统,一直从 ppa.launchpad.net 下载东西,一个下午都没下完
    kanadeblisst00
        19
    kanadeblisst00  
       176 天前
    @freedomforlong 如果只是构建内核的话,都不会走到 213 行,在 177 行执行完./scripts/build-kernel.sh 就停止了,所以应该不是这个原因。
    freedomforlong
        20
    freedomforlong  
    OP
       175 天前 via iPhone
    @kanadeblisst00 我也发现了 你现在直接替换 deb 无法启动吗
    kanadeblisst00
        21
    kanadeblisst00  
       174 天前
    @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
       161 天前
    @kanadeblisst00 非常感谢 这段时间一直没上论坛 有空我试试看
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3148 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:02 · PVG 21:02 · LAX 05:02 · JFK 08:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.