LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: "linux-os \(Dick Johnson\)" <linux-os@analogic.com>
To: "Erik Mouw" <erik@harddisk-recovery.com>
Cc: "Jesper Juhl" <jesper.juhl@gmail.com>,
	"congwen" <congwen@gmail.com>,
	"linux-kernel" <linux-kernel@vger.kernel.org>
Subject: Re: How can I create or read/write a file in linux device driver?
Date: Fri, 12 Jan 2007 09:27:01 -0500	[thread overview]
Message-ID: <Pine.LNX.4.61.0701120907430.23919@chaos.analogic.com> (raw)
In-Reply-To: <20070112132459.GY13675@harddisk-recovery.com>


On Fri, 12 Jan 2007, Erik Mouw wrote:

> On Fri, Jan 12, 2007 at 11:27:01AM +0100, Jesper Juhl wrote:
>> On 12/01/07, congwen <congwen@gmail.com> wrote:
>>> Hello everyone, I want to create and read/write a file in Linux kernel or
>>> device driver,
>>
>> Don't read/write user space files from kernel space.
>>
>> Please search the archives, this get asked a lot and it has been
>> explained a million times why it's a bad idea.
>> You can also read http://www.linuxjournal.com/article/8110
>
> Rather point to
>
>  http://kernelnewbies.org/FAQ/WhyWritingFilesFromKernelIsBad
>
>
> Erik
>
> -- 
> +-- Erik Mouw -- www.harddisk-recovery.com -- +31 70 370 12 90 --
> | Lab address: Delftechpark 26, 2628 XH, Delft, The Netherlands
> -

Sometimes a idiot boss will say; "You need to read or write files from
within the driver. If you don't do what I tell you, you are fired!"
Sigh, assuming you can't walk next door and get a reasonable job, it
__is__ possible to unreliably access files within the kernel. Note
that the kernel is __designed__ to perform user-mode operations, so
it is a bit difficult.

First, since file-operations require process context, and the kernel
is not a process, you need to create a kernel thread to handle your file
I/O. You write code to properly start up and shut down the kernel thread
before you do anything else. There are drivers in the kernel tree that
can be used as templates. The code that the kernel thread executes, needs
to be written so that it can receive commands to open/close/read/write
files, perhaps from semaphores or other communications methods. You can't
just create the thread and let it spin. It will eat up most all the CPU time!

Once you set up this "internal environment," you use the appropriate
kernel function(s) such as sys_open(), etc. You need to look at the code
and figure out what the parameters are. This is all very scary stuff and
it will take a long time to get it right. Once you have that working, there
is no guarantee that it will work with another kernel version simply by 
recompiling it. This is because some kernel versions lock portions of kernel 
code that you need. It's a pain.

In the unlikely event that you get a reasonably bug-free system running,
please publish the code on some web-site so it can be referenced in the
future by people whose bosses are idiots.


Cheers,
Dick Johnson
Penguin : Linux version 2.6.16.24 on an i686 machine (5592.72 BogoMips).
New book: http://www.AbominableFirebug.com/
_
\x1a\x04

****************************************************************
The information transmitted in this message is confidential and may be privileged.  Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited.  If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to DeliveryErrors@analogic.com - and destroy all copies of this information, including any attachments, without reading or disclosing them.

Thank you.

  reply	other threads:[~2007-01-12 14:27 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-12  7:47 congwen
2007-01-12 10:27 ` Jesper Juhl
2007-01-12 10:43   ` Jan Engelhardt
2007-01-12 10:54     ` Jesper Juhl
2007-01-12 10:59       ` Jan Engelhardt
2007-01-12 13:24   ` Erik Mouw
2007-01-12 14:27     ` linux-os (Dick Johnson) [this message]
2007-01-12 14:42       ` Erik Mouw
2007-01-12 22:31       ` Jan Engelhardt
2007-01-19 10:35       ` Helge Hafting

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.61.0701120907430.23919@chaos.analogic.com \
    --to=linux-os@analogic.com \
    --cc=congwen@gmail.com \
    --cc=erik@harddisk-recovery.com \
    --cc=jesper.juhl@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --subject='Re: How can I create or read/write a file in linux device driver?' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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