Настройка ядра для работы с мультипортовой платой Advantech PCI-1620B

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску

Сразу скажу, что настраивал работы только этой платы, про остальные ничего сказать не могу.

Изменение файла 8250_pci.c

1. Распаковываем выкаченное ядро в папку /usr/src
2. Для работы этой платы нужно изменить файл /usr/src/linux*/drivers/serial/8250_pci.c
Открываем этот файл ищем строку

#include "8250.h"

Далее добавляем

/*
 * Advantech IAG PCI-954/16C950 cards
 *
 */
#define ADVANTECH_16C950_VER                    "3.12"
#define ADVANTECH_16C950_DATE                   "7/20/2005"
#define PCI_VENDOR_ID_ADVANTECH                 0x13fe
#define PCI_DEVICE_ID_ADVANTECH_PCI1600         0x1600 /* Internal */
#define PCI_DEVICE_ID_ADVANTECH_PCI1601         0x1601 /* Internal */
#define PCI_DEVICE_ID_ADVANTECH_PCI1602         0x1602 /* Internal */
#define PCI_DEVICE_ID_ADVANTECH_PCI1603         0x1603 /* Internal */
#define PCI_DEVICE_ID_ADVANTECH_PCI1604         0x1604 /* Internal */
#define PCI_DEVICE_ID_ADVANTECH_PCI16ff         0x16ff /* External */
#define PCI_DEVICE_ID_ADVANTECH_PCI1600_1601    0x1601
#define PCI_DEVICE_ID_ADVANTECH_PCI1600_1602    0x1602
#define PCI_DEVICE_ID_ADVANTECH_PCI1600_1610    0x1610
#define PCI_DEVICE_ID_ADVANTECH_PCI1600_1612    0x1612 /* Also for UNO-2059 */
#define PCI_DEVICE_ID_ADVANTECH_PCI1600_1620    0x1620
#define PCI_DEVICE_ID_ADVANTECH_PCI1600_1622    0x1622
#define PCI_DEVICE_ID_ADVANTECH_UNO2050         0x2050
#define PCI_DEVICE_ID_ADVANTECH_UNOB2201                0x2201
#define PCI_DEVICE_ID_ADVANTECH_UNOBF201                0xf201
#define PCI_DEVICE_ID_ADVANTECH_UNOBX201_2201           0x2201
#define PCI_DEVICE_ID_ADVANTECH_MIC3620         0x3620
#define PCI_DEVICE_ID_ADVANTECH_MIC3612         0X3612
//int adv_register_serial(struct serial_struct *req);
//void adv_unregister_serial(int line);

Далее ищем строки

static struct pci_serial_quirk pci_serial_quirks[] = {

В новых ядрах

static struct pci_serial_quirk pci_serial_quirks[] __refdata = {

И сразу за ними вставляем

/*
         * Advantech IAG PCI-954/16C950 cards
         */
        {
                .vendor         = PCI_VENDOR_ID_ADVANTECH,
                .device         = PCI_DEVICE_ID_ADVANTECH_PCI1600,
                .subvendor      = PCI_DEVICE_ID_ADVANTECH_PCI1600_1620,
                .subdevice      = PCI_ANY_ID,
                .setup          = pci_default_setup,
        },
        {
                .vendor         = PCI_VENDOR_ID_ADVANTECH,
                .device         = PCI_DEVICE_ID_ADVANTECH_PCI16ff,
                .subvendor      = PCI_DEVICE_ID_ADVANTECH_PCI1600_1620,
                .subdevice      = PCI_ANY_ID,
                .setup          = pci_default_setup,
        },
        {
                .vendor         = PCI_VENDOR_ID_ADVANTECH,
                .device         = PCI_DEVICE_ID_ADVANTECH_PCI1600,
                .subvendor      = PCI_DEVICE_ID_ADVANTECH_PCI1600_1622,
                .subdevice      = PCI_ANY_ID,
                .setup          = pci_default_setup,
        },
        {
                .vendor         = PCI_VENDOR_ID_ADVANTECH,
                .device         = PCI_DEVICE_ID_ADVANTECH_PCI16ff,
                .subvendor      = PCI_DEVICE_ID_ADVANTECH_PCI1600_1622,
                .subdevice      = PCI_ANY_ID,
                .setup          = pci_default_setup,
        },

Далее ищем строки

         {       PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
                PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL, 0, 0,
                pbn_b0_4_1152000 },

В новых ядрах

{	PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
		PCI_SUBVENDOR_ID_CONNECT_TECH,
		PCI_SUBDEVICE_ID_CONNECT_TECH_TITAN_2, 0, 0,
		pbn_b0_2_1843200 },

И сразу за ними вставляем

        /*
         * Advantech IAG PCI-954/16C950 cards
         */

        {       PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI1600,
                PCI_DEVICE_ID_ADVANTECH_PCI1600_1620, PCI_ANY_ID, 0, 0,
                pbn_b0_4_921600 },
        {       PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI16ff,
                PCI_DEVICE_ID_ADVANTECH_PCI1600_1620, PCI_ANY_ID, 0, 0,
                pbn_b0_4_921600 },

Конфигурирование ядра

Запускаем

make menuconfig

Идем в Device Drivers--->Character Devices ----> Serial Drivers
Устанавливаем

(20)  Maximum number of 8250/16550 serial ports
(20)  Number of 8250/16550 serial ports to register at runtime
[*]   Extended 8250/16550 serial driver options
[*]     Support more than 4 legacy serial ports
       <M>       Support Fourport cards
       <M>       Support Accent cards
       <M>       Support Boca cards
       <M>       Support Exar ST16C554/554D Quad UART
       <M>       Support Hub6 cards
[*]     Support for sharing serial interrupts

Далее делаем

make
sudo make modules_install
sudo make install

Перезагружаемся и смотрим с логах что получилось.