阅读:1678回复:7
请教版主――模块的按需加载
这个问题已经困扰我很长时间了,现在老板就蹲在我身旁要结果,只好求助于版主了,还请版主可怜可怜。
现在我已经完成了驱动程序,老板还要求实现驱动的自动加载。尽管我也实现了在系统启动时加载驱动,但老板还是不满足(一位兄弟说用户的需求是无限的),非要我实现驱动模块的按需加载。我对模块的按需加载不是很清楚,LDD上有这么一章,但我感觉模块的请求加载(request_modules())是运行在核心态的。那么对驱动模块来说应该在什么时侯由谁加载。是由用户程序吗?如何加载;要么由系统在检测到硬件时加载,由该如何做? 为什么郁闷的总是我!!! |
|
沙发#
发布于:2003-08-09 22:36
模块加载有2种,一种是在系统启动时,由启动脚本文件启动。相当于dos的批处理。
另一种是在运行时,用户加入模块。 两种情况都是模块在内核之外。都由insmod完成。 还可把模块编译为内核的一部分。启动内核时,自动加载了驱动。而不用客户进行任何处理。 方法是在驱动的init函数前加__。 驱动都写了,还郁闷啥,呵呵。 |
|
板凳#
发布于:2003-08-12 18:10
救星呀,unix1998:
能不能将用户加入模块的方法写详细一些,小弟先跪谢了,哈哈. 下次给你再加分. |
|
地板#
发布于:2003-08-12 23:03
打那么多字很辛苦的,呵呵。
上次说的还不详细啊? 那本ldd其实很详细。 拥护对于没有加入内河的模块,只要insmod命令 |
|
地下室#
发布于:2003-08-13 08:57
老大是这个意思呀!这是手动加载嘛。
现在小弟想做的是自动按需加载,即在用户应用程序里加载,LDD中确实有按需加载的概念,但却是在内核下通过request_module()函数实现。小弟该如何做才能在用户应用程序里实现加载。 |
|
5楼#
发布于:2003-08-13 10:21
一个简单的办法是exec调用。
参数是你的insmod命令 |
|
6楼#
发布于:2003-08-13 17:42
老大你好:
我试过exec了。我在应用程序里加了一句: execl(\"/sbin/insmod\",\"insmod\",\"driver.o\".NULL); 运行后驱动程序能被加载,但有一个问题是程序运行完这一句后就自动退出,不执行下面的任何语句,系统也不提示任何错误,驱动程序也能正常工作。这是为什么呀? |
|
7楼#
发布于:2003-08-14 10:26
谢谢老大!小弟的问题终于搞的了。上次是因为没有考虑到进程同步的问题,导致程序有点错误。现在搞定了,哈哈!!!
现在我不郁闷了!!! |
|