Linux 驱动程序--- 入门 --- 将hello.c 编译进内核

来源:互联网 发布:qq ubuntu版下载 编辑:程序博客网 时间:2024/04/28 09:16

Linux驱动学习

(1)  知识结构:

1,Linux驱动设计规范 50%.

2,内核相关知识 25%.

3,硬件相关知识 25%.


(2)  学习方法:

 理论 ---> 实验 ---> 疑问 ---> 理论 ---> 实验 .


(3)  驱动程序定义:

什么是驱动程序: 使硬件工作的软件.


(4)  驱动分类:

            1,字符设备驱动.

            2,网络接口驱动.

            3,块设备驱动.


字符设备:

            字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,

            这样的驱动通常实现 open ,close ,read , write 系统调用.

块设备:

            在大部分的Unix 系统,块设备不能按字节处理数据,只能一次传送一个或

            多个长度是512字节 (或一个更大的2次幂的数) 的整块数据.

            而Linux 则允许块设备传送任意数目的字节.

网络接口 :

            任何网络事务都通过一个接口来进行,一个接口通常是一个硬件设备(eth0),

            但是它也可以是一个纯粹的软件设备,比如回环接口 lo

            一个网络接口负责发送和接收数据报文.


(5) 块和字符设备区别 :

 仅仅是驱动的与内核的接口不同 .



(6)  驱动程序的安装:

                        1,模块方式.

                        2,直接编译进内核.

直接编译进内核 --- hello.c :

                        1,kconfig 文件.

                        2,Makefile 文件.

举例:将hello.c 编译进内核.

            1,首先将 hello.c  代码拷贝到内核代码中.

                        由于是字符设备,所以拷贝到 Linux-2.6.29/drivers/char/ 目录下.

            2,修改 Kconfig 文件:在 Linux-2.6.29/drivers/char/ 目录下 .

                        该文件的作用:产生 menuconfig 菜单内显示的内容 .

                        具体操作:增加内容: 

                        config HELLO_DRIVER

                                    bool  " my hello driver "

                        { 查看上步操作效果:保存退出到内核代码根目录下 执行 make menuconfig 

                        在Device Drivers ---> Character devices ---> [ _ ] my hello driver(NEW) 

                        将 [ _ ] my hello driver(NEW)  选中,保存退出配置,在内核代码根目录下 vi .config 

                        查看配置完成的文件,  我们可以看到  CONFIG_HELLO_DRIVER = y  }

            3,修改 Makefile 文件. 在 Linux-2.6.29/drivers/char/ 目录下.

                        具体操作:增加内容:obj-$(CONFIG_HELLO_DRIVER)   += hello.o 

                        { 所以,我们通过 Kconfig 文件直观显示并且选择我们需要编译进入内核的,

                        会在配置文件 .config 文件里有记录,make 时,Makefile根据配置文

                        件 .config  来编译内核. }


(7)  Linux 用户如何使用驱动程序:




(8) 设备(字符,块)文件  位置 及 用途:

            在 /dev 目录下 ls -al  .

            { C 开头的是 字符设备文件, b 开头的是 块设备文件 .}

            Linux 用户程序通过 设备文件(又名:设备节点) 来使用 驱动程序 操作 字符和块 设备文件.