一、驱动的基础知识,老谢说的对,驱动其实就是操作硬件的软件。
两个基本的点必须永远记住:
1)设备的分类:①块设备 block
②字符设备 char
③网络设备
2)块设备和字符设备的区别
①字符设备是按字节进行读写的
②块设备是按块进行读写的,只能一次传送一个或多个长度是512字节( 或一个更大的 2 次幂的数 )的整块数据
3)linux中块设备和字符设备的区别:Linux中允许块设备传送任意数目的字节。
4)块设备和字符设备还有一点点区别是访问顺序的问题,块设备可以随机的访问,而字符不可以。
PCI和USB这种分类方法是按照总线的分类方法进行分类的。
块设备和字符设备的区别仅仅是驱动的与内核的接口不同!!!!!
驱动程序写到了网络接口个人觉得已经到了大牛的地步。
关于网络接口各种套接字,各种socket,至今没有机会去了解。但是对于菜鸟可以初步理解成IO口,别的我们不懂,操作一个IO口还算是熟悉的吧?那好,就按照这个思路去学吧,我也没学,只看过一点书,希望是这样的。
谢老师的课件是下面这么说的。
任何网络事务都通过一个接口来进行, 一个接口通常是一个硬件设备(eth0), 但是它也可以是一个纯粹的软件设备, 比如回环接口(lo)。一个网络接口负责发送和接收数据报文。
linux驱动程序的安装的两种方式:
1.模块的安装。
2.直接编译进内核。
二、把一个驱动程序编译进内核
环境:红帽企业版5,linux内核是3.4.2。
这次配置完全是在没有单板相关的情况下进行配置的,如果想要单板相关,只要修改一下.config就可以了。
在进行各类修改之前先把自己写好的小的测试程序放入 /drivers/char目录下。
1.修改kconfig ----------------------用于修改配置菜单。
①进入drivers目录,然后再进入char(字符)目录,修改里面的Kconfig。
②在Kconfig目录下添加如下代码config HELLO_WORLD
(注意使用TAB键)bool "helloworld"
完成第二步以后在根目录下执行make menuconfig,进入驱动目录下的Character divece目录就可以发现helloworld(new)的目录项。
显示配置结果。查看配置结果去看.config就可以查看。到根目录下执行.config。搜索HELLO就可以查看了(大家都懂得)。
2.修改Makefile
①进入驱动所在目录下的Makefile,此处进入linux-3.4.2/drivers/char这个目录,对这个目录下的Makefile进行修改。
②在Makfile中添加如下代码。obj-$(CONFIG_HELLO_WORLD) += hello.o
修改好了直接编译内核即可。