以服务于中国广大创业者为己任,立志于做最好的创业网站。

标签云创业博客联系我们

导航菜单

电子平台创新创业点子,嵌入式创新创业项目点子

  

  最近和学习组的同学交流,发现很多初学者只有单片机的基础,或者没有学过单片机,想重新学习嵌入式和Linux,但是对很多概念都不熟悉,导致学习后不知道学什么或者用什么。所以,今天我就抽出一点时间给大家简单讲解一下MCU和嵌入式的区别,以及如何学习嵌入式。   

  

  单片机和嵌入式Linux区别   

  

  所有的电子产品,所用技术都可以认为要么是单片机,要么是Linux;GUI主要是QT/安卓,都是在Linux上运行的。   

  

     

  

  到现在,单片机设备的使用绝对远远超过Linux。很多初学者也是先从单片机学习,从单片机进入电子工程师行业。   

  

  日常生活中,有哪些产品使用单片机、Linux呢?下面举一些例子:   

  

     

  

     

  

     

  

  我们在设计一款产品的时候,到底是用MCU还是用Linux,取决于成本:硬件成本、软件成本、维护成本、升级成本。而不是根据个人喜好选择:我喜欢MCU,所以排斥Linux;我喜欢Linux,所以拒绝MCU。为了有更多的选择,我们需要同时了解单片机和Linux。   

  

  嵌入式Linux系统的组成   

  

     

  

  让我们用类比和逻辑来演绎嵌入式Linux系统的组成,是的,“推导”。   

  

  从上图中,我们可以知道:   

  

   组成:   

  

  嵌入式linux系统=引导加载器Linux内核根文件系统(包含APP)。   

  

   bootloader:   

  

  它的目的是启动内核,从哪里读取内核?读哪里?转到闪存和其他外围设备读取内核并将其存储在内存中。所以Flash中需要有外设的驱动能力,为了调试方便会有网络功能。   

  

  所以我们可以认为booloader=裸机采集,这是一个复杂的单片机程序。   

  

   Linux内核   

  

  Linux内核的主要目的是启动APP。APP存放在哪里?将其保存在“根文件系统”中。根文件系统存储在哪里?在Flash、SD卡等设备上,甚至可能在网络上。因此,Linux内核应该具备Flash和SD卡中这些设备的驱动能力。   

  

  不仅如此,Linux内核还具有进程调度和内存管理功能。   

  

  所以:Linux内核=驱动聚合进程调度内存管理等。   

  

  嵌入式Linux怎么学,需要掌握哪些能力?   

  

  我曾经遇到一个说得很好的学生。嵌入式学习,首先是观察它的广度,然后考察它的深度。在学习的过程中,有时候你甚至不得不“不求人解”。在很多情况下,如果你有任何问题,你会保留它们。在学习的过程中,你会找到问题的答案。久而久之,这些问题自然会迎刃而解。   

  

  这是什么意思?举个栗子:比如嵌入式课程涉及到组装知识。要想彻底搞清楚,需要学习《ARM架构与编程》;当你学完这本书时,你的同学可能已经准备好工作了。   

  

  所以需要时刻保持做笔记的习惯,在项目实践和阅读中积极寻求答案,学以致用解决实际发展问题,做到学以致用。   

  

  谈完学习的广度,再来谈学习的方向。   

  

  目前,嵌入式主要分为三个方向。一是系统开发,主要负责嵌入式系统的开发环境建设、内核原理和交叉编译。   

  

  二是嵌入式Linux应用开发,主要专注于Linux应用编程、内核编译、系统调用等。再一个就是底层驱动开发,   

  

  专注于嵌入式系统下内核的驱动开发和深入分析。   

  

  在这里你又要问了,既然嵌入式Linux有这么多学习方向,那如何入门嵌入式呢?哪条路适合我?下面我就来说说学习方法中的几个问题。   

  

建议嵌入式Linux学习方法

  

1)先不要打破砂锅问到底

  

嵌入式涉及的东西太多太杂了,如果心里没有主线,碰到什么都要去研究个透彻,最终反而忘记自己要学什么了。

  

嵌入式涉及硬件知识、软件知识,软件里涉及汇编、ARM架构、C语言、Makefile、Shell;又分为bootloader、内核、驱动、基本的APP、GUI。

  

比如:我们会用到Makefile,了解它的基本规则,会用我们提供的Makefile就可以。

  

不需要深入研究那些make函数,因为在工作中都有现成的Makefile给你使用,不需要自己去编写一套Makefile。何必花上好几天去深入研究它呢?

  

比如:我们会用到bootloader,难道又要花上几个月来深入研究u-boot吗?工作中基本不需要改u-boot,会用那几个命令就可以。

  

甚至有些学员先去买本shell的书来学习shell命令,何必?我们在视频中用到什么命令,你不懂时再去百度一下这些命令就可以了。

  

不要脱离初学者的主线:应用基础、驱动基础。有了这2个基础后,你想深入研究某部分时,再去花时间吧。

  

