zoukankan      html  css  js  c++  java
  • TQ2440加载Hello world驱动模块

    经过将近一个月都时间终于按照手册把Linux内核移植完了,接下来要开始驱动模块的移植了,在网上查了一些资料,总结如下:

    目标平台:TQ2440  ARM9 

    内核版本:Linux-2.6.25

    前提:宿主机上已安装交叉编译工具,因为这个在linux内核移植的时候就使用过了,这里就不说了。

    进入正题

    1、首先进入一个目录,在其中创建一个文件夹

    #cd /home/wanyao/module

    #vim hello.c

       1. #include <linux/init.h>  
    2. #include <linux/module.h>
    3. MODULE_LICENSE("Dual BSD/GPL");
    4.
    5. static int hello_init(void)
    6. {
    7. printk(KERN_ALERT "Hello, world\n");
    8. return 0;
    9. }
    10.
    11. static void hello_exit(void)
    12. {
    13. printk(KERN_ALERT "Goodbye, cruel world\n");
    14. return 0;
    15. }
    16.
    17. module_init(hello_init);
    18. module_exit(hello_exit);

    2、创建Makefile文件

    #vim Makefile

       1. KERNELDIR=/opt/EmbedSky/linux-2.6.25     
    2. PWD:=$(shell pwd)
    3. INSTALLDIR=$(PWD)
    4. CC=arm-linux-gcc
    5. obj-m := hello.o
    6. modules:
    7. $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    8. clean:
    9. rm -rf *.o *.ko *.mod.c *.markers *.order *.symvers
    10. .PHONY:modules clean

    注意:驱动模块不一定要放在内核树里,只要你的Makefile指定了内核树的路径就没问题,所以我这里在/home/wanyao/里建立了一个module目录专门用来开发驱动模块

    3、然后进行make

    #make

    结果生成好多文件,其中hello.ko就是我们需要的用来加载的模块文件。

    4、利用tftp将hello.ko这个模块文件上传到开发板上(这个步骤在我另一篇博客中有详细介绍)

    5、加载模块,进行测试(一下操作是在开发板中的系统终端执行的)

    # insmod hello.ko
    Hello, world
    # rmmod hello

    Goodbye, cruel world

    大功告成!

    insmod时可能出现的错误:


    1、hello: version magic '2.6.30.4 mod_unload ARMv4 ' should be'2.6.30.4-EmbedSky mod_unload ARMv4 '
    insmod: cannot insert 'hello.ko': invalid module format

    出错原因:模块版本与内核版本不匹配!
    解决办法:导入预设配置信息,进入menuconfig 继续配置General config ->( )Local version -> 括号中加入如下内容:“-EmbedSky”退出保存为 .config ,重新编译内核、驱动模块,再来加载模块


    2、hello: Unknown symbol__aeabi_unwind_cpp_pr0
    insmod: cannot insert 'hello.ko': unknown symbol in module, or unknown
    parameter

    出错原因:模块和内核镜像不匹配

    解决方法:尽量用和你同时用来编译驱动而生成的内核镜像zImage,zImage烧到板子上。Ldd3上有句话:尽管并不是必需的,但最好运行和模块对应的内核。

    刚开始学驱动,终于成功加载了hello world 模块!
    这是学习驱动的一小步,但是对我来说却是一大步!

  • 相关阅读:
    力扣 136. 只出现一次的数字
    剑指 Offer 24. 反转链表
    javaWeb8——jdbc总结,JDBC调用存储过程和存储函数:CallableStatement
    剑指 Offer 53
    剑指 Offer 53
    使用 .NET Core 3.x 构建 RESTFUL Api
    SqlServer 多表连接、聚合函数、模糊查询、分组查询应用总结(回归基础)
    SqlServer 查询的几种方式以及数字函数、时间函数的应用总结(回归基础)
    关于SqlServer表结构 2(回归基础)
    关于SqlServer那些事1(回归基础)
  • 原文地址:https://www.cnblogs.com/wanyao/p/2257628.html
Copyright © 2011-2022 走看看