Embedded driver development learning route

ARM+LINUX route, focusing on embedded Linux operating system and its application software development goals: 

(1) Master the structure and principle of mainstream embedded microprocessors (preliminarily designated as arm9) 
(2) Must master an embedded operating system (preliminarily designated as uclinux or linux, version to be determined) 
(3) Must be familiar with the embedded software development process And do at least one embedded software project.

The disadvantages of engaging in embedded software development are: 
(1) The starting point of entry is relatively high, and the technologies used are often difficult to a certain extent. . 
(2) The number of enterprises in this area is far less than that of enterprise computing enterprises. 
(3) A few companies often require people with a master's degree or above to engage in embedded, mainly based on the difficulty of embedded. But most companies do not have this requirement, as long as they have experience. 
(4) The platform relies heavily, and it is more difficult to change the platform.

Methods and steps: 
1. Basic knowledge: 
Purpose: To be able to understand the working principle of hardware, but the focus is on embedded software, especially operating system-level software, which will be my advantage. 
Subjects: digital circuits, computer composition principles, embedded microprocessor structure. 
Assembly language, C/C++, compilation principles, discrete mathematics. 
Data structures and algorithms, operating systems, software engineering, networks, databases. 
Method: Although there are many subjects, they are all relatively simple foundations. Not all courses are required, but electives are available as needed. 
Main books: the c++ programming language (has no time to read), data structure-C2.

2. Learning linux: 
Purpose: To deeply master the linux system. 
Method: use linux—> linxu system programming development—> driver development and analysis of the linux kernel. Let's look at "Deep" first, which mainly teaches the principle. After reading it several times, read "Scenario Analysis" and read it in depth. Analysis is version 0.11, suitable for learning. Finally dive into the code. 
Main books: complete analysis of linux kernel, advanced programming in unix environment, in-depth understanding of linux kernel, scenario analysis and source generation.

3. Learning embedded linux: 
Purpose: To master the embedded processor and its system. 
Method: (1) Structure and application of embedded microprocessor: direct arm principle and assembly, do not repeat x86. 
(2) Embedded operating system: ucOS/II is simple, open source, and available for entry. Then delve into uClinux. 
(3) You must have a development board (above arm9), and you can participate in training if you have the conditions (progress quickly, and you can meet some friends). 
Main books: Mao Decao's "Embedded System" and other arm9 manuals and arm assembly instructions.

4. In-depth study: 
A. Digital image compression technology: It is mainly necessary to master codec algorithms and technologies such as MPEG and mp3. 
B. Communication protocol and programming technology: TCP/IP protocol, 802.11, Bluetooth, GPRS, GSM, CDMA, etc. 
C. Network and information security technology: such as encryption technology, digital certificate CA, etc. 
D. DSP technology: Digital Signal Process, DSP processor implements digital signal processing algorithms through hardware.

Description: Too many details are not explained, which can be adjusted according to the actual situation. The focus is on 1 and 3, not necessarily in complete order. For learning C++, the reason is that C++ is not just a language, a tool, it is also an art, a culture, and a philosophical idea, but it is not something to show off. For the linux kernel, it is also necessary to learn programming and read some excellent code.

注意:要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。一定要理论结合实践。 
不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,管理,心理学,音乐、游戏、科幻电影。还有一些不愿意做但必须要做的! 
技术是通过编程编程再编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫长。而是要编程编程再编程,完了再编程,再编程!等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。

