游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

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的调用以及作用,后续再详细分析内核是如何调用初始化函数的。

我的世界Dream一竿定乾坤,猎人系列结束了,结局致敬开局Dream的《猎人VS速通者》结束了,但新的开始正在开始。一、猎人系列结束了该系列于2019年12月16日开始,是Dream油管上,乃至整个《我的世界》中最受欢迎的……连环画彩楼记辽宁画报社。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。……我国重型火箭新一代载人火箭开始研制可运送150吨重航天器据央视新闻客户端消息,2021年,中国航天的成就举世瞩目:中国空间站拉开建造大幕,祝融号火星车完成火星巡视探测、嫦娥五号月壤样品取得一系列成果、航天发射次数超过50次,再创历史……你知道这些python3的小知识点吗python3小点1、locals();查看当前所有变量测试是否定义过一个值finlocals();2、丰富的else语句:在Python中,else语句不仅能跟i……36氪首发从腾讯陌陌离职的社交产品经理创办单身酒馆APP,获36氪获悉,社交App单身酒馆已于近期获得GGV纪源资本出资的数百万美元PreA轮融资,2019年单身酒馆的创始人陈奕龙刚刚从陌陌离职就获得了真格基金天使轮投资,2020年、2……长征系列火箭火箭是用火箭发动机作为动力的运载工具。长征系列运载火箭是中国自行研制的航天运载工具,已经拥有退役、现役共计4代20种型号,其中长征二号丙、长征二号丁、长征二号F、长征三号甲、长……利润超1。5万亿,增长48。6!采矿业全面回暖!来源:【矿业界】国家统计局1月31日发布的数据显示,2022年,全国规模以上工业企业实现利润总额84038。5亿元,比上年下降4。其中,采矿业利润保持较高增速,实现利润总……中超将迎来西甲前锋,卡帅接近执教埃弗顿进入中超休赛期,这个时间段是所有俱乐部备战新赛季的时间。一些球队已经就签约或者球员离队的事情进行了一些露面,工作正在有条不紊的进行中。阿斯报:武汉三振接近签下瓦伦西亚前锋巴列霍……BOSS直聘向港交所递交双重主要上市申请10月10日,BOSS直聘(NASDAQ:BZ)向香港联交所递交双重主要上市申请。摩根士丹利、高盛担任联席保荐人。双重主要上市流程完成后,BOSS直聘将成为同时在美国纳斯达克交……樊振东回应保送上海交大很期待大学生活樊振东逐渐扛起中国男乒大旗。资料图新华社新京报讯WTT新加坡大满贯赛事结束后国乒进行封闭隔离,在这期间樊振东获得保送上海交通大学的资格。据悉,樊振东小时候因为学习成绩好,……CBA3消息林书豪祸从口出被罚,朱芳雨暗渡陈仓,张镇麟宣布弃进入12月份,CBA联赛即将迎来第二阶段的重燃战火,在第二阶段常规赛开始之前,上赛季的全明星赛将会补办,对于赛区的球迷来说,能够进现场观赛,真的是太幸福了。下面就跟大家分享三条……CBA季后赛12进8悬念或提前终结,4组对决3组一边倒,就看CBA12进8共有4组对决,其中3组对决的首场比赛(每组共3场,3局两胜制)均已结束,本来以为大家实力会比较接近,比赛会十分精彩胶着,结果4组对决3组一边倒,CBA12进8悬念……
亚洲龙终于上市了,只看最低配置和价格就知道,这车值得入手亚洲龙于3月22日终于正式上市了,之前按照外界的猜测,作为皇冠的继承者,亚洲龙的最低售价应该在25万以上,结果这一看,才20。88万起步,让人喜出望外,有没有。不过有了标……手把手教你做红烧狮子头,鲜嫩软糯又多汁,年夜饭吃寓意吉祥手把手教你做红烧狮子头,鲜嫩软糯又多汁,年夜饭吃寓意吉祥红烧狮子头,这是我最喜欢的美食之一,过年过节、去饭店吃饭,我最期待的就是这道菜。另外,去外面吃面的话,我也喜欢点一……大众廉价SUV将上市,内外同色设计,尺寸比肩本田XRV,或1大家都知道大众品牌分上汽大众和一汽大众,这两个大众最近几个月的都推出了新的车型,互相的竞争,上汽大众推出了途岳,一汽大众推出探岳、探歌,虽然这三款车型尺寸都不是很大,但都不便宜……问与答101有没有国产收音机排行榜?原创:收音机评论译介问:今天才刷到你的视频,谢谢你科普,我想请你推荐一款收听效果比较好的短波收音机。答:如果不太在意价格的话,可以考虑德生H501、PL990、S8……厉害!清华大学新突破,云成像芯片横空出世,芯片弯道超车成可能头条创作挑战赛前言近些年来,由于芯片制造受到他国的制裁,我国不少高端制造业都受到了限制,比如华为的手机;不过,我国历来都善于将压力变成动力,就像弹簧一样,你压得越狠,我反……6万块的车你还想撩妹?这三款SUV可以满足你,最低4。99万以前买车是一个遥不可及的梦想,如今梦想已经变成现实,买车对于普通家庭来说,也并非一件难事,豪车够不着,几万块的车还是没问题的,打工一年买车也并非痴人说梦,今天给大家介绍的这三款……前些年做玫琳凯的那些人,现在有多少个人能坐上首席的位置?我同事农丽从2012年开始做玫琳凯,现在家里囤了一堆货,大概有十几、二十万元。为了玫琳凯事业,让自己变成了剩女,还差点被单位开除,到现在都还没有坐上首席的位置!农丽今年3……SupercellCEO我们暂时没发现NFT有什么改善游戏体移动游戏的流行周期往往比较短暂,许多手游曾经风靡一时,却难以抵挡后浪的冲击,会随着下一批明星产品的问世而步入衰退。不过,《部落冲突》显然是个例外:在过去的十年间,《部落冲突》始……杰拉德卡马文加有经验踢得很成熟,踢得更好的球队赢了在此前结束的一场欧冠八分之一决赛首回合的比赛中,皇马52逆转利物浦取胜。本场比赛结束之后,前利物浦球员杰拉德接受了媒体的采访。杰拉德在采访中这样表示:这场比赛是对现实的一……好睡眠只有睡觉睡得好,才能不显老。再厉害的失眠,也怕这个东西。咱们有3亿人是有睡美白障碍的。咱们都知道睡不着危害很大,甚至还有可能会诱发心梗。很多人可能会说我不是不想睡,但是躺……鲜血淋漓的艺术品人皮唐卡中国地大物博,民族差异使得各种宗教信仰也纷繁复杂。单单就佛教而论,中国佛教就有三大体系:汉传佛教、藏传佛教和云南傣族等地区的上座部佛教。三大体系汉传佛教盛行于……四川造JETTA在蓉发布58秒下线一辆新车3月22日晚,四川造汽车的新生代品牌JETTA正式在成都发布,JETTA品牌旗下3款全新车型也首次正式亮相。作为一汽大众的第三个品牌,JETTA品牌旗下产品均由一汽大众成……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网