Драйверы оборудования Linux являются модулями ядра. Из-за модели с открытым исходным кодом и лицензирования ядра, очень немногие из них записаны производителями оборудования; большинство из них перепроектировано или на основе стандартизированных общедоступных протоколов. Вполне уверенный Bluetooth находится в более поздней области, и также что вещи как мыши и клавиатуры в большинстве случаев полностью универсальны.
Модули являются неотъемлемой частью исходного дерева ядра; т.е. если Вы загружаете источник ядра Linux, он идет с кодом для всех доступных модулей. Вы не должны включать всех их при создании его, конечно.
Дистрибутивы Linux (обычно) являются набором предварительно созданных двоичных файлов, и это включает ядро. Само ядро является одним двоичным файлом; модули могут или быть встроены в это или отдельные двоичные файлы, которые ядро может загрузить и разгрузить. Начиная со встраивания всех доступных модулей в один двоичный файл привел бы к крупному и смешному ядру, и дистрибутивы хотят покрыть как можно больше аппаратных средств, пакеты ядра дистрибутива включают широкий спектр отдельных двоичных модулей.
Вы видите их в /lib/modules
. Модули драйвера регистрируются в ядре и создаются одновременно; ядро знает о том, что доступно в системе. Когда Вы включаете некоторые новые аппаратные средства, они идентифицируют себя к системе, и ядро выбирает соответствующий драйвер из /lib/modules
загружаться.
Вы видите все свои в настоящее время загруженные модули с lsmod
.
Мне повезло присоединять GDB к проходу. Заимствовавшись от: Как прикрепить терминал к отдельному процессу?
файл записи
MKFIFO / TMP / uvere_name
GDB -P [PID]
Call Закрыть (0)
Вызов Открыть ('/ tmp / uvere_name', 0600)
. На данный момент GDB будет зависеть ECHO '(запись файла записи «SavedResults»)'> / tmp / uvd_name
Ctrl-D
Содержание царапин записывается в файл «SavedResults». Интересно (запись-файл «SavedResults»)
добавляется к файлу (не уверенно, почему).
Имя CX CW
MKFIFO / TMP / uvere_name
GDB -P [PID]
Call Close (0)
Вызов открыть ('/ tmp / uvere_name', 0600)
. На данный момент GDB будет зависать CMD = "^ x ^ wsavedresults"
(вход ^ x через последовательность ключей: Ctrl-V Ctrl-X, аналогичный для ^ W « ECHO« $ CMD »> / TMP / uvere_name
Ctrl-D
Содержание записывается в файл« SavedResults ».
Лучший способ сделать это - связаться с сервером Emacs и выполнить команду Emacs Lisp.
emacsclient -e '(with-current-buffer "*scratch*" (write-file "~/scratch.txt"))'
Или вы можете прикрепить Emacs к текущему терминалу и делать там все, что захотите, например, переключиться в буфер `scratch и сохранить его содержимое.
emacsclient -nw
К сожалению для вас, вы должны запустить сервер явно. Я рекомендую добавить (server-start)
в ваш init-файл, потому что это очень полезно, но если вы этого еще не сделали, то сейчас это вам не поможет.
При запуске echo "abd" > /proc/$emacs_pid/fd/0
, отправляет текст терминалу, на котором запущен Emacs. Запись данных в терминал отображает эти данные. Вход - нельзя отправить на клемму: вход - это то, что поступает от клеммы.
Если вы запускаете программу в сеансе screen или tmux, вы можете подключиться к существующему сеансу и продолжить взаимодействие с программой. И экран, и tmux также поддерживают программную отправку входных данных в программу, запущенную внутри. Однако для этого необходимо запустить программу в первую очередь, так что на этот раз это не поможет.
С Emacs Screen не купит вам многого, если вы подключитесь к серверу Emacs с помощью emacsclient
.
Просеивание дампа ядра является опцией. Emacs хранит содержимое буфера в одном блоке, с промежутком посередине (промежуток может содержать произвольный мусор; если последняя операция была удалена, то это то, что было удалено).
Сигнал SIGQUIT приводит к тому, что процесс по умолчанию умирает при выходе из дампа ядра (если он включен). Однако Emacs ловит SIGQUIT (он выходит на верхний уровень, что удобно в некоторых ситуациях, но не помогает). Поэтому вместо этого вам нужно будет прикрепить к нему отладчиком и заставить его оставить дамп ядра . В любом случае, это имеет преимущества перед SIGQUIT: он оставляет процесс запущенным и работает, даже если отключены дампы ядра.
$ gdb -p $(pidof emacs)
(gdb) gcore
Затем вы можете просеять дамп ядра для извлечения данных
Нет возможности Unix или даже Linux отсоединить программу от одного терминала и прикрепить ее к другому. Однако, можно прикрепить отладчик к любой программе и сделать так, чтобы он открыл другой терминал. Это может быть упущено: иногда это работает, иногда приводит к аварийному завершению работы программы. Есть несколько инструментов, которые пытаются сделать это как можно лучше; см. Как отключить выполняющийся процесс и связать его с новой оболочкой экрана?