我从我的 x86(docker 上的 ubuntu 容器)交叉编译了一个 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
比我预期的要多得多。
我仍然需要验证,现在正在构建。
答案 0 :(得分:0)
不知道为什么,但我可以看到菜单和变量。甚至删除了 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 的旁注。我运行一个 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