24 декабря 2012 г.

Сборка модуля для установленного ядра Linux

Бывают ситуации, когда баги не дают жить/работать, а превращать дистрибутив в LFS желания нету. Так случилось и со мной. Баг в модуле cp210x ядра Scientific Linux 6.3 не позволяет использовать микросхему CP2102 для работы с rl78flash. Суть в том, что в модуле инвертированы дефайны, отвечающие за установку и сброс сигнала BREAK. В более поздней версии этот баг исправлен, но когда RHEL-совместимый дистрибутив дорастёт до нужной версии -- неизвестно.

Так как баг тривиальный, ничто нам не мешает пересобрать злополучный модуль без оного и наслаждаться жизнью.
Нам понадобится исходник модуля (где его брать думаю понятно -- из srpm-а вестимо), патч и компилятор. Единственное что надо будет набрать/скопировать -- это Makefile:
obj-m = cp210x.o
KPATH = /lib/modules/$(shell uname -r)
all:
  make -C $(KPATH)/build M=$(PWD) modules
  strip --strip-debug $(obj-m:.o=.ko)
clean:
  make -C $(KPATH)/build M=$(PWD) clean

Ну а дальше собрать модуль, скопировать в нужное место (сохранив исходный модуль на всякий случай) и проверить:
make clean
make
sudo cp -b ./cp210x.ko \
/lib/modules/$(uname -r)/kernel/drivers/usb/serial/

Единственное но: придётся повторять эту процедуру после каждого обновления ядра. И так до тех самых пор, пока ваш отчёт в багзилле не возымеет должного эффекта.

Комментариев нет:

Отправить комментарий