![При компиляции ядра из исходников произошла фатальная ошибка: слишком мало аргументов для функции 'part_round_stats'](https://rvso.com/image/178475/%D0%9F%D1%80%D0%B8%20%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D0%B8%20%D1%8F%D0%B4%D1%80%D0%B0%20%D0%B8%D0%B7%20%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2%20%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%BE%D1%88%D0%BB%D0%B0%20%D1%84%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%3A%20%D1%81%D0%BB%D0%B8%D1%88%D0%BA%D0%BE%D0%BC%20%D0%BC%D0%B0%D0%BB%D0%BE%20%D0%B0%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2%20%D0%B4%D0%BB%D1%8F%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8%20'part_round_stats'.png)
Я пытаюсь скомпилировать ядро из исходников на системе CentOS 7.
Вывод uname -a
:
Linux dbn03 3.10.0-957.el7.x86_64 #1 SMP Thu Oct 4 20:48:51 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Вот как я загружаю исходный код и компилирую его:
wget "http://vault.centos.org/7.6.1810/os/Source/SPackages/kernel-3.10.0-957.el7.src.rpm"
rpm2cpio ./kernel-3.10.0-957.el7.src.rpm | cpio -idmv
make menuconfig
Device Drivers
->Multiple devices driver support (RAID and LVM)
-><*> Block device as cache
make bzImage
make modules
Как видите, я только что попытался скомпилировать ядро с модулем BCACHE. Однако, когда я выполнил команды выше, я получил следующую ошибку:
drivers/md/bcache/request.c:675:3: warning: passing argument 2 of ‘part_round_stats’ makes integer from pointer without a cast [enabled by default]
part_round_stats(cpu, &s->d->disk->part0);
^
In file included from include/linux/blkdev.h:9:0,
from include/linux/blktrace_api.h:4,
from drivers/md/bcache/bcache.h:181,
from drivers/md/bcache/request.c:9:
include/linux/genhd.h:408:13: note: expected ‘int’ but argument is of type ‘struct hd_struct *’
extern void part_round_stats(struct request_queue *q, int cpu, struct hd_struct *part);
^
drivers/md/bcache/request.c:675:3: error: too few arguments to function ‘part_round_stats’
part_round_stats(cpu, &s->d->disk->part0);
^
In file included from include/linux/blkdev.h:9:0,
from include/linux/blktrace_api.h:4,
from drivers/md/bcache/bcache.h:181,
from drivers/md/bcache/request.c:9:
include/linux/genhd.h:408:13: note: declared here
extern void part_round_stats(struct request_queue *q, int cpu, struct hd_struct *part);
Кажется, я получил предупреждение и ошибку.
Думаю, я могу проигнорировать предупреждение, но ошибка фатальная. В заголовке функции part_round_stats
объявлено, что необходимы три параметра, тогда как в файле drivers/md/bcache/request.c
функции передаются только два параметра part_round_stats
.
Я пытался найти ответ на этот вопрос в Google, но ничего не нашел.
Так что за проблема у меня тут? Это ошибка исходного кода Linux? (Я так не думаю...), или это какая-то проблема версий? Или загруженный исходный код не поддерживает модуль BCACHE и разработчик ядра оставил фатальную ошибку?
решение1
Попробуйте вместо этого следующее:
rpm -ivh kernel-3.10.0-957.el7.src.rpm
cd ~/rpmbuild/SOURCES
rpmbuild -bp kernel.spec
cd ~/rpmbuild/BUILD/kernel-3.10.0-957.el7/linux-3.10.0-957.fc32.x86_64
make menuconfig
make bzImage
make modules