U-Boot 2016.05 Stage1代码分析

主流Bootloader的启动过程均可分为Stage1及Stage2两部分,一般来说,Stage1完成最基本的初始化操作、搬移代码及建立C语言运行环境;Stage2完成剩余的初始化操作。故Stage1一般使用汇编完成,Stage2一般使用C语言完成,不过这只是很粗略的情况,实际上Stage1中也会使用C语言代码。

下面以之前针对S3C2440移植好的U-Boot 2016.05为例,分析U-Boot中Stage1的代码。

UART协议时序总结

UART使用异步模式工作,不需要时钟信号,其一般格式为:起始位+数据位+校验位+停止位。其中起始位1位,数据位5~8位,校验位0或1位,停止位1、1.5或2位。不过最常用的格式是1位起始位、8位数据位、没有奇偶校验、1位停止位,简记为8/N/1

8/N/1格式的时序图如下:

汇编文件后缀.s与.S的区别

使用GCC(准确说是GCC调用了as汇编器)处理汇编代码时,汇编文件的后缀有两种:.s.S。这两种文件都是汇编代码,其区别在于:

.s格式的汇编文件中,只能包含纯粹的汇编代码,汇编器只对其进行汇编操作,没有预处理操作;
.S格式的汇编文件中,还可以使用预处理命令,汇编器会先进行预处理,然后再进行汇编。

预处理命令以#开头,基本与C语言中的预处理命令相同,包括#define#include#if#endif等。在U-Boot和Linux内核源码中,这些汇编预处理命令用得十分广泛。

在U-Boot中添加自定义命令以实现自动下载程序

U-Boot中通过NFS下载程序是一种很普遍的方式,然而下载程序的过程并不能只用一条命令实现。以下载到NOR Flash中为例,一般需要以下几步:

  1. 通过NFS将文件下载到内存中;
  2. 解除NOR Flash写保护;
  3. 擦除NOR Flash;
  4. 写入NOR Flash。

每一步都需要手动输入命令,十分麻烦,所以我们可以在U-Boot中添加一个自定义命令download,以实现一键全自动下载的目的。下面就来介绍一下实现方法。

VMware虚拟机中嵌入式Linux开发环境网络配置

嵌入式Linux开发中,主机一般在VMware上运行Ubuntu等桌面Linux系统,主机与板子之间通过网线连接,以实现文件挂载、通信等目的。此时我们希望Ubuntu系统既能正常访问互联网,又能和板子进行通信。解决方法是添加两块网卡,第一块使用NAT方式,第二块使用桥接方式桥接到有线网卡上。第一块网卡(eth0)用于上网,配置为DHCP自动获取地址;第二块网卡(eth1)用于和板子连接,配置为静态IP。这样就可以同时满足这两个需求了。