近来在学习群里跟学员交流,发觉好多的初学者只有单片机基础,或则是没有学过单片机,想重新学习嵌入式,学习Linux,并且对好多概念都比较陌生,造成不晓得要学哪些,也不知儒学了以后有哪些用。所以,明天就抽着自己稍有一些空余时间,给你们简单讲解一下单片机跟嵌入式,二者之间究竟有哪些区别,还有谈谈嵌入式具体要如何学。
单片机和嵌入式Linux区别
所有的电子产品,所用技术都可以觉得要么是单片机,要么是Linux;GUI方面主要是QT/Android,它们都是运行于Linux之上的。
迄今为止,使用单片机设备肯定远远超过Linux。好多初学者也是先从单片机开始学起,从单片机步入电子工程师这一行业。
日常生活中,有什么产品使用单片机、Linux呢?下边举一些事例:
我们设计一个产品时,是使用单片机还是Linux,取决于成本:硬件成本、软件成本、维护成本、升级成本。而不应当按照个人偏好来选择:我喜欢单片机,所以就敌视使用Linux;我喜欢Linux,就敌视使用单片机。为了有更多的选择,我们须要既懂单片机,又懂Linux。
嵌入式Linux系统的组成
下边我们用类比和逻辑推导入嵌入式Linux系统的组成,没错,“推导”。
从上图可以晓得:
①组成:
嵌入式Linux系统=bootloader+linux内核+根文件系统(上面富含APP)。
②bootloader:
它的目的是启动内核,去哪等读内核?读到哪儿?去Flash等外设读内核,存到显存里去。所以须要有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个基础后linux设备驱动开发详解 第三版,你想深入研究某部分时,再去花时间吧。
2)思路要清晰,不怕抄代码
视频里的代码,请你一定要自己去写一次、写多次。为何我如今写驱动这么熟?记得当年我在华清远见上课时,每次上课我都要给中学生写一次这些驱动,十几次出来闭着眼睛都晓得内核的套路了。
记不住这些函数?我也记不住,我都是去参考同类的驱动程序,这又不是闭卷考试。并且要理清楚思路,你写这个程序要完成哪些功能、怎么实现这种功能?这个要弄清楚。
有了思路后再写代码,不晓得如何写?没关系,瞧瞧视频,瞧瞧示例,之后关掉视频瞧瞧能够自己写下来。
3)对自己的方向很了解,我只能带你到这儿了
我的专长是操作系统,是快速地率领你们把握一些项目开发的基础知识。
假如你决定深入研究某方面时,我并不能带你多久。你要去看源码,去看这方面的专业书籍。
例如:想深入钻研内核的显存管理时,它有页表映射(你须要阅读ARM构架的指南)、SLAB分配器、vmalloc/malloc实现、mmap实现、缺页中断、父进程子进程之间的页面管理等等linux设备驱动开发详解 第三版,内容十分多。有时侯连书籍都没有,你须要直接啃代码。
当你想从事某个行业时,就须要深入研究行业相关的知识。
例如:CAN总线,它可以写成一本书:CAN合同、CAN报文、SocketCAN、车身网路拓扑结构,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汇编语言程序设计、ARMC/C++语言程序设计、ARM联接器的使用、ARM集成开发环境CodeWarriorIDE的介绍及高性能的调试工具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就该如此学
本书基于RHEL7系统编撰,面向零基础读者linux vi 命令,从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)
本书分为上下两卷学linux有前途吗,是UNIX网路编程的精典之作。第1卷深入地介绍了怎样使用套接字API进行网路编程。全书不但介绍了基本编程内容,还囊括了与套接字编程相关的中级主题,对于顾客/服务器程序的各类设计方式也作了完整的阐述,还深入剖析了流这些设备驱动机制。
第2卷主要从对PosixIPC和SystemVIPC的内部结构开始讨论,全面深入地介绍了4种IPC方式:消息传递(管线、FIFO、消息队列)、同步(互斥锁、条件变量、读写锁、文件与记录锁、信号量)、共享显存(匿名共享显存、具名共享显存)及远程过程调用(Solaris门、SunRPC)。附表中给出了检测各类IPC方式性能的方式。
十本嵌入式Linux工程师必看精典全阶学习书籍,资料截图如下:
10G+嵌入式Linux设计从入门到精通学习资料(随书光碟、视频教程、开发软件工具)
2.2G+嵌入式Linux项目源码、驱动源程序代码
怎么发放以上全部嵌入式Linux学习资料?
若扫码失败,可联系大学助教大包
文章评论