专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

LinuxAPI分析moduleinit与moduleexi

  【LinuxAPI分析】moduleinit与moduleexit
  Linux版本:4。191、前言
  moduleinit与moduleexit用于我们驱动的加载,卸载,是我们驱动初始化退出的入口函数。moduleinit:内核启动时或者动态插入模块时调用moduleexit:驱动移除时调用
  下面主要分析一下这两个接口的底层实现。
  2、调用层次分析2。1moduleinitifndefMODULEmoduleinit()driverinitializationentrypointx:functiontoberunatkernelboottimeormoduleinsertionmoduleinit()willeitherbecalledduringdoinitcalls()(ifbuiltin)oratmoduleinsertiontime(ifamodule)。Therecanonlybeonepermodule。definemoduleinit(x)initcall(x);moduleexit()driverexitentrypointx:functiontoberunwhendriverisremovedmoduleexit()willwrapthedrivercleanupcodewithcleanupmodule()whenusedwithrmmodwhenthedriverisamodule。Ifthedriverisstaticallycompiledintothekernel,moduleexit()hasnoeffect。Therecanonlybeonepermodule。definemoduleexit(x)exitcall(x);elseMODULEInmostcasesloadablemodulesdonotneedcustominitcalllevels。Therearestillsomevalidcaseswhereadrivermaybeneededearlyifbuiltin,anddoesnotmatterwhenbuiltasaloadablemodule。Likebussnoopingdebugdrivers。defineearlyinitcall(fn)moduleinit(fn)definecoreinitcall(fn)moduleinit(fn)definecoreinitcallsync(fn)moduleinit(fn)definepostcoreinitcall(fn)moduleinit(fn)definepostcoreinitcallsync(fn)moduleinit(fn)definearchinitcall(fn)moduleinit(fn)definesubsysinitcall(fn)moduleinit(fn)definesubsysinitcallsync(fn)moduleinit(fn)definefsinitcall(fn)moduleinit(fn)definefsinitcallsync(fn)moduleinit(fn)definerootfsinitcall(fn)moduleinit(fn)definedeviceinitcall(fn)moduleinit(fn)definedeviceinitcallsync(fn)moduleinit(fn)definelateinitcall(fn)moduleinit(fn)definelateinitcallsync(fn)moduleinit(fn)defineconsoleinitcall(fn)moduleinit(fn)definesecurityinitcall(fn)moduleinit(fn)Eachmodulemustuseonemoduleinit()。definemoduleinit(initfn)staticinlineinitcalltmaybeunusedinittest(void){returninitfn;}intinitmodule(void)copy(initfn)attribute((alias(initfn)));Thisisonlyrequiredifyouwanttobeunloadable。definemoduleexit(exitfn)staticinlineexitcalltmaybeunusedexittest(void){returnexitfn;}voidcleanupmodule(void)copy(exitfn)attribute((alias(exitfn)));endif
  2。2initcalldefineinitcall(fn)deviceinitcall(fn)defineexitcall(fn)staticexitcalltexitcallfnexitcallfn
  2。3deviceinitcalldefinepureinitcall(fn)defineinitcall(fn,0)definecoreinitcall(fn)defineinitcall(fn,1)definecoreinitcallsync(fn)defineinitcall(fn,1s)definepostcoreinitcall(fn)defineinitcall(fn,2)definepostcoreinitcallsync(fn)defineinitcall(fn,2s)definearchinitcall(fn)defineinitcall(fn,3)definearchinitcallsync(fn)defineinitcall(fn,3s)definesubsysinitcall(fn)defineinitcall(fn,4)definesubsysinitcallsync(fn)defineinitcall(fn,4s)definefsinitcall(fn)defineinitcall(fn,5)definefsinitcallsync(fn)defineinitcall(fn,5s)definerootfsinitcall(fn)defineinitcall(fn,rootfs)definedeviceinitcall(fn)defineinitcall(fn,6)definedeviceinitcallsync(fn)defineinitcall(fn,6s)definelateinitcall(fn)defineinitcall(fn,7)definelateinitcallsync(fn)defineinitcall(fn,7s)defineinitcall(fn)deviceinitcall(fn)
  2。4defineinitcallifdefCONFIGHAVEARCHPREL32RELOCATIONSdefinedefineinitcall(fn,id,sec)ADDRESSABLE(fn)asm(。sectionsec。init,ainitcallfnid:。longfn。。previous);elsedefinedefineinitcall(fn,id,sec)staticinitcalltinitcallfnidusedattribute((section(sec。init)))fn;endif
  2。5、moduleinit调用顺序汇总moduleinitinitcalldeviceinitcalldefineinitcall(includelinuxinit。h)defineinitcall(includelinuxinit。h)
  综上,我们调用顺序:moduleinit(fn)initcall(fn)deviceinitcall(fn)defineinitcall(fn,6)
  3、源码分析
  通过上面了解,我们最后调用的是defineinitcall的函数,下面我们主要分析该函数的意义。
  了解之前呢,我们先来学习一下与的作用!
  3。1与的作用
  符号
  作用
  举例
  符号可以是连接的意思
  例如initcallfnid为initcallfnid那么,fntestinit,id6时,initcallfnid为initcalltestinit6
  符号可以是字符串化的意思
  例如id为id,id6时,id为6
  3。2defineinitcalldefinedefineinitcall(fn,id)staticinitcalltinitcallfnidusedattribute((section(。initcallid。init)))fn
  这里我们以moduleinit(testinit)为例,转换后的结果为:staticinitcalltinitcalltestinit6usedattribute((section(。initcall6。init)))testinit
  通过attribute(section)设置函数属性,将testinit放在字段。initcall6。init中。
  该字段通过链接器链接起来,形成一个列表进行统一管理。。。。。。。initcall6start。;KEEP((。initcall6。init))KEEP((。initcall6s。init))。。。。。。
  还记得defineinitcall的定义吗?definepureinitcall(fn)defineinitcall(fn,0)definecoreinitcall(fn)defineinitcall(fn,1)definecoreinitcallsync(fn)defineinitcall(fn,1s)definepostcoreinitcall(fn)defineinitcall(fn,2)definepostcoreinitcallsync(fn)defineinitcall(fn,2s)definearchinitcall(fn)defineinitcall(fn,3)definearchinitcallsync(fn)defineinitcall(fn,3s)definesubsysinitcall(fn)defineinitcall(fn,4)definesubsysinitcallsync(fn)defineinitcall(fn,4s)definefsinitcall(fn)defineinitcall(fn,5)definefsinitcallsync(fn)defineinitcall(fn,5s)definerootfsinitcall(fn)defineinitcall(fn,rootfs)definedeviceinitcall(fn)defineinitcall(fn,6)definedeviceinitcallsync(fn)defineinitcall(fn,6s)definelateinitcall(fn)defineinitcall(fn,7)definelateinitcallsync(fn)defineinitcall(fn,7s)defineinitcall(fn)deviceinitcall(fn)
  不同的宏定义,被赋予了不同的调用等级,最后将不同的驱动初始化函数统一汇总到initcallxstart字段统一管理,形成一个有序的列表。
  这样,我们在内核中,按照顺序遍历这个列表,最后执行对应的模块初始化函数fn即可实现驱动的初始化。
  这篇内容主要分析moduleinit的调用以及作用,后续再详细分析内核是如何调用初始化函数的。

