Tek-life | Linux-kernel & My life. Wilson的日志 - 网易博客. Linux 驱动程序初窥 - xiaobenzhu. 今天天气不错,微风习习,清爽宜人。 这么好的天气不能辜负,不如我们来写个linux驱动程序吧。。。 - -||| 首先亮一下装备: 参考资料:LDD 平台:Ubuntu 8.10 ,linux内核 2.6.27 编译器:gcc 友情出演:python、emacs 目的:编写一个什么都不干的字符设备驱动,了解linux驱动工作原理 基础知识: 不同于windows驱动程序,Linux设备驱动程序在与硬件设备之间建立了标准的抽象接口。 Linux中的设备可大致分为字符设备、块设备、网络设备等。 (右图为linux驱动工作的基本示意图) 动手编写: linux内核源码中驱动程序占了相当大的比重,这些驱动程序可以被编译进内核,也可以编译为模块以供动态加载,为了便于调试以及一些列不可告人的目的,猪的第一个驱动程序将以模块的形式出现(废话,难道为了一个什么都不做的驱动重新编译内核?) 首先列出这个驱动的源码: Example Source Code [ /* hello.c */ #include <linux/module.h>#include <linux/moduleparam.h>#include <linux/init.h> static struct cdev helloDev; /* hello device structure */ /* file operations for hello device */static struct file_operations hello_ops = { .owner = THIS_MODULE, .open = hello_open, .read = hello_read, .write = hello_write, .release = hello_release,};/* Open the device */static int hello_open( struct inode *inode, struct file *filp ){ printk( KERN_NOTICE"Hello device open!
注意事项: 1. 2.最后两句module_init( hello_init ); module_exit( hello_exit );指定了模块初始化和关闭函数 驱动详解: 1. Inside SW,FW and HW R&D. 本书自第1版出版以来,在极短的时间里就进入了畅销版的前十,获得了年度“十大原创经典”、“十大畅销经典”等殊荣。 在长达二年半的时间里,本书始终保持在销售排行榜的前列。 在此,笔者要向广大读者的支持和厚爱表示最真挚地感谢! 但是,本书自从出版后,也暴露了一些问题,主要体现在: 1.没有现成的开发环境,读者需要从头到尾构建,而构建需要花费很长的时间,许多时候会不成功,加之配套光盘中的实例没有Makefile,更加重了操作的难度; 2.没有配套的开发板,大量的基于S3C2410的实例找不到可以直接运行的平台,因此读者无法亲身体验这些驱动; 3.一些内容并不实用或陈旧,也有一些知识点的讲解语言晦涩,读者难以理解,典型如platform驱动等; 4.一些知识点并不完整,如input驱动、USB UDC和gadget驱动、SPI驱动、ASoC驱动等。
有鉴于此,笔者对全书超过40%的篇幅进行了改动。 1.直接提供VirtualBox虚拟机,该虚拟机上已包含了书中所需开发环境和源代码,读者不再需要安装环境即可进行试验,书中详细介绍了各个试验的步骤; 2.提供了专门的配套学习板——基于三星S3C6410 SoC的LDD6410(Linux Device Drivers 6410),使得书中的各种真实设备驱动实例都找了试验的依托; 3.全面升级内核至Linux 2.6.28.6,根据Linux内核API的变更情况更新了书中的所有内容,典型如I2C驱动的体系结构、网络NAPI的接口等,并对delayed_work等较新的内核机制进行了介绍; 4.删除了大量过时的内容,如redhat Linux 2.4内核更新到2.6、传统的按键驱动、SAA7113H启动、传统的IDE驱动等,同时新增了大量内容,包括Linux内核的编码风格、Linux内核的移植、Android驱动、USB UDC和gadget驱动、ALSA SoC驱动、input驱动、SPI驱动、基于sysfs的设备驱动、Linux设备驱动的固件加载、Linux性能调优工具、Linux设备驱动的电源管理、Linux驱动的分层设计思想、主机驱动与设备驱动分离设计思想等; 5.在块设备驱动方面,删除了RAMDISK驱动实例,而新增了更加简单易懂的vmem_disk驱动,类似于globalmem和globalfifo; 2010年6月.
Hbhuanggang - ChinaUnix博客 - IT人与你分享快乐生活. 博文__Zz_ 第一章 模块(Modules) - huzoy的日志 - 网易博客.