Jump to content

    
iiv

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

Recommended Posts

Добрый день,

 

есть борда с 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 - пока не понимаю.

 

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

 

Спасибо!

 

ИИВ

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

Посмотрите, какой 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, то ничего посоветовать не смогу, я эту дрянь не переношу на дух (как и остальные творения гея-поцтеринга)!

 

Edited by Eddy_Em

Share this post


Link to post
Share on other sites

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

 

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

 

Quote

 

systemctl disable serial-getty@ttyS0.service

 


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

Share this post


Link to post
Share on other sites

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

 

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

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

Quote

$ systemctl disable serial-getty@ttyS0.service

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

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, как я вопрошаю в соседней ветке:

 

Share this post


Link to post
Share on other sites
18 minutes ago, iiv said:

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

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

Share this post


Link to post
Share on other sites
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 его повидимому не поймет?

 

Спасибо!

Share this post


Link to post
Share on other sites
2 часа назад, iiv сказал:

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

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

Share this post


Link to post
Share on other sites
5 minutes ago, mantech said:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.