Chinaunix首页 | 论坛 | 博客
  • 博客访问: 437328
  • 博文数量: 58
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 623
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-26 18:48
个人简介

在生存面前,那纯洁的理想,原来是那么脆弱不堪!

文章分类

全部博文(58)

文章存档

2022年(1)

2021年(1)

2019年(3)

2018年(6)

2017年(6)

2016年(14)

2015年(10)

2014年(16)

2013年(1)

我的朋友

分类: 嵌入式

2014-04-14 20:14:29

linux设备驱动,参考LDD。

设备驱动程序,没有main函数,看着有点奇怪。

总的来说,设备驱动可以动态加载,也可以直接编译在内核中,最终的结果就是存在一个系统能找到的内存记录中,以备调用。

本例 hello world 并没有做被系统调用的接口,只是完成动态加载的初始化,和下载模块,只做简单的输出,需要两个文件,hello.c 和Makefile


//文件(1)---------------hello.c---------------------------------------------
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
        printk(KERN_ALERT "hello,world\n");
        return 0;
}
static void hello_exit(void)
{
        printk(KERN_ALERT "Goodbye, curel world\n");
}
module_init(hello_init);
module_exit(hello_exit);

//文件(2)-------------------------Makefile------------------------

obj -m : = hello.o             //这个文件只有一行。
---------------------------------------------------------------------    

完成以后,执行命令

$make -C -C /usr/src/kernels/2.6.32-358.el6.i686/  M=`pwd` modules

其中/usr/src/kernel/2.6.32-358.el6.i686/是自己的电脑的版本源代码配置在的文件夹。
M = `pwd`表示源代码 hello.c 在的文件夹。
modules 是make命令的参数,表示要编译的是模块文件。

生成hello.ko文件,和一些中间文件。

加载模块:#insmod hello.ko
参看内核输出:#dmesg

查看模块:# lsmod | grep hello

卸载模块:#rmmod hello

再次参看内核输出:#dmesg


阅读(1133) | 评论(0) | 转发(0) |
0

上一篇:linux下GCC编程工具

下一篇: Madplay移植

给主人留下些什么吧!~~