在android系统中,以上几个小节文章中,把它的分层做了一些简单的描述,接下就是内核驱动相关的内容。这是一个自由的世界,当然很复杂。也正是因为自由,才可以构建不同的操作系统世界,android是其中之一。不管android是不是传统意义上的linux上的操作系统,它毕竟实现了一些很有用的东西。
对于内核这里不想详细展开,毕竟自己的功底也有限。单说一些简单的驱动。事实上,自己所接触的驱动颇为简单,无外乎管脚的控制。下面以一个简单char驱动来说明android底层的东西,其实就是linux驱动内容:
对于驱动开发,那么肯定是要看“ Linux 设备驱动程序第三版 2.6 ”( LDDP )这本书了。目前已经是 2.6 版本了,有中文版本。
看完这本书,再看以下例子,你会觉得非常简单。不看那本书,按照以下例子,当然也可以写一个简单的驱动程序,需要注意的下面的例子是字符驱动。
写 linux 下驱动有一个框架,一般来说完成以下几个函数就可以了。
xxx_read(struct file *filp, char __user *buff, size_t count, loff_t *offp)
xxx_write(struct file *filp, const char __user *buff, size_t count, loff_t *offp)
xxx_open(struct inode *inode, struct file *filp)
xxx_release(struct inode *inode, struct file *filp)
xxx_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
static int __init xxx_init(void)
static void __exit xxx_exit(void)
module_init(xxx_init);
module_exit(xxx_exit);
实际应用中,字符驱动 write/read 函数很少用到。一般也可以不实现,可以由 ioctl 函数来实现。
驱动与应用程序接口函数对应,看驱动函数的名字就知道了。
xxx_read <---> read
xxx_write <---> write
xxx_open <---> open
xxx_release <---> close