Как работает Linux / настроить что-то вроде «WLAN0», когда он не является устройством, которое появляется в / dev?

Используйте команду grep:

grep abc something.txt

Также обратите внимание, что использование $ 2 в оболочке относится ко второму аргументу (как вы, кажется, знаете), но в awk ] это отличается. Ваш вопрос, кажется, показывает неправильное понимание этого, поэтому я проясню его.

Оболочка требует $ для ссылки на значение переменной. Таким образом, вы обращаетесь к переменной с именем myvar , записывая $ myvar .

В awk для ссылки на переменную с именем myvar вы просто используете ее имя - myvar . Чтобы сослаться на буквальную строку, содержащую буквы m-y-v-a-r, вы набираете «myvar» .

$ в awk предназначен для ссылки на поле с конкретным номером . Итак, $ 2 относится ко второму полю текущей строки файла. Или, если вы установите myvar = "4" , тогда $ myvar относится к четвертому полю файла.

Чтобы просто распечатать все строки файла, соответствующие заданному шаблону, используйте grep - это то, для чего он предназначен.

1
25.11.2018, 23:31
3 ответа

В Linux сетевые интерфейсы вообще не имеют узла устройства в /dev.

Если вам нужен список доступных сетевых интерфейсов, например. в скрипте загляните в каталог /sys/class/net/; вы увидите одну символическую ссылку на каждый интерфейс. Каждый сетевой интерфейс с загруженным драйвером будет указан.

Программно вы можете использовать системный вызов if_nameindex():, см. этот ответ на Stack Overflow.

Также обратите внимание, что /dev— это файловая система устройства .

устройство -дерево имеет особое значение :это машиночитаемое -описание состава аппаратного обеспечения системы. Он используется в системах, в которых нет аппаратных шин с поддержкой Plug -и -Play, или в которых оборудование не может быть обнаружено автоматически. Например, Linux на SoC ARM, таких как Raspberry Pi, использует дерево устройств.

Последовательность загрузки RasPi весьма интересна:см. этот вопрос на RasPi.SE.

Короче говоря, во время загрузки под управлением файла /boot/start.elfграфический процессор загружает соответствующие файлы /boot/*.dtbи /boot/overlay/ *.dtbo перед запуском основного процессора ARM. Файл *.dtbпредставляет собой скомпилированное дерево устройств в двоичном формате. В нем описывается аппаратное обеспечение, которое можно найти в каждой конкретной модели RasPi,и создается из исходного файла дерева устройств (.dts `), который представляет собой просто текст, отформатированный определенным образом.

Живой образ дерева устройств -ядра можно увидеть в :/sys/firmware/devicetree/base Per Ciro Santilli , его можно отобразить в формате.dts с помощью:

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

Спецификацию формата файла дерева устройств можно найти здесь. Спецификация предназначена для -независимости от ОС. Вам также может понадобиться Справочник по дереву устройств для уточнения некоторых деталей.

Итак, ответ на ваш первоначальный вопрос таков:

  • Berkeley Sockets API получает сетевой интерфейс от ядра
  • ядро ​​получает необходимую информацию об оборудовании из файла дерева устройств
  • файл дерева устройств загружается графическим процессором с /boot/start.elfв соответствии с конфигурацией в/boot/config.txt
  • Файл дерева устройств был изначально создан в соответствии со спецификациями оборудования каждой модели RasPi и скомпилирован в соответствующий двоичный формат.

Код сканирования дерева устройств в основном занимается поиском допустимого драйвера для каждого элемента оборудования. Его не слишком заботит назначение каждого устройства :, это работа драйвера.

Драйвер использует соответствующую *_register_driver()функцию ядра, чтобы задокументировать свое существование, берет соответствующую часть информации дерева устройств, чтобы найти фактическое оборудование, а затем использует другие функции для регистрации этого оборудования как находящегося под его контролем. После того, как драйвер инициализирует аппаратное обеспечение, он использует функцию ядра register_netdev(), чтобы зарегистрировать себя в качестве нового сетевого интерфейса , что, среди прочего, сделает Sockets API (, который является просто еще одним интерфейсом. ядра, а не независимый объект как таковой ), знающий о существовании сетевого интерфейса.

Драйвер, скорее всего, зарегистрируется и для других целей. :В нем будет указан ряд ethtoolопераций, которые он поддерживает для мониторинга состояния канала, статистики трафика и других функций низкого -уровня, а также драйвер для беспроводная сетевая карта также будет использовать register_wiphy(), чтобы объявить себя беспроводным сетевым интерфейсом с определенными возможностями Wi -Fi.

Стек TCP/IP в Linux имеет много интерфейсов. :Berkeley Sockets API — та его сторона, которая наиболее знакома разработчикам приложений. Netdev API — это, по сути, другая сторона той же медали, обращенная к драйверу -.

7
27.01.2020, 23:15

wlan0 — это интерфейс, созданный интерфейсами в /etc/network/. Само устройство представляет собой конструкцию загружаемой прошивки для указанного интерфейса. Я говорю это, потому что wlan0 не является местоположением фактического оборудования. Это программно созданный интерфейс, предоставляющий операционной системе возможность взаимодействовать с аппаратным обеспечением через определение микропрограммы фактического устройства. Поскольку вы можете изменить прошивку, чтобы изменить поведение реального оборудования, добавить/удалить функции, изменить частоты и тому подобное.

O, а также ifup и ifdown — это в основном выключатели HeHehe...

См. :https://manpages.debian.org/stretch/ifupdown/interfaces.5.en.html

1
27.01.2020, 23:15

-Ага! это устройство, беспроводное карточное устройство, подобное обычному сетевому устройству eth0, только это указывает/относится к беспроводному устройству...

0
27.01.2020, 23:15

Теги

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