“module_xxx_driver”用于编写设备驱动程序调用,分析内核源码可知,其封装了设备的注册和注销函数定义及向内核注册该函数的功能。 module_i2c_driver 以i2c总线为例。其函数宏名称为“module_i2c_driver”,原型位于“kernel/include/linux/i2c.h”中。 /** * module_i2c_driver() - Helper macro for regi...
cdlinux_driver/module/hellomodule/ make 重要 Makefile中指定的目录 “KERNEL_DIR=../../../kernel/”要和实际编译内核时指定的输出目录一致,如果编译内核时没有指定特定输出目录,那么就将这个变量指定到内核源码的根目录,可以用绝对路径或者相对路径。 这里的环境是在PC上,使用交叉编译工具编译内核模块,在板卡上...
使用module_platform_driver宏注册平台设备驱动模块: 使用module_platform_driver宏来注册平台设备驱动模块,将上述定义的结构体作为参数传递给宏。例如: module_platform_driver(my_platform_driver); 通过使用 module_platform_driver 宏,内核会在模块加载时自动注册平台设备驱动,并根据驱动的名称与设备树中的设备节点进行匹...
MODULE_LICENSE("GPL"); #define DRIVER_NAME "chardev"#define BUFFER_SIZE 256 static const unsigned int MINOR_BASE = 0;static const unsigned int MINOR_NUM = 2;static unsigned int chardev_major;static struct cdev chardev_cdev;static struct class *chardev_clas...
blacklistmodulename 不再加载某个模块 五、内核模块开机自动挂载: 对于开机自动挂载模块,在redhat系统里,网上说在内核启动的过程中,init执行/etc/rc.d/rc.sysinit后,启动内核外挂模块 时会读取 /etc/modprobe.conf这个文件。在2.4的内核中, 只 要直接修改/etc/modprobe.conf加入install xxx即可。2.6内核则需修改/...
static struct i2c_driver i2c_driver = { .driver = { .name = DRIVER_NAME, .owner = THIS_MODULE, }, .probe = i2c_probe, .remove = i2c_remove, .id_table = i2c_id, }; module_i2c_driver(i2c_driver); I2C 读写函数 __s32 i2c_smbus_write_quick(int file, __u8 value); __s32 i2...
4. 配置设备的寄存器、中断等信息 利用module_i2c_driver宏,将i2c_driver结构注册为一个I2C设备驱动程序。5. 编译和加载驱动程序 将驱动程序代码编译成可加载的内核模块。 使用insmod或modprobe命令加载模块。6. 测试和调试 进行必要的测试与调试,确保驱动能正确与硬件交互,实现预期功能。以上步骤涵盖了...
compatible = “rockchip,rk809”匹配到i2c驱动module_i2c_driver(rk808_i2c_driver),会调用rk808_probe,该函数会继续i2c设备初始化等操作,其中会调用devm_mfd_add_devices函数,添加mfd(multi-function device,多功能设备)设备,会添加rk808-regulator平台设备,该设备会和平台驱动rk808_regulator_driver匹配,最后在...
在Linux底下写过driver模块的对这个宏一定不会陌生。module_init宏在MODULE宏有没有定义的情况下展开的内容是不同的,如果这个宏没有定义,基本上表明阁下的模块是要编译进内核的(obj-y)。 1.在MODULE没有定义这种情况下,module_init定义如下: #define module_init(x) __initcall(x); ...
在Linux底下写过driver模块的对这个宏一定不会陌生。module_init宏在MODULE宏有没有定义的情况下展开的内容是不同的,如果这个宏没有定义,基本上表明阁下的模块是要编译进内核的(obj-y)。 1.在MODULE没有定义这种情况下,module_init定义如下: #define module_init(x) __initcall(x); ...