Необходимо сначала отключить все ядра процессора, кроме загрузочного, после, соответственно, включить.
Подозреваю, что это можно сделать функциями:
Сразу для всех:
int disable_nonboot_cpus(void);
void enable_nonboot_cpus(void);
int cpu_down(unsigned int cpu);
int cpu_up(unsigned int cpu);
Последнии используются при записи 0/1 в /sys/devices/system/cpu/cpu#/online.
Проблема заключается в том, что при попытке скомпилировать следующий тестовый модуль, появляются warning' и, из-за которых я не могу его загрузить в ядро:
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/cpu.h>
static int __init
init( void )
{
return disable_nonboot_cpus();
}
static void __exit
uninit( void )
{
enable_nonboot_cpus();
}
module_init( init );
module_exit( uninit );
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("TEST");
make -C /lib/modules/2.6.33.5-124.relkin.fc13.x86_64/build M=/home/relkin/modules modules
make[1]: Entering directory `/usr/src/kernels/2.6.33.5-124.relkin.fc13.x86_64'
CC [M] /home/relkin/modules/test.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "disable_nonboot_cpus" [/home/relkin/modules/test.ko] undefined!
WARNING: "enable_nonboot_cpus" [/home/relkin/modules/test.ko] undefined!
CC /home/relkin/modules/test.mod.o
LD [M] /home/relkin/modules/test.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.33.5-124.relkin.fc13.x86_64'
Ядро собрано в нужной конфигурации.
Если использовать отдельно функцию cpu_down, то всё работает, но если в модуле есть cpu_up, то опять появляется warning.
Мне кажется, что дело может быть в объявлениях __cpuinit или __ref, но точно я не знаю, т. к. не знаю зачем они нужны.