LINUX.ORG.RU

Как заменить стандартный модуль ядра?

 , ,


0

2

Я хочу собрать из исходников и использовать модуль ядра старая версия которого уже имеется в системе. Как мне сделать это правильно? Я не хочу просто делать «make install», потому что это скорее всего просто затрёт текущий модуль и потом будет всё вообще плохо.


Положи в /lib/modules/*/updates/ (емнип) и он получит больший приоритет чем системные модули.

Смотри документацию/исходники kmod.

anonymous
()

Какой дистрибутив? Ты проверял, что собранный модуль затирает штатный?

Вообще такого не должно быть. Если makefile в исходниках модуля есть и написан нормально (а написать ненормально, ИМХО, в этом случае сложновато), то модуль должен положиться в /lib/modules/$(uname -r)/updates/, а не затирать старую версию. И затем после depmod -a загружаться будет уже версия из updates, поскольку у этой директории приоритет выше (см. man depmod.d).

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

Дистрибутив Ubuntu LTS последний. К сожалению он точно затирает старую версию, но делает бекап старых файлов и можно откатить командой make uninstall. Наверное я буду тем человеком, который сделает адекватный Makefile и попробует пропихнуть его в репозиторий.

chuppa
() автор топика
Ответ на: комментарий от chuppa

он точно затирает старую версию

как это проверялось?

А мэйкфайл вообще есть у этого модуля? Если есть, можешь выложить куда-нибудь?

Kiborg ★★★
()
Последнее исправление: Kiborg (всего исправлений: 1)
Ответ на: комментарий от chuppa

Ну так что ж молчал-то, сразу надо было ссылку давать, я думал у тебя какой-то проприетарный драйвер. А зачем вообще надо менять ядерный модуль, если не секрет? Что-то не работает?

Тот мэйкфайл какой-то странный.. Вообще он на самом деле не нужен, ты можешь сделать свой Makefile:

EXTRA_CFLAGS += -O2
obj-m := rtlwifi.o
rtlwifi-objs	:=	\
		base.o	\
		cam.o	\
		core.o	\
		debug.o	\
		efuse.o	\
		ps.o	\
		rc.o	\
		regd.o	\
		stats.o

obj-m	+= rtl_pci.o
rtl_pci-objs	:=		pci.o

obj-m	+= rtl_usb.o
rtl_usb-objs	:=		usb.o

obj-m	+= btcoexist/
obj-m	+= rtl8188ee/
obj-m	+= rtl8192c/
obj-m	+= rtl8192ce/
obj-m	+= rtl8192cu/
obj-m	+= rtl8192de/
obj-m	+= rtl8192ee/
obj-m	+= rtl8192se/
obj-m	+= rtl8723ae/
obj-m	+= rtl8723be/
obj-m	+= rtl8821ae/

ccflags-y += -D__CHECK_ENDIAN__

и затем выполнить команды:

$ make -C "/lib/modules/$(uname -r)/build" M=$(pwd) modules
$ sudo make -C "/lib/modules/$(uname -r)/build" M=$(pwd) modules_install

и по идее после этого всё должно установиться так, как это должно быть установлено для убунты. Проверять мне лично лень, но если что, всегда можно запустить make с флагом --dry-run (-n), чтобы посмотреть, что будет сделано. Возможно, после этого еще нужно будет сделать «depmod -a».

Ах, да, там еще firmware надо будет скопировать. Но все-таки сначала хочется понять, чем же не устраивает штатный модуль ядра? Если убунта последняя, там же уже 4.2 по-моему, достаточно свежее ядро.

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

Да слабый сигнал всему виной. Какая то проблема с выбором антенны в драйвере, чип RTL8723BE. Ну и в этом репозитории есть ветка, где это поникшено, приделали параметр для указывания антенны, у меня всё заработало, сигнал отличный. Спасибо за описание, буду пробовать :)

chuppa
() автор топика
Ответ на: комментарий от Kiborg

Если кому будет полезно, ветка - rock.br_coex

chuppa
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.