一、前言
学习嵌入式要有一定的基础,那么这个基础就是单片机和 C 语言,不需要掌握的有多好,但一定要具备一定的 C 语言编程能力。像其他有些课程,比如计算机专业课程中的编译原理、数据结构,计算机系统体系结构,这些知识实际上还不太需要,了解一下就可以了。有了 C 语言编程基础,并且学过单片机,这个时候就可以学习一下嵌入式 Linux 的基本框架了,很简单,那就是首先要搞清楚什是 BootLoader、Linux 内核(kernel)、和文件系统。
1.1 BootLoader
引导程序,即硬件复位以后第一个要执行的程序,它主要工作就是初始化操作系统运行的境,比如说内存、定时器、缓冲器等,当这个工作做完以后,再把操作系统的代码加载到内存,然后操作系统就可以启动并执行,到此为止,bootloader 的任务就完了。
常用的 bootloder 有很多种,比如 U-BOOT、REDBOOT、LILO 等等,我们开发板用的是 Uboot
1.2 Kernel
Kernel 就是 Linux 的内核,也就是说 Linux 操作系统本身的代码。那么 U-BOOT 启动到最后,把Linux内核加载到内存,并且跳转到 Kernel 来执行。
1.3 文件系统
Linux 内核启动到最后一定要挂载一个文件系统,这个是 Linux 的一个特点,像 QT 系统、Android 系统、以及 Ubuntu 系统它们的底层都是 Linux 内核,不同的文件系统。
搞清楚了这几个概念,实际我们就了解了 Linux 系统最基本的框架,然后根据开发板配套的料,去学习如何编译这几个文件,因为像 Uboot、Kernel、文件系统,最后编译生成出来分别是一个独立的文件,就是说会生成三个文件,最后我们要学会把这几个文件烧写到板子上。
Linux 驱动方面
Linux 的驱动 包括有三种:字符设备、块设备以及网络设备。
现在我们总结一下,把学习嵌入式技术的路线图跟大家澄清一下,那就是:单片机 + C 语言 -----> 学习基础框架知识(包括 bootloader,Linux 内核、文件系统的编译和烧写 ----->再去学习 Linux 上层应用的编程,以及字符设备的驱动,学完以后就会觉得入门了,能做一些事情了-----> 最后深入学习计算机系统结构、数据结构、操作系统原理等等一些知识,通过分析 Linux 系统源码,直到熟练掌握嵌入式编程技术。