+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
看到不错的文章,不要添加收藏夹,想着以后有时间再看,因为很有可能你以后再也不会看它们了。
想写总结的文章,不要想着等到以后有时间了再总结,因为很有可能你以后更没有时间总结它们了。
——送给自己
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
我们知道对于PC机,使用电脑时我们首先按下开机按键,然后等待电脑的启动,开机完成后,我们会进行各种需要的操作,如qq聊天、写CSDN博客等。其实这个过程是:启动BIOS程序,由BIOS程序引导Windows操作系统,再由操作系统识别C盘D盘等硬盘,最后运行应用程序QQ、CSDN等。对嵌入式系统来说,对应BIOS的是Bootloader程序,由Bootloader程序启动Linux内核,再由内核挂载“根文件系统”,最后运行应用程序。这里所说的u-boot是Bootloader中的一种,除了u-boot外,还有LILO、GRUB、Vivi等等。
上面的分析可以看出嵌入式系统的几个层次,以及各层次的关系。
用户应用程序 |
文件系统 |
Linux内核 |
Bootloader引导加载程序 |
可以这样理解Bootloader程序的作用:它是一段程序,在系统上电后,首先由它来进行一些硬件初始化,如关闭看门狗、改变系统时钟、初始化存储控制器、将更多代码复制到内存中去,从而准备好软件环境,最后调用操作系统内核,将内核复制到内存中。
内核程序比较大,不可能放在内存中,而是放在Flash中,而Bootloader的主要作用就是引导内核,也就是从Flash中读出内核,然后把它加载到内存中。因此,它至少要有能够读Flash的功能、初始化SDRAM的功能,并能够启动内核。这些基本的功能就构成了所谓的启动加载模式功能。那么内核又是怎么存放到Flash上面去的呢,有可能是芯片出厂时直接烧写到了芯片上的,但更多的可能是开发过程中通过u-boot烧写到芯片上去的。那么u-boot除了有读Flash外,还必须有写Flash的功能,通过什么写呢,所以还可能需要网卡、USB等等为开发方便而支持的功能,这就是所谓的下载模式功能。除此之外,u-boot的功能还包括给内核传递参数等细节性的内容,以后的学习中会详细的总结。
了解了u-boot的作用后,就是使用u-boot了,下面给出u-boot的初步体验:
所用开发板是JZ2440。
解压 | tar xjf u-boot-1.1.6.tar.bz2 |
打补丁 | cd u-boot-1.1.6; patch -p1 < ../u-boot-1.1.6_jz2440.patch |
配置 | make 100ask24x0_config |
编译 | make |
上面的步骤完成后,如果执行结果无误,会生成一个u-boot.bin的二进制文件,它就是可以直接烧入ROM、NOR Flash的文件,把该文件下载到开发板上就可以体验使用u-boot 了。其实,除了u-boot.bin二进制文件外,还有u-boot的ELF格式的可执行文件,u-boot的Motorola S_Record格式的可执行文件。除此之外,还会生成一些工具文件,如tool子目录下面的mkimage文件,将它复制到/usr/local/bin目录下,在编译内核时会使用mkimage来生成u-boot格式的内核映像文件uImage(这一点在后面会提到)。
将u-boot.bin文件下载到开发板上后,启动它,然后就能够使用u-boot内的命令了,如print查看环境变量、hlep查看帮助信息、set设置环境变量等等。
参考:本总结参考自 韦东山的<嵌入式Linux应用开发完全手册> 在此向其表示感谢。
u-boot学习(一):u-boot概述,布布扣,bubuko.com