2)思路要清晰,不怕抄代码

  

视频里的代码,请你一定要自己去写一次、写多次。为什么我现在写驱动那么熟?记得当初我在华清远见上课时,每次上课我都要给学生写一次那些驱动,十几次下来闭着眼睛都知道内核的套路了。

  

记不住那些函数?我也记不住,我都是去参考同类的驱动程序,这又不是闭卷考试。但是要理清楚思路,你写这个程序要完成什么功能、怎么实现这些功能?这个要弄清楚。

  

有了思路后再写代码,不知道怎么写?没关系,看看视频,看看示例,然后关闭视频看看能否自己写出来。

  

3)对自己的方向很了解,我只能带你到这里了

  

我的专长是操作系统,是快速地带领大家掌握一些项目开发的基础知识。

  

如果你决定深入研究某方面时,我并不能带你多久。你要去看源码,去看这方面的专业书籍。

  

比如:想深入钻研内核的内存管理时,它有页表映射(你需要阅读ARM架构的手册)、SLAB分配器、vmalloc/malloc实现、mmap实现、缺页中断、父进程子进程之间的页面管理等等,内容非常多。有时候连书籍都没有,你需要直接啃代码。

  

当你想从事某个行业时,就需要深入研究行业相关的知识。

  

比如:CAN总线,它可以写成一本书:CAN协议、CAN报文、Socket CAN、车身网络拓扑结构,CAN应用报文,CAN网络管理报文,CAN诊断报文。

  

想做物联网网关,需要深入研究MQTT,MQTT协议相对简单,但是MQTT英文原版协议有130多页,中文版有近100页,是一本小书了。

  

每个行业都有自己的业务逻辑,在掌握基本的编程能力之一,你需要结合具体的业务去深入学习。

  

为帮助大家尽快掌握学习嵌入式Linux,从看懂硬件工作原理、学会嵌入式软件操作、理解数字电路、微处理器结构、嵌入式Linux系统组成应用,掌握基本的应用基础、驱动基础,再逐步深入学习Linux系统编程、驱动开发和Linux内核分析。编者精选了十本经典的嵌入式Linux系统学习全阶书籍(包含基础入门+设备驱动+系统内核开发),供大家学习参考。

  

1\. Linux从入门到精通――Linux典藏大系

  

  

本资料提供10G+配套随书光盘内容、课程PPT讲义、视频教程、嵌入式开发软件、工具安装程序及对应开发环境。

  

Linux典藏大系:Linux从入门到精通。课程共29章,分为7篇。内容包括Linux概述、Linux安装、Linux基本配置、桌面环境基本操作、Shell基本命令、文件和目录管理、软件包管理、磁盘管理、用户与用户组管理、进程管理、网络配置、浏览网页、收发邮件、文件传输和共享、远程登录、多媒体应用、图像浏览和处理、打印机配置、办公软件的使用、Linux编程工具、Shell编程、服务器基础知识、Apache服务器、vsftpd服务器、Samba服务器、NFS服务器、任务计划、防火墙和网络安全、病毒和木马防范等。

  

本书籍非常适合广大Linux初中级用户、开源软件爱好者和大专院校学生阅读,同时也非常适合准备从事Linux下开发的各类人员。

  

2\. ARM体系架构与编程

  

  

本书共为分14章,对ARM处理器的体系结构、指令系统和开发工具进行了比较全面的介绍。其中包括ARM体系、ARM程序设计模型、ARM汇编语言程序设计、ARM

  

C/C++语言程序设计、ARM连接器的使用、ARM集成开发环境CodeWarrior

  

IDE的介绍及高性能的调试工具ADW的使用。并在此基础上介绍一些典型的基于ARM体系的嵌入式应用系统设计的基本技术。通过阅读本书,可以使读者掌握开发基于ARM的应用系统的各方面的知识。

  

本书既可作为学习ARM技术的培训材料,也可作为嵌入式系统开发人员的参考手册。

  

3\. 嵌入式Linux应用开发完全手册

  

  

书籍全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、Makefile语法、ARM汇编指令等),硬件部件的使用及编程(囊括了常见硬件,比如UART、I*IC、LCD等),UBoot、Linux内核的分析、配置和移植,根文件系统的构造(包括移植busybox、glibc、制作映象文件等),内核调试技术(比如添加kgdb补丁、栈回溯等),驱动程序编写及移植(LED、按键、扩展串口、网卡、硬盘、SD卡、LCD和USB等),GUI系统的移植(包含两个GUI系统:基于Qtopia和基于X),应用程序调试技术。

  

4\. Linux就该这么学

  

  

本书基于RHEL

  

7系统编写,面向零基础读者,从Linux基础知识讲起,然后渐进式地提高内容难度,详细讲解Linux系统中各种服务的工作原理和配置方式,以匹配真实生产环境对运维人员的要求,突显内容的实用性。本书每章都带有大量的图、表、命令示例以及课后习题,旨在增强读者的理解能力并巩固所学知识。

  

