//version 1 !!!DRAFT!!!

Пересборка модуля acm.o

На этой странице приведена последовательность действий для сборки модуля ядра acm.o. Возможно, она неоптимальна, или, даже неправильна. Но в результате модуль был собран и успешно работает.


1) Установить пакет с исходниками ядра
#rpm -ivh kernel-source-2.4.18-14.i386.rpm
2)Перейти в каталог с исходниками (далее все действия в нем)
#cd /usr/src/linux-2.4.18-14
3)открыть файл drivers/usb/acm.c и добавить в массив usb_device_id acm_ids элемент USB_DEVICE_INFO(USB_CLASS_COMM, 2, 0)
#vim drivers/usb/acm.c

До редактирования
/*
* USB driver structure.
*/
static struct usb_device_id acm_ids[] = {
{ USB_DEVICE_INFO(USB_CLASS_COMM, 0, 0) },
{ }
};

После редактирования:
/*
* USB driver structure.
*/
static struct usb_device_id acm_ids[] = {
{ USB_DEVICE_INFO(USB_CLASS_COMM, 0, 0) },
{ USB_DEVICE_INFO(USB_CLASS_COMM, 2, 0) },
{ }
};

3)Собрать ядро
Note:
Не нужно устанавливать полученное ядро - оно собирается только для того, чтобы обновить модуль acm.o. Может быть, пересобрать один единственный модуль можно проще, но я не знаю как:)


3.1)
Скопировать конфигурацию своего ядра
#cp configs/kernel-2.4.18-i686.config .config

3.2)
#make clean; make mrproper

3.3)
Задать значение EXTRAVERSION для версии ядра - оно должно совпадать с соответсвующим значением ядра системы(ядро не предназначено для установки!):
#uname -r
2.4.18-14
т.е. EXTRAVERSION для моего ядра - "-14"
#vim Makefile

До редактирования
EXTRAVERSION = -14custom

После редактирования:
EXTRAVERSION = -14

Note: шаг 3.3) можно пропустить, но в этом случае, скорее всего, версия установленного в системе ядра не будет совпадать с версией, прописанной в модуле В этом случае модуль можно будет загрузить только с опцией -f : /sbin/insmod -f acm


3.4)
#make oldconfig
#make dep
#make bzImage
#make modules

Note: можно не дожидаться, пока соберутся все модули и остановить процесс сборки модулей как только появится файл drivers/usb/acm.o

4) Заменить модуль
#cp /lib/modules/2.4.18-14/kernel/drivers/usb/acm.o /lib/modules/2.4.18-14/kernel/drivers/usb/acm.old
#cp drivers/usb/acm.o /lib/modules/2.4.18-14/kernel/drivers/usb/acm.o

5)Проверить модуль

вывести системный лог в другом терминале
#tail -f /var/log/messages
Загрузить драйвер
#/sbin/modprobe acm

В логе должно появиться сообщение от драйвера:
Apr 12 19:11:53 localhost kernel: usb.c: registered new driver acm
Apr 12 19:11:53 localhost kernel: acm.c: v0.21:USB Abstract Control Model driver for USB modems and ISDN adapters(supports Motorola Phones)

Note: Строчка "(supports Motorola Phones)" была добавлена на шаге 3 в файл drivers/usb/acm.c:
#define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters(supports Motorola Phones)"

6) Если не используется devfs, создать файл устройства:
#mknod /dev/ttyACM0 c 166 0

Thanks:
http://www.tldp.org/HOWTO/Kernel-HOWTO.html
http://www.tldp.org/HOWTO/Kernel-HOWTO-2.html
http://www.eridani.co.uk/docs/linux-timeport/T280.shtml
http://dur.ch/konfiguriert/c333/
http://www.nother.net/120c/






Last updated on 04-05-2003 by Davidenko Vitaly
Please send any comments to dvtl at pisem dot net







 
почта