raspberry pi 内核交叉编译缺少配置选项?
raspberry pi kernel cross compile missing config options?
我从我的 x86(ubuntu 容器 docker)交叉编译一个 RPI3 32 位内核,当我试图禁用一些变量时(在我的例子中,例如 L2 缓存或分支预测)我找不到任何东西(通过搜索)。在 RPI 本身上,menuconfig 在“系统类型”中显示了这些设置,但这个菜单甚至不存在。
我关注了the official RPI kernel build guide
sudo apt install crossbuild-essential-armhf
git clone --depth=1 https://github.com/raspberrypi/linux
export KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig
make menuconfig
我希望找到的是:
CPU_ICACHE_DISABLE
CPU_DCACHE_DISABLE
禁用分支预测
更新:
对于更简单的 make 命令,我设置了一些环境变量
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export MAKEFLAGS=j4
然后当 运行 make defconfig
(默认配置基于 'multi_v7_defconfig')时,结果 make menuconfig
比我预期的要多得多。
还需要验证,正在建设中
不知道为什么,但我可以看到菜单和变量。甚至删除了 linux 文件夹,重新开始。
这里是命令 运行:
sudo mount /dev/mmcblk0p1 /mnt/fat32
sudo mount /dev/mmcblk0p2 /mnt/ext4
cd linux
export KERNEL=kernel7 && export ARCH=arm && export CROSS_COMPILE=arm-linux-gnueabihf- && export MAKEFLAGS=j4 && export INSTALL_MOD_PATH=mnt/ext4
make bcm2709_defconfig
make menuconfig
time make zImage modules dtbs
env PATH=$PATH make modules_install
cp arch/arm/boot/zImage /mnt/fat32/kernel_cross.img
cp arch/arm/boot/dts/*.dtb /mnt/fat32/
cp arch/arm/boot/dts/overlays/*.dtb* /mnt/fat32/overlays/
cp arch/arm/boot/dts/overlays/README /mnt/fat32/overlays/
exit
sudo umount /mnt/ext4
sudo umount /mnt/fat32
将 SD 卡移至 RPI 并启动。 (uname -a 显示新的编译时间,禁用时没有 SMP)
如果有人感兴趣,docker 的旁注。我 运行 a ubuntu docker 将两个挂载的分区都作为共享文件夹。
sudo mount /dev/mmcblk0p1 /mnt/fat32
sudo mount /dev/mmcblk0p2 /mnt/ext4
docker run -it ubuntu -v /mnt/fat32/:/mnt/fat32 -v /mnt/ext4/:/mnt/ext4 /bin/bash
我从我的 x86(ubuntu 容器 docker)交叉编译一个 RPI3 32 位内核,当我试图禁用一些变量时(在我的例子中,例如 L2 缓存或分支预测)我找不到任何东西(通过搜索)。在 RPI 本身上,menuconfig 在“系统类型”中显示了这些设置,但这个菜单甚至不存在。
我关注了the official RPI kernel build guide
sudo apt install crossbuild-essential-armhf
git clone --depth=1 https://github.com/raspberrypi/linux
export KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig
make menuconfig
我希望找到的是:
CPU_ICACHE_DISABLE
CPU_DCACHE_DISABLE
禁用分支预测
更新:
对于更简单的 make 命令,我设置了一些环境变量
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export MAKEFLAGS=j4
然后当 运行 make defconfig
(默认配置基于 'multi_v7_defconfig')时,结果 make menuconfig
比我预期的要多得多。
还需要验证,正在建设中
不知道为什么,但我可以看到菜单和变量。甚至删除了 linux 文件夹,重新开始。
这里是命令 运行:
sudo mount /dev/mmcblk0p1 /mnt/fat32
sudo mount /dev/mmcblk0p2 /mnt/ext4
cd linux
export KERNEL=kernel7 && export ARCH=arm && export CROSS_COMPILE=arm-linux-gnueabihf- && export MAKEFLAGS=j4 && export INSTALL_MOD_PATH=mnt/ext4
make bcm2709_defconfig
make menuconfig
time make zImage modules dtbs
env PATH=$PATH make modules_install
cp arch/arm/boot/zImage /mnt/fat32/kernel_cross.img
cp arch/arm/boot/dts/*.dtb /mnt/fat32/
cp arch/arm/boot/dts/overlays/*.dtb* /mnt/fat32/overlays/
cp arch/arm/boot/dts/overlays/README /mnt/fat32/overlays/
exit
sudo umount /mnt/ext4
sudo umount /mnt/fat32
将 SD 卡移至 RPI 并启动。 (uname -a 显示新的编译时间,禁用时没有 SMP)
如果有人感兴趣,docker 的旁注。我 运行 a ubuntu docker 将两个挂载的分区都作为共享文件夹。
sudo mount /dev/mmcblk0p1 /mnt/fat32
sudo mount /dev/mmcblk0p2 /mnt/ext4
docker run -it ubuntu -v /mnt/fat32/:/mnt/fat32 -v /mnt/ext4/:/mnt/ext4 /bin/bash