Chinaunix首页 | 论坛 | 博客
  • 博客访问: 34488
  • 博文数量: 6
  • 博客积分: 200
  • 博客等级: 二等列兵
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-08 15:06
文章分类
文章存档

2011年(1)

2009年(5)

我的朋友
最近访客

分类: LINUX

2009-06-04 16:29:37

1.驱动(driver)和设备(device)的关系:
  这涉及到两个/dev/文件夹 和 /proc/devices文件
  /dev/目录下的文件表示设备,这些设备是通过mknod创建的.
  /proc/devices文件的每一项都表示一个设备类型,也即驱动.
  mknod在创建/dev/下的设备时,需要指定设备类型。如:
  mknod /dev/somedev c 1 20
    1(major)表示类型为mem.查看/proc/devices文件看到,1对应的是mem. 通过ls -l /dev查看/dev底下有好几个设备类型都是mem。也就是说当你register_chrdev()时,你只是写了一块代码,这些代码还没有具体地跑起来,mknod创建设备文件,由于指定了你的设备类型(major),这个设备文件对应的write,read,ioctl函数和你写的函数绑定在一起了。当read write ioctl这个设备文件时就执行了你写的代码。
    20(minor)是为了区分1这种类型下的多个设备。 major与minor一起才能确定这个设备。
  设备类型由register_chrdev(),register_blkdev()注册。register_chrdev(),register_blkdev()可以由kernel调用,也可以由内核模块调用

2.模块(module)和驱动(driver)的关系:
  模块就是*.ko文件,可以由insmod动态地加载到内核,模块调用register_chrdev( ),这个模块也就是驱动了。

3.linux的模块主要有几类,可以动态增强内核功能:

Functionality

Functions for Dynamic Registration

Character devices

(un)register_chrdev( )

Block devices

(un)register_blkdev( )

Binary formats

(un)register_binfmt( )

File systems

(un)register_filesystem( )

Serial interfaces

(un)register_serial( )

Network adapters

(un)register_netdev( )

Layer-3 protocols

dev_add_pack( ), dev_remove_pack( )

Layer-4 protocols (TCP/IP)

inet_add_protocol( ), inet_del_protocol( )

Console drivers

tty_(un)register_driver( )

Symbol tables

(un)register_symtab( )

Modules

init_module( ), cleanup_module( )


阅读(1789) | 评论(0) | 转发(0) |
0

上一篇:查看磁盘情况

下一篇:gcc自动画流程图

给主人留下些什么吧!~~