редактировать: Я превратил ответ христиан в сценарий, который делает все автоматически: https://github.com/frans-fuerst/magic/blob/master/fedora-activate-can.sh
Мне нужны некоторые модули ядра, которые доступны в исходном коде Linux, но деактивированы в Fedora 20, и мне интересно, как сделать их доступными проще и быстрее всего. (а именно, поддержка net / CAN, приводящая к некоторым модулям can_ *)
Я уже следил этот HowTo (и есть еще много очень похожих), но "построить только модуль"раздел, кажется, работает только для модулей, которые не были отключены, потому что в этом случае даже исходники модулей отсутствуют.
Вот что я пробовал после упомянутого Как:
Сначала я попытался следовать Модули вне дерева раздел, но в этом чертовом дереве исходных текстов kernel-devel
даже источники для поддержки CAN отсутствуют. Поэтому я пытаюсь собрать модули из src.rpm:
$ yumdownloader --source kernel
$ sudo yum-builddep kernel-3.14.8-200.fc20.src.rpm
$ rpm -Uvh kernel-3.14.8-200.fc20.src.rpm
$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp --target=$(uname -m) kernel.special
$ cd ~/rpmbuild/BUILD/<kerneldir>/<linuxdir>
$ <configure the kernel using menuconfig>
$ make prepare
Затем я собираю и получаю предупреждения:
$ make -C /lib/modules/`uname -r`/build M=`pwd`/net/can modules
make: Entering directory `<rpmbuild-BUILD-kernel-linux-dir>'
WARNING: Symbol version dump <rpmbuild-BUILD-kernel-linux-dir>/Module.symvers
is missing; modules will have no dependencies and modversions.
CC [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/bcm.o
CC [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/gw.o
CC [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/raw.o
CC [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/af_can.o
CC [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/proc.o
LD [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.o
LD [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.o
LD [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.o
LD [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.o
Building modules, stage 2.
MODPOST 4 modules
CC <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.mod.o
LD [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.ko
CC <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.mod.o
LD [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.ko
CC <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.mod.o
LD [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.ko
CC <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.mod.o
LD [M] <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.ko
make: Leaving directory `<rpmbuild-BUILD-kernel-linux-dir>'
$ sudo make -C /lib/modules/`uname -r`/build M=`pwd`/net/can modules_install
make: Entering directory `<rpmbuild-BUILD-kernel-linux-dir>'
INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-bcm.ko
Can't read private key
INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-gw.ko
Can't read private key
INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can-raw.ko
Can't read private key
INSTALL <rpmbuild-BUILD-kernel-linux-dir>/net/can/can.ko
Can't read private key
DEPMOD 3.14.8
make: Leaving directory `<rpmbuild-BUILD-kernel-linux-dir>'
Я не получаю первое предупреждение, когда просто бегу make modules
но это стоит мне около часа.
Однако после установки .ko
файлы находятся не в том каталоге (/usr/lib/modules/3.14.8
скорее, чем /usr/lib/modules/3.14.8-200.fc20.x86_64
) и после depmod -a
и modprobe can
я получил
modprobe: ERROR: could not insert 'can': Exec format error
Что я делаю не так?
Думаю, у меня получилось, хотя, наверное, далеко не идеально.
Подготовьте исходный код, запустив
rpmbuild -bp --target=$(uname -m) kernel.spec
Перейдите в каталог сборки, например:
cd ~/rpmbuild/BUILD/kernel-3.14.fc20/linux-3.14.8-200.fc20.x86_64
редактировать Makefile
и установить EXTRAVERSION
примерно так:
EXTRAVERSION = -200.fc20.x86_64
Включите модули. Я предлагаю начать с соответствующего файла под configs
каталог (я использовал kernel-3.14.8-x86_64.config
).
Подготовьте ядро к модулям:
make modules_prepare
Соберите модуль:
make M=drivers/net/can
Прибыль! Вставьте модуль:
insmod can-dev.ko
Для полноты картины ниже представлен полный список шагов, необходимых для того, чтобы сделать доступными модули CAN (или любой другой модуль), которые были отключены в Fedora (удаление исходных кодов, поэтому простое использование подхода kernel-devel не делает этого. ).
Эта процедура может быть не идеальной, но она работает для меня и позволяет peak_usb
и vcan
а также базовые модули CAN на Fedora.
Улучшения приветствуются и будут отмечены, поскольку мне придется делать это очень часто.
вы можете обновить ядро прямо сейчас, чтобы не делать это дважды
sudo yum update
reboot
подготовить, получить и установить дерево исходного кода ядра Fedora
rpmdev-setuptree
yumdownloader --source kernel
sudo yum-builddep kernel-3.14.8-200.fc20.src.rpm
rpm -Uvh kernel-3.14.8-200.fc20.src.rpm
cd ~/rpmbuild/SPECS
rpmbuild -bp --target=$(uname -m) kernel.spec
редактировать Makefile
и установить EXTRAVERSION
примерно так:
cd ~/rpmbuild/BUILD/kernel-3.14.fc20/linux-3.14.8-200.fc20.x86_64
EXTRAVERSION = -200.fc20.x86_64
Настройте ядро, сначала загрузив базовую конфигурацию, например
cp /boot/config-3.14.8-200.fc20.x86_64 .config
или
cp configs/kernel-3.14.8-x86_64.config .config
и настройте его, активировав необходимые модули, например
make menuconfig
Соберите модули
make modules_prepare
make M=net/can modules
make M=drivers/net/can modules
Установить и загрузить
sudo make M=net/can modules_install
sudo make M=drivers/net/can modules_install
sudo depmod -a
sudo modprobe can