免费注册 查看新帖 |

Chinaunix

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

开始linux的学习 小小的总结下这段时间的感觉 [复制链接]

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

    上个月真正开始学习嵌入式linux,用的是友善之臂的QQ2440板子。一段时间了,学习碰到不少问题。这里小小总结下。
    刚开始就学驱动程序,因为自己觉得往那方面发展。开始的时候没有跟着板子的程序自己写下。个人感觉虽然后来的问题解决了,但是用了不少时间。所以建议开始的时候要看板子原来带有的驱动程序,跟着学一下,对开始来感觉比较快。至少应该编译器的问题,和Makefile比较好理解点。
   
    下面开始列举遇到的问题:

    1.关于GCC,和Makefile:
      linux2.4和linux2.6的Makefile写法有很大的不同。很多书上都没说明白,为了这个问题郁闷了好久,我看见的大多书上写的是2.4的Makefile的写法,但是都没有说明和2.6的区别。后来是在一个论坛上看到Makefile的说明,解决了这个问题,地址:。现在已经会写Makefile了
      2.6内核驱动Makefile的写法:
      Makefile为:
         obj-m :=XXX.o
      编译时:
         make -C /内核路径  M='当前路径'  modules
      可成功生成2.6核下的驱动模块XXX.ko!!!

      2.4内核的因为没用过,具体不太了解。

    2.关于insmod加载时的错误:
      错误1:
           insmod: kernel-module version mismatch
                   holle.o was compiled for kernel version
                   while this kernel is version 2.6.13.
      类似这个错误。 这个从表面上看就明白是内核版本的不对,但是在实践中,我觉得不全是因为版本
      原因如下:
       1.和上面说的一样,版本问题。
          这个问题不是我所遇到的,所以不太了解。
          可以搜索一下“insmod: kernel-module version mismatch”,网上关于这个有不少的解决方案,应该能找到满意的。我在搜索过程中发现好像这个问题比较多是发生在2.4内核的情况下。没有见到2.6下面有这个问题,所以如果是2.4应该按照那些说法能解决得。但是,我的是2.6内核,并不是这个原因。
       2.insmod 在2.6中应该是
         insmod XXX.ko
         而在2.4中是
         insmod XXX.o
         如果使用错了,一样会导致加载出错。
         XXX.ko是2.6内核编译的时候产生的模块文件。
       3.系统启动方式
         在nfs方式驱动下不管你的驱动程序是否有错,都会在加载的时候出错。我就是在这个问题上面卡了一段时间。值得注意!!!
       4.错误上面编译是的问题一样,是Makefile的问题
         再次强调2.6的编译和2.4的不同
         2.6内核驱动Makefile的写法:
         Makefile为:
            obj-m :=XXX.o
         编译时:
            make -C /内核路径  M='当前路径'  modules
         可成功生成2.6核下的驱动模块XXX.ko!!!

       5.再有就是GCC的版本带来的小插曲
         应该使用编译内核的GCC版本
       6.再次强调一个小小的问题:
         2.6内核insmod格式
         insmod XXX.ko

以上就是我在第一个驱动程序的感想。
    呵呵。。也就是hello.c的驱动。
    英文比较烂。好像里面的“hello”还拼错了,成了“holle”
    上传一下holle.c打包。里面还有个kong.c和hello.c是同样类型的,表示是空驱动的意思。因为后面好像有过修改,忘记最后是否通过了。印象中是没问题的

    程序写的有点乱。要改进风格。

    就写这么多,过两天接着说下自己LED驱动的一些问题。

    看别人的程序,感觉太多都是讲讲而已,给程序也没什么用,里面调用的函数,都没有解释。真正自己写的时候就不会用了。故马上在网上买了本《linux设备驱动程序》就是《linux decives deciver》的中文版。要深入学习,要有专研的心态。
    对常用的一些函数register_chrdev(),等的和一些其它注册函数区别没有说明,这让我觉得很郁闷,在2.4中大多好像是用register_chrdev(),而2.6中新增加的register_chrdev_region(),这两个用法有什么不同,都没有说。后来是在
http://blog.chinaunix.net/u1/34474/showart_404278.html
看以后才有点理解的,这更促使我买《linux设备驱动程序》。强力建议大家学习这本书。
    回去睡觉了。下次LED驱动再写。

文件:
hello.rar
大小:
24KB
下载:
下载


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP