zoukankan      html  css  js  c++  java
  • mini2440驱动的静态加载

    文章来源:http://blog.csdn.net/jarvis_xian/article/details/6428358

    这两天在板子上加载模块的时候,遇到了各种问题,与我第一次加载模块时碰到的问题大同小异,故记录在博客,仅供查阅。

        1.PC机和目标板内核版本不一致

           问题提示:version magic '2.6.32.2 mod_unload modversions ARMv4 ' should be '2.6.32.2-FriendlyARM mod_unload ARMv4 '

           准确来说,PC机上的内核所指的是用于编译模块的内核的版本,并不一定就是运行在PC上linux系统上的内核版本。用指令 uname -r 所查询到的版本号,就是后者。之前按照mini2440用户手册的流程,配置好PC机上用于实验的内核,但由于一段时间以来的捣鼓,早已“面目全非”,先将其还原。

           (1)在内核linux-2.6.xxxxxx # 目录上,执行make distclean     //清除,即还原

           (2)在同一目录上执行 cp config_mini2440_t35 .config          //使用现成配置

           (3)执行 make menuconfig   之后退出即可                          //内核保存配置信息之用

           (4)执行 make zImage                                                  //编译内核

           (5)执行 make modules                                                 //编译模块

            一般来说经过上述几步即可与板子上的内核同一版本,前提当然是正在使用的内核版本与板载的内核版本相符。

         2.测试程序在板上运行的问题

            问题提示:syntaxerror : "(" unexpected

            刚开始以为是ftp传送方式,导致文件传送不完整所引起的问题,后来再三验证其他程序,并无异常,所以排除这个可能。瞎弄了一阵,突然发现是makefile的问题,我竟然把它用gcc而不是arm-linux-gcc编译了!顿时晕了一阵!以下附上arm-linux-gcc编译方式的简单makefile文件

    CROSS=arm-linux- all : jarvis_led #生成执行文件的名字,可改 jarvis_led : jarvis_led.c #这里给出源代码文件 $(CROSS)gcc -o jarvis_led jarvis_led.c #此处注意缩进是一个tab clean : @rm -vf led *.o *~

        3.编译驱动模块方法

           这里我们讨论的是字符驱动,所以先把驱动程序复制到内核目录下 /drivers/char 里。接着就是对 /drivers/char 里的Kconfig和Makefile进行改写的操作了。

           (1)Kconfig

            我们在make menuconfig 界面上所看到的信息就是在Kconfig文件中定义的,所以我们需要编译自己的驱动的话,总得先把自己的驱动放进界面,之后才能进行选择是编译模块(M)还是直接编译进内核(*)吧。添加代码如下

    config LED_MODULE                           //与Makefile产生联系

            tristate "jarvis_led_module"        //在menuconfig 界面上我们就看到这个名字啦

            depends on ARCH_S3C2410

            default m if MACH_FRIENDLY_ARM_MINI2440

            要想看到上面的信息,我们需要进入menuconfig-->Device Drivers-->character devices,就能看到自己模块的信息啦。

            (2)Makefile

             返回到 /drivers/char 目录下,修改Makefile,实质只需添加一条语句即可,如下:

    obj-$(CONFIG_LED_MODULE)   += jarvis_led.o     //红色字体必须与Kconfig对应

              至此,准备工作已做完,我们需要在内核目录下,即linux-2.6.xx.xx #上执行 make modules。之后再返回 /drivers/char 应该就会看到我们所编译的驱动模块有一个.ko文件产生,that`s it!

           最后,如何把模块送到板子上,加载、卸载、测试等工作,mini2440用户手册讲解得十分清晰,遂不在此赘述。本人知识浅薄,还望大家多多指点!

  • 相关阅读:
    响应式网页设计项目#1---Tribute Page to Kobe and Gigi---致敬科比和Gigi
    Vue---第二部分
    Vue---概述 第一部分
    SaaS应用“正益工作”发布,为大中型企业轻松构建移动门户
    6.24 AppCan移动开发者大会:议程重大更新,报名即将关闭
    【6.24-AppCan移动开发大会倒计时】科大讯飞来了!
    6.24 AppCan移动开发者大会,我爱我家即将闪亮登场!
    惊曝6.24AppCan移动开发大会参展名录,现场礼品超多!
    6.24AppCan移动开发者大会价值30万的展示机会归了谁?
    6月24日AppCan移动开发者大会礼品清单遭泄露
  • 原文地址:https://www.cnblogs.com/yuqilihualuo/p/3417017.html
Copyright © 2011-2022 走看看