Сохраните царапину emacs файл без доступа к терминалу

Драйверы оборудования Linux являются модулями ядра. Из-за модели с открытым исходным кодом и лицензирования ядра, очень немногие из них записаны производителями оборудования; большинство из них перепроектировано или на основе стандартизированных общедоступных протоколов. Вполне уверенный Bluetooth находится в более поздней области, и также что вещи как мыши и клавиатуры в большинстве случаев полностью универсальны.

Модули являются неотъемлемой частью исходного дерева ядра; т.е. если Вы загружаете источник ядра Linux, он идет с кодом для всех доступных модулей. Вы не должны включать всех их при создании его, конечно.

Дистрибутивы Linux (обычно) являются набором предварительно созданных двоичных файлов, и это включает ядро. Само ядро является одним двоичным файлом; модули могут или быть встроены в это или отдельные двоичные файлы, которые ядро может загрузить и разгрузить. Начиная со встраивания всех доступных модулей в один двоичный файл привел бы к крупному и смешному ядру, и дистрибутивы хотят покрыть как можно больше аппаратных средств, пакеты ядра дистрибутива включают широкий спектр отдельных двоичных модулей.

Вы видите их в /lib/modules. Модули драйвера регистрируются в ядре и создаются одновременно; ядро знает о том, что доступно в системе. Когда Вы включаете некоторые новые аппаратные средства, они идентифицируют себя к системе, и ядро выбирает соответствующий драйвер из /lib/modules загружаться.

Вы видите все свои в настоящее время загруженные модули с lsmod.

5
26.11.2014, 01:20
2 ответа

Мне повезло присоединять GDB к проходу. Заимствовавшись от: Как прикрепить терминал к отдельному процессу?

файл записи

  1. MKFIFO / TMP / uvere_name
  2. GDB -P [PID]
  3. (в пределах GDB): Call Закрыть (0)
  4. (в пределах GDB): Вызов Открыть ('/ tmp / uvere_name', 0600) . На данный момент GDB будет зависеть
  5. (из оболочки): ECHO '(запись файла записи «SavedResults»)'> / tmp / uvd_name
  6. (в пределах GBD): Ctrl-D

Содержание царапин записывается в файл «SavedResults». Интересно (запись-файл «SavedResults») добавляется к файлу (не уверенно, почему).

Имя CX CW

  1. MKFIFO / TMP / uvere_name
  2. GDB -P [PID]
  3. (в пределах GDB): Call Close (0)
  4. (в пределах GDB): Вызов открыть ('/ tmp / uvere_name', 0600) . На данный момент GDB будет зависать
  5. (из оболочки): CMD = "^ x ^ wsavedresults" (вход ^ x через последовательность ключей: Ctrl-V Ctrl-X, аналогичный для ^ W «
  6. (из оболочки): ECHO« $ CMD »> / TMP / uvere_name
  7. (в пределах GBD): Ctrl-D

Содержание записывается в файл« SavedResults ».

3
27.01.2020, 20:38

Сервер Emacs

Лучший способ сделать это - связаться с сервером Emacs и выполнить команду Emacs Lisp.

emacsclient -e '(with-current-buffer "*scratch*" (write-file "~/scratch.txt"))'

Или вы можете прикрепить Emacs к текущему терминалу и делать там все, что захотите, например, переключиться в буфер `scratch и сохранить его содержимое.

emacsclient -nw

К сожалению для вас, вы должны запустить сервер явно. Я рекомендую добавить (server-start) в ваш init-файл, потому что это очень полезно, но если вы этого еще не сделали, то сейчас это вам не поможет.

Отправка входных данных на терминал Emacs

При запуске echo "abd" > /proc/$emacs_pid/fd/0, отправляет текст терминалу, на котором запущен Emacs. Запись данных в терминал отображает эти данные. Вход - нельзя отправить на клемму: вход - это то, что поступает от клеммы.

Screen

Если вы запускаете программу в сеансе screen или tmux, вы можете подключиться к существующему сеансу и продолжить взаимодействие с программой. И экран, и tmux также поддерживают программную отправку входных данных в программу, запущенную внутри. Однако для этого необходимо запустить программу в первую очередь, так что на этот раз это не поможет.

С Emacs Screen не купит вам многого, если вы подключитесь к серверу Emacs с помощью emacsclient .

Дампа ядра

Просеивание дампа ядра является опцией. Emacs хранит содержимое буфера в одном блоке, с промежутком посередине (промежуток может содержать произвольный мусор; если последняя операция была удалена, то это то, что было удалено).

Сигнал SIGQUIT приводит к тому, что процесс по умолчанию умирает при выходе из дампа ядра (если он включен). Однако Emacs ловит SIGQUIT (он выходит на верхний уровень, что удобно в некоторых ситуациях, но не помогает). Поэтому вместо этого вам нужно будет прикрепить к нему отладчиком и заставить его оставить дамп ядра . В любом случае, это имеет преимущества перед SIGQUIT: он оставляет процесс запущенным и работает, даже если отключены дампы ядра.

$ gdb -p $(pidof emacs)
(gdb) gcore

Затем вы можете просеять дамп ядра для извлечения данных

Reattach Emacs на новый терминал

Нет возможности Unix или даже Linux отсоединить программу от одного терминала и прикрепить ее к другому. Однако, можно прикрепить отладчик к любой программе и сделать так, чтобы он открыл другой терминал. Это может быть упущено: иногда это работает, иногда приводит к аварийному завершению работы программы. Есть несколько инструментов, которые пытаются сделать это как можно лучше; см. Как отключить выполняющийся процесс и связать его с новой оболочкой экрана?

3
27.01.2020, 20:38

Теги

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