首页 /  技术专区  /  C 宽屏模式 >

宏深入用法——Linux驱动中的真实案例module_init()带参宏

Linux驱动中的真实案例——module_init()带参宏

不过为了讲清楚这个例子,我们需要先做一些知识铺垫。

当然我们这里讲Linux驱动中的这个案例,实际上也是在为后面Linux驱动的课程打基础,有一定的知识铺垫后,对于大家后面学习驱动的课程,也是非常有帮助的。

(1)入口函数

        1)什么是入口函数

        入口函数就是程序启动起来后,第一个被调用的函数,这个函数就是入口函数,对于我们c应用程序来说,main函数就是我们自己应用程序的入口函数,我们自己写的应用代码,就是从main这个入口开始执行的,其它所有的子函数,都是靠这个入口函数来调用的。



        2)入口函数的名字怎么来的

        比如main这个名字怎么来的,通过第1章课程的学习我们都知道,main函数是由启动代码调用的,所以入口函数叫什么名字,实际上是由启动代码决定的,启动代码规定这个名字应该叫wwww,那我们写main函数时main就应该写为wwww。

        对于c系的语言来说基本已经约定俗成,应用代码的入口函数大多都叫main,如果你写其它的名字,编译时就直接提示你没有main入口函数,没有main函数的话,启动代码根本就没办法调用我们自己写的应用代码。


        3)入口函数有没有不叫main

        还真有,比如win32图形界面编程,虽然图形库的接口函数都是c语言写的,但是我们在写win32的图形界面程序时,它的入口函数就不叫main,而是叫WinMain。


        win32图形界面库是windows的基础图形界面库,windows上运行的c++、java、c#程序时,它们的图形界面库基本都是基于win32图形界面库进行二次封装得到的,实现图形界面时最终调用的还是windows图形界面库,不过这个情况在Linux这边就有所不同,这里我们不深究这个问题,只是顺带提下。

        为什么不叫main?

        实现win32图形界面库的这帮家伙就是不想叫main,他们在实现启动代码所需的.o时,人家规定入口函数就是叫WinMain,你还能怎么着。


        4)驱动程序的入口函数

        我们这里主要讲的是Linux驱动程序,驱动程序写完之后是需要加入Linux内核,成Linux内核的一部分,加入后内核就可以调用驱动程序去控制我们的硬件了,为了能够调用驱动程序,驱动程序必然也要有入口函数,以供Linux内核调用。

        应用程序(如果是C写的话,一般main是入口函数)

            |

            | 

        OS API

            |

        Linux 内核

            |

        驱动程序(驱动入口函数)

            |

            |

        硬件(通过读写寄存器去控制硬件)

        Linux驱动程序的入口函数又叫什么名字呢?

        不是一个固定的名字,名字是由我们驱动开发者自己给的,只要通过module_init(驱动入口函数名)向内核提交这个名字,Linux内核就知道应该通过调用这个函数,去调用驱动程序了。

        module_init是由谁提供的?

        肯定是由Linux内核提供的,只有这样才能向Linux内核提交驱动的入口函数。

        为什么允许Linux驱动的入口函数可以自己命名?

        这样更人性化,你可以根据你自己所实现的驱动的用途不同,起一个更好识别的更贴切名字,可以更好的见名识意思。




头像
0/200
图片验证码