0.C/C++编程语言
- 需要学习基本数据类型、数组、指针、结构体、链表、文件操作、队列、栈等知识,还需要通过大量的代码练习理解其知识。
1.熟悉 Linux 系统基本命令
- 安装 Linux 系统,学会基本操作,熟悉文件系统,shell 脚本以及常用命令。
- 学习 Linux 操作系统的概念、安装方法、目录结构、常用命令、编辑器、编译器、调试器以及项目管理工具、shell Makefile 脚本编写等知识以及嵌入式开发环境的搭建。
2.了解程序开发过程
- 搭建开发环境,了解 Linux 上程序开发过程。
- 学会使用文本编辑工具 Vim,编译工具 gcc, as, 连接工具 ld, 调试工具 gdb, make 工具,会写 makefile。
- 用 C 语言实现并编译自己的测试程序。
3.尝试系统编程
- 试着在 Linux 上用 C 语言进行系统编程,
- 其中需要调用 Linux 系统库函数 (API)。
- 例如,实现一个需要进行网络通信、操作文件的多线程/进程程序。
- 以此深入了解 Linux 系统运行机制。
- 学习标准 I/O 库,Linux 多任务编程中的多进程和多线程,以及进程间通信(pipe、FIFO、消息队列、共享内存、signal、信号量等),同步与互斥对共享资源访问控制等重要知识,培养 Linux 开发和代码调试的能力。
3.1 计算机网络
- 计算机网络在嵌入式 Linux 系统应用开发过程中使用非常广泛,通过 Linux 网络发展、TCP/IP 协议、socket 编程、TCP 网络编程、UDP 网络编程、Web 编程开发等方面入手,全面了解 Linux 网络应用程序开发。重点学习网络编程相关 API,熟练掌握 TCP 协议服务器的编程方法和并发服务器的实现,了解 HTTP 协议及其实现方法,熟悉 UDP 广播、多播的原理及编程方法,掌握混合 C/S 架构网络通信系统的设计,熟悉 HTML,Java 等 Web 编程技术及实现方法。
3.2 数据结构与算法
- 数据结构及算法在嵌入式底层驱动、通信协议、及各种引擎开发中被广泛应用,学习好数据结构与算法可以提高程序的效率,优化代码。该部分的学习要重点理解数据结构与算法的基础内容,包括顺序表、链表、队列、栈、树、图、哈希表、各种查找排序算法等应用及其 C 语言实现过程。
4.学习内核
- 这一部分内容比较深,能把它学透的基本就是大牛了,写个 OS 就不在话下了。
5.驱动开发
- 但是学习驱动开发无疑要把前面的都要学好。
- 驱动程序设计是嵌入式 Linux 开发工作中重要且相对困难的一部分。这里要求同学们要熟悉 Linux 的内核机制、驱动程序与用户级应用程序的接口,掌握系统对设备的并发操作。熟悉所开发硬件的工作原理,具备 ARM 硬件接口的基础知识,熟悉 ARM Cortex-A8 处理器 s5pv210 各资源、掌握 Linux 设备驱动原理框架,熟悉工程中常见 Linux 高级字符设备、块设备、网络设备、USB 设备等驱动开发,在工作中能独立胜任底层驱动开发。
6.嵌入式系统开发
- 学好 Linux 是嵌入式系统开发的基础。
- 嵌入式开发包括很多方向,有硬件、软件,以及系统级别。
- 硬件要学单片机,ARM、MIPS,DSP 等各种 MCU,Verilog, RTL, 具体就不多说了,跟 Linux 关系不太大。
- 软件的话,需要了解交叉编译,以及嵌入式环境下 C 语言的特殊用法,例如 volatile、 位操作、寄存器操作、大小端、程序跳转等。
- 系统级,要了解 Linux 内核裁剪、移植、编译、调试,还有 Bootloader 、设备驱动等。
- Linux 平台包括内核裁减、内核移植、交叉编译、GNU 工具使用、内核调试、Bootloader 介绍、制作与原理分析、根文件系统制作以及向内核中添加自己的模块,并在 s5pv210 实验平台上运行自己制作的 Linux 系统,集成部署 Linux 系统整个流程。同时了解 Android 操作系统开发流程。Android 系统是基于 Linux 平台的开源操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件,目前它的应用不再局限于移动终端,还包括数据电视、机顶盒、PDA 等消费类电子产品。
进程管理专题
内存管理专题
网络协议栈专题
设备驱动管理专题
文件系统及内核组件专题
项目实战
群体
1.从事业务开发多年,对底层原理理解不够深入的在职工程师
2. 从事嵌入式方向开发,想转入互联网开发的在职工程师
3. 从事Qt/MFC等桌面开发,薪资多年涨幅不大的在职工程师
4. 从事非开发岗位(算法岗,运维岗,测试岗),想转后台开发岗位的在职工程师
5. 工作中技术没有挑战,工作中接触不到新技术的在职工程师
6. 自己研究学习速度较慢,不能系统构建知识体系的开发人员
7. 了解很多技术名词,但是深入细问又不理解的工程师
8. 计算机相关专业想进入大厂的在校生(本科及以上学历,有c/c++基础)