书籍作者:左忠凯 | ISBN:9787302631996 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:7376 |
创建日期:2024-03-30 | 发布日期:2024-03-30 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
随着半导体技术和芯片技术的飞速发展,能运行嵌入式 Linux系统的 MPU 芯片价格也在不断降低,ARM 架构 的芯片在手机、工业控制、物联网、自动驾驶等领域得到了广泛应用。以前大量使用 MCU 的地方也开始使用嵌入式 Linux地系铁统刷。卡的闸机、汽车充电桩的操作面板、物联网网关等都有嵌入式 Linux的身影,各企业对嵌入式 Linux开发 人才的需求也急剧增加。相比单片机开发,嵌入式 Linux开发难度要大很多。尤其是最重要的驱动开发,嵌入式 Linux内核采用面向对象思路设计,且已开发大量驱动框架,开发人员需要掌握这些驱动框架的使用,编写出符合嵌 入式 Linux要求的驱动。 本书从最基本的点灯程序到网络驱动的编写,涵盖了 Linux开发的三大驱动类型:字符设备驱动、块设备驱动 和网络设备驱动。本书的一大特色就是涵盖了全设备树开发,除了最开始的几个为了讲解嵌入式 Linux如何操作 芯片寄存器的例程没有采用设备树外,其他的例程都采用设备树,基本涵盖了嵌入式 Linux驱 动 开 发 中 的 常 用 外设。本书可作为广大从事嵌入式开发、物联网、工业控制开发等工程技术人员的学习和参考用书,也可作为高等学 校计算机、电子、自动化等专业嵌入式系统、微机接口、物联网等课程的教材。
左忠凯,14年参加工作以来一直从事于嵌入式教育,以第一作者身份著有《FreeRTOS源码详解与应用开发》,参与编写了正点原子大量的手把手教你STM32系列书籍,比如《精通STM32F4库函数版》、《STM32F7原理与应用》等。同时录制了大量的STM32相关教学视频,广受好评。18年开始负责公司Linux教育平台的研发,编写了1800多页的Linux驱动开发教程,录制了200多讲Linux开发视频,负责的I.MX6ULL开发板自从发布至今,销量一直处于淘宝第一,Linux驱动开发相关视频在各大平台的点击量超过30万次。
前言
本书和清华大学出版社已出版的《原子嵌入式 Linux驱动开发详解》是一套书籍,在《原子嵌入式 Linux驱动开发详解》这本书的前3篇中,详细讲解了ARM裸机开发、Uboot、Linux内核和根文件系统的移植,为我们学习嵌入式Linux驱动开发打下了坚实的基础。本书是第四篇——ARM Linux驱动开发篇,专门讲解嵌入式Linux驱动开发,涵盖了Linux开发的三大驱动类型: 字符设备驱动、块设备驱动、网络设备驱动。本书使用的Linux内核版本为4.1.15,其支持设备树(Device tree),所以本篇所有例程均采用设备树开发。
嵌入式Linux学习的难点在于:
(1) 基础要求高
嵌入式Linux对于学习者的基础要求比较高,需要从事过或学习过32位ARM单片机的开发。掌握32位微控制器架构的基础知识,了解32位微控制器的寄存器操作方法,掌握常用的通信协议,比如串口、I2C、SPI、RGB屏幕、SAI、网络等。零基础学习嵌入式Linux驱动开发难度很大,笔者不建议直接上手。就跟我们上学一样: 小学—初中—高中—大学,是一个循序渐进的过程。不可能小学、初中都不上,等到了年龄以后直接上高中,一次性把小学、初中和高中的知识全学了,这个难度是很大的。
(2) 驱动框架多
嵌入式Linux为了兼容众多的芯片,开发了大量的驱动框架,我们要根据这些驱动框架来编写驱动。比如一个简单的LED灯驱动程序,单片机用十几行代码就可以实现,但是在嵌入式Linux环境下可能就要几十行了。而且不同的外设,驱动框架不同,如I2C、SPI、按键输入等。嵌入式Linux驱动学习的一大内容就是学习掌握大量的驱动框架。
(3) C语言基础要求高
嵌入式Linux内核采用C语言开发,在内核中充斥着大量的C语言高级用法,像指针、结构体这种都是很常见的。C语言基础薄弱的同学上手难度也很大,所以要加强和巩固C语言的基础知识。
(4) 设备树开发方式
嵌入式Linux内核早就采用设备树进行驱动开发了,和单片机直接编写C文件开发驱动相比,设备树的引入无疑又增加了学习难度,毕竟要多学习一门技术。设备树贯穿于整个嵌入式Linux驱动开发始终,是必须熟练掌握的技术。
本书采用循序渐进、由浅入深的方式进行章节编排,先是字符设备,再是块设备,最后是网络设备。
(1) 字符设备驱动
字符设备是Linux驱动开发中最杂、最多的一类设备,小到LED点灯,大到USB、音频都属于字符设备驱动。在实际的工作中,大部分工作都是处理字符设备驱动。本书首先从一个虚拟的字符设备驱动开始,讲解字符设备基础驱动框架的使用。然后再慢慢引入设备树、GPIO、输入输出子系统、I2C、SPI等其他框架。
(2) 块设备驱动
采用内存模拟一个物理存储设备的方式,重点讲解块设备框架的使用,编写一个采用内存模拟的块设备驱动。
(3) 网络设备驱动
在实际的项目开发中,网络设备驱动也是很重要的一点,比如我们更换网络PHY以后如何调试网络驱动。本书花了大量篇幅来详细讲解嵌入式Linux的网络设备开发流程,从PHY芯片到网络驱动架构,尤其是PHY芯片的讲解。因为在真正做项目的时候,打交道的就是PHY芯片,主控端的驱动是不需要修改的,我们要做的就是驱动起来所选择的PHY芯片,让网络正常工作。
(4) 全设备树开发方式
基本上所有的例程都采用设备树的开发方式,从基本的GPIO到网络驱动。每个例程都有详细的设备树讲解,真正让读者深入掌握设备树原理。
嵌入式Linux的驱动开发学习是需要不断练习的,尤其是相比单片机开发,引入了很多复杂的知识体系。比如搭建驱动框架和设备树,很多初学者第一遍学习的感觉就是稀里糊涂的,这是因为练习得少,对这些新知识还不熟悉,这是很正常的。笔者在学习嵌入式Linux驱动开发的时候,学习了好几遍才有感觉。这里可以教大家一个方法,先用一个开发板跟着教程学习一遍,比如使用正点原子的I.MX6UL开发板。当学完了以后,再换另外一个型号的开发板,比如STM32MP157、RV1126等,将自己学过的东西在新的开发板上实践,这样就能巩固好已有的知识。
最后,祝愿大家学习顺利。
作者2023年5月