5\. Linux命令行大全

  

  

本书主要介绍Linux命令 行的使用,循序渐进,深入浅出,引导读者全面掌握命令行的使用方法。

  

书籍共分为四大部分。第一部分开始了对命令行基本语言的学习之旅,包括命令结构、文件系统的导引、命令行的编辑以及关于命令的帮助系统和使用手册。第二部分主要讲述配置文件的编辑,用于计算机操作的命令行控制。第三部分讲述了从命令行开始执行的常规任务。类UNIX操

  

作系统,比如Linux,包含了很多“经典的”命令行程序,这些程序可以高

  

效地对数据进行操作。第四部分介绍了shell编程,这是一个的初级技术,并且容易学习,它可以使很多常见的系统任务自动运行。通过学习

  

shell编程,读者也可以熟悉其他编程语言的使用。

  

6\. Linux设备驱动开发详解

  

  

随书提供2.2G配套全书源程序,及驱动部分源码。

  

本书介绍了Linux设备驱动开发理论、框架与实例,详细说明了自旋锁、信号量、完成量、中断顶/底半部、定时器、内存和I/O映射以及异步通知、阻塞I/O、非阻塞I/O等Linux设备驱动理论,以及字符设备、块设备、tty设备、I2c设备、LCD设备、音频设备、USB设备、网络设备、PCI设备等Linux设备驱动架构中各个复杂数据结构和函数的关系,并讲解了Linux驱动开发的大量实例,使读者能够独立开发各类Linux设备驱动。

  

7\. Linux内核完全注释

  

  

Linux内核完全注释

  

V3.0对Linux早期操作系统内核(v0.11)全部代码文件,进行了详细全面的注释和说明,旨在使读者能够在尽量短的时间内,对Linux的工作机理获得全面而深刻的理解,为进一步学习和研究Linux系统打下坚实的基础。书中首先以Linux源代码版本的变迁历史为主线,详细介绍了Linux系统的发展历史,着重说明了各个内核版本之间的重要区别和改进方面,给出了选择0.11(0.95)版作为研究的对象的原因。本书依据内核源代码的组织结构,对所有内核程序和文件进行了注释和详细说明。

  

8\. Linux内核情景分析

  

  

这本书采取类似于英语教学中行之有效的情景会话的教学方法,全面深入地剖析了Linux最新版本核心源代码,并对Linux核心的独特优点和需要进一步改进的问题作了精辟的评述。上册的内容包括预备知识、存储管理、中断和系统调用、进程和进程调度、文件系统以及传统的Unix进程通讯六章。下册的内容包括设备驱动、多处理器SMP系统结构以及系统引导和初始化四章。

  

9\. Linux设备驱动程序

  

  

本书是经典著作《Linux 设备驱动程序》的第三版。该版本已针对 Linux 内核的 2.6.10

  

彻底更新过了。内核的这个版本针对常见任务完成了合理化设计及相应的简化,比如即插即用,利用sysfs

  

文件系统和用户空间交互,以及标准总线上的多设备管理等等。本书提供了完整的示例程序,不需要特殊的硬件即可编译和运行这些示例程序。本书还在单独的章节中讲述了

  

pci、usb 和 tty(终端)子系统。

  

对期望了解操作系统内部工作原理的读者来讲,本书也深入阐述了地址空间、异步事件以及 i/o

  

等方面的内容。本书主要介绍:完整的字符、块、tty(终端)及网络驱动程序驱动程序的调试、中断、计时问题、并发、锁定和对称多处理器系统(smp)、内存管理和

  

dma、驱动程序模型和 sysfs、热插拔设备、对常见总线的描述,包括 scsi、pci、usb 和 ieee1394(火线)

  

10.UNIX网络编程卷(1+2)

  

  

本书分为上下两卷,是UNIX

  

网络编程的经典之作。第1卷深入地介绍了如何使用套接字API进行网络编程。全书不但介绍了基本编程内容,还涵盖了与套接字编程相关的高级主题,对于客户/服务器程序的各种设计方法也作了完整的探讨,还深入分析了流这种设备驱动机制。

  

第2卷主要从对Posix IPC 和System V IPC 的内部结构开始讨论,全面深入地介绍了4 种IPC

  

形式:消息传递(管道、FIFO、消息队列)、同步(互斥锁、条件变量、读写锁、文件与记录锁、信号量)、共享内存(匿名共享内存、具名共享内存)及远程过程调用(Solaris门、Sun

  

RPC)。附录中给出了测量各种IPC 形式性能的方法。

  

十本嵌入式Linux工程师必读经典全阶学习书籍,资料截图如下:

  

  

10G+嵌入式Linux设计从入门到精通学习资料(随书光盘、视频教程、开发软件工具)

  

  

2.2G+嵌入式Linux项目源码、驱动源程序代码

  

  

如何领取以上全部嵌入式Linux学习资料?