* How to shutdown console redirection [not found] <CAPerbBxRsOxuDKVTYqG2491HnrYqCeD2Ki3P18E6RhF0gqBSDQ@mail.gmail.com> @ 2012-01-04 0:43 ` hz hanks 2012-01-25 1:36 ` Peter Teoh 0 siblings, 1 reply; 3+ messages in thread From: hz hanks @ 2012-01-04 0:43 UTC (permalink / raw) To: kernelnewbies Hi, all~ I'm studying in an embedded Linux board with only one uart, which is set default as the console display. Now as I try to develop uart driver, I want to shutdown this console redirection temporarily. But I don't know how? I search the Internet, but there's only the tutorial for setting this redirection rather than shutdown it. Is there anyone can help? Thank you very much. ^ permalink raw reply [flat|nested] 3+ messages in thread
* How to shutdown console redirection 2012-01-04 0:43 ` How to shutdown console redirection hz hanks @ 2012-01-25 1:36 ` Peter Teoh 2012-01-25 2:08 ` Peter Teoh 0 siblings, 1 reply; 3+ messages in thread From: Peter Teoh @ 2012-01-25 1:36 UTC (permalink / raw) To: kernelnewbies read this: http://elinux.org/Disable_Console and this: http://elinux.org/Kernel_Debugging_Tips#Controlling_console_output Perhaps u can extract relevant APIs from below URLs to solve your problem: a. at the hardware level, serial communication can come from UART interface, or infrared interface, or USB. b. next, is the 8250.c handler: http://lxr.free-electrons.com/source/drivers/tty/serial/<http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c>8250_*.c (star represent the different hardware devices handling the serial signals). c. next all these information will feed into serial_core.c (USB is not included here): http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c And here u can see how u can disable the signal from software standpoint, eg, In particular: 78 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L78> static void uart_stop <http://lxr.free-electrons.com/ident?i=uart_stop>(struct tty_struct <http://lxr.free-electrons.com/ident?i=tty_struct> *tty <http://lxr.free-electrons.com/ident?i=tty>) 79 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L79> { 80 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L80> struct uart_state <http://lxr.free-electrons.com/ident?i=uart_state> *state <http://lxr.free-electrons.com/ident?i=state> = tty <http://lxr.free-electrons.com/ident?i=tty>->driver_data <http://lxr.free-electrons.com/ident?i=driver_data>; 81 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L81> struct uart_port <http://lxr.free-electrons.com/ident?i=uart_port> *port <http://lxr.free-electrons.com/ident?i=port> = state <http://lxr.free-electrons.com/ident?i=state>->uart_port <http://lxr.free-electrons.com/ident?i=uart_port>; 82 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L82> unsigned long flags <http://lxr.free-electrons.com/ident?i=flags>; 83 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L83> 84 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L84> spin_lock_irqsave <http://lxr.free-electrons.com/ident?i=spin_lock_irqsave>(&port <http://lxr.free-electrons.com/ident?i=port>->lock <http://lxr.free-electrons.com/ident?i=lock>, flags <http://lxr.free-electrons.com/ident?i=flags>); 85 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L85> port <http://lxr.free-electrons.com/ident?i=port>->ops <http://lxr.free-electrons.com/ident?i=ops>->stop_tx(port <http://lxr.free-electrons.com/ident?i=port>); 86 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L86> spin_unlock_irqrestore <http://lxr.free-electrons.com/ident?i=spin_unlock_irqrestore>(&port <http://lxr.free-electrons.com/ident?i=port>->lock <http://lxr.free-electrons.com/ident?i=lock>, flags <http://lxr.free-electrons.com/ident?i=flags>); 87 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L87> } 88 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L88> >From above, u can see stop_tx() can be called, looking further into 8250.c: static void serial8250_stop_tx(struct uart_port *port) { struct uart_8250_port *up = container_of(port, struct uart_8250_port, port); __stop_tx(up); /* * We really want to stop the transmitter from sending. */ if (up->port.type == PORT_16C950) { up->acr |= UART_ACR_TXDIS; serial_icr_write(up, UART_ACR, up->acr); } } And referring further to definition: /* * The 16C950 Additional Control Register */ #define UART_ACR_RXDIS 0x01 /* Receiver disable */ #define UART_ACR_TXDIS 0x02 /* Transmitter disable */ So perhaps writing UART_ACR_XXX_DIS will disable the input/output: drivers/tty/serial/8250.c: up->acr |= UART_ACR_TXDIS; drivers/tty/serial/8250.c: up->acr &= ~UART_ACR_TXDIS; Experiment first....I am just guessing.... On Wed, Jan 4, 2012 at 8:43 AM, hz hanks <hankshz@gmail.com> wrote: > Hi, all~ > I'm studying in an embedded Linux board with only one uart, which is > set default as the console display. Now as I try to develop uart > driver, I want to shutdown this console redirection temporarily. But I > don't know how? I search the Internet, but there's only the tutorial > for setting this redirection rather than shutdown it. Is there anyone > can help? Thank you very much. > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies at kernelnewbies.org > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > -- Regards, Peter Teoh -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120125/90ceeac2/attachment.html ^ permalink raw reply [flat|nested] 3+ messages in thread
* How to shutdown console redirection 2012-01-25 1:36 ` Peter Teoh @ 2012-01-25 2:08 ` Peter Teoh 0 siblings, 0 replies; 3+ messages in thread From: Peter Teoh @ 2012-01-25 2:08 UTC (permalink / raw) To: kernelnewbies check out slide 5 here: http://www.slideshare.net/anil_pugalia/embedded-device-busdrivers On Wed, Jan 25, 2012 at 9:36 AM, Peter Teoh <htmldeveloper@gmail.com> wrote: > read this: > > http://elinux.org/Disable_Console > > and this: > > http://elinux.org/Kernel_Debugging_Tips#Controlling_console_output > > Perhaps u can extract relevant APIs from below URLs to solve your problem: > > a. at the hardware level, serial communication can come from UART > interface, or infrared interface, or USB. > > b. next, is the 8250.c handler: > http://lxr.free-electrons.com/source/drivers/tty/serial/<http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c>8250_*.c > (star represent the different hardware devices handling the serial signals). > > c. next all these information will feed into serial_core.c (USB is not > included here): > > http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c > > And here u can see how u can disable the signal from software standpoint, > eg, > > In particular: > > 78 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L78> static void uart_stop <http://lxr.free-electrons.com/ident?i=uart_stop>(struct tty_struct <http://lxr.free-electrons.com/ident?i=tty_struct> *tty <http://lxr.free-electrons.com/ident?i=tty>) > 79 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L79> { > 80 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L80> struct uart_state <http://lxr.free-electrons.com/ident?i=uart_state> *state <http://lxr.free-electrons.com/ident?i=state> = tty <http://lxr.free-electrons.com/ident?i=tty>->driver_data <http://lxr.free-electrons.com/ident?i=driver_data>; > 81 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L81> struct uart_port <http://lxr.free-electrons.com/ident?i=uart_port> *port <http://lxr.free-electrons.com/ident?i=port> = state <http://lxr.free-electrons.com/ident?i=state>->uart_port <http://lxr.free-electrons.com/ident?i=uart_port>; > 82 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L82> unsigned long flags <http://lxr.free-electrons.com/ident?i=flags>; > 83 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L83> > 84 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L84> spin_lock_irqsave <http://lxr.free-electrons.com/ident?i=spin_lock_irqsave>(&port <http://lxr.free-electrons.com/ident?i=port>->lock <http://lxr.free-electrons.com/ident?i=lock>, flags <http://lxr.free-electrons.com/ident?i=flags>); > 85 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L85> port <http://lxr.free-electrons.com/ident?i=port>->ops <http://lxr.free-electrons.com/ident?i=ops>->stop_tx(port <http://lxr.free-electrons.com/ident?i=port>); > 86 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L86> spin_unlock_irqrestore <http://lxr.free-electrons.com/ident?i=spin_unlock_irqrestore>(&port <http://lxr.free-electrons.com/ident?i=port>->lock <http://lxr.free-electrons.com/ident?i=lock>, flags <http://lxr.free-electrons.com/ident?i=flags>); > 87 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L87> } > 88 <http://lxr.free-electrons.com/source/drivers/tty/serial/serial_core.c#L88> > > From above, u can see stop_tx() can be called, looking further into 8250.c: > > static void serial8250_stop_tx(struct uart_port *port) > { > struct uart_8250_port *up = > container_of(port, struct uart_8250_port, port); > > __stop_tx(up); > > /* > * We really want to stop the transmitter from sending. > */ > if (up->port.type == PORT_16C950) { > up->acr |= UART_ACR_TXDIS; > serial_icr_write(up, UART_ACR, up->acr); > } > } > > And referring further to definition: > > /* > * The 16C950 Additional Control Register > */ > #define UART_ACR_RXDIS 0x01 /* Receiver disable */ > #define UART_ACR_TXDIS 0x02 /* Transmitter disable */ > > So perhaps writing UART_ACR_XXX_DIS will disable the input/output: > > drivers/tty/serial/8250.c: up->acr |= UART_ACR_TXDIS; > > drivers/tty/serial/8250.c: up->acr &= ~UART_ACR_TXDIS; > > Experiment first....I am just guessing.... > > > On Wed, Jan 4, 2012 at 8:43 AM, hz hanks <hankshz@gmail.com> wrote: > >> Hi, all~ >> I'm studying in an embedded Linux board with only one uart, which is >> set default as the console display. Now as I try to develop uart >> driver, I want to shutdown this console redirection temporarily. But I >> don't know how? I search the Internet, but there's only the tutorial >> for setting this redirection rather than shutdown it. Is there anyone >> can help? Thank you very much. >> >> _______________________________________________ >> Kernelnewbies mailing list >> Kernelnewbies at kernelnewbies.org >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies >> > > > > -- > Regards, > Peter Teoh > -- Regards, Peter Teoh -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120125/2a14abda/attachment-0001.html ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-01-25 2:08 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <CAPerbBxRsOxuDKVTYqG2491HnrYqCeD2Ki3P18E6RhF0gqBSDQ@mail.gmail.com>
2012-01-04 0:43 ` How to shutdown console redirection hz hanks
2012-01-25 1:36 ` Peter Teoh
2012-01-25 2:08 ` Peter Teoh
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).