总结:软件开发的3个方向与嵌入式Linux学习路线(驱动方向)schips

曾经和同事一起吃饭,听他们吐槽程序员压力太大,我开玩笑说去送外卖会不会更好;但细数了一下,还是程序员香。

我想,能够选择程序员作为职业生涯的开始应该算是一种幸运:收入还行,虽然会顶着项目进度的压力,但只需要吃学习的苦。

我曾听过亚马逊创始人JeffBezos说过的一句话:

人们经常问,在接下来的10年里,会有什么样的变化。但是我只问,未来的10年,什么是不变的?——JeffBezos

我认为,行业和方向都不是最重要的,按我对《软技能:代码之外的生存指南》其中提到的“冲量”的理解,竞争力=选择+积累。

韦东山将程序员的方向分为3类:专业领域、业务领域、操作系统领域。而按我的理解是:专业领域,业务领域,底层领域。

负责底层领域的人,主要的工作是向其他开发人员提供操作底层硬件的接口,有时候甚至需要搭建业务开发人员程序运行的系统环境,计算软件运行时所需要的最小资源;配合硬件工程师进行联调,从软、硬件2个角度排除解决PCBA上存在的问题;有时候还需要参与硬件设计(主要是CPU外围),设计行业应用的数据链路架构。

从事业务开发的人,需要了解一些操作系统知识,善用各种库进行,常常使用操作系统的接口(系统调用)进行应用层开发。一般都需要从行业出发、对产品有一定的认识,了解一些业务需求,搞清楚业务的关系。

所以,当领导的人,多是做应用的。一旦钻入了某个行业,很难换行业。因此,选择一个好的行业非常重要。——韦东山

对专业开发的人来说,他们常常面对的是业务中某一个核心需求的实现,像科研人员一样,更多地需要对理论知识有足够的积累;高数中的很多东西是他们的老朋友;编程语言只是他们实现目标的工具。

这3类工种直接可以没有明确的界定,只要学习能力足够强,甚至可以相互转换,而且这种转换后的变化可能是更加得心应手的工作。

我们来讲讲底层领域吧。

底层开发需要在于芯片厂商或者板级开发商的BSP,包括3种:

0、BSP开发

1、裸机开发

2、基于操作系统的驱动开发

BSP开发:我曾经以为底层移植需要从通用的BootLoader或者kernel做移植,没成想实际上这一块属于板级供应商的工作。除非是进入到这些供应商从事工作或者进行产品底层的深度定制,否则没啥机会用到芯片上的编程经验。

实际上,大部分的移植工作都只是简单的适配。

裸机开发往往是面对一些对资源要求比较苛刻,无法运行操作系统的场景。例如物联网领域,尤其是通过电池供电产品;也有一些不需要上系统的原因在于调度和通讯的方式比较简单,用前后台(轮询+中断)系统足以解决这些问题。

而操作系统开发的开发根据系统的不同而不同;嵌入式常见的操作系统很多(过时的WinCE就不说了),由简到难的有:uCos、FreeRTOS;VxWorks,RT-Thread,Linux...

其中,比较成熟而被人广泛认识的有:Linux、FreeRTOS、RT-Thead。

我建议学习的路线,“从裸机到系统”:

0、学习一款MCU,例如STM32

1、了解操作系统原理

2、买个资料丰富、有条理而且社区友好的开发板,移植并开发有关的系统

3、在2的基础上,研究Linux

当然,不仅如此,经常和硬件工程师打交道也是一项工作内容。

操作系统领域所包含的内容,简单地说,就是制作出一台装好系统的专用“电脑”,可以分为:

我们可以在软件和硬件之间起桥梁作用,对于实体产品,有可能是软件出问题也可能是硬件出问题,一般是底层系统工程师比较容易找出问题。当硬件、软件应用出现问题,他们解决不了时,从底层软件角度给他们出主意,给他们提供工具。再比如方案选择:芯片性能能否达标、可用的BSP是否完善等等,这只能由负责整个方案的人来考虑,他必须懂底层。

在操作系统领域,对知识的要求很多:

缺点:它绝对是一个大坑,没有兴趣、没有毅力的人慎选:

