下面开始新一期到第二期之间的衔接视频的学习。
window操作系统上,系统的启动流程是这样的:
- 启动BIOS;
- 引导windows操作系统;
- 识别C,D盘等;
- 运行应用程序,如QQ,MSN等;
类似的,嵌入式操作系统的启动流程是这样的:
- bootloader(常用u-boot);
- 引导Linux内核;
- 挂接根文件系统;
- 启动应用程序;
其中bootLoader对应BIOS,最终目的是启动内核。
使用u-boot-1.1.6.tar.bz2来体验编译uboot,这是从网上下载的uboot源码,在所有资料的system目录下有uboot源码压缩包和uboot补丁文件,需要u-boot-1.1.6_jz2440.patch打补丁来适配2440开发板。
- 解压缩:tar指令(tar jxvf -boot-1.1.6.tar.bz2,其中 j 表示具有 bzip2 的属性,如果是gzip格式的压缩包则使用 z ;x 表示解压缩,如果是生成压缩文件则使用 c,create;v 表示输出压缩或解压缩过程;f 后接具体要操作的文件名)
- 打补丁:patch指令,patch -p? < 补丁文件 (p后的 ? 是数字,-p1表示忽略补丁文件中目录的第一个,也就是下图的红框部分,因为已经cd到u-boot-1.1.6目录下了)
- 配置:make 100ask24x0_config
- 编译:make
其中–表示修改前的代码,++表示修改后的代码。
下图是在原来的u-boot-1.1.6/common/cmd_load.c文件的第34行开始,共六行,开始打补丁,打完补丁后,从34行开始,加了两行变成八行,其中+号后面跟的就是新文件添加的。
下图为打完补丁后的显示。
解压缩和打完补丁,之后就需要编译u-boot了,但是在编译之前还需要配置一下,让它适配2440开发板。
对于2440开发板,执行 make 100ask24x0_config 配置即可。
然后直接执行make编译即可,需要编译一段时间。
下图表示编译完成,其中生成的u-boot.bin就是要下载到开发板的bin文件,可以看到就在当前目录下。
在windows下使用oflash下载u-boot.bin即可。
下载完成后,上电就会自动运行u-boot,在倒计时结束前按空格,就可以进入u-boot菜单。
在u-boot命令行中可以输入命令来执行不同的操作,使用help命令可以查看都有哪些命令,。
还可以使用:? 命令,来查看具体命令的使用说明。
u-boot的最终目的是:启动内核。
内核是放在Flash上的,所以要从Flash中读出内核,然后放到SDRAM上,再启动内核。
显然,为了达到这个目的,u-boot需要:
- 能读Flash;
- 初始化SDRAM(还需要 a. 初始化时钟,关看门狗;b. 初始化串口,这样才能读出启动信息等;为了让开发更加方便,要支持烧写Flash,网卡,USB);
- 能够启动内核。
可以把u-boot理解为一个单片机程序,只不过它比较复杂。
要了解u-boot的功能和结构,需要分析u-boot的Makefile,下一节来分析它的Makefile。