Linux设备驱动开发入门指南
1. 嵌入式Linux系统中用户应用与硬件的分离
在嵌入式Linux系统设计里,一个关键概念是将用户应用和底层硬件分离开来。用户空间的应用程序不被允许直接访问外设寄存器、存储介质,甚至是随机存取存储器(RAM)。相反,硬件是通过内核驱动来访问的,而RAM则由内存管理单元(MMU)管理,应用程序在虚拟地址上运行。
这种分离带来了两大好处:
- 健壮性 :假设Linux内核能正常运行,只允许内核与底层硬件交互,可防止应用程序意外或恶意地错误配置硬件外设,避免将其置于未知状态。
- 可移植性 :若只有内核驱动管理特定于硬件的代码,那么当将系统从一个硬件平台移植到另一个硬件平台时,只需修改这些驱动。应用程序通过一组在不同硬件平台上一致的驱动API进行访问,这使得应用程序在不同平台间迁移时,源代码几乎无需修改。
设备驱动可以是内核模块,也可以静态地构建到内核映像中。默认情况下,内核会将大多数驱动静态地构建到内核中,这样它们会自动启动。内核模块不一定是设备驱动,它是内核的扩展,会被加载到内核的虚拟内存中。将设备驱动作为模块来构建,开发会更轻松,因为可以在不重启内核的情况下加载、测试和卸载它。内核模块通常位于根文件系统的 /lib/modules/<kernel_version>/ 目录下。
每个Linux内核模块都有 init() 和 exit() 函数。 init() 函数在驱动加载时被调用一次, e
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



