Linux驱动之内核加载模块过程分析

发布者:upsilon30最新更新时间:2024-08-20 来源: cnblogs关键字:Linux驱动  过程分析 手机看文章 扫描二维码
随时随地手机看文章

printk(KERN_WARNING'%s: '%s'->init suspiciously returned %d, it should follow 0/-E conventionn''%s: loading module anyway...n',__func__,mod->name, ret,__func__);

dump_stack();

}


//模块初始化完成,更改状态,通知内核

mod->state = MODULE_STATE_LIVE;

blocking_notifier_call_chain(&module_notify_list,MODULE_STATE_LIVE, mod);


if (current->flags & PF_USED_ASYNC)

async_synchronize_full();

mutex_lock(&module_mutex);

/* Drop initial reference. */

module_put(mod);

rim_init_extable(mod);

#ifdef CONFIG_KALLSYMS

mod->num_symtab = mod->core_num_syms;

mod->symtab = mod->core_symtab;

mod->strtab = mod->core_strtab;

#endif

//释放初始化部分空间,这部分只是在初始化有效,初始化结束回收资源,清空

unset_module_init_ro_nx(mod);

module_free(mod, mod->module_init);

mod->module_init = NULL;

mod->init_size = 0;

mod->init_ro_size = 0;

mod->init_text_size = 0;

mutex_unlock(&module_mutex);

wake_up_all(&module_wq);

return 0;

}


int __init_or_module do_one_initcall(initcall_t fn)

{

int count = preempt_count();

int ret;

char msgbuf[64];


if (initcall_debug)

ret = do_one_initcall_debug(fn);

else

ret = fn();//执行模块的init_module函数


msgbuf[0] = 0;


if (preempt_count() != count) {

sprintf(msgbuf, 'preemption imbalance ');

preempt_count() = count;

}


if (irqs_disabled()) {

strlcat(msgbuf, 'disabled interrupts ', sizeof(msgbuf));

local_irq_enable();

}

WARN(msgbuf[0], 'initcall %pF returned with %sn', fn, msgbuf);


return ret;

}


[1] [2] [3] [4] [5] [6]
关键字:Linux驱动  过程分析 引用地址:Linux驱动之内核加载模块过程分析

上一篇:Linux驱动之建立一个hello模块
下一篇:S3C2440看门狗定时器原理

推荐阅读最新更新时间:2024-11-16 17:21

