Перейти к содержанию
    

Перевести линукс консоль в char device

Добрый день,

 

есть борда с yocto-linux (de10-nano или de0-nano-soc). У борды есть линукс консоль, которая зацеплена на COM порт. Хочется отключать консоль превращая ее в /dev/xxx для того, чтобы использовать этот девайс для загрузки прошивки в контроллере, который висит на этом ком-порте. В остальное время хочется, чтобы этот контроллер продолжал обычным образом видеть все, что есть на этой консоли - то есть как-бы одновременно быть супервизором линукса.

 

Как я понимаю, могу запустить в этой консоле программу, которая небуфферизовано будет читать и писать stdio / stdout

создать char-device вызвав

int mknod(const char *pathname, mode_t mode, dev_t dev);

но вот как я должен подцепить stdio на вход char-device  и stdout на выход char-device - пока не понимаю.

 

Пожалуйста, подскажите!

 

Спасибо!

 

ИИВ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ! Если бы все было бы так, яб не спрашивал...

 

С консоли я запустить программу могу, но мне надо перенаправить получаемый ввод-вывод на char-device, так как другая программа только с таким char-device работать может...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите, какой agetty висит на этой консоли (например: ps ax|grep tty). Убейте его kill'ом. А когда опять понадобится включить терминал, запустите процесс снова.

Вот, например, захожу на один из одноплатников:

eddy@mirtemp:~$ ps ax|grep tty
 1767 ttyS0    Ss+    0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyS0 linux
 1768 tty1     Ss+    0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
 1769 ttyGS0   Ss+    0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyGS0 linux
31965 pts/0    S+     0:00 grep --color=auto tty

На ttyS0 висит процесс 1767. Если я из-под рута его убью, то смогу использовать ttyS0 для других целей.

Если после kill процесс респаунится, посмотрите, что там у вас в inittab прописано. Если у вас там systemd, то ничего посоветовать не смогу, я эту дрянь не переношу на дух (как и остальные творения гея-поцтеринга)!

 

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое, Eddy_Em!!!

 

да, действительно, agetty убить можно, у меня удалось остановить респаун только через

 

Quote

 

systemctl disable [email protected]

 


хотя пока так /dev/ttyS0 пока еще не работает, как я хочу, но, возможно, пока еще не все попробовал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все-таки я что-то тут не понимаю...

 

Переставил линукс на более свежий (вместо 2014 на 2016, более позднего вроде нет).

Имею после выполнения

Quote

$ systemctl disable [email protected]

консоль, повешенную на первый процесс:
 

Quote

 

$ ps aux | grep tty
root         1  0.0  0.4  21692  3360 ?        Ss   06:38   0:03 /sbin/init ttyS0,115200
root      1587  0.0  0.0   2196   200 tty1     Ss+  06:38   0:00 /sbin/agetty --noclear tty1 linux
root      6775  0.0  0.1   1832   936 pts/1    R+   08:19   0:00 grep tty

 

но никак не могу найти, где запустился init с такими аргументами. /etc/init.d как у всех нормальных линуксов у меня нет... Подскажите, пожалуйста, где искать, или подскажите, как поднять ком-порт на USB, как я вопрошаю в соседней ветке:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, iiv said:

но никак не могу найти, где запустился init с такими аргументами.

init запускает ядро, как он реализован в systemd не знаю, искать лень. Кроме getty порт использует ещё ядерная консоль - в неё ядро отправляет свои сообщения (printk), её параметры передаются  через console= загрузчиком или в новых ядрах она описана в DTS, init systemd скорей всего эту информацию использует.  Может вам проще zmodem через консольный порт использовать для загрузки  файлов  на устройство без отключения консоли ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, sasamy said:

Может вам проще zmodem через консольный порт использовать для загрузки  файлов  на устройство без отключения консоли ?

Спасибо большое, за ответ! Да, я хочу как-то и, действительно, по возможности не отключая консоль.

У меня в аппаратуре запланирована DE10-Nano борда и один супервизор на atmega2560 с ардуиновским загрузчиком. У этой DE10-Nano на борту

Quote

Linux de10-nano 4.1.33-ltsi-altera #1 SMP Thu Mar 30 10:37:56 PDT 2017 armv7l GNU/Linux

и есть два выхода - один как ком-порт через ftdi232, а один - как полноценный USB OTG.

Мне бы надо иметь возможность менять прошивку на atmega2560 с ардуиновским загрузчиком через avrdude. Подключить могу хоть на ftdi232, хоть на USB OTG.

На на ftdi232 висит линукс консоль, и, похоже ее убить не очень просто.

На USB OTG есть проблема с драйверами, борда видна в lsusb, но не видна в /dev/ttyACM0, то есть usb-devices показывает:

Quote

T:  Bus=01 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#=  4 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=02(commc) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=2341 ProdID=0010 Rev=00.01
S:  Manufacturer=Arduino (www.arduino.cc)
S:  Product=Arduino Mega 2560
S:  SerialNumber=8533231393535120B261
C:  #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=01 Driver=(none)
I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none)

и, понятно, avrdude ее не видет.

 

А как через zmodem пустить avrdude, у него же какой-то свой протокол и avrdude его повидимому не поймет?

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, iiv сказал:

А как через zmodem пустить avrdude, у него же какой-то свой протокол и avrdude его повидимому не поймет?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, mantech said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...