BootLoader 是一个引导程序, 也就是在硬件复位以后 第一个要执行的程序 , 它的主要工作就是初始化操作系统运行的环境, 比如说内存 , 如果内存不对它初始化的话它是不能工作的 , 那么当这个工作做完以后 最后会把操作系统的这个代码加载到内存 , 那么这个操作系统可能是在硬盘上可能在其他的介质上 bootLoader 会把这个操作系统代码加载到内存, 然后操作系统就可以启动执行了, 从bootLoader 跳转到操作系统 , 那么操作系统就可以执行了, 那么这时候bootLoader就没什么事了,
没有bootLoader 行不行 ?
可以的, 但是操作系统它本身是一个比较通用的软件 , 它在不同的平台上去运行, 比如 x86上,ARM , 上等等处理器上, 都可以运行, 但是不同的处理器 初始化的操作是不同的 ,如果这个操作系统在代码里要考虑启动时候 处理各种平台各种差异的话 , 那么这个代码就显得过于复杂了, 除此之外还有其他方面的一些原因 ,
bootLoader 有很多种, 比如说像 UBoot ,
Kernel 就是Linux 内核, Linux操作系统本身的代码 , UBoot启动到最后就是把它内核加载到内存 , 并且跳转到内核去运行,
文件系统, : Linux在启动到最后 , 一定要挂载一个文件系统,
Android , QT ,Ubuntu 系统 他们的底层都是Linux , 这几个系统不同的是 , 文件系统不一样, 也就是说Android中相关的代码 比如说图像界面 安卓虚拟机, 安卓的框架代码等等,都在LInux 最后挂的这个文件系统里面 ,
上面就是最基本的框架
下面就是根据开发板 配套资料去学习如何编译文件 , 因为像UBoot 像Kernel , 文件系统等,最后他们会分别编译生成一个文件,也就是说最后会生成三个文件, 我们要学会把这几个文件下载并且烧写到这个板子上面, 学会了编写和烧写以后 呢, 接下来我们在框架的基础之上呢去学习如何在Linux上面呢, 做应用程序 ,
应用程序, 也是框架的内容, 应用程序实际上是跑在操作系统上面的, 通过调用操作系统的资源去工作 , 那么它是最终的业务逻辑, 比如说在Windows操作系统上面 就会看到很多的应用程序, 比如像QQ 爱奇艺, 游戏, 都可以说是应用程序 ,
驱动 " 操作系统的一部分, 它是在最底层,专门和硬件打交道,是驱动硬件的, Linux 的驱动包括有三种:字符设备 , 块设备, 网络设备 , , 最初只需要学习 字符设备驱动, 其他两种不要去管 , 因为一般做嵌入式产品的公司,仅限于字符设备,掌握这个字符设备的框架思想,开发步骤 , 就可以了, 其他两块, 直接用开发板上或其他平台上的就足够了, 像这些块设备和网络设备都是一线厂家来做的事情, 不需要我们来完成, 比如处理器开发的厂家,
从总体的这嵌入式行业来讲, 大多数的公司都不需要,很多技术都是直接拿来用的, 但是字符设备驱动他的应用非常广泛, , 我们在应用的时候需要很多的发挥, 基本都是在字符设备驱动,
等将来熟练掌握之后, 再去研究更深入的这个编程, 再去研究 数据结构算法, 再去研究代码,
在ARM上做裸机程序, 不是不可以, 只能说没有太大价值, 因为裸机程序根本就发挥不了ARM处理器得性能, 只有操作系统, 才能充分挖掘ARM处理器得优势, 也能够通过操作系统保证 运行得安全性和稳定性 ,如果真的想做这个裸机程序, 单片机就够了, 从架构上来讲 ARM 和单片机都是CPU , 编程思想是一样得,只不过ARM得速度非常快, 只有在上面跑操作系统 , 使用多任务得编程方法 才能够最大化得发挥ARM处理器得优势 , 那么从实际产品开发上也是这样, 几乎没有用ARM 来跑裸机得开发产品 , 如果裸机方式来编程那就要用单片机这样, 整体得成本也会小很多,