17---设备与模块

关于设备模型和设备管理,主要有那些部分?

  • 设备类型----为统一普通设备的操作所采取的分类
  • 模块----用于按需加载和按需卸载目标代码的机制
  • 内核对象----内核数据结构中支持面向对象的操作,还支持维护父子之间的继承关系
  • sysfs----系统中设备树的一个文件系统

有哪些设备类型?

  • 块设备(blkdev)----可寻址的,以块为单位进行寻址,块的大小和具体的设备有关,通过称为“块设备结点”的特殊文件访问块设备,并通常被挂载为文件系统。常见的块设备有硬盘、蓝光光碟和flash存储设备。
  • 字符设备(cdev)----不可寻址,通过称为“字符设备结点”的特殊文件以字节为单位访问设备。常见的字符设备有键盘、鼠标和打印机。
  • 网络设备-----通过称为“套接字API”这样的接口来访问网络,是通过物理适配器和一种特定的协议完成的。常见的网络设备有以太网设备。
  • 杂项设备(miscdev)----简化的字符设备,是对通用基本架构的抽象,易于描述。
  • 伪设备----一种虚拟的设备,仅提供内核访问功能。常见的伪设备有随机数发生器,空设备,满设备和内存设备。

Linux内核中使用模块有哪些好处?

  • 由于模块可以复用,基本内核镜像可以尽可能的小
  • 方便内核代码动态删除、重载和调试
  • 当热插拔新设备时,可通过命令载入新的驱动程序

模块有什么特点?

  • 模块本身不被编译入内核镜像,控制了内核大小
  • 模块一旦被加载,就和内核中其他部分完全一样

模块初始化init函数有什么作用?

注册资源、初始化硬件和分配数据结构,如果包含init函数的文件被静态编译到内核映像中,init函数将被存放在内核映像中,并在内核启动时运行。init函数返回一个int型数值,如果初始化成功返回0,初始化失败返回非0。

在哪里构建和管理内核源码树?

  • 把模块源码加入到正式的内核代码树
  • 在内核源码树之外维护和构建模块源码

假设是一个字符设备,在内核源码树下,如何编译模块?

  • 1--在drivers/char目录下新建一个目录名为fish
  • 2--通知模块构建系统进入fish目录编译模块,在drivers/char/Makefile中添加obj-m+=fish/或obj-$(CONFIG_FISH_POLE)=fish/
  • 3--定义如何编译模块,在drivers/char/fish下新建一个Makefile文件,添加obj-m+=fish.o或obj-$(CONFIG_FISH_POLE)=fish.o。如果有多个.c文件需要编译成一个.o文件,需要再添加fish-objs:=fish-main.o fish-line.o

假设是一个字符设备,在内核源码树外,如何编译模块?

  • 在自己方便访问目录下建立Makefile文件,添加obj-m+=fish.o或obj-$(CONFIG_FISH_POLE)=fish.o,根据需要添加fish-objs:=fish-main.o fish-line.o
  • 通知make编译器找到自定义的源码,在Makefile文件下添加make -c /kernel/source/location SUBDIR=$PWD moudles

配置选项CONFIG_FISH_POLE有什么作用?

目录fish的上级目录下包含了Kconfig文件,用来定义配置选项,配置选项可以定义编译的条件实现模块的自动编译。

Kconfig(drivers/char/Kconfig)包含哪些内容,有什么作用?

  • source  "drivers/char/fish/Kconfig"----引入其他目录下的Kconfig
  • config FISH_POLE----定义该配置项代表的配置目标
  • tristate----三态,Y(编译到内核)、N(不编译)和M(作为模块编译)
  • default----默认编译状态
  • help----该配置项的说明文档
  • depends on---指明该配置项生效所依赖的选项
  • select-----指明该配置项强制开启的选项

什么是统一设备模型(driver moudle)?

一种独立的机制用来表示设备,描述设备在系统中的拓扑结构

统一设备模型给系统带来哪些好处?

  • 代码重复最小化
  • 提供引用计数
  • 方便查看系统中所有设备的状态以及设备连接的总线
  • 将设备以树的形式展现出来,包括所有总线和内部链接
  • 将设备和其对应的驱动联系起来
  • 将设备按照类型加以归类
  • 可沿设备树的叶子向其根部方向遍历,依次关闭各设备电源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值