优点:

驱动开发,我认为适合于这些人:

1、硬件工程师:想转软件开发,从底层软件入门会比较好,硬件经验能够用得上;

2、应用开发人员:想深入了解底层的人,不会整天被底层卡脖子;

3、裸机开发人员:面对日益复杂的资源调度处理开始力不从心;有资源能够上系统的硬件平台可以搞搞。

4、想拥有整体调试能力的人:拥有底层能力对调试来讲是一把利刃;

嵌入式软件中一定有的部分:

假设您是零基础,我们规划了如下入门路线图:

前面的知识,是后面知识的基础,建议按顺序学习。每一部分,不一定需要学得很深入透彻

C语言:

通用:

PC-Linux(例如Centos、Ubuntu)

我们学习硬件知识的目的在于能看懂原理图,看懂通信协议,看懂芯片手册;不求能设计原理图,更不求能设计电路板。对于正统的方法,你应该这样学习:

①学习《微机原理》,理解一个计算机的组成及各个部件的交互原理。

②学习《数字电路》,理解各种门电路的原理及使用,还可以掌握一些逻辑运算(与、或等)。

概述:从简单的裸机开发入手,先掌握硬件操作。对于基于ARM+Linux的裸机学习,这么做可以学得更深,并且更贴合后续的Linux学习。

Linux驱动开发=Linux驱动程序软件框架+通过软件操作硬件

实际上这个部分就是通过软件操作硬件:不需要依赖其他框架,你可以按你自己的意愿来组织编写代码;你只需要知道如何读写物理地址即可。(必要时,使用芯片提供的资源对硬件进行控制)

一切从零编写代码、管理代码,可以让我们学习到更多知识:

实际上这些知识在BootLoader中学习会更有体会

你会知道:

学习裸机开发的目的有两个:

1、掌握裸机程序的结构,为后续的u-boot作准备

2、练习硬件知识,即:怎么看原理图、芯片手册,怎么写代码来操作硬件

后面的u-boot可以认为是裸机程序的集合,我们在裸机开发中逐个掌握各个部件,再集合起来就可以得到一个u-boot了。后续的驱动开发,也涉及硬件操作,你可以在裸机开发中学习硬件知识。

注意:如果你并不关心裸机的程序结构,不关心bootloader的实现,这部分是可以先略过的。

推荐两本书:杜春蕾的《ARM体系结构与编程》,韦东山的《嵌入式Linux应用开发完全手册》。

概述:

如果你是软件工程师,无论是ARM9、ARM11、A8还是A9,对我们来说是没有差别的。一款芯片,上面有CPU,还有众多的片上设备(比如UART、USB、LCD控制器)。我们写程序时,并不涉及CPU,只是去操作那些片上设备。

所以:差别在于片上设备,不在于CPU核;差别在于寄存器操作不一样。

因为我们写驱动并不涉及CPU的核心,只是操作CPU之外的设备,只是读写这些设备的寄存器。

学习目标:

学习方法:

①先学习《从零编写bootloader》,这可以从最少的代码理解bootloader的主要功能

②再看书上对u-boot的讲解,并结合《分析u-boot1.1.6的视频》来理解

学习程度:

描述:内核本身不是我们学习的重点,但是了解一下内核的启动过程,还是很有必要的:工作中有可能要修改内核以适配硬件,掌握了启动过程才知道去修改哪些文件。

①知道机器ID的作用,根据机器ID找到单板对应的文件

②知道Makefile、Kconfig的作用,知道怎么简单地配置内核

③知道怎么修改分区

④作为入门:只求理解,不要求能移植

文件系统的学习其实指的是:构建一个根目录文件系统,此后将其制作为镜像;这个镜像的类型是我们平时所说的

在驱动程序开发阶段,我们喜欢搭建一个最小根文件系统来调试驱动;

在开发应用程序时,也需要搭建文件系统,把各种库、配置文件放进去;

在发布产品时,你还需要修改配置文件,使得产品可以自动运行程序;

甚至你想实现插上U盘后自动启动某个程序,这也要要修改配置文件;