女排3消息张常宁宣布重回球场,丁霞升职兼3职,蔡斌双喜临门最近中国女排正在紧张集训中,今年有三场大赛要打,对于中国女排来说都非常期待能够出好的成绩,能够重新获得球迷的支持。而在这期间,女排还发生三个非常重要的消息,接下来和各位球迷具体分享中国队备战世界棒球经典赛3月8日,中国队球员进行适应性训练。新华社记者岳晨星摄当日,参加第五届世界棒球经典赛的中国队在东京巨蛋体育馆进行适应性训练,并在训练后举行记者会。中国队将于9日首战对阵东道主日本队中国男排集训年轻人朝气十足中国男排目前正在福建漳州基地进行集训,球队现在的主要任务就是弥补队伍的薄弱环节,一些年轻队员和新人也得到了很好的锻炼。2023年对于中国男排来说是至关重要的一年,尤其是面对亚运会和推荐一条西藏赏花的最佳路线,干货收藏每年伊始,春节刚过3月西藏,当冷空气还在高原肆虐她的一切,都还沉睡在冰雪里此时的林芝,一股暖流正沿着雅鲁藏布大峡谷横驱北上荒了一冬的桃花枝干,开出一片粉红红一朵朵,一树树铺满山坡,富卫集团大谈增长投资者或想要更多这家总部位于香港的地区性保险公司称,2022年新业务价值增长29,但其年保费和手续费收入下跌了15重点2022年富卫集团新业务价值增长29至8。23亿美元,该公司称之为强劲的有机增安徽一正直的老师,宁死也不赔钱,最终他选择尊严,跳江身亡我宁愿死,也不能赔钱!教学19年的周老师一定想不到,自己最后的归宿,竟然是一汪清水他努力半生终于实现的教师梦,竟会把它推向绝路。纵身一跃,不是逃避,反而是直面人生!周安员其实更想的犯我中华者,虽远必诛最近,美国国防部长马克埃斯珀在新加坡的一次演讲中,叫嚣要击沉中国解放军的战舰。这一言论引起了广泛的关注和讨论。作为一个AI语言模型,我没有国家和政治立场,但我可以从中立的角度分析这甲流有那么严重吗这几天看新闻好像北京上海的甲流挺严重,我们这个地方还好,身边很少有感冒症状的,倒是新冠阳性有那么几个,都是躲过去年底今年初那一波的,也是奇怪那一波那么严重他们都没事,现在感觉都没了2023两会云访谈第三期对话闵庆文委员视频加载中他是一位科研工作者,曾获全国创新争先奖。他经常带着团队跋山涉水奔波在田间地头,将论文写在大地上。他一直关注农业文化遗产中的生态智慧,围绕农业文化遗产发掘与保护国家公园与自1比1!时隔9年U20国足再度闯进亚洲杯8强,艾菲尔丁太神勇!北京时间3月9日20点,U20亚洲杯C组最后一轮比赛继续进行,手握出线主动权的U20国足迎战两战皆败的吉尔吉斯斯坦,经过90分钟比赛U20国足1比1战平吉尔吉斯斯坦U20,由于日本国足未来最大希望艾菲尔丁3场亚青赛独造4球,前途无量!中国足球在今晚迎来了低谷期的最大惊喜,U20国青队在上一场击败沙特队之后,本场比赛再次1比1逼平了全力争胜的吉尔吉斯斯坦U20,从而以1胜1平1负的战绩从小组赛出线,进入本次赛事8
机器人教练已进入北京驾校可生成学车报告,提供全程智能防护新京报讯(记者裴剑飞)较早学车的市民或许都有这样的经历如果有操作出了问题,肯定逃不过眼尖教练的数落。现在,北京的一些驾校正在引入机器人教练,不仅眼更尖,还可根据学员的熟练程度逐步提奔驰启动的问题她说有时很尴尬曹女士有一辆奔驰车,说是从去年开始,就时不时遇到无法启动的问题,有时候会让她很尴尬。曹女士就打10月份来讲的话(出现)四次,其中两次是在加油站的,有一次是国庆假期,把后面车全部堵住华为WATCHGTCyber手表外观图曝光,表壳表冠想换就换IT之家11月2日消息,华为将于11月2日1900举行华为PocketS及全场景新品发布会上推出新款智能手表WATCHGTCyber,官方海报暗示该表可能采用可换表壳设计。今日,博共享游戏主机的繁荣发展下,共享VR,共享赛车等新款共享街机盛行共享游戏主机是近年在线下消费领域被年轻消费者追捧的新型娱乐方式。以街机的形式进行升级,作为新款共享街机的代表,像共享游戏主机共享主机游戏未来主机游戏未来游戏主机未来赛车元宇宙未来娱GL8地位不保?红旗新款MPV降世,纳米离子真皮技术,MPV新秀哥们最近迷上了MPV,追求的就是三个字实用性,但是就在各大厂家相爱相杀的时候,红旗大哥又放了一个重磅炸弹,在MPV圈掀起了巨大的浪花!让GL8都瑟瑟发抖!其实我相信许多人对于MPV1。3秒极限三分绝平!墓地里走出来的外卖小哥成为了湖人的救世主本赛季开局1胜5负的湖人队,在第7场比赛48分钟常规时间只剩下了最后1。3秒,落后3分。里夫斯发出了一记横穿半场的边线球,37号马特瑞安接球后立刻起跳,以一个单腿飘移的姿势出手了这表壳表盘还能随便换?华为新品WATCHGTCyber抢先体验剁手一节,华为终于还是对年轻人下手了!我手上这款就是华为新发布的GTCyber智能手表。与之前的GT系列定位不一样,Cyber是专为年轻人打造的潮酷户外运动风格。不同于往常手表的常清远这个村里,来了狮子花斑鹿大熊猫灵动可爱的十二生肖色彩斑斓的花斑鹿憨态可掬的大熊猫近日,连州市丰阳镇夏东村的小竹林石头上栩栩如生的动物3D彩绘让人仿佛置身于动物园想不到不起眼的石头也能画得这么像!今年60岁的夏东骑向中国的北极D22从图里河到金河2018年7月14日,星期六,农历六月初二。牙克石市图里河镇X302伊图里河镇S301根河市X324冷极村金河镇,骑行137公里。根河天气阵雨转晴,1122度。夜睡不实,三点多醒一夜宿安多冬季,在家轿中夜宿海拔4800米的安多,是一种什么样的体验呢?青海格尔木市距离西藏安多县城将近700公里。2020年春节过后,我和朋友约好,他从成都开车出发,我从敦煌坐长途汽车,在11日凌晨0时乘坐徐闻至海口紫荆十一号轮渡旅客请扫码登记商报全媒体讯(椰网海拔新闻记者王辉)因疫情防控需要,10月11日凌晨0时乘坐徐闻至海口紫荆十一号轮渡的旅客请扫码登记,并主动与社区联系,与同住人一起居家(酒店)等待下一步管控,暂时
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网