Сетевые адаптеры Kali и Alfa -Как устранить неполадки?

Несмотря на то, что большая часть кода ядра Linux написана на C, все еще есть много частей этого кода, которые очень специфичны для платформы, на которой он работает, и это необходимо учитывать.

Одним из конкретных примеров этого является виртуальная память, которая работает аналогичным образом на большинстве архитектур (иерархии таблиц страниц ), но имеет определенные детали для каждой архитектуры (, такие как количество уровней в каждой архитектуре, и этот показатель увеличивается даже на x86 с появлением новых чипов большего размера. )В код ядра Linux введены макросы для управления обходом этих иерархий, которые могут быть исключены компилятором на архитектурах с меньшим количеством уровней таблиц страниц (, поэтому код написан на C, но учитывает детали архитектуры.)

Многие другие области очень специфичны для каждой архитектуры и должны обрабатываться кодом, специфичным -для архитектуры. Однако большинство из них включают код на языке ассемблера. Примеры::

  • Переключение контекста:Переключение контекста включает в себя сохранение значения всех регистров для переключаемого процесса и восстановление регистров из сохраненного набора процесса, запланированного в ЦП. Даже количество и набор регистров очень специфичны для каждой архитектуры. Этот код обычно реализуется на ассемблере, чтобы обеспечить полный доступ к регистрам, а также убедиться, что он работает как можно быстрее, поскольку производительность переключения контекста может быть критической для системы.

  • Системные вызовы:Механизм, с помощью которого код пользовательского пространства может инициировать системный вызов, обычно зависит от архитектуры (, а иногда даже от конкретной модели ЦП.например, Intel и AMD представили разные инструкции для этого, в старых процессорах эти инструкции могут отсутствовать, поэтому детали для них по-прежнему будут уникальными.)

  • Обработчики прерываний:Подробная информация о том, как обрабатывать прерывания (аппаратные прерывания ), как правило, зависят от платформы -и обычно требуют некоторой связи на уровне сборки -для обработки конкретных соглашений о вызовах, используемых для платформы. Кроме того, примитивы для включения/отключения прерываний обычно зависят от платформы -и также требуют ассемблерного кода.

  • Инициализация:Подробная информация о том, как должна происходить инициализация, также обычно включает детали, специфичные для платформы, и часто требует некоторого ассемблерного кода для обработки точки входа в ядро. На платформах с несколькими ЦП (SMP )сведения о том, как подключить другие ЦП, обычно также зависят от платформы -.

  • Примитивы блокировки:Реализация примитивов блокировки (, таких как спин-блокировки, )обычно также включает детали, специфичные для платформы -, поскольку некоторые архитектуры предоставляют (или предпочитают )различные инструкции ЦП для эффективной реализации те. Некоторые будут реализовывать атомарные операции, некоторые предоставят cmpxchg, который может атомарно тестировать/обновлять (, но терпит неудачу, если другой писатель вошел первым ), другие будут включать модификатор «блокировки» в инструкции ЦП. Они часто также включают в себя написание ассемблерного кода.

Возможно, есть и другие области, где в ядре (или, в частности, в ядре Linux требуется специфичный для платформы -или архитектуры -код. )Глядя на дерево исходных кодов ядра, можно увидеть -специфичные для архитектуры поддеревья в arch/и в include/arch/, где вы можете найти больше примеров этого.

Некоторые на самом деле удивительны,например, вы увидите, что количество системных вызовов, доступных для каждой архитектуры, отличается, и некоторые системные вызовы будут существовать в одних архитектурах, а не в других. (Даже на x86 список системных вызовов различается между 32 -битным и 64 -битным ядром.)

Короче говоря, есть много случаев, о которых нужно знать ядру, специфичных для платформы. Ядро Linux пытается абстрагировать большинство из них, поэтому алгоритмы более высокого -уровня (, такие как управление памятью и планирование ), могут быть реализованы на C и работать так же (или почти так же ). на всех архитектурах.

0
09.06.2019, 14:49
1 ответ

Что касается возможностей чипсета, то соответственно:

  1. Ralink RT3290 802.11 лв.;
  2. Ralink RT3070 802.11 a лв.
  3. RTL8814AU 802.11ac , если драйвер его поддерживает .

Примечание. :Второй набор микросхем WiFi — это Ralink, а не Realtek. Кроме того, и RT3070, и RTL8814AU поддерживают диапазон 5 ГГц, хотя последний поддерживает более современную технологию WiFi и больше каналов.

Предположим, вы используете все наборы микросхем в одном и том же месте. Причина того, что RTL8814AU видит меньше сетей, может быть связана либо с:

  • диапазон;
  • ты недостаточно долго ждешь
  • Или, как я выделил курсивом и только что заметил комментарий @dirkt, чипсет имеет репутацию некачественного драйвера в Linux.

AFAIR RTL8814AU при прослушивании каналов в режиме монитора должен программно переключаться на каждый канал, в то время как RT3070 Ralink не имеет такого ограничения.

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

см. похожие Wi -Проблемы с Fi при использовании ASUS USB -адаптер N13 (realtek)

3
28.01.2020, 02:22

Теги

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