Linux serial ports from Kernel space

CrypToniC used Ask the Experts™

How can I access the serial port from kernel space ? (from a driver)

From user space it's just like fd=open("/dev/ttyS0", ... )

But from kernel space it seems more difficult. I had a look at the Axis bluetooth implementation and they use
a whole complex thingy called ttys (via termios.h) ?
Can someone explain why tty's are used ?

What I want to do is not far from the Axis solution i.e.
ppp over my_driver out on the serial port for further processing. The problem is that I do not understand the while tty concept, neighter can I find any doc about it.

BTW this is my very first driver :)
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
That whole tty thing is rather complex, and steeped in history.  I don't know anywhere you can read about it.
I've accumulated a few thousand words of notes on it over years of experimenting and reading Linux source code, and some day I plan to publish the information somehow.  For now, I can give you an overview and also answer the larger question of how to do I/O from within your driver.

Ttys are all about terminals -- where people log in and interact with the system.  Not many people do that via a serial port anymore, but it used to be quite normal.  In fact, it used to be the only way.  If you're not talking to a person over this serial line, the tty layer will just get in your way.

A tty is a device defined a layer above the serial device.  The tty device driver takes read and write calls from the user program and implements them with its own read and write calls to the serial device driver.
Whereas with a serial device, you just read and write characters, a tty device has a much more intelligent read/write interface.  The tty device buffers, for one thing.  Your program can read and write whole lines at a time, thus saving the hassle and execution time of processing individual characters.  And there's line editing.  The person at the terminal can backspace and retype without the program he's talking to even knowing about it.

Though you'll want to disable most of that added function for your own serial port accesses, you can't just skip the tty layer altogether -- the serial device driver is designed to be accessed via a tty device.

The 'stty' program controls all the features of tty devices (Stty uses that termios thing to do it).  Check out the man page for it to get a better understanding.  And do a 'stty raw' on the serial port in question.

Now to the question of how to do the equivalent of open(/dev/ttyS0) inside the kernel.  This is a common question, and I still have an example program of this (actually, the more general question of how do you access files from inside the kernel) from the last time some asked on EE.  <>.

The key is that you can't do a system call (such as open()) from inside the kernel, but you can call the same kernel subroutines that the system call handler would (in this case, filp_open()).  Read and write are a little trickier because every file has its own read and write routines, so you have to call them indirectly.

The hardest thing about reading and writing is that the kernel subroutines that do this expect to be reading into and writing from memory in the user's address space, whereas your code probably wants to read to and write from kernel memory.  Therefore, you have to make the kernel address space look like the user address space, do the read or write, then put the user address space back where it belongs.

This is all in the example.

Because the example is not specific to ttys or serial ports, it doesn't show you any of that termios stuff.  You may want to do such things as put the tty in raw mode, and I can tell you how to do that if you can't tell from the Bluetooth example you already have.  Until you get simple read and write working, just use Stty.
just listening...
ADMINISTRATION WILL BE CONTACTING YOU SHORTLY.  Moderators Computer101 or Netminder will return to finalize these if still open in seven days.  Please post closing recommendations before that time.

Question(s) below appears to have been abandoned. Your options are:
1. Accept a Comment As Answer (use the button next to the Expert's name).
2. Close the question if the information was not useful to you, but may help others. You must tell the participants why you wish to do this, and allow for Expert response.  This choice will include a refund to you, and will move this question to our PAQ (Previously Asked Question) database.  If you found information outside this question thread, please add it.
3. Ask Community Support to help split points between participating experts, or just comment here with details and we'll respond with the process.
4. Delete the question (if it has no potential value for others).
   --> Post comments for expert of your intention to delete and why
   --> YOU CANNOT DELETE A QUESTION with comments; special handling by a Moderator is required.

For special handling needs, please post a zero point question in the link below and include the URL (question QID/link) that it regards with details.
Please click this link for Help Desk, Guidelines/Member Agreement and the Question/Answer process.

Click you Member Profile to view your question history and please keep them updated. If you are a KnowledgePro user, use the Power Search option to find them.  

Questions which are LOCKED with a Proposed Answer but do not help you, should be rejected with comments added.  When you grade the question less than an A, please comment as to why.  This helps all involved, as well as others who may access this item in the future.  PLEASE DO NOT AWARD POINTS TO ME.

To view your open questions, please click the following link(s) and keep them all current with updates.

*****  E X P E R T S    P L E A S E  ******  Leave your closing recommendations if this item remains inactive another seven (7) days.  If you are interested in the cleanup effort, please click this link 
POINTS FOR EXPERTS awaiting comments are listed here ->
Moderators will finalize this question if in @7 days Asker has not responded.  This will be moved to the PAQ (Previously Asked Questions) at zero points, deleted or awarded.
Thank you everyone.
Moderator @ Experts Exchange
PMI ACP® Project Management

Prepare for the PMI Agile Certified Practitioner (PMI-ACP)® exam, which formally recognizes your knowledge of agile principles and your skill with agile techniques.

Dear Moderators ---

all my points disappeared!!
i had > 8000 expert points - i expect them back!
also the number of answered q's reset to 0 :(

mazzoo ->  Please post this request here:

I have sent a note to ComTech, our Administrative liaison about this.  However, want to keep these types of requests within the Community Support topic area above.

Moondancer - EE Moderator
Zero response; finalized.
Moondancer - EE Moderator

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial