您的位置:首页 > 其它

嵌入式底层软件开发学习系列之四基本技能篇

2015-11-16 20:39 351 查看
嵌入式开发技能的学习是一个不断积累的过程,这与在学校阶段的课程学习有较大的区别; 按照软件工程的说法, 它是一个迭代的过程。 其原因在于不同的知识相互影响, 而随着知识的学习,代码阅读与编写技能的提高,对同一技能或知识的理解水平与层次也就不同了。 下面按照迭代的思想,将几个技能的学习步骤总结如下:

a. CPU体系结构 b.操作系统与内核 c.驱动与固件开发 ; 并推荐一些相应的书籍。 这里假设读者已经阅读过嵌入式底层软件开发与就业方向一文中的相关知识了。

(1) 第一阶段

a. 可以学习一门汇编语言, 并掌握汇编程序的基本调试方法,了解相关指令集。

b. 学习一门操作系统的系统API编程, 如果需要的话也可以学习相应的GUI设计方法。 如进程与线程控制与同步(通讯),内存分配,(MFC,QT,JDK), socket编程等等。结合操作系统基本知识思考操作系统是如何通过这些API提供服务的.

c. 驱动基本模型(可以是纯软件的虚拟驱动); 以及一些简单的硬件设备驱动, 如GPIO, UART, II2C 等。

d. Makefile,AutoConfig等工具的基本使用

(2) 第二阶段

a. 从0开始如何构建Linux系统; 主要学习内核的编译, GCC, GLIB编译等 ;并能构建一个简单的Linux 系统。 通过该学习能了解操作系统的基本构成

b. 阅读一个简单操作系统源码,如minix, 或Linux0.11的源代码(能力较强者可以尝试编写一个简单系统内核). 对于x86 或arm而言,有大量的书籍或文章来介绍体系结构层的实现,通过这些资料应该能理解体系结构层的工作;同时还要学习较复杂Makefile如何编写; 学习中断控制器, timer 等的实现; 学习多任务如何切换等。

c. 学习其它开发板自带的驱动(x68则可以学习鼠标 键盘等驱动)

(3) 第三阶段

a. 学习系统总线及相关驱动, 如USB (USB 驱动分为三层Device, Framework, Host), 可以采用从上往下的学习方法, 该阶段要培养的重点就是如何阅读规范,初学时可以结合现有驱动的代码,并在规范中查找相关实现并体会。 对于驱动中的软件部分则结合驱动模型进行体会。 如果学习camera, 或sound驱动, 可以结合相关的系统层编程接口(v412, alsa)来进行(Android的学习者可以学习Native Framework层到驱动才的实现)。

b. 学习<<深入理解Linux内核>> 或<<深入解析Windows操作系统>>来学习操作系统内核。

c. 了解链接其的工作原理(如可执行程序和动态链接库是如何工作的)

d. 对于体系结构而言,如何阅读cpu 的Arch

(4) 第四阶段

a. 学习Linux Kernel源码(可结合<<Linux内核源码情景分析>>) ,Windows源码可参考WRK (Windows Research Kernel)。

学习目标是: (1) 了解其设计思想与设计方法(如内核如何管理物理内存与虚拟内存,如何设计页缓存)

(2) 打通某个流程, 如用户的ReadFile是如何从用户层一直调用到IO 驱动的。

b. 学习驱动如果仅仅局限于驱动本身是不够的, 需要向上下两个层次做些扩展:

上层是系统层或软件框架层(协议层) (如学习wifi驱动,需要了解wpa_supplicant项目, 和wifi协议)

下层则是需要体会硬件和软件是如何分工的,可以尝试去理解硬件实现的功能的工作流程。

这样,我们能帮助我们设计各种层次的测试用例来测试驱动和硬件. 同时能开拓视野。

c. 学习已有的同类产品的解决方案, 它的系统层,驱动层如何实现。

(5) 第五阶段

a. 思考如何在实际项目中使我们的代码最优, 如系统的引导速度,IO速度等。可以从内核和驱动和系统三个层面思考如何优化(如在目前产品的限定下,如何优化(定制)内核和驱动)

b. 当需要一些功能时, 如何借鉴内核或其它优秀开源项目中的算法或思想或直接代码重用。

c. 思考如何划分软硬件的功能使我们的系统最优



下面是一些推荐的优秀图书:

(1) 驱动:<<windows驱动开发技术详解>> <<Linux设备驱动程序>>

(2) 内核 <<Linux内核情景分析>> (<<windows内核情景分析>> 采用react os)<<深入理解Linux内核>>

(3) 系统: <<Linux From scratch>> <<深度探索Linux操作系统 系统构建和原理解析>> << 深入理解Android>> <深入解析Windows操作系统>> <<程序员的自我修养>>

<<unix环境高级编程>>

(4) 体系结构: <<Arm体系结构域编程>> << x86/x64体系探索及编程>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: