您的位置:首页 > 运维架构 > Linux

读书笔记 Linux设备驱动程序(一) 0.01

2006-03-24 08:16 295 查看
        这本linux设备驱动程序,号称驱动程序的bible,但是以前都是断章取义的看,发现看了简直就是云里雾里,所以决定从头看起。今天从fx那里把书拿过来,准备霸占着,看起来比较枯燥,但是没有办法啊!搞上这个东西了,不看明白点儿,怎么混饭吃哦!
 
        把二章的hello编译一下,加载时结果发现在redhat9.0上无法成功,说是版本问题,报出下面的错误:
        hello.o: kernel-module version mismatch
               hello.o was compiled for kernel version 2.4.20
               while this kernel is version 2.4.22-1.2115.nptl.
       
        于是从网上下个gcc3.4看看
                gcc的安装:
                         解压,然后在解压的目录下执行configure:./configure --prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java;接着就是make,等待,这里将gcc安装在了/usr/local/gcc-3.4.0目录下了,可以支持才c,c++,java
                一个漫长的过程。
                         然后在make install
                在这个漫长的过程中,把错误直接拷下来上baidu上一搜,居然发现有同样错误的难兄难友,等漫长的过程完了,试试看!!!!!
                终于安装完了,应该差不多一个多小时了吧,先把它搞完了,再去搞上面的版本问题!
                为了可以使用老版本的gcc,在/usr/bin/下执行ln -s /usr/local/gcc-3.4.0/bin/gcc gcc4

 
               版本问题:两种方法可以解决这个问题
               1、cp /usr/src/linux-2.4.0/include/linux/version.h /usr/src/include/version.h
               2、这一般是因为你编译模块的时候使用的头文件不对,如果你不用-I 指定你的头文件路径的话,那么gcc默认使用/usr/include/linux 里面包含一个叫 version.h东西里面有
                      #define UTS_RELEASE "2.4.20"
                      #define LINUX_VERSION_CODE 132116
                      #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
                      这样的版本信息,可能和当前内核不符。

              修改版本号,然后在hello.c中加入MODULE_LICENSE("GPL")编译加载过了,但是加载时,却没有什么打印信息出来,但是lsmod看,已经加载进去了,不知道怎么回事,准备上网看看

               ok,今天就写到这里了,板子上dsp上还有问题,明天看看如何解决。
 
      
 
    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 读书 gcc c++ redhat java