内核之旅起航---简单内核模块和内核编程规则
2015-09-10 18:34
423 查看
内核模块与内核编程一些常识
首先把我之前的hello word 模块加载失败问题解决了。
首先:
更新内核,yum
update kernel 安装内核开发树。
内核模块hello word 代码:
下面是makefile
这个makefile 还有点缺点,就是没有clean ,不过对于这个演示并没有什么影响。
这个是编译结果:
然后是载入
但是并没有我们期待的输出。
这是因为根据系统传递消息的机制不同,得到的结果可能是不一样的,有的系统输出在终端,有的系统输出在某些文件里。
可是不论它输出在那里,都是从内核缓冲区出来的,所以我们可以使用dmesg 来查看内核缓冲区中的东西。
果然是OK 的。到这里这个模块就算是OK了。
下面是一些内核编程的规则和规范吧。
@前边有__的函数,一般就是接口的底层组件,应当谨慎使用,。本质是告诉程序员:“谨慎调用,否则后果自负”。
@不论代码是否使用,就算是睡眠的也一定要考虑并发的问题。
@少使用typedef 关键字
@内存的使用精打细算,能节省多少内存就减少多少内存。
@效率第一Linux内核的宗旨
首先把我之前的hello word 模块加载失败问题解决了。
首先:
更新内核,yum
update kernel 安装内核开发树。
内核模块hello word 代码:
<span style="font-size:18px;">#include<linux/init.h> //内核相关函数的头文件,内核编程不能调用C库 #include<linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); //用来告诉内核,这个模块遵循的许可 static int hello_init(void) //初始化模块 { printk("the first modules\n\n"); printk(KERN_ALERT "hello ,world\n"); return 0; } static void hello_exit(void) //清除模块 { printk(KERN_ALERT "GOODBYE,cure1 world\n"); } module_init(hello_init); //这两个宏分别注册初始化模块函数,注册退出函数 module_exit(hello_exit); </span>
下面是makefile
obj-m += hello.o DIR:=$(shell pwd) K_DIR:=$(shell uname -r) k_path := /usr/src/kernels/$(K_DIR) all: make -C $(k_path) M=$(DIR) modules
这个makefile 还有点缺点,就是没有clean ,不过对于这个演示并没有什么影响。
这个是编译结果:
然后是载入
但是并没有我们期待的输出。
这是因为根据系统传递消息的机制不同,得到的结果可能是不一样的,有的系统输出在终端,有的系统输出在某些文件里。
可是不论它输出在那里,都是从内核缓冲区出来的,所以我们可以使用dmesg 来查看内核缓冲区中的东西。
果然是OK 的。到这里这个模块就算是OK了。
下面是一些内核编程的规则和规范吧。
@前边有__的函数,一般就是接口的底层组件,应当谨慎使用,。本质是告诉程序员:“谨慎调用,否则后果自负”。
@不论代码是否使用,就算是睡眠的也一定要考虑并发的问题。
@少使用typedef 关键字
@内存的使用精打细算,能节省多少内存就减少多少内存。
@效率第一Linux内核的宗旨
相关文章推荐
- 内核之旅起航---简单内核模块和内核编程规则
- java swing 自定义鼠标光标及隐藏光标
- 运行MyEclipse的破解补丁时一闪而过
- 设置文字居中显示的三句代码
- 宏碁 aspire v3-571G 原win7升级的win10后 usb3.0速度慢的解决办法(只有15M/s吧 跟usb2.0差不多)
- Java中String类的方法及说明
- Java8 lambda表达式
- python随机数函数
- <aop:aspectj-autoproxy /> 的用法
- 初学Python
- 堆排序C++
- php exit()函数
- php创建新用户注册界面布局实例
- Yii2 配置框架国际化支持
- java笔记
- 图解 & 深入浅出Java初始化与清理:构造器必知必会
- eclipse使用相关
- 重新看php数组
- 图解 & 深入浅出Java初始化与清理:构造器必知必会
- C/C++_宏定义多次重复定义