知识要求:
看懂电路图
看懂芯片手册
有编写,移植驱动的能力
懂内核的实现机制
懂C语言,C++, JAVA等
嵌入式 linux 学习路线
嵌入式 linux 系统里含有bootloader、内核、驱动程序、根文件系统、应用程序(C/C++、Android)这5大块。总结嵌入式Linux+Android系统包含以下部分内容:
ARM
Bootloader
Linux内核
驱动程序
根文件系统
Android Framework
使用C/C++编写的应用程序
Android APP
1. ARM
学习硬件知识的目的在于能看懂原理图,看懂通信协议,看懂芯片手册。这里推荐一些书:
《微机原理》,可以理解一个计算机的组成原理
《数字电路》,掌握一些逻辑运算,理解各种门电路的原理
《ARM体系结构与编程》,对ARM的运行原理解释的很到位
我相信看完这些书对ARM和硬件知识的掌握足够了,对于初学者只想浅尝辄止的了解,我推荐之前的一个chat《一小时教你学会 ARM 架构》。
2. Bootloader
bootloader有很多种,vivi、u-boot等等,最常用的是u-boot。 u-boot功能强大、源码比较多,对于编程经验不丰富、阅读代码经验不丰富的人,一开始可能会觉得难以掌握。但是,u-boot的主要功能就是:启动内核。它涉及:读取内核到内存、设置启动参数、启动内核。按照这个主线,我们尝试自己从零编写一个bootloader,这个程序相对简单,可以让我们快速理解u-boot主要功能的实现。相关内容有:
u-boot分析之编译体验
u-boot分析之Makefile结构分析
u-boot分析之源码第1阶段
u-boot分析之源码第2阶段
u-boot分析之u-boot命令实现
u-boot分析_uboot启动内核
3. Linux内核
内核在工作中的作用可以说是潜移默化的,虽然看起来没有直接性的工作项目,但绝对是走向架构师的必经之路。
Linux总线,设备,驱动模型的探究
Linux设备树的深入理解
Linux的启动流程
Linux设备和驱动的相遇
动手定制一个开发板
推荐《linux内核设计与实现》。
4. 驱动程序
驱动程序=Linux驱动程序软件框架+ARM开发板硬件操作
有了ARM的知识和阅读数据手册电路图的能力,再加上Linux内核的运行原理,基本上写驱动就是API调用的体力活了。这里推荐宋宝华老师的《linux设备驱动开发详解》。后续关于驱动的内容暂定如下:
LCD驱动程序
触摸屏驱动程序
USB驱动程序
NAND FLASH驱动程序
NOR FLASH驱动程序
网卡驱动程序
声卡驱动程序
5. 根文件系统
在开发应用程序时,也需要搭建文件系统,把各种库、配置文件放进去; 在发布产品时,你还需要修改配置文件,使得产品可以自动运行程序; 甚至你想实现插上U盘后自动启动某个程序,这也要要修改配置文件; 这一切,都需要你理解根文件系统的构成,理解内核启动后是根据什么配置文件来启动哪些应用程序。根文件系统相对比较简单,可以根据以下路线学习:
Linux根文件系统目录结构
移植Busybox
init进程介绍及用户程序启动过程
使用glibc库
制作/使用文件系统映象文件
嵌入式应用开发
C语言编程基础
嵌入式开发基础(Linux、Shell命令、VI编辑器、GCC、Makefile、交叉开发环境构建)
嵌入式Linux系统编程(shell编程、文件编程、串口编程、进程编程、线程编程、网络编程)
嵌入式底层系统开发
ARM体系结构(Arm体系|指令、Thumb指令、汇编程序设计、裸机程序开发)
Linux内核移植(bootloader、内核配置、文件系统)
驱动程序开发(驱动模型架构、字符设备驱动、块设备驱动、网络驱动)
嵌入式图形应用开发
C++语言编程基础
QT编程开发(Qt开发基础|布局与控件|绘图|事件|网络通讯|数据库|移植)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。