Linux 驱动的写法

驱动的写法:

===========


1>驱动是否需要用到设备模型,要看是否用到总线(设备模型是按总线来分类的),比如简单的IO设备,LED等无需要到设备模型,比如ADC,看门狗等是内部设备用到了三总线可以用platform_driver,platform_device的设备模型来写,I2C,SPI等用到了总线也需要用设备模型的方法来写(spi_driver, spi_device, i2c_driver, i2c_device)

2>看是char,块,还是网络设备

3>如果是char驱动考虑是否可不可以归类到char驱动的input,tty,fb,v4l2,alsa的几类子系统中,不可以则用直接访问的方法来写



问题:
    一个spi接口的flash芯片,需要支持块擦除,写入,读取,校验等行为,如何写驱动?

驱动要用spi_driver进行封装,并准备spi_device;

思考:是char, block还是网络驱动?
可以直接写char驱动。
在ioctl命令中,完成块擦除,写入,读取,校验等操作;

flash芯片无法归类到input,tty,fb,v4l2,alsa等类型中,因此驱动不需要按照某个子系统的要求来设计



用misc设备的驱动的测试:
$>cd work/drv-arm/02led/
//测试led_test03.c
$>make
$>make install
$>make install-elf
//需修改Makefile,增加新的install-elf目标
$>adb shell
root@tiny4412>insmod /system/lib/modules/led_test03.ko
root@tiny4412>led01 /dev/myled on|off 0~3
root@tiny4412>cat /proc/led_misc
root@tiny4412>rmmod led_test03
//misc设备可以自动管理/dev下的设备文件,不用自己mknod


android驱动的测试流程:
$>cd work/drv-arm/02led/
$>make
$>make install
//编译.ko,安装到开发板上,需修改Makefile
$>adb shell
//登录开发板,后面内容在开发板上执行

root@tiny4412>insmod /system/lib/modules/led_test01.ko led=3
root@tiny4412>cat /proc/led_info
root@tiny4412>mknod /dev/myled c 55 0
root@tiny4412>echo on >/dev/myled //灯亮
root@tiny4412>echo off >/dev/myled //灯灭
root@tiny4412>exit


x86驱动的测试流程:
$>insmod char_test01.ko
//安装模块,自动在/proc下生成buf_info

$>cat /proc/buf_info
//了解设备信息,包括设备号等,下一步根据设备号手工创建设备文件

$>mknod /dev/mychar0 c 50 100
//创建设备文件

$>echo asfwqrwqee >/dev/mychar0
$>cat /dev/mychar0
//对设备进行读写测试

$>./user01 /dev/mychar0 reset
$>./user01 /dev/mychar0 resize 800
//向设备发命令测试



linux一切皆文件:

1. 普通文件(-) touch
2. 目录(d) mkdir
3. 字符设备文件(c) mknod
4. 块设备文件(b) mknod
5. 有名管道(p) mkfifo
6. socket文件(s) mksock
7. 符号连接(l) ln -s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值