当前位置: 首页 > news >正文

腾讯云网站建设教学视频邯郸网站设计公司排名

腾讯云网站建设教学视频,邯郸网站设计公司排名,做淘宝客网站需要什么,网站建设企业最新报价__init#xff0c; __initdata等属性标志#xff0c;是要把这种属性的代码放入目标文件的.init.text节#xff0c;数据放入.init.data节──这一过程是通过编译内核时为相关目标平台提供了xxx.lds链接脚本来指导ld完成的。 对编译成module的代码和数据来说#xff0c;当模…__init __initdata等属性标志是要把这种属性的代码放入目标文件的.init.text节数据放入.init.data节──这一过程是通过编译内核时为相关目标平台提供了xxx.lds链接脚本来指导ld完成的。  对编译成module的代码和数据来说当模块加载时__init属性的函数就被执行;对 静态编入内核的代码和数据来说当内核引导时 do_basic_setup()函数调用do_initcalls()函数后者负责所有.init节函数的执行。 在初始化完成后用这些关键字标识的函数或数据所占的内存会被释放掉。1 所有标识为__init的函数在链接的时候都放在.init.text这个区段内 在这个区段中函数的摆放顺序是和链接的顺序有关的是不确定的。 2 所有的__init函数在区段.initcall.init中还保存了一份函数指针 在初始化时内核会通过这些函数指针调用这些__init函数指针 并在整个初始化完成后释放整个init区段包括.init.text.initcall.init等 注意这些函数在内核初始化过程中的调用顺序只和这里的函数指针的顺序有关 和1中所述的这些函数本身在.init.text区段中的顺序无关。 在2.4内核中这些函数指针的顺序也是和链接的顺序有关的是不确定的。 在2.6内核中initcall.init区段又分成7个子区段分别是 .initcall1.init .initcall2.init .initcall3.init .initcall4.init .initcall5.init .initcall6.init .initcall7.init 参见include/linux/init.h和vmlinux.lds 当需要把函数fn放到.initcall1.init区段时只要声明 core_initcall(fn); 即可。 其他的各个区段的定义方法分别是 core_initcall(fn) ---.initcall1.init postcore_initcall(fn) ---.initcall2.init arch_initcall(fn) ---.initcall3.init subsys_initcall(fn) ---.initcall4.init fs_initcall(fn) ---.initcall5.init device_initcall(fn) ---.initcall6.init late_initcall(fn) ---.initcall7.init 而与2.4兼容的initcall(fn)则等价于device_initcall(fn)。 各个子区段之间的顺序是确定的即先调用.initcall1.init中的函数指针 再调用.initcall2.init中的函数指针等等。 而在每个子区段中的函数指针的顺序是和链接顺序相关的是不确定的。 在内核中不同的init函数被放在不同的子区段中因此也就决定了它们的调用顺序。 这样也就解决了一些init函数之间必须保证一定的调用顺序的问题。 2. Linux Kernel源代码中与段有关的重要宏定义 . 关于__init、__initdata、__exit、__exitdata及类似的宏 打开Linux Kernel源代码树中的文件include/init.h可以看到有下面的宏定议 #define __init  __attribute__ ((__section__ (.init.text)))  __cold #define __initdata    __attribute__ (( __section__ (.init.data))) #define __exitdata   __attribute__ (( __section__ (.exit.data))) #define __exit_call  __attribute_used__ __attribute__ (( __section__ (.exitcall.exit))) #define __init_refok  oninline __attribute__ ((__section__ (.text.init.refok))) #define __initdata_refok __attribute__ ((__section__ (.data.init.refok))) #define __exit_refok noinline __attribute__ ((__section__ (.exit.text.refok))) ......... #ifdef MODULE #define __exit  __attribute__ (( __section__ (.exit.text))) __cold #else #define __exit __attribute_used__ __attribute__ ((__section__ (.exit.text))) __cold #endif 对于经常写驱动模块或翻阅Kernel源代码的人看到熟悉的宏了吧__init, __initdata, __exit, __exitdata。 __init 宏最常用的地方是驱动模块初始化函数的定义处其目的是将驱动模块的初始化函数放入名叫.init.text的输入段。当内核启动完毕后这个段中的内存会被释放掉供其他使用。 __initdata宏用于数据定义目的是将数据放入名叫.init.data的输入段。其它几个宏也类似。 另外需要注意的是在以上定意中用__section__代替了section。还有其它一些类似的宏定义这里不一一列出其作用都是类似的。   模块加载分为动态加载和静态加载。 所谓静态加载就是开机加载系统时将模块加载上去这就是编译进内核。 而动态加载就是在开机以后将模块加载上去这就是编译成模块!   init_module是默认的模块的入口,如果你想指定其他的函数作为模块的入口就需要 module_init函数来指定,比如 module_init   (your_func); 其中your_func是你编写的一个函数的名称.   init_module()是真正的入口module_init是宏如果在模块中使用最终还是要转换到init_module()上。 如果不是在模块中使用module_init可以说没有什么作用。总之使用module_init方便代码在模块和非模块间移植。
http://www.huolong8.cn/news/46469/

相关文章:

  • 国外优秀网站模板做网站注册商标
  • 网站栏目规划网站设计的文案
  • 网站建设及推广费记什么科目新手学做网站书
  • 如何用dw做网站底页全国信用企业信息公示系统查询
  • 换模板搭建网站怎么做想开发一个旧物交易网站应该怎么做
  • vs2012网站开发网站设计 侵权
  • 建设网站的3个必要条件做旅游网站目的和意义
  • 网站后台怎么做下载链接建筑网上接活平台
  • 学网站开发难吗wordpress文章评论数量
  • 网站建设服务开发定制网站建设服务商
  • 衡阳哪有做网站推广的网站建的创新点
  • 网站建设帝国手机网站制作方法
  • 网站推广和seo各大网站提交入口
  • 东营的招聘网站哪个有用设计案例网站
  • 做公司网站员工保险连云港网站建设
  • 洱源名师工作室网站建设2008r2做网站
  • 成都比较好的网站建设公司搜索引擎优化策略包括
  • 做网站怎么添加图片比较放得开的几个直播平台
  • 电商网站设计与开发jsp网站开发存在的问题
  • 荆州市城市建设投资开发有限公司网站流量点击推广平台
  • 哪类型网站容易做wordpress页面模板选项
  • 门户网站开发怎么收费山东免费网络推广工具
  • 站长工具网址是多少有没有网站可以做地图
  • 东台做淘宝网站室内设计学校专升本
  • 钢笔工具网站网站首页弹窗代码
  • 游戏科技网站网站做线上销售
  • 织梦建站教程wordpress的页面
  • 绍兴网站建设推广个人网站建设服务
  • 做网站练手wordpress瀑布流网店
  • 东台做网站的郑州注册公司网站