Chinaunix首页 | 论坛 | 博客
  • 博客访问: 528226
  • 博文数量: 104
  • 博客积分: 2089
  • 博客等级: 大尉
  • 技术积分: 1691
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-29 08:48
文章分类

全部博文(104)

文章存档

2015年(1)

2013年(13)

2012年(31)

2011年(59)

分类: LINUX

2012-10-13 11:07:07

如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可。即是/lib/modules/`uname -r`/build -> /usr/src/kernels/`uname -r`指定。
在yum中,如果直接运行 yum install kernel-devel, 一般安装的开发包版本要高于所使用的内核版本,不能使用。要更改yum 的配置文件,禁掉yum自动寻找新版本的功能。
即是在/etc/yum.repos.d/fedora-updates.repo 中的[update*]有关的enable=1,全部改为0.
OK,yum install kernel-devel 即可。

还有其他方法,以下可供参考:
  http://home.lupaworld.com/home-space-uid-296848-do-blog-id-241587.html 
  http://blog.csdn.net/iczyh/article/details/3564367

经典的hello word测试

点击(此处)折叠或打开

  1. ////# cat hello.c
  2. #include <linux/module.h>
  3. #include <linux/kernel.h>
  4. #include <linux/init.h>
  5. static int __init hl_init( void )
  6. {
  7.     printk("Hello,World! init\n");
  8.     return 0;
  9. }
  10. static void __exit hl_cleanup( void )
  11. {
  12.     printk("Goodbye, World! cleanup\n");

  13. }
  14. module_init(hl_init);
  15. module_exit(hl_cleanup);
  16. MODULE_LICENSE("GPL");
经典的由单个c文件产生模块的Makefile。

点击(此处)折叠或打开

  1. # cat Makefile
  2. obj-m += hello.o
  3. CURRENT_PATH := $(shell pwd) #模块所在的当前路径
  4. LINUX_KERNEL := $(shell uname -r) #Linux内核源代码的当前版本
  5. LINUX_KERNEL_PATH := /usr/src/kernels/$(LINUX_KERNEL) #Linux内核源代码的绝对路径
  6. all:
  7.         make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules #编译模块了
  8. clean:
  9.         make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean #清理
编译
Make
就产生了hello.ko。
安装
insmod hello.ko
卸载
 rmmod hello
查看log
 dmesg

点击(此处)折叠或打开

    1. ................
    2. [12238.051159] Hello,World! init
    3. [12242.458122] Goodbye, World! cleanup
[]中的是时间戳。

OK了,这个环境算好了。




阅读(2235) | 评论(2) | 转发(2) |
给主人留下些什么吧!~~

wwwkljoel2012-10-26 08:59:27

阿零哥: 楼主,能帮我看下出错的原因吗?
   ////# cat hello.c
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/in.....
Makefile 没有写对,内核编程的Makefile 和 用户态的不一样,参考上面的和http://blog.chinaunix.net/uid-14358420-id-3372086.html 重写一个Makefile

阿零哥2012-10-22 19:28:38

楼主,能帮我看下出错的原因吗?
   ////# cat hello.c
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/init.h>
    static int __init hl_init( void )
    {
        printk("Hello,World! init\n");
        return 0;
    }
    static void __exit hl_clea