嵌入式书籍推荐: 
Linux基础 
1、《Linux与Unix Shell 编程指南》 
C语言基础 
1、《C Primer Plus,5th Edition》【美】Stephen Prata着 
2、《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K & R)着 
3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE) 
4、《嵌入式Linux应用程序开发详解》 
Linux内核 
1、《深入理解Linux内核》(第三版) 
2、《Linux内核源代码情景分析》毛德操 胡希明着 
研发方向 
1、《UNIX Network Programming》(UNP) 
2、《TCP/IP详解》 
3、《Linux内核编程》 
4、《Linux设备驱动开发》(LDD) 
硬件基础 
1、《ARM体系结构与编程》杜春雷着 
2、S3C2410 Datasheet 
英语基础 
1、《计算机与通信专业英语》 
系统教程 
1、《嵌入式系统――体系结构、编程与设计》 
2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操 胡希明着 
3、《Building Embedded Linux Systems》 
理论基础 
1、《算法导论》 
2、《数据结构(C语言版)》 
3、《计算机组织与体系结构?性能分析》 
4、《深入理解计算机系统》【美】Randal E. Bryant David O”Hallaron着 
5、《操作系统:精髓与设计原理》 
6、《编译原理》 
7、《数据通信与计算机网络》 
8、《数据压缩原理与应用》 
C语言书籍推荐 
1. The C programming language 《C程序设计语言》 
2. Pointers on C 《C和指针》 
3. C traps and pitfalls 《C陷阱与缺陷》 
4. Expert C Lanuage 《专家C编程》 
5. Writing Clean Code 
—–Microsoft Techiniques for Developing Bug-free C Programs 
《编程精粹–Microsoft 编写优质无错C程序秘诀》 
6. Programming Embedded Systems in C and C++ 
《嵌入式系统编程》 
7.《C语言嵌入式系统编程修炼》 
8.《高质量C++/C编程指南》林锐 
尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。


嵌入式软件工程师学习路线

1、打好嵌入式软件编程的基础

这一阶段重点打好嵌入式软件编程的基础,包括 
学习Linux系统的基本应用 
Linux的常用命令 
C语言编程基础 
常用的数据结构

特别是C语言中对指针的理解和应用。这一阶段的主要目的是学习编程语言、开发环境、和培养自己的编程思维,为进一步学习嵌入式开发打下良好的基础。

2、学习ARM体系结构编程

这一阶段才是真正的嵌入式编程,首先我们要 
选择一款嵌入式CPU和一款嵌入式开发平台,目前ARM 嵌入式CPU应用最广泛,这一阶段重点是 
学习嵌入式CPU的裸机编程: 
* 熟悉中断 
* 定时器 
* 串口 
* NAND FLASH 
* 网络控制器 
* LCD屏、触摸屏 
* I2C 设备 
* SPI 设备 
等常用嵌入式外围设备的硬件工作原理,以及如何使用C语言来编程、控制这些硬件。这一阶段除了要学习对硬件编程之外,还需要学习嵌入式硬件的知识,但是对于嵌入式软件工程师来讲,重点是学习硬件的工作原理,在掌握硬件工作原理的基础上,对硬件进行编程控制。这和硬件工程师学习的侧重点有所不同。 
这一阶段对应的学校的课程主要包括模拟电路、数字电路、微机原理和单片机。这一阶段重点是要看CPU的芯片手册,大部分的参考书也是对芯片手册的翻译。

3、学习嵌入式系统的构建

这一阶段主要学习带有操作系统的嵌入式系统的构建,包括系统的 
启动流程 
* Bootloader的工作流程 
* UBOOT的编译 
* 裁剪与移植,嵌入式Linux内核的裁剪、移植与编译 
* 嵌入式根文件系统的定制 
* BootLoader、内核和根文件系统的烧写 
这一阶段的主要目的是掌握带有操作系统的嵌入式系统的构建和烧写过程,以及对嵌入式系统软件的总体构成有个整体认识,为我们接下来学习嵌入式应用和驱动开发打下坚实的基础。

4、学习嵌入式Linux应用程序开发

这一阶段主要学习上层的嵌入式Linux应用程序开发,包括 
* 基于Linux多进程 
* 多线程网络 
* 文件与目录 
掌握嵌入式Linux环境下应用程序开发技术。

5、学习嵌入式Linux驱动程序开发

这一阶段主要学习底层嵌入式Linux设备驱动程序开发设计,包括 
常用的字符设备驱动 
* 块设备驱动 
* LCD设备驱动 
* 触摸屏设备驱动 
以及驱动程序开发中的核心技术。

6、完成一个综合项目

嵌入式技术关键在于理论和实践的结合,要能够学以致用,完成了以上的所有阶段的知识点学习后,到底有没有学会,会不会用,能不能应用所学知识来解决实际开发中的问题,我们需要来完成一个综合的嵌入式实训项目,例如: 基于嵌入式Linux平台实现的飞行器、 基于嵌入式Linux平台实现的智能机器人等,这些项目都综合应用了嵌入式开发当中的应用,驱动和QT开发技术。


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324606728&siteId=291194637