这一切,都需要你理解根文件系统的构成,理解内核启动后是根据什么配置文件来启动哪些应用程序。

学习内容:

①理解配置文件的作用

②知道根文件系统中lib里的文件来自哪里

③可以制作、烧写文件系统映象文件

描述:

对每一个驱动,先了解硬件原理,然后从零写代码,从简单到复杂,逐渐完善它的功能。

以LED、按键驱动为例,练习开发过程中碰到的机制:查询、休眠-唤醒、中断、异步通知、poll、同步、互斥等等。后续更复杂的驱动程序,就是在这些机制的基础上,根据硬件特性设计出精巧的软件框架。

学习路线:

1、沿着数据流向,从应用程序出发,对驱动程序的使用进行情景分析。

所谓情景分析,就是假设应用程序发起某个操作,你去分析其中的运作过程。比如应用程序调用open、read、ioctl等操作时涉及驱动的哪些函数调用。你要思考一个问题:一个应用程序,怎么获得按键信息,怎么去控制LED。把其中数据的流向弄清楚了,对字符驱动程序也就基本理解了。

2、学习异常和中断时,可以结合书和视频;对于驱动程序中其他内容的学习,可以不看书。

学习不同的驱动有2个好处:

1、在你工作中遇到同类驱动时提供借鉴

2、供你学习、练习,煅炼阅读驱动程序的“语感”,提升编写程序的能力,增加调试经验

1、再次强调,不能光看不练:一定要写程序,即使照抄也得写

2、必学:NANDFlash、NorFlash、hotplug_uevent机制、IIC、SPI

3、学完之后,强烈建议换一个不同的开发板,尝试在新板上写驱动程序。

直到你自认为:

2、给你一个新硬件,你可以很快给它编写/移植驱动。

按视频学习会一切顺利,很多问题你可能没想到、没想通,换一个新板会让你真正掌握。

驱动调试:

应用调试:

可以从中了解到一些基础概念:

1、操作系统常见名词

2、系统各部分的层次结构

3、任务的调度原理

4、常见的操作系统

...

很多操作系统都不要求芯片有mmu,像FreeRTOS、uCos都是很适合学习的。很容易从中理解到一些操作系统的核心。

Linux系统本身的知识:

1、操作系统具有进程管理、存储管理、文件管理和设备管理等功能,这些核心功能非常稳定可靠,基本上不需要我们修改代码。我们只需要针对自己的硬件完善驱动程序

2、学习驱动时必定会涉及其他知识,比如存储管理、进程调度。当你深入理解了驱动程序后,也会加深对操作系统其他部分的理解

3、Linux内核中大部分代码都是设备驱动程序,可以认为Linux内核由各类驱动构成。但是,要成为该领域的高手,一定要深入理解Linux操作系统本身,要去研读它的源代码。

