扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
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_initcall和module_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函数类似,只是功能相反。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流