在支持的内核与编译器下无法启用Intel MPX问题求助
Intel MPX 无法在 Ubuntu 20.04 工作的排查与解决
前置检查
1. 确认 CPU 硬件支持
运行以下命令检查 CPU 是否启用了 MPX 特性:
grep mpx /proc/cpuinfo
如果输出包含 mpx 字段,说明 CPU 硬件支持;如果无输出,需进入服务器 BIOS,找到「Intel Memory Protection Extensions」相关选项并启用,重启后再次检查。
2. 检查内核 MPX 配置
运行以下命令查看当前内核是否开启了 MPX 支持:
zcat /proc/config.gz | grep CONFIG_X86_MPX
若输出为 # CONFIG_X86_MPX is not set,说明内核未启用 MPX 模块,这是导致测试失败的核心原因,需重新编译内核开启该选项。
重新编译 Ubuntu 内核启用 MPX
1. 安装编译依赖
sudo apt update && sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev
2. 获取对应版本内核源码
apt source linux-image-$(uname -r) cd linux-$(uname -r | cut -d'-' -f1)
3. 导入当前内核配置
cp /boot/config-$(uname -r) .config
4. 修改内核配置启用 MPX
运行配置界面:
make menuconfig
在界面中导航到:Processor type and features → Intel Memory Protection Extensions (MPX)
按 Y 选中该选项,然后按 ESC 退出,选择保存配置。
5. 编译并安装内核
# 用全部 CPU 核心加速编译 make -j$(nproc) # 安装内核模块 sudo make modules_install # 安装内核 sudo make install # 更新 GRUB 引导 sudo update-grub
6. 重启系统
sudo reboot
验证修复效果
重启后再次检查内核配置:
zcat /proc/config.gz | grep CONFIG_X86_MPX
应输出 CONFIG_X86_MPX=y。此时重新运行 mpxcheck 的测试脚本或你的 prctl 测试程序,PR_MPX_ENABLE_MANAGEMENT 调用应返回 0(成功)。
额外注意
编译 MPX 相关业务代码时,需给 GCC 添加 -fmpx 参数,例如:
gcc-6 -fmpx your_mpx_code.c -o your_mpx_code
内容的提问来源于stack exchange,提问作者pjl
相关产品推荐
相关产品推荐