THE END
1.免费课程app下载全国中小学/大学生免费课程平台推荐免费课程app可以给所有在校的学生提供免费的线上教育,并且是国家统一的免费教育资源,学生可以根据自己所在地区还有正在上学的年纪,找到自己需要的学习资料和科目,整个平台app中包含大量的免费课程和学习资源,并且会有不同的类型,拥有文字、图片、视频等多种学习方式,http://m.downcc.com/k/mianfeikecheng
2.十大高质量自学网站学习网站哪个好网上学技能的网站→MAIGOO十大英语学习网站 在网络学习资源越来越丰富的今天,人们获取知识的途径也更加多元、便利。本文中买购编辑为大家带来了一份自学网站推荐名单,其中有大学资源网、我要自学网、学堂在线、中国大学MOOC、中国高校外语慕课平台、人人自学网等较具代表性的十大自学网站。下面一起详细了解下这些能在网上学技能的网站。 排排榜https://www.maigoo.com/top/427780.html
3.9大网站让你终身免费学习(非常详细),零基础入门到精通,看这一篇就够==零基础入门网络安全/黑客== 【---帮助网安学习,以下所有学习资料文末免费领取!---】 大纲 学习教程 面试刷题 资料领取 前言 ? 你是否曾经梦想过,在家就能免费获取清华、哈佛的顶级课程?你知道国家已经为我们搭建了一个可以终身学习的平台吗?今天,就让我们一起解锁9个学习神器网站,无论你是学生、职场新人,https://blog.csdn.net/SpringJavaMyBatis/article/details/143858640
4.零基础学习Java需要掌握哪些核心基础知识?很多零基础Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识,今天八维职业学校和大家一起来看看零基础学习Java需要掌握哪些核心基础知识,希望有助于大家学习。 1、先了解什么是Java的四个方面 初学者先弄清这些Java的基本概念也是必不可少的,死记硬背肯定是不行的,重在理解,理解它们之https://www.bwie.com/jsgh/122.html
5.全网知识付费网课资源:IT会员社群教程目录持续更新(2024)15.图灵Python高薪架构就业班零基础开发机器人应用项目班价值5888元2022年重磅首发完结无秘 14.体系课大数据工程师2022价值3888元重磅首发完结无秘 13.Vue3+React18+TS4入门到实战系统学习3大热门技术【更新中第九章】 12.博为峰Python全栈测试开发班V5.12022年价值11800元重磅首发无秘包更新阶段七 https://www.dklx.com/15271.html
6.如何零基础自学AI人工智能随着人工智能(AI)的快速发展,越来越多的有志之士被其强大的潜力所吸引,希望投身其中。然而,对于许多零基础的人来说,如何入门AI成了一个难题。本文将为你提供一份详尽的自学AI人工智能的攻略,帮助你从零开始,逐步掌握这门技术。 一、了解基础知识 数学:高等数学、线性代数、概率论与数理统计等数学基础知识是学习AIhttps://www.hxsd.com/information/2112/
7.c语言编程学习网站腾讯云开发者社区C标准库中生成伪随机数的是rand函数,使用这个函数需要包含头文件stdlib.h,它没有参数,返回值是一个介于0和RAND_MAX之间的接近均匀分布的整数。这样有很大的缺陷,因此,C标准库允许我们自己指定一个初值,然后在此基础上生成伪随机数,这个初值称为Seed,可以用srandhttps://cloud.tencent.com/developer/information/c%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B%E5%AD%A6%E4%B9%A0%E7%BD%91%E7%AB%99
8.正保会计网校(原中华会计网校)20余年专注会计职称热点关注电子发票平台开具红字数电发票注意事项 2024-12-23 热点关注实务会员 岗位体系化实战课程 买一送一 2024-12-23 热点关注会计年报/年终总结怎么写? 2024-12-23 经验分享财务经理如何从小企业跳到好企业? 2024-12-23 就业服务 零基础上岗/成本会计/税务会计/总账会计/财务主管/财务经理/审计助理/审计师 https://www.chinaacc.com/
9.Python培训python入门培训机构python基础教程专业知识考核 编程基础 机器学习基础 神经网络基础 深度学习基础 工程能力考核 代码规范能力 算法模型实现能力 工程开发与架构设计能力 业务理解与实 践能力考核 行业及业务知识 业务应用能力 百度飞桨证书>> 怎么拿证? >> 优就业Python课程适合谁学 01 0基础转行人员 Python语言入门简单,开发高效,适宜零基础人员https://www.offcn.com/it/zt/python/
10.零基础学Python(全彩版)明日科技中文高清pdf完整版[314MB]电子书零基础学 Python(全彩版)是针对零基础编程学习者研发的 Python 入门教程。从初学者角度出发,通过通俗易懂的语言、流行有趣的实例,详细地介绍了使用 IDLE 及 Python 框架进行程序管理的知识和技术。全书共分 17 章,包括初识 Python、Python 语言基础、流程控制语句、序列的应用、Pygame 游戏编程、网络爬虫开发、智慧星https://www.jb51.net/books/671715.html
11.专业的零基础学UI设计培训教程和知识分享平台ui设计学习网是一个发布分享高质量ui设计教程、ui设计素材、ui就业前景动态、ui设计培训新闻、零基础学ui方法和ui设计软件下载等的学习平台。http://www.zhongchuang520.com/
12.菜鸟教程菜鸟教程(www.runoob.com)提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识。 同时本站中也提供了大量的在线实例,通过实例,您可以更好的学习编程。..https://www.runoob.com/
13.京东高手出品!零基础Blender3D设计学习指南(附AIGC知识点)零基础Blender 3D设计学习指南(附AIGC知识点) 无论是刚过去的 618 还是即将到来的双 11,只要打开电商网站,细心的设计师应该都会发现,3D 场景已经成为当下势不可挡的潮流了。 优设老师小毅作品 作为3D 设计的老牌工具,C4D 曾经是很多人的学习首选。但正版近 2 万的售价和苛刻的硬件要求,也让越来越多的人开始https://www.uisdc.com/blender-course-4
14.资深课特色课学术案例产业实践案例深度学习知识百科及前沿分享 :定期分享顶会最新论文解读和代码复现,开发者可以实时掌握最新的深度学习算法。 二、 零基础实践深度学习入门课 AI Studio在线课程:《零基础实践深度学习》:理论和代码结合、实践与平台结合,包含20小时视频课程,由百度杰出架构师、飞桨产品负责人和资深研发人员共同打造。 《零基础实践深度学习》书籍:本课程配https://gitee.com/nimabi2321wrq-fgwesdfhuy3q/awesome-DeepLearning
15.东方联盟零基础学网络技术(黑客防御培训网络 其他 协议 交换机 路由器 什么是ARP地址?什么是ARP攻击?如何利用ARP命09-24 100 个网络基础知识普及,看完成半个网络高手09-24 蘑菇街民达:人脸技术在电商平台的应用实践08-01 考试更多>> 最新TOP100欧洲最具创新力大学排行 《福布斯》2018年美国最有价值的大 http://www.dongfanglianmeng.cn/
16.50多个高质量自学网站,每天半小时提升自我!如果想从从零基础学习韩语,那么养乐多老师就推荐给你啦,绝对是自学的一个超棒教程。 链接:https://www.bilibili.com/video/av17043038 1.12 名校精品课(B站up主:生命中国) 想自学名校精品课,那么B站的up主生命中国就非常推荐,北京大学、南京大学、复旦大学、中国科技大学、四川大学、武汉大学等等各个名校的精品课在这https://www.163.com/dy/article/F9SS3RMB0536ARDF.html
17.零基础学英语排行榜京东JD.COM为您提供零基础学英语销量排行榜、零基础学英语哪个好、零基础学英语多少钱等相关资讯,从零基础学英语价格、评价、图片等多方面比较,为您推荐优质零基础学英语产品!https://www.jd.com/phb/key_1713643825f95f634aed.html
18.6大必备高效入门的互联网运营学习平台运营技能介绍:课程形式是【线上视频+课后实操+定期有直播和课程学员答疑】,以付费为主要购买形式,为零基础小白转行互联网运营量身打造的完整系统的线上课程学习平台。 福利:有一个大阶段的关于职业规划、个人转行以及暖石网学习方法的长时间线上免费视频,解决转行前对互联网运营工作认知迷茫和障碍。 https://www.jianshu.com/p/ce00fe115dbf
19.学习Web开发MDN欢迎来到 MDN 学习区。本系列文章意在为 Web 开发的纯新手提供编写网站的基本技巧,而非意在让你从“新手”变成“专家”,但能让你从“新手”变得“熟练”。从那之后,你就能开始以你自己的方式学习 MDN 的其余部分,和其他需要大量前置知识的中高级资源。http://developer.mozilla.org/zh-CN/docs/Learn
20.中国大学MOOC中国大学MOOC(慕课) 是爱课程网携手网易云课堂打造的在线学习平台,每一个有提升愿望的人,都可以在这里学习中国优质的大学课程,学完还能获得认证证书。中国大学MOOC是国内优质的中文MOOC学习平台,拥有众多985高校的大学课程,与名师零距离。http://icourse163.org/
21.搜外网:SEO培训入门图文教程网络营销技术视频网课搜外网专注SEO培训以及网络营销技术视频网课。为搜外用户提供符合SEO的建站系统搜外6系统、设计小程序的搜外七巧板、滴滴友链等工具平台。http://www.seowhy.com/