Linux serial ports from Kernel space

Hi

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.

Thanx
BTW this is my very first driver :)
LVL 1
CrypToniCAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

bryanhCommented:
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.  <ftp://giraffe-data.com/pub/filewrite.c>.

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.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Anthony2000Commented:
just listening...
0
MoondancerCommented:
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.
http://www.experts-exchange.com/jsp/qList.jsp?ta=commspt
 
Please click this link for Help Desk, Guidelines/Member Agreement and the Question/Answer process.  http://www.experts-exchange.com/jsp/cmtyHelpDesk.jsp

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.
http://www.experts-exchange.com/questions/Q.20068173.html
http://www.experts-exchange.com/questions/Q.20152767.html
http://www.experts-exchange.com/questions/Q.20233286.html




*****  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 http://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=commspt&qid=20274643 
POINTS FOR EXPERTS awaiting comments are listed here -> http://www.experts-exchange.com/commspt/Q.20277028.html
 
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.
 
Moondancer
Moderator @ Experts Exchange
0
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

mazzooCommented:
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
0
MoondancerCommented:
mazzoo ->  Please post this request here:
http://www.experts-exchange.com/jsp/qList.jsp?ta=commspt

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.

Thanks,
Moondancer - EE Moderator
0
MoondancerCommented:
Zero response; finalized.
Moondancer - EE Moderator
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Linux OS Dev

From novice to tech pro — start learning today.