驱动的写法:
===========
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