linux i2c 设备测试,i2c-dev驱动测试代码
embed-linux version:linux-2.6.39-exp vmware-linux:ubuntu14.04 hardware: core chip at91sam9x25 cross-compile:arm-none-linux-gnueabi-gcc 4.5.2 code: #include stdio.h #include stdlib.h #include unistd.h #include sys/ioctl.h #include sys/types.h #include sys/stat.h #include fcntl.h //#include sys/select.h #include sys/tim
[单片机]
Linux驱动之一个简单的输入子系统程序编写
在Linux驱动之输入子系统简析已经分析过了输入子系统的构成,它是由设备层、核心层、事件层共同组成的。其中核心层提供一些设备层与事件层公用的函数,比如说注册函数、反注册函数、事件到来的处理函数等等;事件层其实在Linux内核里面已经帮我们写好了很多有关的事件;而设备层就跟我们新添加到输入系统的具体设备相关了。这里以JZ2440开发板上的4个按键作为输入子系统的按键:它定义的功能分别为:KEY_L、KEY_S、KEY_ENTER、KEY_LEFTSHIFT。这几个值是在includelinuxinput.h中被定义的。接下来就是编写程序: 直接贴出源程序: #include linux/module.h #include
[单片机]
<font color='red'>Linux</font><font color='red'>驱动</font>之一个简单的输入子系统程序编写
Linux驱动入门
阅读此文的方法: 阅读以下2个文件: hello.c,asdf.c。 此文假设读者: 已经能用C语言编写Linux应用程序, 理解"字符设备文件, 块设备文件, 主设备号, 次设备号", 会写简单的Shell脚本和Makefile。 1. "hello.c" -------------------------------- /* * 这是我们的第一个源文件, * 它是一个可以加载的内核模块, * 加载时显示"Hello,World!", * 卸载时显示"Bye!"。 * 需要说明一点,写内核或内核模块不能用写应用程序时的系统调用或函数库, * 因为我们写的就是为应用程序提供系统调用的代码。 * 内核有专用的函数库,如 linux/
[嵌入式]
XScale PXA270在Linux下的FPGA设备驱动
引言   Intel公司推出的XScale采用ARM V5TE结构,是Strong ARM的升级换代产品。XScale PXA270处理器最高主频可达624 MHz,加入了Wireless MMX、Intel SpeedStep等新技术,以其高性能、低功耗、多功能等特点在信息家电、工业控制等领域得到了广泛的应用。在嵌入式控制中,“微处理器+FPGA”是一种常用的解决方案。FPGA(现场可编程门阵列)有编程方便、集成度高、速度快等特点,电子设计人员可以通过硬件编程的方法来实现FPGA芯片各种功能的开发。在我们的一个数控平台的研究项目中,采用XScale PXA270作为主CPU,并对其进行FPGA扩展,使其具有插补、电机驱动、信
[嵌入式]
基于ARM9+Linux的DS18B20驱动程序设计
引言 随着嵌入式技术的发展,基于ARM和Linux的嵌入式产品越来越多, DS18B20 温度采集传感器在工业和生活上应用广泛,研究开发基于ARM9和Linux的DS18B20的驱动程序可以满足大部分温度采集平台的应用。 1 Linux设备驱动的开发过程 Linux操作系统通过各种驱动程序来操作硬件设备,它屏蔽了各种设备,设备驱动程序是操作系统内核和硬件之间的接口。从应用程序来看,硬件只是一个设备文件,应用程序可以像操作普通文件一样操作硬件设备。 1.1 设备的分类 Linux看待设备可区分为3种基本设备类型,分别为字符设备、块设备和网络设备: ①字符设备:字符设备是一种可以当作一个字节流来存取的设备,相当于一个文件,字符设备驱动
[电源管理]
基于ARM9+<font color='red'>Linux</font>的DS18B20<font color='red'>驱动</font>程序设计
基于内核对象的Linux输入子系统触摸屏的驱动设计
随着人们对操控要求的不断提高,电容触摸屏因为能支持多点触摸而得到广泛使用。本文基于Nokia和Intel公司合作开发的开源操作系统MeeGo,采用基于内核对象的Linux输入子系统来设计触摸屏的驱动。该方案极大地方便了触摸屏的驱动开发,可应用在车载娱乐、上网本、智能手机等电子产品上。 随着人们对操控要求的不断提高,市场上出现了越来越多的高端手机、平板电脑,这些产品共同的特点就是给人们提供了非常便利的操控方式,尤其是电容触摸屏的使用,它能很好地实现多点触控功能。多点触控技术是当今炙手可热的技术,它让人们的生活方式得到了前所未有的改变。电容触摸屏已经成为高端手机的标配,如苹果的iPhone以及HTC Motorola的一些高端
[单片机]
基于<font color='red'>内核</font>对象的<font color='red'>Linux</font>输入子系统触摸屏的<font color='red'>驱动</font>设计
利用频域时钟抖动分析加快设计验证过程
   简介   随着数据速率的提高,时钟抖动分析的需求也在与日俱增。在高速串行数据链路中,时钟抖动会影响发射机、传输线和接收机的数据抖动。保证时钟质量的测量也在不断发展。目前的重点是针对比特误码率,在时钟性能和系统性能之间建立直接联系。我们将探讨参考时钟的作用和时钟抖动对数据抖动的影响,并讨论在E5052B信号源分析仪(SSA)上运行的Agilent E5001A精确时钟抖动分析应用软件所配备的全新测量技术。该应用软件提供了前所未有的强大能力,可以对随机抖动(RJ)和周期抖动(PJ)分量超低 RJ测量和实时抖动频谱分析,使您能够提高设计质量。我们还将对新解决方案的实时测量功能进行讨论,这一功能能够加快设计验证过程。    参考
[工业控制]
数字电源市场发展过程中存在的问题分析
  随着节能成为当今世界的重大课题,电源 管理 也越来越受重视,技术水平的提升正不断优化系统的能效。但是,在“高集成度”、“数字化”等概念面前,企业更关注的还是市场和成本等现实问题。      电源管理芯片曾被形容为半导体行业的灰姑娘,这表明电源管理芯片长期以来被认为是半导体业界一个不起眼的配角。然而,与数字电路市场的大起大落不同,电源管理芯片保持着长期、稳定的增长势头。Databeans公司的 市场调查 结果显示,2007年电源管理芯片全球销售额超过80亿美元,预计今年的增长可达7%。随着原油价格的不断上升,节能领域的应用无疑是给灰姑娘穿上了红舞鞋,电源管理应用正迈步走向半导体产业的前台。      技术创新促进能效提
[电源管理]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved