Linux设备驱动----之linux内核

本文介绍了单片机与嵌入式开发的区别及应用场景,重点解析了Linux内核在嵌入式开发中的作用,包括Linux设备驱动、模块管理和设备分类等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        记得在大学期间,为了参加一些电子类竞赛,身旁就会有同学购买单片机,自己做流水灯、闹钟等一些小东西。单片机的工作模式是利用软件编程控制硬件,从而实现一些功能。这一类的功能一般都比较简单,逻辑十分清晰。不过针对一些复杂的功能需求,基于单片机也是可以进行开发的。但是对于复杂的、交互式的功能开发,我们还是更倾向于选择嵌入式开发。这两者有什么区别呢?非常简单,嵌入式开发比单片机开发多了一个操作系统。

        单片机开发:软件  ---->  硬件

        嵌入式开发:软件  ----操作系统  ---->  硬件

        什么是操作系统呢?大学时同学们口口相传最难的一门选修课就是操作系统了。简单来说,操作系统Operating System就是用于管理硬件和软件资源的计算机程序。

        为什么要加入操作系统呢?硬件的更新速度是很快的,如果直接在硬件上进行软件开发,那么每个工程师都需要先了解这个硬件平台的特性。这样会导致开发效率非常低。而引入操作系统后,上层工程师就不需要了解底层硬件的具体实现。分工明确,大大提升了开发效率。另外,硬件的差异性会导致软件的一致性差。引入操作系统,可以增强软件的可移植性。

        linux操作系统是一种性能优良、源码公开且被广泛应用的免费操作系统,由于其体积小、可裁减、运行速度高、良好的网络性能等优点,可以作为嵌入式操作系统。因此linux设备驱动开发就是在基于linux kernel的嵌入式平台上,针对不同的硬件平台和外围设备进行开发调试,向上提供一个稳定统一的应用软件开发平台。

        关于linux kernel的文章有很多。在我学习Linux设备驱动初期,带我的师父抛给我的第一本书就是《Linux内核设计与实现》,让我了解一下Linux内核是个什么东西,和它的基本架构是什么样的。Linux内核就是unix演变的一个操作系统,风格简洁,功能强大。它主要提供了进程管理、进程通信、内存管理、虚拟文件系统、网络子系统,以及设备与模块等功能。对于底层开发人员,这些内容都是需要有一定的了解的,而其中的设备与模块则是必须要掌握的内容。

        #关于linux模块#

        linux内核整体结构已经非常庞大了,如果还要向在其基础上增加新的功能,有两种方法可选:

        1 将所有的功能都编进内核。

        2 将所需要的功能编译成模块,在需要的时候动态加载。

        第一种情况会导致内核越来越庞大,很难管理。而第二种方法很好的控制了内核的大小,加载后的模块和内核其他功能一样运行,使用灵活方便。但是模块的版本要注意和内核的版本相匹配,否则可能导致内核崩溃。

        除了手动输入insmod/rmmod名利进行加载/移除模块,linux内核提供了自动编译模块的方法。linux内核的模块加载函数一般用__init标识声明,并且模块加载函数必须以module_init的形式被指定。

        #关于linux设备#

        对于各式各样的外围设备,一般可以分为三类:字符设备、块设备和网络设备。

        1 字符设备:字符设备cdev是很常用的一种设备类型,针对智能手机,其字符设备有触摸屏、显示器等,还有很多伪设备。对于用户层,可以通过访问字符设备节点来访问相应的字符设备。

        2 块设备:块设备blkdev可以通过块设备节点进行访问。块设备的例子有硬盘、USB等。

        3 网络设备:网络设备不是通过设备节点进行访问,而是通过套接字API这样的特殊接口来访问的。

        linux内核在2.6版本发布时,新增了一个引人注目的新特性:设备模型。该模型的目的是为内核建立一个统一的设备模型,从而有一个对系统结构的一般性抽象描述。linux设备模型提供了总线、设备和驱动的管理模型,并提供了sysfs文件管理系统。

        除此之外,在linux底层驱动开发中还需要用到很多相关的机制,如:同步与异步、阻塞与非阻塞、中断的处理、设备树的修改、以及一些特殊设备对应的子系统等等。

        了解了linux内核一些基本内容后,还要认真阅读相关设备的芯片手册。通过软件对设备上电、读写寄存器,向上提供能够正常使用的功能接口,基本上就完成了对一个底层设备的驱动。当然了,事情并不像说的那么简单,下一次我们以伪设备globalmen为例来详细介绍字符设备的驱动过程吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值