免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1109 | 回复: 0
打印 上一主题 下一主题

linux 驱动 内核目录树的建立 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-27 11:01 |只看该作者 |倒序浏览

安装
内核
源码包:
# rpm –Uvh kernel-2.6.11-1.1369_FC4.src.rpm
这个
命令
将 RPM 内容写到路径
/usr/src/redhat/SOURSE

/usr/src/redhat/SPECS
build源码包:
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target i686 kernel-2.6.spec
这个命令将会把内核源码树放到
目录
/usr/src/redhat/BUILD/kernel-2.6.11/kernel-2.6.11.686
配置内核:
Fedora Core 附带的内核配置
文件

~/kernel-2.6.11.686/configs/ 目录。
例如,i686 SMP 配置文件被命名为
configs/kernel-version-i686-smp.config。
使用下列命令来将需要的配置文件复制到合适的位置,用来编译:
# cd /usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686
# cp configs/kernel-version-i686-smp.config .config   //记住要养成备份的好习惯!
您也可以在 /lib/modules/version/build/.config 这个位置找到与您当前的内核匹配的 .config 文件。
注意:
您的内核必须已经启用这些选项进行了编译(用make menuconfig调出内核配置菜单):u
Loadable module support --->
  • Enable loadable module support
  • Module unloading
    [ ] Module versioning support (EXPERIMENTAL)
  • Automatic kernel module loading
    稍微更改一下Makefile:
    每个内核的名字都包含了它的版本号,这也是 uname -r 命令显示的值。内核Makefile 的前四行定义了内核的名字。为了保护官方的内核不被破坏,Makefile
    经过了修改,以生成一个与运行中的内核不同的名字。在一个模块插入运行中的内核前,这个模块必须针对运行中的内核进行编译。为此,您必须编辑内核的
    Makefile。
    例如,如果 uname -r 返回字符串 2.6.11-1.1369_FC4,就将 EXTRAVERSION 定义从:
    EXTRAVERSION = -prep
    修改为:
    EXTRAVERSION = -1.1369_FC4
    也就是最后一个连字符后面的所有内容。
    编译内核:
    跟普遍的编译方法一样了:
    # make bzImage 编译内核
    # make modules 编译模块
    # make modules_install 安装编译

    完成“内核树”的安装:
    目录“/usr/src/redhat/BUILD/kernel-2.6.11/kernel-2.6.11.686/”中就是所谓的“内核代码树”
    但是“/lib/modules/2.6.11-1.1369_FC4/build”是个符号链接,也指向这个目录,所以这里也可以叫做“内核代码树”
    编写内核模块源文件:
    // 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, cruel world\n");
    }
    module_init(hello_init);
    module_exit(hello_exit);
    编写makefile
    ifneq ($(KERNELRELEASE),)  //别把逗号忘了;
    obj-m := hello.o
    else
    KERNELDIR ?= /lib/modules/$(
    shell
    uname -r)/build
    PWD := $(shell pwd)
    default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules //-c为大写;
    endif
    10. 执行make命令进行编译就行了, 执行完毕后,会生成几个文件:
    hello.ko
    hello.mod.c
    hello.mod.o
    hello.o
    运行命令:
    # insmod hello.ko
    应该可以看到返回的信息:Hello, world
    然后再运行命令:
    # rmmod hello
    应该可以看到返回的信息:Goodbye, cruel world
    小提示:如果没有看到信息到/var/log/messages中你就会看到,bye!


    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93660/showart_1911829.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP