一、添加模块
方式:
1.直接编译到内核
2.做成模块
insmod
rmmod
3.menuconfig
二、注册驱动
设备分类:
1.字符设备
1. 输入设备
2. fb设备
3. sound设备
4. tty设备
5. misc
6. ...
2.块设备
3.网络设备
4.自己创建类
步骤:
1. 创建类: 创建函数 class_create device_create 在/sys/class/myclass生成对应的类
2. 生成节点: 执行 mdev/udev 生成 /dev/*
注册方式:
1./proc
2.字符设备
1.cdev
1.初始化并注册 cdev: 注册函数 cdev_init
2.查看已在系统中注册的字符设备: cat /proc/devices
3.创建设备节点: mknod /dev/mdev c 250 0
4.操作节点: echo "hello world" > /dev/mdev cat /dev/mdev
2.输入设备input_dev: 基于cdev并封装了class等
1. 初始化并注册input_dev: 注册函数:input_register_device
2. 查看已在系统中注册的输入设备: cat /proc/bus/input/devices
3. 查看已在系统中生成的类: cat /sys/class/input/eventX
4. 查看已在系统中生成的节点: cat /dev/input/eventX
3.块设备
4.网络
1.注册网络设备驱动
1.net_device 的生成和成员的赋值并同时申请私有空间: alloc_netdev
2.取得私有信息,并初始化它: netdev_priv
3.注册网络设备驱动: register_netdev
2.查看已注册的网卡: ifconfig all
3.启动网卡: ifconfig ethX up
5.未归类:虚拟设备 globalmem 和 globalfifo
驱动模型:
注意:所谓的platform_device并不是与字符设备、块设备和网络设备并列的概念,而是Linux系统提供的一种附加手段。参考:linux设备驱动开发详解p257
1.bus模型:
1.bus_register
2.driver_register
3.device_register
2.platform:基于bus模型已创建好的bus
1.bus: platform
2.driver: platform_driver_register
3.device: platform_device_register
原创:疯狂十六进制(更新中)
---------------------------------------------------------------------
一、字符
二、块
三、网络
2.查看已在系统中注册的字符设备
2.input_dev: 基于cdev并封装了class等
阅读(1331) | 评论(0) | 转发(0) |