内核程序的基本框架
来源:互联网 发布:mac版pscc2017破解补丁 编辑:程序博客网 时间:2024/06/06 13:42
应用程序的基本框架
#include <stdio.h> //标准C库的头文件 //main 就是程序的入口函数int main (void){ printf ("...\n"); //标准C的库函数 return 0; //程序的出口}
内核kernel程序的基本框架
vim helloworld.c
#include <linux/init.h>#include <linux/module.h>static int helloworld_init (void){ printk ("hello, world\n"); return 0;}static void helloworld_exit(void){}module_init(helloworld_init);module_exit(helloworld_exit);MODULE_LICENSE("GPL");
代码总结
1.内核程序使用的头文件位于内核源码中,而不是标准C的头文件!
所以编译内核程序时,需要用到内核源码。
2.static int helloworld_init (void)
{
return 0;
}
此函数为程序的入口函数;
内核要求形参为void
返回值的数据类型为int
如果执行成功返回0,执行失败返回负值;
*问:如何判断此函数为入口函数呢?
答: 通过module_init宏进行修饰,告诉内核修饰函数就是入口函数
module_init (helloworld_init);*
3.static void helloworld_exit(void) { }
此函数为内核程序的出口函数
*问:如何判断此函数为出口函数?
答:通过module_exit宏进行修饰,告诉内核此函数为程序的出口函数 module_exit (helloworld_exit);*
4.内核打印信息用printk, 此函数的定义不是在标准C库中,而是在内核源码中!
同样在编译内核程序需要利用内核源码!
5.MODULE_LICENSE(“GPL”);
内核程序必须一律添加此句! 告诉内核此程序同样遵循GPL协议!
案例
编写第一个内存程序实施步骤
1.mkdir /opt/drivers/1.0 -p
2.cd /opt/drivers/1.0
3.vim helloworld.c
添加如下内容:
#include <linux/init.h> #include <linux/module.h> static int helloworld_init(void) { printk("hello,world!\n"); return 0; } static void helloworld_exit(void) { printk("goodbye,world!\n"); } module_init(helloworld_init); module_exit(helloworld_exit); MODULE_LICENSE("GPL");
4.保存退出
*问:如何编译内核程序?
答:
明确:编译内核程序需要利用内核源码*
5.编写Makefile文件进行编译内核程序
Makefile语法:
目标: 依赖
TAB键 编译命令
vim Makefile,添加如下内容:
obj-m += helloworld.o #将helloworld.c编译生成最终的二进制可执行文件helloworld.ko
all:
make -C /opt/kernel SUBDIRS=$(PWD) modules#到内核/opt/kernel源码中进行make编译,然后告诉内核, 在你的源码以外还有一个目录/opt/drivers/1.0, 在这个目录下有一个.c文件需要你进行编译,要把它编译生成.ko文件
clean:
make -C /opt/kernel SUBDIRS=$(PWD) clean
6.执行make 进行编译
结果是: helloworld.c -> helloworld.ko
7.拷贝可以执行程序helloworld.ko到开发板上
cp helloworld.ko /opt/rootfs
8.问:如何让helloworld.ko中运行在内核kernel中
答:利用内核程序操作相关的命令
insmod = insert + module
作用:加载内核程序到kernel,内核程序开始运行
此时内核执行其入口函数helloworld_init ,如果入口函数执行成功(返回0),此程序永远运行在内核中,否则(返回负值)运行停止!
用法:insmod helloworld.ko
lsmod = list + module
作用:查看当前kernel中有哪些正在运行的程序
用法: lsmod
rmmod = remove + module
作用:删除指定的内核程序 ,此时内核会执行其出口函数 一旦删除,kernel中不会再有此程序
用法:rmmod helloworld
- 内核程序的基本框架
- MFC程序的基本框架
- windows 程序的基本框架
- Windows SDK程序的基本框架
- JavaSE基本框架的编写程序
- 基于TCP的通讯程序----基本框架
- Android程序开发的基本框架
- unity3d基本的C#程序框架
- mpi并行程序的基本框架
- Windows程序基本框架
- windows基本程序框架
- S60基本程序框架
- iOS程序基本框架
- java程序基本框架
- 关于两个程序的基本框架的肤浅理解
- AJAX学习之Atlas框架之建立基本的程序
- WINCE6.0下构建SilverLight程序的基本框架
- Struts1框架建立Web程序的基本步骤
- 大龄程序员的未来在何方
- 深度学习篇——Ubuntu16.04系统下部署caffe(CPU_ONLY)
- mysql时间加减函数
- vs2015 新建ADO.NET 实体数据模型向导,选择MySql数据库连接后点击下一步就闪退
- neo4j 服务器
- 内核程序的基本框架
- 大数据告诉你,中国有2亿单身狗
- 561. Array Partition I
- Android2个Activity之间传递对象
- nginx学习随笔--use
- 2017秋招笔试C++真题
- python codecs.open视\u2028字符为换行符
- C++文件读写详解(ofstream,ifstream,fstream)还有简单使用
- SOAPfuse 安装