kernelnewbies.kernelnewbies.org archive mirror
 help / color / mirror / Atom feed
* 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).