猜你喜欢
原子嵌入式Linux驱动开发详解

原子嵌入式Linux驱动开发详解

书籍作者:左忠凯 ISBN:9787302613824
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:5794
创建日期:2023-04-19 发布日期:2023-04-19
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

嵌入式 Linux涉及的知识点很多,对初学者的基础要求高,在知识储备的广度和深度上都对学习者提出了很高

的要求。大多数转型嵌入式 Linux开发的朋友都是以前从事单片机开发工作的工程师,因此如何从单片机开发工

程师转型为嵌入式 Linux开发工程师,这个过程非常重要。

单片机 工 程 师 大 多 数 都 是 在 Windows环 境 下 工 作,使 用 集 成 IDE 编 写 并 编 译 代 码,然 后 在 IDE 上 通 过

DownLoad按钮一键下载代码到单片机中。至于集成IDE是怎么组织源文件,又是怎么编译的并不清楚。

本书就以单片机工程最熟悉的“裸机”开发为例,讲解如何在 Ubuntu下搭建开发环境,如何使用 VScode编写程

序,如何使用 make工具编译源码。通过这些操作,大家就可以对集成式IDE与开源开发环境有很清晰的认识。当

掌握了开发方式以后,剩下的就是通过大量的裸机案例来加深对I.MX6ULL 这颗芯片的认识,了解各个外设的应

用,为后面学习嵌入式Linux驱动开发打下坚实的基础。本书后半部分详细讲解了如何移植uboot、Linux内核、根文件

系统,最终在开发板上搭建出一个基础的嵌入式 Linux系统,后续的嵌入式 Linux驱动开发就在这个小系统上进行。

本书可作为广大从事嵌入式开发、MCU 开发、物联网应用开发等工程技术人员的学习和参考用书,也可作为高

等院校计算机、电子、自动化等专业嵌入式系统、微机接口、物联网、单片机等课程的教材。


作者简介

左忠凯,14年参加工作以来一直从事于嵌入式教育,以第一作者身份著有《FreeRTOS源码详解与应用开发》,参与编写了正点原子大量的手把手教你STM32系列书籍,比如《精通STM32F4库函数版》、《STM32F7原理与应用》等。同时录制了大量的STM32相关教学视频,广受好评。18年开始负责公司Linux教育平台的研发,编写了1800多页的Linux驱动开发教程,录制了200多讲Linux开发视频,负责的I.MX6ULL开发板自从发布至今,销量一直处于淘宝第一,Linux驱动开发相关视频在各大平台的点击量超过30万次。

前言






本书主要讲解嵌入式Linux中的驱动开发,也会涉及裸机开发的内容,相信大部分读者和作者经历一样,以前从事过单片机开发的工作,比如51或者STM32等。单片机开发很难接触到更高层次的系统方面的知识,用到的系统都很简单,比如μC/OS、FreeRTOS等,这些操作系统都使用一个Kernel,如果需要网络、文件系统、GUI等就需要开发者自行移植。而移植又是非常痛苦的一件事情,而且移植完成以后的稳定性也无法保证。即使移植成功,后续的开发工作也比较烦琐,因为不同的组件其API操作函数都不同,没有一个统一的标准,使用起来学习成本比较高。这时候一个功能完善的操作系统就显得尤为重要: 具有统一的标准,提供完善的多任务管理、存储管理、设备管理、文件管理和网络等。Linux就是这样一个系统,这样的系统还有很多,比如Windows、macOS、UNIX等。本书讲解Linux,而Linux开发可以分为底层驱动开发和应用开发,本书讲解的是Linux驱动开发,主要面向使用过STM32的开发者。平心而论,如果此前只会51单片机开发,笔者不建议直接上手Linux驱动开发,因为51单片机和Linux驱动开发的差异太大。笔者建议在学习嵌入式Linux驱动开发之前一定要学习STM32这种CortexM内核的MCU,因为STM32这样的MCU其内部资源和可以运行Linux的CPU差不多,如果会STM32,则上手Linux驱动开发就会容易很多。笔者就是此前做了4年STM32开发工作,然后转做Linux驱动开发,整个过程比较顺畅。


鉴于当前STM32非常火爆,学习者众多,如何帮助STM32学习者顺利地转入Linux驱动开发有如下几点需要注意。


1) 选取合适的CPU


