Привязка драйвера устройства I2C

Я не уверен, что regexp может запомнить длину шаблона, поэтому для чистого (частичного) решения sed :

edit:

это было немного сложнее.

Я придумал sed-файл a.sed

p
s/[0-9]\.[0-9]/a.a/g
s/with/phase 1/
p
s/[0-9]a\.a/aa.a/g
s/a\.a[0-9]/a.aa/g
s/phase 1/phase 2/
p
s/[0-9]aa.a/aaa.a/g
s/a.aa[0-9]/a.aaa/g
s/phase 2/final/

это в основном делает то же самое, что и командная строка, но с отладочной строкой.

  • первая строка ( - первая строка повернуть 1.2 в a.a (обратите внимание, что цифра в тексте, такая как 1.12% будет превращена в a.a2%)
  • следующие строки, рассчитанные на две и три цифры IP.) превратить 1.2 в a.a (обратите внимание, что цифра в тексте, например, 1,12% будет превращен в a.a2%)
  • следующие строки, создаваемые для двух- и трехзначного IP.
  • удалить линию с p и s/фаза x/.. / когда OK

use

sed -f a.sed u 

, где u (да, это недопустимый IP-адрес, но это тоже не так)

*random text with different numbers* 255.43.23.8 *some more text* "SpecialWord" 32.123.21.44 *text again*
*random text with different 12* 255.4.2.8 *some more text* "SpecialWord" 32.12.21.44 *text again*
*random text with different 13* 255.453.263.788 *some more text* "SpecialWord" 2.123.21.454 *text again*
*random text with different 1.12%* 255.43.23.8 *some more text* "SpecialWord" 32.123.21.44 *text again*
*random text with different numbers* 5.43.23.8 *some more text* "SpecialWord" 32.3.1.44 *text again*

это приведет к

*random text final different numbers* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*
*random text final different 12* aaa.a.a.a *some more text* "SpecialWord" aa.aa.aa.aa *text again*
*random text final different 13* aaa.aaa.aaa.aaa *some more text* "SpecialWord" a.aaa.aa.aaa *text again*
*random text final different a.aa%* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*
*random text final different numbers* a.aa.aa.a *some more text* "SpecialWord" aa.a.a.aa *text again*

edit2 : если вы можете позволить себе временный файл

grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' u > v

получите список IP-адресов в v

sed s/[0-9]/a/g v > w

превратитесь в anonnymous IP в w

paste -d '/' v w | sed -e 's|^.*$|s/&/|'

сгенерируйте sed-файл, который превращает IP-адрес в анонимный IP...

paste -d '/' v w | sed -e 's|^.*$|s/&/|' | sed -f - u

... и применить к файлу.

результат такой же, как и выше, за исключением строки с 1.12%

*random text with different 1.12%* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*

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

5
28.10.2016, 01:21
1 ответ

Мне не хватало данных платформы для этого устройства.

Мне удалось заставить его работать, вставив данные платформы непосредственно в код для модуля драйвера:

static uint32_t tca8418_km_data[] = {
    KEY(0, 0, KEY_F1),
    KEY(0, 1, KEY_F2),
    KEY(0, 2, KEY_F3),
    ...
};

static const struct matrix_keymap_data tca8418_mk_data = {
    .keymap         = tca8418_km_data,
    .keymap_size    = ARRAY_SIZE(tca8418_km_data),
};

static struct tca8418_keypad_platform_data my_tca8418_plat_data = {
    .keymap_data    = &tca8418_mk_data,
    .rows           = 6,
    .cols           = 8,
    .rep            = 1,
    .irq_is_gpio    = 1,
};

static struct i2c_board_info tca8418_board_info __initdata = {
    I2C_BOARD_INFO("tca8418_keypad", 0x34),
    .platform_data  = &my_tca8418_plat_data,
    .irq            = 16, // GPIO pin 16
};

Затем добавив это в функцию __init:

static int __init tca8418_keypad_init(void)
{
    struct i2c_adapter *i2c_adap;
    i2c_adap = i2c_get_adapter(1);
    i2c_new_device(i2c_adap, &tca8418_board_info);
    ...
}

Это не самое элегантное исправление, но оно сработало для меня. Я бы предпочел решение для пользовательского пространства, но мне не удалось его найти.

2
27.01.2020, 20:42

Теги

Похожие вопросы