Частичный ответ, в основном основанный на вашей информации о том, что тачпад подключен через I2C:
Даже без i2c_hid
вы должны видеть шины I2C (ses )и общаться с устройствами (s )на них. Пакет lm-sensors
содержит программы, связанные с I2C, как и i2c-tools
. Установите, прочитайте справочные страницы для i2cdetect
, i2cdump
, i2cget
, i2cset
.
Возможно, вам придется проверить модули I2C, например. i2c-dev
, если они не встроены в ваше ядро. После этого вы должны увидеть что-то в /sys/bus/i2c/devices/
и иметь соответствующие узлы устройств в /dev/i2c*
. Теперь вам нужно выяснить, какие устройства I2C у вас есть (их, вероятно, довольно много :управление вентилятором, датчики температуры, BIOS EEPROM и т. д. ), и что такое тачпад. Информация из драйвера Windows может помочь.
Следующим шагом будет чтение исходного кода i2c_hid
, выяснение, существуют ли какие-либо стандартизированные протоколы, поиск документации в Google и попытка отправки и получения байтов. Заодно выясните, почему i2c_hid
мешает загрузке компьютера. Для этого вам нужно уметь читать и писать код C.
i8042 — это устаревший контроллер PS/2, он вообще не связан с I2C. Если тачпад не подключен через I2C и этого контроллера, возня с ядром i8042 вообще не поможет.
Редактировать
Я немного погуглил.HID через I2C здесь(видимо что-то от Microsoft ). Как только вы наладите работу HID через I2C, вам также следует прочитать спецификацию HID . В частности, посмотрите на дескрипторы HID. Часто HID-устройства имеют причуды, когда отчеты (данные тачпада )не совсем стандартны.
Я бы использовал для этого Python. Причина в том, что код легко читать и модифицировать.
import collections
import operator
import sys
word_count = collections.Counter()
with open(sys.argv[1]) as f:
for l in f:
words = set(l.strip().split(','))
word_count.update(words)
words_kv = word_count.items()
words_kv = sorted(words_kv, key = operator.itemgetter(0)) # First sort alphabetically.
words_kv = sorted(words_kv, key = operator.itemgetter(1), reverse = True) # Then sort by most common.
# Then end result is a list that is sorted first by most common then alphabetically. The reason this works is because sorting is stable in Python according to: https://docs.python.org/3/howto/sorting.html#sort-stability-and-complex-sorts
for word, count in words_kv:
print(count, word)
Выход:
2 blue
2 green
2 red
1 brown
1 yellow
Вы можете придерживаться предложенного решения с небольшими изменениями в строке счета -по -строке:
$ while read line; do echo $line | tr, '\n' | sort | uniq; done <file.csv | sort | uniq -c | sort -nr
2 red
2 green
2 blue
1 yellow
1 brown
Он делает то же самое, что и код, который вы предоставили, за исключением того, что он выполняет uniq
часть каждой строки за раз, а затем считает в конце.