热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux驱动模块加载出错insmod:errorinserting'./usb_driver.ko':1Unknownsymbolinmodule

今天开始调试usb驱动,第一步加载模块部分就开始报错。网上检索,有位朋友总结一些类似情况。本人遇到的恰好是第二种情况,以前不太注意

        今天开始调试usb驱动,第一步加载模块部分就开始报错。网上检索,有位朋友总结一些类似情况。本人遇到的恰好是第二种情况,以前不太注意,没出错也就不追究,这次遇到了就一并把一些情况在此记上一笔。转载如下:

insmod: error inserting 'cmos_driver.ko' : -1 File exists 和 insmod: error inserting './cmos_driver.ko': -1 Unknown symbol in module
        最近在入手学习linux下驱动程序设计,自己以前也看过一些,但是从来没有自己亲自动手编写过,都只是看下别人写的代码,然后能看懂就觉得可以了,并没有去安装linux环境去亲自去编译模块,并插入到内核中。这几天,因为项目原因安装了Ubuntu10.04、12.04、CentOS6.3,觉得是时候动手来实践下了,可是一动手才发现真的不是那么回事!现将具体情况记录下,以备不时之需。
1、insmod: error inserting './cmos_driver.ko' : -1 File exists
        这个问题一般情况下是因为要么你未卸载./cmos_driver.ko对应的模块,要么你是忘了在module_exit所对应的的函数里面忘了退出(此为笔者所遇见的问题),汗!,纠结了许久!解决方法很简单,在module_exit所对应的的函数里面增加一句,return即可!
2、insmod: error inserting './cmos_driver.ko': -1 Unknown symbol in module
        此问题是需要添加MODULE_LICENSE(“GPL”),因为很多函数都是在GPL的许可下才可以运行的,故一般情况下都需要加上。此时可以使用dmesg -c来查看具体是什么符号的错误,以笔者的文件为例:
[ 4357.335618] cmos_driver: Unknown symbol __class_create
[ 4357.335680] cmos_driver: Unknown symbol class_destroy
[ 4357.335767] cmos_driver: Unknown symbol device_create
[ 4357.335858] cmos_driver: Unknown symbol device_destroy
此时,如上所述,在源文件中增加如上语句即可。

3、关于刚开始的时候出现I/O port is busy 的错误
        此问题原因是这个驱动程序所使用的I/O端口已经被rtc使用了,故必须对源程序做一些修改,可以先查看自己的I/O端口使用情况,方法:cat /proc/ioports,以笔者的I/O端口为例,使用情况如下所示:

0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
0x70-0x71: rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : 0000:00:07.1
  0170-0177 : ata_piix
01f0-01f7 : 0000:00:07.1
  01f0-01f7 : ata_piix
02f8-02ff : serial
        注意红色部分,而我们申请的端口就包含0x70和0x71,故会出现错误,这个问题可以通过使用函数check_region(start,count)来检查是否被使用,如果正在使用,可以释放掉,然后重新申请即可。具体实现如下:
status = check_region(0x70,4);
if(status == 0)
{
printk("The port are available in that range .\n");

}
else if(status == -EBUSY)
{
printk("The port are busy,and we are ready to free them!\n");
release_region(0x70,2);
}

 


推荐阅读
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
author-avatar
gabriel_71382
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有