(版本为2.6.17.7) 内核初始化设备驱动的过程:start_kernel()->rest_init()->do_basic_setup()->do_initcalls() 函数do_initcalls如下: for (call = __initcall_start; call < __initcall_end; call++) {//循环调用__initcall_start与__initcall_end之间函数 ......... result = (*call)(); ......... } 关于module_init的定义如下: #define __define_initcall(level,fn) \ ...
by 小z - 内核源码 - 2008-07-23 21:13:03 阅读(6599) 回复(4)
在linux下的驱动函数都有module_init(x)和module_exit(x)在linux内核里都定义成一个宏例如: #define module_init(x) \ int init_module(void) __attribute__((alias(#x))); \ extern inline __init_module_func_t __init_module_inline(void) \ { return x; } 我的问题是这个宏是怎么理解的?具体的说是经过这个宏定义后函数module_init(x)理解为是int init_module(void) __attribute__((alias(#x))); 还是extern inline...
[code]
#include
新手刚学驱动开发,请教下面的代码,
如果输入的参数who为空,我这边打印init failed,但是实际上module已经加载到内核中了,
想问下,如果我想让参数为空时不加载该模块,应该怎么改?直接调用module_exit吗?有什么好的错误处理机制吗?谢谢。[code]#include
我虚拟机装的是redhat9
hello.c代码如下:[code]#ifndef _KERNEL_
#define _KERNEL_
#endif
#ifndef module
#define module
#endif
#include
想在2.6.15内核中加入一些网络参数。这部分以单独的目录项 如linux-2.6.15/cfg/下, 在启动时从flash中得到参数的内容, 所以这部分中必要在网络模块加载前以经启动,这部分提供一些全局变量与调用接口供linux-2.6.15/net/下的模块调用,二者都以module_init方式加入内核,然而2.6中初始化函数都用module_init(fn)声明的话,则实际上等价于device_initcall(fn), 执行顺序则不定,所以我将前者放在linux-2.6.15/下主makefile最先编...
想在2.6.15内核中加入一些网络参数。这部分以单独的目录项 如linux-2.6.15/cfg/下, 在启动时从flash中得到参数的内容, 所以这部分中必要在网络模块加载前以经启动,这部分提供一些全局变量与调用接口供linux-2.6.15/net/下的模块调用,二者都以module_init方式加入内核,然而2.6中初始化函数都用module_init(fn)声明的话,则实际上等价于device_initcall(fn), 执行顺序则不定,所以我将前者放在linux-2.6.15/下主makefile最先编...
小弟初学驱动编程,想熟悉下环境,就编了个小程序,但出现问题,求助各位大侠!
我虚拟机装的是redhat9
hello.c代码如下:
#ifndef _KERNEL_
#define _KERNEL_
#endif
#ifndef module
#define module
#endif
#include