Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


Linux serial ports from Kernel space

Posted on 2001-11-14
Medium Priority
Last Modified: 2010-08-05

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 :)
Question by:CrypToniC
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

Accepted Solution

bryanh earned 800 total points
ID: 6639035
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.

Expert Comment

ID: 6674458
just listening...

Expert Comment

ID: 6956221
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.  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.

*****  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.
Moderator @ Experts Exchange
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.


Expert Comment

ID: 6956262
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 :(


Expert Comment

ID: 6957992
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

Expert Comment

ID: 7118706
Zero response; finalized.
Moondancer - EE Moderator

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The purpose of this article is to fix the unknown display problem in Linux Mint operating system. After installing the OS if you see Display monitor is not recognized then we can install "MESA" utilities to fix this problem or we can install additio…
The purpose of this article is to demonstrate how we can upgrade Python from version 2.7.6 to Python 2.7.10 on the Linux Mint operating system. I am using an Oracle Virtual Box where I have installed Linux Mint operating system version 17.2. Once yo…
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…

618 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question