模块退出前的__exit宏表示,这个函数会被链接到.exit.text段,这个段的代码只会在模块被移除的时候执行
module_init宏把akae_init函数别名为init_module的模块入口函数。
module_exit宏表示把akae_exit函数别名为cleanup_module的模块退出函数。
模块中都可以指定这两个宏,也可以都不使用这两个宏,但是如果仅仅调用module_init宏,没有调用module_exit宏,模块插入后将成为【permanent】,不能被移除。
模块参数
使用宏module_param(变量名,变量类型,文件权限)来定义参数
insmod hello.ko count=1000 p="hello world"
可以在insmod命令的参数里指定模块参数的新的值。
可以在/sys/module/模块名/parameters目录中找到一个和模块参数同名的文件,跟踪它的值。
字符设备驱动:
应用程序报错的几种原因:
1.设备文件没有创建
2.设备文件创建时和应用程序中要打开的文件名不一样
3.设备文件是正确的,但是驱动模块没有插入内核
4.设备文件名字是正确的,驱动也插入内核了,但是设备文件的主设备号和驱动的主设备号不匹配
5.设备文件的读写权限不对
module_init宏把akae_init函数别名为init_module的模块入口函数。
module_exit宏表示把akae_exit函数别名为cleanup_module的模块退出函数。
模块中都可以指定这两个宏,也可以都不使用这两个宏,但是如果仅仅调用module_init宏,没有调用module_exit宏,模块插入后将成为【permanent】,不能被移除。
模块参数
使用宏module_param(变量名,变量类型,文件权限)来定义参数
insmod hello.ko count=1000 p="hello world"
可以在insmod命令的参数里指定模块参数的新的值。
可以在/sys/module/模块名/parameters目录中找到一个和模块参数同名的文件,跟踪它的值。
字符设备驱动:
应用程序报错的几种原因:
1.设备文件没有创建
2.设备文件创建时和应用程序中要打开的文件名不一样
3.设备文件是正确的,但是驱动模块没有插入内核
4.设备文件名字是正确的,驱动也插入内核了,但是设备文件的主设备号和驱动的主设备号不匹配
5.设备文件的读写权限不对