驱动学习之led-class.c源码分析
admin
2023-08-02 14:40:07
0

1:subsys_initcall宏

#define __define_initcall(level,fn,id) \  static initcall_t __initcall_##fn##id __used \
    __attribute__((__section__(".initcall" level ".init"))) = fn
    
#define subsys_initcall(fn)        __define_initcall("4",fn,4)

2:module_init宏

module_init
    __initcall
        device_initcall
            __define_initcall("6",fn,6)

  通过分析发现,subsys_initcall和module_init这两个后最终都是调用__define_initcall();这个宏。

  内核在启动过程中需要顺序的做很多事,内核如何实现按照先后顺序去做很多初始化操作。内核的解决方案就是给内核启动时要调用的所有函数归类,然后每个类按照一定的次序去调用执行。这些分类名就叫.initcalln.init。n的值从1到8。内核开发者在编写内核代码时只要将函数设置合适的级别,这些函数就会被链接的时候放入特定的段,内核启动时再按照段顺序去依次执行各个段即可。所以subsys_initcallmodule_init的作用是一样的,都是在内核启动的时候去加载驱动,不同之处在于内核启动时执行的顺序不同而已。


3:static int __init leds_init(void)

static int __init leds_init(void)
{
    leds_class = class_create(THIS_MODULE, "leds");
    if (IS_ERR(leds_class))
        return PTR_ERR(leds_class);
    leds_class->suspend = led_suspend;
    leds_class->resume = led_resume;
    leds_class->dev_attrs = led_class_attrs;
    return 0;
}

  这个函数是作用是通过调用class_create函数来创建了一个类名为“leds”的设备类,也就是我们/sys/class/下的leds这个文件夹


4:led_class_attrs

static struct device_attribute led_class_attrs[] = {
    __ATTR(brightness, 0644, led_brightness_show, led_brightness_store),
    __ATTR(max_brightness, 0444, led_max_brightness_show, NULL),
#ifdef CONFIG_LEDS_TRIGGERS
    __ATTR(trigger, 0644, led_trigger_show, led_trigger_store),
#endif
    __ATTR_NULL,
};

  (1)什么是attribute,对应将来/sys/class/leds/目录里的内容,一般是文件和文件夹。这些文件其实就是sysfs开放给应用层的一些操作接口(非常类似于/dev/目录下的那些设备文件)
  (2)attribute有什么用,作用就是让应用程序可以通过/sys/class/leds/目录下面的属性文件来操作驱动进而操作硬件设备。
(3)attribute其实是另一条驱动实现的路线。有区别于之前讲的file_operations那条线。

5:led_classdev_register

  这个函数里面通过调用device_create,来创建一个属于leds设备类的设备,其在系统中的体现就是在/sys/class/leds/里面会得到相应的设备节点文件。其实这个函数就是内核开发者为驱动开发者提供的一个注册leds类设备的一个接口函数,将来我们在写驱动去注册led设备的时候就是调用这个函数去进行注册的。


6:led_classdev_unregister

通过调用device_unregister函数来注销注册的LED设备,和led_classdev_register函数类似,只是功能相反。

相关内容

热门资讯

晋江鞋厂火灾致28死事故的深刻... 7月9日,福建省晋江市陈埭镇辉腾鞋业有限公司发生重大火灾事故,共造成28人遇难。目前,搜救工作已结束...
株洲早高峰的“北斗节奏”:万辆... 7月6日早上八点,株洲市天元区长江北路,上班族张女士掏出手机扫码解锁一辆共享电动自行车,车上的智能中...
纽威阀门申请球阀及其安装方法专... 国家知识产权局信息显示,苏州纽威阀门股份有限公司申请一项名为“球阀及其安装方法”的专利,公开号CN1...
评论丨城市即场景,成都“创”未... 成都,把整座城市化身为“试验场”,让创新火花燃烧成产业炽焰,让新技术、新产品不断走向市场、走到市民身...
十万卡AI集群落成背后:大模型... 过去三年,大模型参数规模从千亿跳到万亿,AI对算力的需求已经远远超出万卡集群的承载能力。斯坦福大学A...
AI、量子科技齐亮相!七月成都... 7月16日至24日,亚太经合组织(APEC)数字和人工智能部长会议及“数字周”相关高级别活动将在四川...
五角大楼发布新一批UFO文件 据美国方面7月10日消息,五角大楼发布新一批与UFO相关的文件。UFO也被称为“不明异常现象”或“不...
活力中国调研行|加快探索人工智... 走进上海创智学院,擦肩而过的年轻面孔,背着双肩包的利落身影,一时分不清谁是老师、谁是学生,唯有热火朝...
产业、生活、生态全拉满!南京阿... 来源:南京晨报 当产业飞轮开始转动,一座园区能迸发出多大的城市活力?7月10日,南京阿里中心交出了它...
AppGallery上线「无网... 在高铁穿越隧道、飞机滑行起飞等网络信号暂时中断的时刻,漫长的等待总让人觉得乏味。针对这类无网场景,华...