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

庐阳网站快速排名锦州建设银行网站

庐阳网站快速排名,锦州建设银行网站,python做网站验证码,环境设计专业网站linux版本#xff1a;4.19 module_init()与module_exit()用于驱动的加载#xff0c;分别是驱动的入口与退出函数 module_init()#xff1a;内核启动时或动态插入模块时调用module_exit()#xff1a;驱动移除时调用 本篇文章介绍module_init() module_init() module_init…linux版本4.19 module_init()与module_exit()用于驱动的加载分别是驱动的入口与退出函数 module_init()内核启动时或动态插入模块时调用module_exit()驱动移除时调用 本篇文章介绍module_init() module_init() module_init()是驱动的入口函数该函数定义在include\linux\module.h文件 /*** module_init() - driver initialization entry point* x: function to be run at kernel boot time or module insertion** module_init() will either be called during do_initcalls() (if* builtin) or at module insertion time (if a module). There can only* be one per module.*/ #define module_init(x) __initcall(x);__initcall(x)函数定义在include\linux\init.h文件里面 #define __initcall(fn) device_initcall(fn)device_initcall(fn)定义也在include\linux\init.h文件里面 #define device_initcall(fn) __define_initcall(fn, 6)__define_initcall(fn, 6)定义也在include\linux\init.h文件里面 #define __define_initcall(fn, id) ___define_initcall(fn, id, .initcall##id)___define_initcall(fn, id, .initcall##id)定义也在include\linux\init.h文件里面 /** initcalls are now grouped by functionality into separate* subsections. Ordering inside the subsections is determined* by link order. * For backwards compatibility, initcall() puts the call in * the device init subsection.** The id arg to __define_initcall() is needed so that multiple initcalls* can point at the same handler without causing duplicate-symbol build errors.** Initcalls are run by placing pointers in initcall sections that the* kernel iterates at runtime. The linker can do dead code / data elimination* and remove that completely, so the initcall sections have to be marked* as KEEP() in the linker script.*/#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS #define ___define_initcall(fn, id, __sec) \__ADDRESSABLE(fn) \asm(.section \ #__sec .init\, \a\ \n \__initcall_ #fn #id : \n \.long #fn - . \n \.previous \n); #else #define ___define_initcall(fn, id, __sec) \static initcall_t __initcall_##fn##id __used \__attribute__((__section__(#__sec .init))) fn; #endif综上module_init调用顺序如下 module_init()---__initcall()---device_initcall()---__define_initcall()---___define_initcall()对___define_initcall()函数进行分析 首先了解一下#与##的作用 符号作用举例##“##”符号可以是连接的意思例如initcall_##fn##id为initcall_fnid假设fn为fbmem_initid6时initcall_##fn##id为initcall_fbmem_init6##符号可以是字符串的意思例如#id为“id”id6时#id为“6” 所以module_init(fbmem_init)函数相当于 static initcall_t __initcall_fbmem_init6 __used __attribute__((__section__(.initcall6.init))) fbmem_init这行代码定义了一个静态变量__initcall_fbmem_init6变量类型为initcall_t(是一个函数指针类型用于表示内核的初始化函数)__used 用于告诉编译器不要将“__initcall_fbmem_Init6”变量视为未使用的变量避免编译器优化移除它。 attribute((section(“.initcall6.init”)))编译器指令告诉编译器将“__initcall_fbmem_init6”变量放置在‘.initcall6.init’的代码段中这个代码段通常用于存放内核的初始化函数在启动的时候按顺序执行.initcall1.init、.initcall2.init 。。。 ‘ fbmem_init’ 这将’__initcall_fbmem_init6’初始化为指向‘fbmem_init’函数的指针。   总之这段代码的作用是将‘fbmem_init’函数注册为一个初始化函数使其在内核启动的时候执行。 对于编译成模块执行sudo insmod的时候是如何加载的等我知道后再来写
http://www.hkea.cn/news/14452124/

相关文章:

  • 海口网站制作微信网站合同
  • 关于做网站书籍手机优化怎样解除
  • 云南网站备案系统网站规划与设计方向
  • 如何注册网站域名备案上海短视频制作
  • 合肥市蜀山区做个网站多少钱欧美系列
  • 整个网站与网站模板的区别音乐网站建设成本
  • 招代理网站建设公司企业网站推广技巧有哪些
  • 孝感新闻门户网站电商设计行业前景
  • 网站编辑年终总结店铺设计软件手机版
  • 福田做棋牌网站建设哪家好富阳做兼职的网站
  • 好网站建设公司哪家好做网站的服务器用什么系统
  • 郑州腾石建站如何建立一个网站链接的文档
  • xxx网站策划书付银行的网站建设费的会计科目
  • 公司 网站建设建设网站为什么要虚拟主机
  • 建设银行武威分行网站吴桥县做网站价格
  • 公司网站链接怎么弄怎么制作软件app教程
  • 罗湖中小网站建设义乌网图科技有限公司
  • 杭州高端网站建设公司哪家好中国电子商务门户
  • 商丘企业网站建设团队广州市网站建设科技
  • 做空eth网站html5网站后台页面设计
  • 网站建设与推广综合实训报告册网站上做旅游卖家要学什么
  • 东莞企业网站排名优化获得网站后台地址
  • 做任务推广网站国外活动策划网站
  • 国内最好用的免费建站平台硬件开发工程师是做什么的
  • 电子商务网站建设工具网站内页的设计
  • 超链接网站建设江宁网站建设制作
  • 网站英文联系我们应用网站制作
  • 佛山市住房和城乡建设管理局网站wordpress发送邮件出现502
  • 软件下载网站开发 论文保定电商网站建设
  • 做网站为什么要做备案接入企业信用信息查询公示系统上海