网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月07日漏签0天
c吧 关注:134,345贴子:394,832
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1回复贴,共1页
<<返回c吧
>0< 加载中...

linux内核模块

  • 只看楼主
  • 收藏

  • 回复
  • 西安恩仪联教育
  • 举人
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
内核模块和应用程序
1、内核模块概念
内核模块是具有独立功能的程序。它可以被单独编译,但是不能单独运行,它的运行必须被链接到内核作为内核的一部分在内核空间中运行。模块编程和内核版本密切相连,因为不同的内核版本中某些函数的函数名会有变化。因此模块编程也可以说是内核编程。模块本身不被编译进内核映像,从而控制了内核的大小;模块一旦被加载,就和内核中的其他部分完全一样。
2、应用程序和内核模块编程比较

3、hello world 驱动程序
驱动模块组成:
一个规范驱动模块应该包含的结构:(以下顺序是在源文件中顺序):
(1). 头文件(必选)
(2). 模块参数(可选)
(3). 模块功能函数(可选)
(4). 其他(可选)
(5). 模块加载函数(必须)
(6). 模块卸载函数(必须)
(7). 模块许可声明(必须)
示例如下:
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("DAVID");
MODULE_DESCRIPTION("Hello world module");
static int __init hello_init(void)
{
printk(KERN_ERR "hello world!\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_EMERG "hello exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
注意:代码中__init 和__exit 是 linux 内核的宏定义,使系统在初始化或卸载
完成后执行该函数,并释放其所占内存。
(1)头文件:
驱动模块需要使用内核中的许多函数,需要包含必要的头文件,以下两个
头文件是所有驱动模块都必须包含的
#include<linux/module.h> 加载模块时需要使用的大量符合和函数定义。
#include<linux/init.h> 模块加载函数和模块释放函数的宏定义。
(2)模块参数:
模块参数是驱动模块加载时,需要传递给驱动模块的参数。如果一个模块
需要完成两种功能,可以通过模块参数选择使用哪一种功能
(3)模块加载函数:
模块加载时,需要执行的函数
(4)模块卸载函数:
模块卸载时,需要执行的函数
(5)模块许可声明:
模块许可声明表示模块受内核支持的程度,有许可权的模块会更受开发人
员的重视。


  • 华生0211
  • 贡士
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
3


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回c吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示