linux-device-drivers-read-write.pdf
文本预览下载声明
LINUX 驅動程式架構入門
(2)
read/write
觀念講座
(1
hr.)
OpenMoko OpenLab Seminar
講師: Jollen’s Consulting | Jollen, 2007/12/19
jollen@
OpenMoko OpenLab Seminar. Copyright ? 2007,2008 Jollens Consulting.
講座內容與目標
■ 了解 Linux 驅動程式的 read/write 原理
■ 了解 kmalloc() kernel API
■ read/write: user-space vs. kernel-space
■ cdata 範例: nonblocking read/write 部份
2
OpenMoko OpenLab Seminar. Copyright ? 2007,2008 Jollens Consulting.
Linux Device Driver Architecture
System Call Interface
Virture File System(VFS)
Buffer Cache
Application
Character
Device Driver
Physical Device (Hardware)
Network Subsystem
Device Interface
Kernel Mode
User Mode
Hardware
Block
Device Driver
Network
Device Driver
BSD socket
inet(AF_INET)
Transport(TCP,UDP)
Network(IP)
Source: Jollen 的 Linux 驅動程式講義 (Revision 5)
3
OpenMoko OpenLab Seminar. Copyright ? 2007,2008 Jollens Consulting.
device file concept
Character
Device Driver
Block
Device Driver
Network
Device Driver
crw--w--w- 0 root root 5, 1 Oct 1 1998 console
crw-rw-rw- 1 root root 1, 3 May 6 1998 null
crw 1 root root 4, 0 May 6 1998 tty
crw-rw 1 root disk 96, 0 Dec 10 1998 pt0
crw 1 root root 5, 64 May 6 1998 cua0
brw 1 root floppy 2, 0 May 6 1998 fd0
brw-rw 1 root disk 3, 0 May 6 1998 hda
brw-rw 1 root disk 3, 1 May 6 1998 hda1
brw-rw 1 root disk 8, 0 May 6 1998 sda
brw-rw 1 root disk 8, 1 May 6 1998 sda1
Source: Jollen 的 Linux 驅動程式講義 (Revision 5)
4
OpenMoko OpenLab Seminar. Copyright ? 2007,2008 Jollens Consulting.
cdata::fops-open
51 int card_open(struct inode *inode, struct file *filp)
52 {
53 int devno;
54 struct card_data *cdata;
55
56 devno = inode-i_rdev;
57
58 cdata =
59 (struct card_data *) kmalloc(sizeof(struct card_data), GFP_KERNEL);
60 if (cdata == 0)
61 goto fail1;
62
63 cdata-str =
显示全部