嵌入式开发从开发板到产品的过程是什么样的?开云APP 开云官网入口
现在有的人玩嵌入式,纯粹就是用开发板来做设备(注意是设备而不是产品)。就像你说的直接把开发板放到四轴飞行器上,三四年前就看到有人这么干了。(纯粹是自己DIY的,用着玩的)
但在产品开发上,工程师一般不会使用开发板。而是直接根据芯片DATASHEET,以及过往的设计经验直接设计出最小电路及其外扩电路(就是自己做个电路板出来)。
开发板其实就是一个MCU的最小电路外加部分外设功能电路(如串口、以太网等)。目的是让初学该MCU芯片的人能迅速掌握其芯片原理和使用方法,或者是简单的用开发板来验证一下MCU芯片的IO和外扩电路的接口情况是否能满足系统要求,或是验证一下程序的可行性。
一旦验证了工程师自己设计的外接扩展电路/程序的可行性后,将重新设计一款PCB电路。然后是去投板打样,另外买一颗同样的芯片焊到自己设计的的PCB样板上,把程序烧进去。而不是把开发板上的芯片弄下来。
PS,一般要自己做PCB的话,都不会去买开发板来做前期验证的事情,因为网上就能找到大把的芯片最小电路图,自己画一个焊一个就是了,没必要买开发板。
我做这么久51系列/PIC系列/TIdsp2xxx系列/ARM系列等芯片都用过一些,没用过开发板。只因FPGA芯片是BGA封装,没有机器焊接才买了块Altera的开发板。
上面各位的回答综合起来已经比较完善了。考虑到题主应该是没有经历过一个真正的产品的生命周期,我再补充一点这方面我所知道的。
以独立、从头开发一个产品,以卖钱为目的的公司举例,并假设全部流程和人员都在一个公司内完成。不考虑学校的各种实验、比赛、毕设或者基于个人兴趣等实践。不考虑在公版硬件和模具上开发,不考虑部分工作外包。
一个公司无论大小,人员多少,是否有专设的部门,以下工作流程或者人员是不能少的(也许人员方面会有重叠,比如既做需求又写代码):
3. 相关人员对产品需求进行评审,从可行性、实现难度、时间周期、成本、市场预期等方面提出意见,可能有多轮评审,决定是否对这个产品立项。评审可以通过开会、面对面讨论、邮件讨论等方式进行。
工业设计工程师:产品整体造型、色彩、强度等等,用什么材料,光的还是磨砂的,等等;
测试工程师:跌落、扭曲、使用寿命、放电、磁场、各种温度湿度条件,软件功能,软件稳定性等;
数据内容负责人:产品需要的数据或者内置的数据文件的搜集、整理、制作,如图片、音乐、视频、电子书等;
芯片方案选型结束后,软件工程师可以选择使用开发板或者芯片原厂提供的参考板,或者等待硬件工程师自己开发新硬件,进行前期关键技术点开发验证。
开发板或者参考板上的外设和接口,跟产品的需求比起来,或者多了,或者少了。基于成本和开发周期的考虑,一般都需要硬件工程师重新设计新的电路板。但也不排除开发板或者参考板跟目标产品硬件很接近,或者需要尽快验证尽快开发完成上市,直接使用开发板或者参考板硬件。
硬件、结构、工业设计需要密切配合,以避免电路板和外壳装不到一起,不能严丝合缝,螺丝孔错位等问题。
开发到一定阶段,会进行各兵种阅兵彩排,来一次小批量的工程样机,验证开云体育 kaiyun.com 官网入口可能存在的问题,及时纠正。依据工程样机的质量,可能会在正式生产之前再进行一两次数量稍大点的试产。最后,在硬件、结构、工业设计没有大的问题,软件需求基本实现和稳定,剩余问题可以通过方便的软件升级后续解决的情况下,就可以提交到流水线上安排批量生产了。
前几天我在某宝上买回一个电子DIY时钟焊接玩一下,感觉还挺不错的,拿出来举个例子。
虽然说是DIY,可是我觉得这个就算是一个产品了,要不,产品到底是什么东西?(啊?水果到底是什么果?)
让我们看看其背面。背面有主控芯片,纽扣电池,蜂鸣器,按键,各种电阻电容等等。
开发板?我不觉得要用开发板啊~!我挑选好了主控芯片,画好了原理图和PCB图,做好板子后再进行焊接,最后烧写就做出了一个电子时钟。你看,我们都是这么开发产品的,不需要用到开发板。
对了,开发板对学生来说,更准确的意思是学习板,用来学习主控芯片(一般是51单片机),学习各种外设(比如LED灯、数码管、蜂鸣器)等。
而开发产品,一般会用最小系统板来进行产品开发。什么是最小系统板???我就不解释了哈哈哈~
上面所说的,只是一款电产品中的电子硬件部分,而一款产品可不只有硬件部分。正如
其答案所写的「电路」一词,就是指电子硬件部分。「程序」不用解释了吧?玩开发板一开始都是从程序开始的。而「结构」部分,还是拿我那个电子时钟举例吧。我认为其玻璃外壳就是这个产品中的结构部分,这一部分,已经不属于电子的范围了,其涉及到什么机械制图,什么CAD,什么*¥&%*!反正不是电子的东西。
1.大致说明,一个基站供电监控的项目,其核心是用24L01进行相互通信,收发关键数据。最后通过GPRS发送数据至上位机监控软件~
OK,首先,让我们看看这个小东西,硬件设计,驱动(单片机软件编写),上位机软件开发。
功能设计,包含电路铺设以及芯片选开云体育 kaiyun.com 官网入口型。首先确定你自己需要的功能,然后根据成本选择所对应的芯片,最基本的原则是(个人理解,整体硬件是我搭档在做):第一,尽可能的使用每一个IO口,第二,尽可能的使成本降低。在这个地方,我搭档介于成本和IO口等综合考虑,选定STC15W404AS和STC15F2K60S2作为主控芯片。接下来便进行整体布线,修改,PCB提交厂商的工作(因为量大,一套系统算上主控芯片在内52组,学校无法完成制版)。
测试电路设计,在这个项目中,因为没有使用高精度AD/DA转换芯片,利用单片机完成AD采样,可能存在一定的不确定电压漂移,所以必须予以矫正,因此,需要制作标准电压板进行矫正参数的测量与计算。在其他项目中,会存在其他的特殊功能的测试,需要设计特殊的测试电路。
硬件电路修改,在从厂商处获得成品,开始进行测试,因为在前期会存在一定设计缺陷,所以在软件与硬件测试完成后,进行修改,并在此发往厂商处制板。在这个小东西中,大的改板两次。在正规公司的的项目开发工程中,这数字可能会X10。
终板电路测试与交付,在从厂商处获得最终的定板后,测试,测试无误后,将定板封存与PCB资料,芯片DataSheet,前期测试板一并交付。
功能设计与论证,因为不同的项目在最开始时,只能进行一个大概的评估,并不能保证完全的可行,因此,需要编写测试用例,确认方案是否可行(这可能是你以前涉及过得芯片或者知识,也可能是全新的芯片),例如在这次,官方的DataSheet显示,24L01只能最多1对6通信,但是我们需要1对24通信。曾一度以为不能行,但是在经过测试以后,发现24L01 1对24的通信也是完全可行的。。。
单元测试,在每一个部分的代码编写完成后,必须对这部分的代码进行完整测试,以确保功能正常运行。
整合测试,在项目的硬件板发回后,将代码上机测试,这个过程中,可能会出现功能异常,可能是代码编写过程中之前没有测试到的情况,也可能是硬件之出设计的失误。分别记录,并予以反馈,修改。
极端情况测试,因为这次做的东西,要求不间断的监控电池的情况,也就是说针对稳定性要求较高,因此专门针对不同的情况下冗机,硬件失灵等情况进行测试,确保能保证一定的额稳定性。
代码修改与交付。在测试完成后,将代码修改,清除测试期所加入的测试与调试语句,并且形成最终说明文档,与测试文档,单元驱动代码一并封存并交付。
其实嵌入式是一个很大的领域,我们每一个人穷尽一生也不可能通识,所以用自己很小的一点很稚嫩的经历贡献出来,希望能帮到题主。
2.2.5 为什么选择ARM9 S3C2440开发板,而不是其他性能更好的?
我是1999年上的大学,物理专业。在大一时,我们班里普遍弥漫着对未来的不安,不知道学习了物理后出去能做什么。你当下的经历、当下的学习,在未来的一天肯定会影响到你。毕业后我们也各自找到了自己的职业:出国深造转行做、留校任教做科研、设计芯片、写程序、创办公司等等,这一切都离不开在校时学到的基础技能(数学、IT、电子电路)、受过煅炼的自学能力。
所以,各位正在迷茫的在校生,各位正在尝试转行的程序员,未来一定有你的位置,是好是坏取决于你当下的努力与积累。
我不能预言几年后什么行业会热门,也不能保证你照着本文学习可以发财。我只是一个有十几年经验的程序员,给对编程有兴趣的你,提供一些建议。
程序员的方向,一般可以分为3类:专业领域、业务领域、操作系统领域。你了解它们后,按兴趣选择吧。
① 开发实体产品时,应用程序写得好的人,有时候需要操作系统的知识,比如调度优先级的设置、知道某些函数可能会令进程休眠。
② 写应用程序的人进阶为系统工程师时,他需要从上到下都了解,这时候就需要有操作系统领域的知识了,否则,你怎么设计整个系统的方案呢?
③ 做应用程序的人,需要了解行业的需求,理解业务的逻辑。所以,当领导的人,多是做应用的。一旦钻入了某个行业,很难换行业。
④ 而操作系统领域,做好了这是通各行业:他只负责底层系统,在上面开发什么业务跟他没关系。这行很多是技术宅,行业专家。
⑤ 操作系统和业务之间并没有一个界线。有操作系统经验,再去做应用,你会对系统知根知底,碰到问题时都有解决思路。有了业务经验,你再了解一下操作系统,很快就可以组成一个团队自立门户,至少做个CTO没问题。
比如语音、图像处理、人工智能,这类工作需要你有比较强的理论知识,我倾向于认为这类人是“科学家”,他们钻研多年,很多时候是在做学术研究。
在嵌入式领域,需要把他们的成果用某种算法表达出来,针对某种芯片进行优化,这部分工作也许有专人来做。
也有这样一类人,他们懂得这些专业领域的概念,但是没有深入钻研。可以使用各类开源资料实现某个目标,做出产品。比如图像处理,他懂得用opencv里几百个复杂函数来实现头像识别。有时候还可以根据具体芯片来优化这些函数。
“专业领域”不是我的菜,如果你要做这一块,我想最好的入门方法是在学校学习研究生、博士课程。
现在的热门词是Android APP和IOS APP开发。你不要被Android、IOS两个词骗了,它们跟以前的VC、VB是同一路货色,只是、仅仅是一套GUI控件的实现。
一个程序需要有GUI界面,但是程序的内在逻辑才是核心。Android、IOS的开发工具给我们简化了GUI的开发,并提供了这些控件的交互机制,封装并提供了一些服务(比如网络传输)。
另外别忘了服务器那边的后台程序:怎样更安全地保存数据、保护客户的隐私,怎样处理成千上万上百万的并发访问,等等,这也是核心。
但是,从Android、IOS APP入门入行,这很快!如果你是大四,急于找到一份工作,那么花上1、2个月去学习Android或IOS,应该容易找到工作,毕竟APP的需求永远是最大的,现在这两门技术还算热门。
在2011、2012年左右,Android程序员的起薪挺高,然后开始下滑。Android APP的入门基本只要1个月,所以懂的人也越来越多。
2013、2014年,IOS开发的工资明显比Android高了,于是各类IOS培训也火曝起来。中华大地向来不缺速成人才,估计再过一阵子IOS工程师也是白菜价了。
会Android、IOS只是基本要求,不信去51job搜搜Android或IOS,职位要求里肯定其他要求。
对于更复杂的例子,视频会议系统里,各个模块怎么对接,各类协议怎么兼容,你不深入这个行业,你根本搞不清楚。
应用开发的职位永远是最多的,入门门槛也低。基本上只要你会C语言,面试时表现比较得体,一般公司都会给你机会。因为:
② 你要做的,基本也就是一个个模块,框架都有人给你定好了,你去填代码就可以了。
说点让你高兴的事:软件公司里,做领导的基本都是写应用程序的(当然还有做市场的)。写应用程序的人,对外可以研究市场接待客户,对内可以管理程序员完成开发,不让他做领导让谁做?
如果你的志向是写应用程序,那么我建议你先练好基本功:数据结构、算法是必备,然后凭兴趣选择数据库、网络编程等等进行深入钻研。
最后,选择你看好的、感兴趣的行业深耕个10年吧。做应用开发的人选择了某个行业,后面是很难换行业的,选行很重要!
UCOS太简单,VxWorks太贵太专业,Windows不玩嵌入式了,IOS不开源,所以对于操作系统领域我们也只能玩Linux了。
Android呢?Android跟QT一样,都是一套GUI系统。只是Google的实力太强了,现在Android无处不在,所以很多时候Linux+Android成了标配。注意,在这里我们关心的是Android的整个系统、里面的机制,而不是学习几个API然后开发界面程序。
操作系统领域所包含的内容,简单地说,就是制作出一台装好系统的专用“电脑”,可以分为:
经常有人说,芯片原厂都做好驱动了,拿过来改改就可以了。如果,你的硬件跟原厂的公板完全一样,原厂源码毫无BUG,不想优化性能、削减成本,不想做一些有特色的产品,那这话是正确的。
① 即使只是修改代码,能修改的前提是能理解;能理解的最好煅炼方法是从零写出若干驱动程序
以前做联发科手机只需要改改界面就可以出货了,现在山寨厂一批批倒下。大家都使用原厂的方案而不加修改时,最后只能拼成本。
举个例子,深圳有2家做交通摄像头、监控摄像头的厂家,他们曾经找我做过4个项目:
这些项目都很急,搞不定就无法出货,这时候找原厂?除非你是中兴华为等大客户,否则谁理你?
我在中兴公司上班时,写驱动的时间其实是很少的,大部分时间是调试:系统调优,上帮APP工程师、下帮硬件工程师查找问题。
我们从厂家、网上得到的源码,很多都是标准的,当然可以直接用。但是在你的产品上也许优化一下更好。比如我们可以把摄像头驱动和DMA驱动揉合起来,让摄像头的数据直接通过DMA发到DSP去。
我们可以在软件和硬件之间起桥梁作用,对于实体产品,有可能是软件出问题也可能是硬件出问题,一般是底层系统工程师比较容易找出问题。
当硬件、软件应用出现问题,他们解决不了时,从底层软件角度给他们出主意,给他们提供工具。
再比如方案选择:芯片性能能否达标、可用的BSP是否完善等等,这只能由负责整个方案的人来考虑,他必须懂底层。
② 单片机工程师,想升级一下。会Linux底层的人肯定会单片机,会单片机的人不一定会Linux。
③ 时间充足的学生:如果你正读大二大三,那么花上半年学习嵌入式Linux底层多有益处。
④ 想掌握整个系统的人,比如你正在公司里写APP,但是想升为系统工程师,那么底层不得不学。
⑤ 想自己创业做实体产品的工程师,你有钱的话什么技术都不用学,但是如果没钱又想做产品,那么Linux底层不得不学。
这部分人不需要深入,了解个大概就可以:bootloader是用来启动内核,Linux的文件系统(第1个程序是什么、做什么、各目录干嘛用)、APP跟驱动程序的调用关系、工具链,有这些概念就可以了
本文中,就把操作系统默认为Linux,讲讲怎么学习嵌入式Linux+Android系统。
是BIOS,它做什么?一些自检,然后从硬盘上读入windows,并启动它。
所以,windows要先识别出C盘、D盘。在Linux下我们称之为根文件系统。
这个能力我们称之为驱动程序。当然不仅仅是操作硬盘,还有网卡、USB等等其他硬件。
嵌入式Linux能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。
简单地说,嵌入式LINUX系统里含有bootloader、内核、驱动程序、根文件系统、应用程序这5大块。而应用程序,我们又可以分为:C/C++、Android。
Android跟Linux的联系实在太大了,它的应用是如此广泛,学习了Linux之后没有理由停下来不学习Android。在大多数智能设备中,运行的是Linux操作系统;它上面要么安装有Android,要么可以跟Android手机互联。现在,Linux+Android已成标配。
本文假设您是零基础,以实用为主,用最快的时间让你入门;后面也会附上想深入学习时可以参考的资料。
在实际工作中,我们从事的是“操作系统”周边的开发,并不会太深入学习、修改操作系统本身。
① 操作系统具有进程管理、存储管理、文件管理和设备管理等功能,这些核心功能非常稳定可靠,基本上不需要我们修改代码。我们只需要针对自己的硬件完善驱动程序
② 学习驱动时必定会涉及其他知识,比如存储管理、进程调度。当你深入理解了驱动程序后,也会加深对操作系统其他部分的理解
③ Linux内核中大部分代码都是设备驱动程序,可以认为Linux内核由各类驱动构成
但是,要成为该领域的高手,一定要深入理解Linux操作系统本身,要去研读它的源代码。
① 赵炯的《linux内核完全注释》,这本比较薄,推荐这本。他后来又出了《Linux 内核完全剖析》,太厚了,搞不好看了后面就忘记前面了。
② 毛德操、胡希明的《LINUX核心源代码情景分析》,此书分上下册,巨厚无比。当作字典看即可:想深入理解某方面的知识,就去看某章节。
只要是理工科专业的,似乎都会教C语言。我见过很多C语言考试90、100分的,一上机就傻了,我怀疑他们都没在电脑上写过程序。
作为快速入门,只要你会编写“Hello, world!”,会写冒泡排序,会一些基础的语法操作,暂时就够了。
不需要去学习过多的数据结构知识,只需要掌握链表操作,其他不用学习,比如:队列、二叉树等等都不用学;
这些知识,在编写Linux应用程序时会用,但是在操作系统特别是驱动学习时,用不着!
② 可以在Visual Studio下学习,也可以在Linux下学习,后者需要掌握一些编译命令
我们暂时没有提供C语言的教程,找一本C语言书,网上找找免费的C语言视频(主要看怎么搭建环境),就可以自学了。
对于PC Linux,我们推荐使用Ubuntu,在它上面安装软件非常简便。
我们的工作模式通常是这样:在Windows下阅读、编写代码,然后把代码上传到PC Linux去编译。
实际上,Ubuntu的桌面系统已经很好用了,我们拿到各种智能机可以很快上手,相信Ubuntu的桌面系统也可以让你很快上手。
不用担心,你前期只需要掌握这几条命令就可以了,它们是如此简单,脆列出它们:
⑨ vi : Linux下最常用的编辑命令,使用稍微复杂,请自己搜索用法。
要练习这些命令,你可以进入Ubuntu桌面系统后,打开终端输入那些命令;或是用SecureCRT、putty等工具远程登录Ubuntu后练习。
我们学习硬件知识的目的在于能看懂原理图,看懂通信协议,看懂芯片手册;不求能设计原理图,更不求能设计电路板。
② 学习《数字电路》,理解各种门电路的原理及使用,还可以掌握一些逻辑运算(与、或等)。
③ 《模拟电路》?好吧,这个不用学,至少我在工作中基本用不到它,现在全忘光了。
比如《微机原理》是基于x86系统,跟ARM板子有很大差别,当然原理相通。
针对这些校园教材的不足,并结合实际开发过程中要用到的知识点,我们推出了《学前班_怎么看原理图》的系列视频:
学前班第1课第2.4节_怎么看原理图之协议类接口之NAND Flash.wmv
即使你只具备初中物理课的电路知识,我也希望能通过这些视频,让你可以看懂原理图,理解一些常见的通信协议;如果你想掌握更多的硬件知识,这些视频也可以起个索引作用,让你知道缺乏什么知识。
这些视频所讲到的硬件知识,将在《裸板开发》系列视频中用到,到时可以相互对照着看,加深理解。
很多学校都开通了单片机的课程,很多人都是从51单片机、AVR单片机,现在比较新的STM32单片机开始接触嵌入式领域,并且使用Windows下的开发软件,比如keil、MDK等。
③ 如果你只是想从单片机入门,然后学习更广阔的嵌入式Linux,那么放弃在Windows下学习单片机吧!
Windows下有很好的图形界面单片机开发软件,比如keil、MDK等。
你只会从main函数开始编写代码,却不知道上电后第1条代码是怎么执行的;
② 基于ARM+Linux裸机学习,可以学得更深,并且更贴合后续的Linux学习。
实际上它就是Linux下的单片机学习,只是一切更加原始:所有的代码需要你自己来编写;哪些文件加入工程,需要你自己来管理。
在工作中,我们当然倾向于使用Windows下更便利的工具,但是在学习阶段,我们更想学习到程序的本质。
需要知道中断发生后,软硬件怎么保护现场、跳到中断入口、调用中断程序、恢复现场;
你掌握了ARM+Linux的裸机开发,再回去看Windows下的单片机开发,会惊呼:怎么那么简单!并且你会完全明白这些工具没有向你展示的技术细节。
驱动程序=Linux驱动程序软件框架+ARM开发板硬件操作,我们可以从简单的裸机开发入手,先掌握硬件操作,并且还可以:
② 为学习bootloader打基础:掌握了各种硬件操作后,后面一组合就是一个bootloader
2.2.5 为什么选择ARM9 S3C2440开发板,而不是其他性能更好的?
这是不对的,如果你是软件工程师,无论是ARM9、ARM11、A8还是A9,对我们来说是没有差别的。
一款芯片,上面有CPU,还有众多的片上设备(比如UART、USB、LCD控制器)。我们写程序时,并不涉及CPU,只是去操作那些片上设备。
因为我们写驱动并不涉及CPU的核心,只是操作CPU之外的设备,只是读写这些设备的寄存器。
之所以推荐S3C2440,是因为它的Linux学习资料最丰富,并有配套的第1、2期视频。
后面的u-boot可以认为是裸机程序的集合,我们在裸机开发中逐个掌握各个部件,再集合起来就可以得到一个u-boot了。
注意:如果你并不关心裸机的程序结构,不关心bootloader的实现,这部分是可以先略过的。在后面的驱动视频中,我们也会重新讲解所涉及的硬件知开云体育 kaiyun.com 官网入口识。
推荐两本书:杜春蕾的《ARM体系结构与编程》,韦东山的《嵌入式Linux应用开发完全手册》。后者也许是国内第1本涉及在PC Linux环境下开发的ARM裸机程序的书,如果我说错了,请原谅我书读得少。
第0课第1节_刚接触开发板之接口接线节_刚接触开发板之烧写裸板程序.wmv
第0课第4节_刚接触开发板之使用vmwae和预先做好的ubuntu.wmv
录制上述《裸机程序开发》视频时,本意是结合《嵌入式Linux应用开发完全手册》的《第2篇 ARM9嵌入式系统基础实例篇》来讲解,所以视频里没有完全从零编写代码,需要结合书本来学习。
《嵌入式Linux应用开发完全手册》发表于2008年,使用了很多款开发板,并且那时的开发板配置较低(Nand Flash是64M);
天下S3C2440配置都是相似的,基本也就是LED、按键所用引脚不同,LCD型号不同;你学习了书、视频,如果连这些差异都搞不定的话,那就是你我的失败了。
③ 如果对于ARM架构相关的知识,觉得模糊或是想了解得更深入,参考《ARM体系结构与编程》
u-boot功能强大、源码比较多,对于编程经验不丰富、阅读代码经验不丰富的人,一开始可能会觉得难以掌握。
但是,u-boot的主要功能就是:启动内核。它涉及:读取内核到内存、设置启动参数、启动内核。按照这个主线,我们尝试自己从零编写一个bootloader,这个程序相对简单,可以让我们快速理解u-boot主要功能的实现。
毕业班第2课第2.1节_移植最新u-boot之分析启动过程之概述.wmv
毕业班第2课第2.2节_移植最新u-boot之分析启动过程之内存分布.wmv
毕业班第2课第2.3节_移植最新u-boot之分析启动过程之重定位.wmv
毕业班第2课第3.2节_移植最新u-boot之修改代码支持NAND启动.wmv
毕业班第2课第4.1节_移植最新u-boot之裁剪和修改默认参数.wmv
毕业班第2课第4.2节_移植最新u-boot支持烧写yaffs映象及制作补丁.wmv
① 先学习《从零编写bootloader的视频》,这可以从最少的代码理解bootloader的主要功能
② 再看书上对u-boot的讲解,并结合《分析u-boot 1.1.6的视频》来理解
③ 最后,有时间有兴趣的话,看《移植一个全新u-boot的视频》,这不是必须的。
① 理解u-boot的启动过程,特别是u-boot代码重定位:怎么从Flash上把自己读入内存
前面说过,内核本身不是我们学习的重点,但是了解一下内核的启动过程,还是很有必要的:工作中有可能要修改内核以适配硬件,掌握了启动过程才知道去修改哪些文件。
毕业班第3课第2节_移植3.4.2内核之修改分区及制作根文件系统.wmv
毕业班第3课第4节_移植3.4.2内核之裁剪及ECC简介及制作补丁.wmv
这一切,都需要你理解根文件系统的构成,理解内核启动后是根据什么配置文件来启动哪些应用程序。
《嵌入式Linux应用开发完全手册》对驱动程序的讲解不多,我们推出的“韦东山Linux视频第2期_驱动现场编写调试”,可以认为完全脱离了书本。
第2期的视频,对每一个驱动,先讲解硬件原理,然后从零写代码,从简单到复杂,逐渐完善它的功能。
我们不会罗列专业术语,会参考日常生活的例子,力争用最形象的比喻让你轻松入门,同时又会很深入。
注意:我们可以让你入门时很轻松,但是要深入理解的话,这需要你跟着视频练习代码,这是个要慢慢思考的过程,不会轻松。
再次申明:即使照抄也要写代码!很多人视频看得很高兴,但是写代码时就傻了。
视频中以LED、按键驱动为例,讲解并练习开发过程中碰到的机制:查询、休眠-唤醒、中断、异步通知、poll、同步、互斥等等。
后续更复杂的驱动程序,就是在这些机制的基础上,根据硬件特性设计出精巧的软件框架。
第12课第2.3节 字符设备驱动程序之LED驱动程序_操作LED.wmv
第12课第4.1节 字符设备驱动程序之中断方式的按键驱动_Linux异常处理结构.wmv
第12课第4.2节 字符设备驱动程序之中断方式的按键驱动_Linux中断处理结构.wmv
第12课第4.3节 字符设备驱动程序之中断方式的按键驱动_编写代码.wmv
《嵌入式Linux应用开发完全手册》上对字符设备驱动程序的讲解有如下章节:
所谓情景分析,就是假设应用程序发起某个操作,你去分析其中的运作过程。比如应程序调用open、read、ioctl等操作时涉及驱动的哪些函数调用。
你要思考一个问题:一个应用程序,怎么获得按键信息,怎么去控制LED。把其中数据的流向弄清楚了,对字符驱动程序也就基本理解了。
② 学习异常和中断时,可以结合书和视频;对于驱动程序中其他内容的学习,可以不看书。
② 供你学习、练习,煅炼阅读驱动程序的“语感”,提升编写程序的能力,增加调试经验
我们还打算扩充驱动视频,把它打造成“Linux驱动程序大全”视频,基本上都会采取从零现场编写的方式。
也许有人说:在工作中我们基本上只是移植、修改驱动而已,很少从头编写。这话没错,但是能修改的前提是理解;想更好地理解,最好的方法是从零写一个出来。在学习阶段,不要怕耗费太多时间,从零开始编写,慢慢完善它,在这过程中你既理解了这个驱动,也煅炼了能力,做到触类旁通。
第26课 声卡驱动程序 (不看此课,看第3期的ALSA驱动,那讲得更好)
按视频学习会一切顺利,很多问题你可能没想到、没想通,换一个新板会让你线 调试方法
有一种说法,程序是三分写七分调,我们从操作系统的角度提供了一些很有用的调试方法。
第30课第2.1节_驱动调试之段错误分析_根据pc值确定出错的代码位置_P.wmv
第30课第2.2节_驱动调试之段错误分析_根据栈信息确定函数调用过程_P.wmv
对于大多数人来说,第1个C程序是在Windows的Visual Studio C++(简称VC)上写的,所以你们关心的也许是:嵌入式Linux应用程序,跟VC应用程序之间的区别:
在VC上点点鼠标即可编译,对于嵌入式Linux应用程序,我们需要“交叉编译”:程序要在PC Linux上编译,但是运行时要放到单板上。
并且,它的编译环境需要你自己搭建:解压出工具链后设计PATH,还要自己构造一套Makefile系统。
在VC上点点鼠标就可以调试,对于嵌入式Linux应用程序,你可以更喜欢用打印;或是在PC Linux上通过GDB观察应用程序在单板上的运行状况。
对于VC程序,你可以直接使用微软公司提供的各种类库;对于嵌入式Linux应用程序,很多时候需要去寻找、下载、编译、使用开源库。
VC程序运行在PC上,一般是用来解决某些纯软件的问题,比如整理数据、修图、联网播放音乐之类。嵌入式Linux应用程序一般都要操作若干种硬件,比如监控设备中要操作摄像头、存储音视频,无人机中要操作GPS、螺旋桨,POS机中要操作银行卡等等。它跟单板上的硬件联系很大,很多时候需要你懂点硬件知识,至少是知道怎么通过驱动程序来操作这些硬件。
如果你有志于开发应用程序,那么一定要有算法、数据结构、网络编程等基础,然后再掌握一些设计模式,最后就是多参加一些实际项目的开发了。
在后续学习中你会经常构建根文件系统,比如往里面添加库、修改配置文件让你的程序自动运行。
在实际工作中,一般来说不需要你去烧写u-boot、内核,但是在自学阶段还是自己掌握吧,免得去麻烦别人。
该项目不使用任何开源的GUI项目,完全是自己构建一套GUI系统,实现了文件浏览、文件显示(文本和图片)、图片操作(放大、缩小、自动播放)等功能;涉及网络编程、多线程编程、开源库使用等等。
虽然数码相框作为一个产品已经落伍了,但是该项目所涉及的技术,特别是以面向对象的编程思想设计出一个模块化的、易扩展的系统,非常适合没有大型项目开发经验的人。很多同学,都是根据该项目所教会的编程思想找到了心怡的工作。
第3期视频取名为“项目开发”,而非“应用开发”,它的第2、3个项目跟内核、驱动耦合很大。如果只关心应用开发,或是急于找一份工作,可以先看第1个项目。
第2个项目涉及摄像头、ALSA声卡、WIFI网卡、3G网卡,这些都是在实际工作过程中经常用到的设备,比如我们后面补充的QQ物联就用到摄像头、声卡、WIFI网卡。Kaiyun App下载 全站Kaiyun App下载 全站
扫一扫关注微信公众帐号