理论上来讲,如果ST公司有可以运行的Linux的芯片那再好不过了,因为大家对STM32很熟悉,但是在编写本书时,ST公司尚没有可以运行Linux的CPU。Linux驱动开发入门的CPU一定不能复杂,比如像三星的Exynos 4412、Exynos 4418等,这些CPU性能很强大,带有GPU,支持硬件视频解码,可以运行Android。但是正是它们的性能过于强大,功能过于繁杂,所以不适合Linux驱动开发入门。一款外设和STM32H7这样的MCU相似的CPU就非常适合Linux入门,三星的S3C2440就非常合适,但是S3C2440早已停产了,学了以后工作上又用不到,又得学习其他的CPU,有点浪费时间。笔者花了不少时间终于找到了一款合适的CPU,那就是NXP的I.MX6ULL。I.MX6ULL就是一款可以跑Linux的STM32,外设功能和STM32相似,如果此前学习过STM32,那么会非常容易上手I.MX6ULL。而且I.MX6ULL可以正常出货,这是一款工业级的CPU,是三星S3C2440、S3C6410产品替代的绝佳之选,学习完I.MX6ULL以后,在工作中就可以直接使用了。本书选取正点原子的I.MX6UALPHA开发板,其他厂商的I.MX6ULL开发板也可以参考本书。


2) 开发环境讲解


STM32的开发都是在Windows系统下进行的,使用MDK或者IAR这样的集成IDE,但是嵌入式Linux驱动开发需要的主机是Linux平台的,也就是必须先在自己的计算机上安装Linux系统。Linux系统发行版有Ubuntu、CentOS、Fdeora、Debian等。本书使用Ubuntu操作系统。本书假设大家此前从来没有接触过Ubuntu操作系统,因此会有详细的Ubuntu操作系统安装、使用教程的讲解,帮助大家熟悉开发环境。






3) 合理的裸机例程


学习嵌入式Linux驱动开发建议大家先学习裸机开发(如果学习过STM32,则可以跳过裸机学习),Linux驱动开发非常烦琐。要想进行Linux驱动开发,必须要先移植uboot,然后移植Linux系统和根文件系统到开发平台上。而uboot又是一个超大的裸机综合例程,因此如果没有学习过裸机例程,那么uboot移植会有困难,尤其是要修改uboot代码时。STM32基本都是裸机开发,在集成IDE下编写代码,可以使用ST公司提供的库。但是在Ubuntu下编写I.MX6ULL裸机例程就没有这么方便了,没有MDK和IAR这样的IDE,所有的一切都需要自己搭建,本书提供的视频会有详细的讲解。本书还提供了数十个裸机例程,由浅入深,涵盖了大部分常用的功能,比如I/O输入输出、中断、串口、定时器、DDR、LCD、I2C等。学习完裸机例程以后就对I.MX6ULL这颗CPU非常熟悉了,再去学习Linux驱动开发就很轻松了。


4) uboot、Linux和根文件系统移植


学习完裸机例程以后就是Linux驱动开发了,但是在进行Linux驱动开发之前要先在使用的开发板平台上移植好uboot、Linux和根文件系统。这是Linux驱动开发的第一个拦路虎,因此本书和相应的视频会着重讲解uboot/Linux和根文件系统的移植。


5) 嵌入式Linux驱动开发


当我们把uboot、Linux内核和根文件系统都在开发板上移植好以后,就可以开始Linux驱动开发了。Linux驱动有3大类: 字符设备驱动、块设备驱动和网络设备驱动。对于这3大类内容,本书都有详细的讲解,并且配有数十个相应的教学例程,从最简单的点灯到最后的网络设备驱动。


本书一共分三篇,每篇对应一个不同的阶段。


第一篇: Ubuntu操作系统入门(为节省篇幅,扫描封底“本书资源”二维码获取)


本篇主要讲解Ubuntu操作系统的使用,不涉及任何嵌入式方面的知识,全部是在计算机上完成的,只要安装好Ubuntu操作系统即可。


第二篇: 裸机开发(第1~26章)


从本篇正式开始开发板的学习,本篇通过数十个裸机例程来帮助大家了解I.MX6ULL这颗CPU,为以后的Linux驱动开发做准备。通过本篇,大家可以掌握在Ubuntu下进行ARM开发的方法。


第三篇: 系统移植(第27~36章)


本篇讲解如何将uboot、Linux和根文件系统移植到我们的开发板上,为后面的Linux驱动开发做准备。


通过上面三篇的学习,大家能掌握嵌入式Linux驱动的开发流程,本书旨在引导大家入门Linux驱动开发,更加深入地研究就需要大家在实践中不断地总结经验,并与理论结合,祝愿大家学习顺利。



作者2022年8月






产品特色