【迅为iTop4412学习笔记】关于注册设备、注册驱动、生成设备节点小结

声明

以下都是我刚开始看驱动视频的个人强行解读,如果有误请指出,共同进步。

本节目标

  1. 关于注册设备、注册驱动、生成设备节点小结

  其实学到现在,很多东西我们都似懂非懂,而我也是刚学,也感觉很多东西似是而非,但好在代码过程和结果都是对的。

一些概念

  1. 无论是设备,还是驱动,都是挂载在总线上
  2. 因为有些东西是没有实体总线的(如LED,只是个简单的GPIO),所以linux定义了一个虚拟总线platform
  3. 我们之前学习的设备,驱动,都是挂载在platform上的。(platform_device,platform_driver)

注册设备的方式

  1. 直接编译进内核(一直在内核里)
  2. 以模块的方式加载进内核 (用就加载,不用卸载)

关于主、次设备号

  linux的区分方式就是主设备号,和次设备号。主设备号范围(0-255),0和255保留,部分linux占用一部分主设备号(例如10)。

  主设备号用来分类,比如USB类的设备,你们的号是180。杂项设备,你们的号是10。

  再分类之后,我们再细分到每个设备,分配次设备号。

  比如,杂项设备里面有一个LED,我们就给他分配一个号叫123。那么主设备号10,次设备号123的设备就是LED了。

注册设备,注册驱动,生成设备节点流程

  无论是注册设备,还是注册驱动,我们都要起名name

  当注册设备or注册驱动的时候,linux会通过platform_match自动匹配设备和驱动,当设备和驱动你都注册了,那么匹配成功,就调用probe()进行加载驱动,卸载驱动则会调用remove()。

  不过这倒不是说真的注册了一个设备,而是说注册设备的一个方式,通过platform_device和platform_driver,把设备和驱动挂载在platform总线上,注册了一个平台设备(没有占用主、次设备号)

  对于注册杂项设备章节,我们在probe()里注册了一个杂项设备,配置了fops结构体自动生成了一个设备节点。这个才是真正注册了一个字符设备。因为他经历了,注册设备、注册驱动、生成设备节点这样一个完整的步骤(杂项设备主设备号固定是10,次设备号自动分配的)

  当然,你也可以选择不生成设备节点,单纯的注册设备和驱动(没有分配主次设备号,所以从另一个角度来说也不算占用系统资源?)

你可能感兴趣的:(iTop4412,Linux驱动篇)