文档详情

linux-device-drivers-read-write.pdf

发布:2017-04-09约1.18万字共27页下载文档
文本预览下载声明
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 =
显示全部
相似文档