首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核模块中module_init和init_module有什么区别?

在Linux内核模块中,module_initinit_module是两个不同的函数宏,用于初始化内核模块。

  1. module_initmodule_init是一个宏,用于指定内核模块的初始化函数。该宏接受一个函数作为参数,该函数在模块加载时被调用。在内核启动时,通过调用insmodmodprobe命令加载模块时,会自动执行指定的初始化函数。module_init宏只能在模块代码的顶层使用一次。
  2. init_moduleinit_module是一个函数宏,用于定义内核模块的初始化函数。该宏接受一个函数作为参数,该函数在模块加载时被调用。与module_init不同的是,init_module宏可以在模块代码的任意位置使用多次,用于定义多个初始化函数。在内核启动时,通过调用insmodmodprobe命令加载模块时,会自动执行所有定义的初始化函数。

区别:

  • module_init是一个宏,用于指定内核模块的初始化函数;init_module是一个函数宏,用于定义内核模块的初始化函数。
  • module_init只能在模块代码的顶层使用一次;init_module可以在模块代码的任意位置使用多次。
  • 在模块加载时,module_init指定的初始化函数会被自动执行;init_module定义的初始化函数会被自动执行。

对于Linux内核模块中的module_initinit_module,腾讯云并没有提供特定的产品或链接。这两个函数宏是Linux内核开发中的概念,用于初始化内核模块,与云计算服务无直接关系。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

[干货]手把手教你用Zedboard学习Linux移植和驱动开发

部分硬件设计中需要CPU完成对电路寄存器的配置,为了完成Zedboard对FPGA上部分寄存器的配置功能,可以在PS单元(处理器系统)上运行裸机程序(无操作系统支持)完成和PL单元(FPGA部分)的数据交互功能,此时PS单元更像单片机开发;另一种方法是PS单元运行Linux操作系统,通过驱动程序和应用程序完成对硬件寄存器的读写操作,并且Linux有着完整的网络协议栈支持,后续可拓展性更强,可以更好的发挥ZYNQ这种异构架构芯片的性能。主要分为两部分,分别阐述Zedboard中FPGA和处理器互联总线与硬件设计和Zedboard处理器系统上嵌入式Linux的移植与通过驱动和应用程序简单配置FPGA寄存器的实现。上次介绍了没有操作系统下的驱动和应用程序开发,本文介绍带操作系统的驱动和应用程序开发。

05

如何调整Linux内核启动中的驱动初始化顺序?

如何调整Linux内核启动中的驱动初始化顺序? 【问题】 此处我要实现的是将芯片的ID用于网卡MAC地址,网卡驱动是enc28j60_init。 但是,读取芯片ID的函数,在as352x_afe_init模块中,所以要先初始化as352x_afe_init。 此处,内核编译完之后,在生成的system.map中可以看到, enc28j60_init在as352x_afe_init之前,所以,无法去读芯片ID。 所以我们的目标是,将as352x_afe_init驱动初始化放到enc28j60_init之前, 然后才能读取芯片ID,才能用于网卡初始化的时候的,将芯片ID设置成网卡MAC地址。 【解决过程】 【1】 最简单想到的,是内核里面的 arch\arm\mach-as352x\core.c 中,去改devices设备列表中的顺序。 enc28j60_init对应的是ssp_device,因为网卡初始化用到的是SPI驱动去进行和通讯的。 as352x_afe_init对应的是afe_device。 原先是:

03
领券