搞了几年的上层编程,打算趁着年轻换换行,以前没怎么接触过硬件和底层编程,最近看了下嵌入式相关的一些资料,看的也比较乱,操作系统啊、ARM体系结构啊、Linux系统啊等等吧,看的也比较杂,也有点感觉吧,但还是没上路子啊,很晕,很迷茫,没有方向,也借了一块ARM9的开发板,随机附带的倒是有十来张的资料盘,大多是视频的,但是看了下主要是将linux系统的,还是不知道怎么玩这个开发板。
有点郁闷,同志们帮忙指导啊!谢谢 谢谢 非常感谢啊~~
------解决方案--------------------
个人建议,学习嵌入式开发主要的是c语言要过关,如果对单片机比较熟悉的话就好好的学习一下arm的硬件知识,对于arm的开发板来说,开始不要上系统还是跑裸机,吧arm的外围芯片的裸机驱动跑一边,然后才开始炮系统,做一些linux、底层驱动来学习一下,最开始就学习写一个小灯程序,主要是了解linux下的驱动如何写得,主要是架构的了解很重要。同时学习驱动硬件知识是必须要了解的。
------解决方案--------------------
那基本不可能.
就算你搞的是纯粹的嵌入式软件工程师.
那也得了解一下 硬件系统的自举.
硬件的参数设置也是需要自己调整的.
这个没有现成的馅饼.
当然这里的了解不一定是非要知道这个电阻的参数设计时是怎么算出来的.
但最起码有一个定性的了解.看一眼图纸就得基本知道大概这个模块干什么的.
感觉单片机代码基本都是硬件控制为主.
说白了,主要是对一些特殊的寄存器控制.
真正的算法很少.
一般地,要在OS上运行的,算法用得还稍微多点.
------解决方案--------------------
嵌入式分硬件和软件,当然我们不专攻硬件,所以注意力集中在软件,硬件只需要能够理解就行。而软件分为裸机运行软件和操作系统下运行软件,操作系统总是给人一种神秘感,所以我们要先写些裸机运行软件,让自己切实体会到自己控制硬件的乐趣,然后学会自己给开发板装操作系统,这之后就分2条路了,一是应用操作系统(也差不多等于上层编程),二是开发操作系统(多半应该都是为操作系统写驱动吧)。用任务来驱动学习总是比单纯的学习更有效果些,根据上面的总结,我们可以提出以下几个由浅入深的任务来驱动自己的学习:
1. 熟悉开发板,也就是根据开发板的手册测试和验证开发板上预装的操作系统功能及外围资源;本阶段主要熟悉常用工具和开发板;
2. 单机裸跑程序。最简单的就是自己根据开发板资料写个流水灯的程序,然后编译产生可下载的文件,然后下载到单板上运行。这阶段主要学习使用开发环境和下载工具(如JTAG)等等.
3. 安装操作系统,系统预装的系统总是给人神秘感,自己安装一下才能破除这种神秘感. 好了,既然我们都完成了第2步,能在裸机上跑程序了,所谓的操作系统实质也只是段程序而已,安装系统和PC机上其实也没多大差别,只是PC上用的是光驱,开发板上用JTAG口和USB,分区--下载安装bootloader---下载安装内核---下载安装系统---打完收工。嗯,现在应该很有成就感了,因为,这开发板上跑的东西已经全是自己弄下去的东西了。
4. 开发操作系统。承接上一步,虽然开发板上都是我们自己弄下去的东西了,但是,我们自己弄下去的到底是些什么东西呢?跟着这个疑问下去,可以研究bootloader,或者操作系统,或者芯片驱动。这一步也许还是要用问题来导向,比如:bootloader到底是做什么的,一个裸机有了bootloader之后就能使用通信口,能分区,能...?操作系统到底是做什么的?这些任务管理,内存管理都是用来干啥的,为啥要有这些东西?这个外设用的是什么接口,这个接口到底有些什么内容?操作系统又是怎么管理这个外设的?
5. 应用操作系统。承接第三步,除了发出“弄下去的到底是什么东西”这个疑问,我们应该还有“我们弄到开发板上这个系统到底能给我们做些什么?“的疑问,于是,转入了上层编程的过程。
我们不应该先看书,而应该先提问题,跟着一个个由浅入深的疑问下去,很多书自动就会去翻来看了。
不知道上面这些对楼主有用没,也算我自己摸爬了一年多走了不少弯路摸出来学习总结吧。
------解决方案--------------------
其实Linux本身就挺复杂的,比如bash命令“ls”之类,先搞熟悉。
然后Linux的文件系统搞明白,比如/dev的作用,/etc,/proc, /sys 的作用搞明白。
开机启动流程搞明白。
Linux驱动概念搞明白,字符型设备的简单驱动搞明白。
OK,如果上面这些都搞明白了。那就可以买本LDD3自学了。学完后再买本ELDD实践。
自己买个板子玩玩是必须的。
当然,不懂硬件的话,做驱动会比较吃力。
因为写驱动首先就要看器件的datasheet,要看寄存器,理解硬件的工作原理。
多少都要接触硬件知识。
并且Linux驱动运行在内核空间,深入发展下去,肯定是要向内核发展的。
内核更注重效率,性能和精简,所以和应用程序有很多不同。
所以做Linux驱动是最累的,最难的。