当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » C/C++  » Linux编程
分享到: 
收藏 +0
1

Linux下的驱动程序也没有听上去的那么难实现,我们可以看一下helloworld这个例子就完全可以了解它的编写的方式!

我们还是先看一个这个例子,helloworld

标签: 驱动程序 Linux

代码片段(3) [全屏查看所有代码]

1. [代码]helloworld.c     跳至 [1] [2] [3] [全屏预览]

#include <linux/module.h>//与module相关的信息

#include <linux/kernel.h>
#include <linux/init.h>      //与init相关的函数

static int __init hellokernel_init(void)
{
        printk(KERN_INFO "Hello kernel!\n");
        return 0;
}

static void __exit hellokernel_exit(void)
{
        printk(KERN_INFO "Exit kernel!\n");
}


module_init(hellokernel_init);
module_exit(hellokernel_exit);


MODULE_LICENSE("GPL");
MODULE_AUTHOR("xxxx");

2. [代码]Makefile     跳至 [1] [2] [3] [全屏预览]

obj-m := helloworld.o

PWD       := $(shell pwd)

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        rm -rf *.o *~ core .*.cmd *.mod.c ./tmp_version

3. [代码]执行与运行结果     跳至 [1] [2] [3] [全屏预览]

3)执行make

编译成功之后会生成相应有ko文件,也就是我们想要的驱动了

4)驱动程序的相关操作

      a)查看ko模块的信息 modinfo

      b)插入模块 insmod helloworld.ko

      c)卸载模块 rmmod helloworld

      d)还有一个modprobe功能,以后介绍!

5)查看驱动的打印信息

      使用dmesg可以查看在驱动的相关打印信息!

       现在有例子是会有如下的打印内容:

---------------------log start----------------------------

[27520.195551] Exit kernel!
[27948.531569] Hello kernel!

---------------------log end----------------------------


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(14)

  • 1楼:自主创新 发表于 2010-12-05 17:49 回复此评论
    红哥  你太棒了 !!!!
  • 2楼:烈冰 发表于 2011-04-14 09:53 回复此评论
    helloword果然是最强的
  • 3楼:heidsoft 发表于 2011-06-12 21:20 回复此评论

    这段代码,好像和书上的一样哦。

  • 4楼:叶崧 发表于 2011-06-14 14:40 回复此评论
    不错
  • 5楼:yearn 发表于 2011-08-26 14:14 回复此评论
    我越来越佩服你了……
  • 6楼:gomoh 发表于 2011-10-26 12:37 回复此评论
    niuren
  • 7楼:xielei 发表于 2012-01-30 22:42 回复此评论

    作为一个初学者,总算看到实实在在的代码了,支持一下

  • 8楼:金玉清 发表于 2012-03-04 19:55 回复此评论
    [root @localhost temp]# modinfo helloworld.ko
    filename:       helloworld.ko
    author:         xxxx
    license:        GPL
    srcversion:     65A410F6A889A48B8C74467
    depends:       
    vermagic:       2.6.18-164.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
  • 9楼:金玉清 发表于 2012-03-04 19:57 回复此评论
    [root @localhost temp]# insmod helloworld.ko
    [root @localhost temp]# lsmod |grep helloworld*
    Binary file helloworld.ko matches
    Binary file helloworld.o matches
    [root @localhost temp]#
  • 10楼:intruder 发表于 2012-03-19 15:45 回复此评论
    很棒的。新手,求方向指导。
  • 11楼:kernel288 发表于 2012-05-29 11:50 回复此评论
    不错。顶
  • 12楼:raokai 发表于 2012-09-06 20:33 回复此评论
    膜拜了……
  • 13楼:杨亮1 发表于 2015-09-05 11:31 回复此评论
    果然是最简单
  • 14楼:一抹隐兮 发表于 2017-10-17 14:02 回复此评论
    嵌入式驱动学习路线参考:http://www.superedu.com.cn/zhuanti/learn.html?QQwjl 
开源从代码分享开始 分享代码