linux 驱动开发之内核树构建

    在看<Linux Device Driver Third Edition>的时候,作者其中提到Setting Up Your Test System。他只是指出为2.6.X编写模块,首先,要求你在Linux系统上构建和配置内核树,对于2.6版本的内核来说,已有的头文件已经足够了,但是2.6的模块链接着内核源码树中的对象文件。这样模块加载器将更健壮,但是也要求这些对象文件存在。所以驱动开发的第一件事情就是构建内核源码树。
    他没有提到如何构建,我从网上找了一些资料,构建了自己的内核树,写出来大家分享一下,本人用的是Ubuntu  Linux 10.10 装在虚拟机里面,要求你的虚拟机硬盘容量最少不低于10G,本人10G,仍有提示硬盘容量不够,但是还是完成了内核树的构建,15G硬盘容量应该够了。
    首先查看自己的linux内核的版本,在终端中输入: uname -r
    可以看到自己的内核版本,我的内核版本为:2.6.35-22-generic
   
    然后进入 usr/src/下查看是否有linux-source 文件,一般是没有的,至少我的ubuntu没有
    没有就去网上查找,在终端中输入: apt-cache search linux-source
    可以看到结果:
        linux-source - Linux kernel source with Ubuntu patches
        linux-source-2.6.35 - Linux kernel source for version 2.6.35 with Ubuntu patches

    选择同自己内核相应的linux-source版本安装。具体的安装方法为,在终端中输入:
        sudo apt-get install linux-source-2.6.35
    下载完毕后在/usr/src/下有个名为linux-source-2.6.35 的文件夹,在该文件夹里面有linux-source-2.6.35.tar.bz2    ,解压到/usr/src/linux-source-2.6.35/目录下。
    解压方法,在终端中输入: sudo -i 切换到根用户下,定位到/usr/src/linux-source-2.6.35/目录下,在终端中输入:tar jxvf linux-source-2.6.35.tar.bz2
    解压得到文件源代码文件,该源代码文件夹名称为linux-source-2.6.35,进入该目录,注意此时在终端中应该是这样的:
    root@jk1860-machine:/usr/src/linux-source-2.6.35/linux-source-2.6.35#
    因为解压出来的源代码文件夹位于linux-source-2.6.35下,所以有两层。
    开始配置内核,选择最快的原版的配置(默认)方式:在终端中输入:make oldconfig
   
    完成后,先去配置/usr/src/linux-source-2.6.32/linux-source-2.6.35/ubuntu/omnibook/Makefile文件。
    不然会出现ld: /ubuntu/omnibook/sections.lds: No such file: No such file or directory错误
    在根用户下打开该Makefile文件,将其中的PWD=$(shell pwd)剪切到ifeq ($(KERNELRELEASE),) 前面。然后保存。
   
    然后编译模块,定位到源代码文件夹下,在终端中输入: make modules
    等待将近1个小时,该编译完成。完成之后,安装模块,在终端中输入:make modules_install
    至此,源码树构建完成,重启系统,
    将《Linux Device Driver Third Edition》中的第一个例子运行下吧。
   
    文中代码:helloworld.c


Makefile文件内容:

  

编译,在终端中输入:make

然后加载模块 (root用户)

   root@jk1860-machine:/home/shana/Driver# insmod ./helloworld.ko

    按照书上的例子 会在终端显示 hello , world 但是运行后什么都没有出现 (原因不解)

    root@jk1860-machine:/home/shana/Driver# insmod ./helloworld.ko

    查看加载模块

    root@jk1860-machine:/home/shana/Driver# lsmod
    Module Size Used by
    helloworld 2560 0

    删除模块

    root@jk1860-machine:/home/shana/Driver# rmmod helloworld

    书中说明,如果不出现在终端,则会写进 syslog 文件中

    root@jk1860-machine:~# cat /var/log/syslog |grep world
    Jan 20 10:21:23 jk1860-machine kernel: [ 1683.984471] hello world
    Jan 20 10:22:35 jk1860-machine kernel: [ 1755.752461] Goodbye, cruel world

 

驱动开发环境搭建完成。

 

可以参考http://blogold.chinaunix.net/u2/81217/showart_1330300.html

本文有借鉴和抄袭其中的内容

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值