一.
在专用的嵌入式板子运转GNU/Linux体系现已变得越来越盛行。一个嵌入式Linux体系从软件的视点看一般能够分为四个层次:
1、 引导加载程序。包含固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。
2、 Linux内核。特定于嵌入式板子的定制内核以及内核的发动参数。
3、 文件体系。包含根文件体系和树立于Flash内存设备之上文件体系。一般用ramdisk来作为rootfs。
4、 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间或许还会包含一个嵌入式图形用户界面。常用的嵌入式GUI有:MicroWindows和MiniGUI懂。
引导加载程序是体系加电后运转的榜首段软件代码。PC机中的引导加载程序由BIOS(其本质便是一段固件程序)和坐落硬盘MBR中的OS BootLoader(比方,LILO和GRUB等)一同组成。BIOS在完结硬件检测和资源分配后,将硬盘MBR中的BootLoader读到体系的RAM中,然后将控制权交给OS BootLoader。BootLoader的首要运转使命便是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的进口点去运转,也即开端发动操作体系。
而在嵌入式体系中,一般并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段矮小的发动程序),因而整个体系的加载发动使命就完全由BootLoader来完结。比方在一个根据ARM7TDMI core的嵌入式体系中,体系在上电或复位时一般都从地址0x00000000处开端履行,而在这个地址处组织的一般便是体系的BootLoader程序。
简略地说,BootLoader便是在操作体系内核运转之前运转的一段小程序。经过这段小程序,咱们能够初始化硬件设备、树立内存空间的映射图,然后将体系的软硬件环境带到一个适宜的状况,以便为终究调用操作体系内核准备好正确的环境。
一般,BootLoader是严重地依赖于硬件而完成的,特别是在嵌入式国际。因而,在嵌入式国际里树立一个通用的BootLoader几乎是不或许的。尽管如此,咱们依然能够对BootLoader概括出一些通用的概念来,以辅导用户特定的BootLoader规划与完成。
二.U-BOOT介绍
uboot是一个巨大的揭露源码的软件。他支撑一些系列的arm体系,包含常见的外设的驱动,是一个功用强大的板极支撑包。其代码能够从http://sourceforge.net/projects/u-boot下载
U-BOOT是由PPCBOOT开展起来的,是PowerPC、ARM9、Xscale、X86等体系通用的Boot计划,从官方版别0.3.2开端全面支撑SC系列单板机。u-boot是一个open source的bootloader,现在版别是0.4.0。u-boot是在ppcboot以及armboot的基础上开展而来,尽管宣称是0.4.0版别,却适当的老练和安稳,现已在许多嵌入式体系开发进程中被选用。因为其开发源代码,其支撑的开发板很多。仅有惋惜的是并不支撑咱们现在学习所用samsung 44B0X的开发板。
为什么咱们需求u-boot?明显能够将ucLinux直接烧入flash,然后不需求额定的引导装载程序(bootloader)。可是从软件晋级的视点以及程序修补的来说,软件的自动更新非常重要。事实上,引导装载程序(bootloader)的用处不仅如此,但仅从软件的自动更新的需求就阐明咱们的开发是必要的。
一起,u-boot移植的进程也是一个对嵌入式体系包含软硬件以及操作体系加深了解的一个进程。
四.常用U-BOOT指令介绍
1.list 得到一切指令列表
2.help: help usb, 列出USB功用的使用阐明
3.ping:注:只能开发板PING其他机器
4.setenv: 设置互环境变量:
5.setenv serverip 192.168.0.1
6.setenv ipaddr 192.168.0.56
7.setenv bootcmd tftp 32000000 vmlinux; kgo 32000000’
8.saveenv: 保存环境变量
9.在设置好环境变量今后,保存变量值
10.tftp: tftp 32000000 vmlinux, 把server(IP=环境变量中设置的serverip)中/tftpdroot/ 下的vmlinux经过TFTP读入到物理内存32000000处。
11.kgo: 起动没有紧缩的linux内核,kgo 32000000
12.bootm:起动UBOOT TOOLS制造的紧缩LINUX内核, bootm 3200000
13.protect: 对FLASH进行写维护或撤销写维护, protect on 1:0-3(便是对榜首块FLASH的0-3扇区进行维护),protect off 1:0-3撤销写维护
14.erase: 删去FLASH的扇区, erase 1:0-2(便是对每一块FLASH的0-2扇区进行删去)
15.cp: 在内存中仿制内容, cp 32000000 0 40000(把内存中0x32000000开端的0x40000字节仿制到0x0处)
16.mw: 对RAM中的内容写操作, mw 32000000 ff 10000(把内存0x32000000开端的0x10000字节设为0xFF)
17.md: 修正RAM中的内容, md 32000000(内存的开始地址)
18.usb:
lusb start: 起动usb 功用
lusb info: 列出设备
lusb scan: 扫描usb storage(u 盘)设备
19.fatls:列出DOS FAT文件体系,如:fatls usb 0列出榜首块U盘中的文件
20.fatload: 读入FAT中的一个文件,如:fatload usb 0:0 32000000 aa.txt
21.把USB中的aa.txt 读到物理内存0x32000000处!
22.flinfo: 列出flash的信息
23.loadb: 准备用KERMIT协议接纳来自kermit或超级终端传送的文件。
24.nfs: nfs 32000000 192.168.0.2:aa.txt , 把192.168.0.2(LINUX 的NFS文件体系)中的NFS文件体系中的aa.txt 读入内存0x32000000处。
2.help: help usb,
3.ping:注:只能开发板PING其他机器
4.setenv:
5.setenv serverip 192.168.0.1
6.setenv ipaddr 192.168.0.56
7.setenv bootcmd tftp 32000000 vmlinux; kgo 32000000’
8.saveenv:
9.在设置好环境变量今后,保存变量值
10.tftp: tftp 32000000 vmlinux,
11.kgo:
12.bootm:起动UBOOT
13.protect: 对FLASH进行写维护或撤销写维护, protect on 1:0-3(便是对榜首块FLASH的0-3扇区进行维护),protect off 1:0-3撤销写维护
14.erase:
15.cp: 在内存中仿制内容, cp 32000000 0 40000(把内存中0x32000000开端的0x40000字节仿制到0x0处)
16.mw: 对RAM中的内容写操作, mw 32000000 ff 10000(把内存0x32000000开端的0x10000字节设为0xFF)
17.md: 修正RAM中的内容, md 32000000(内存的开始地址)
18.usb:
lusb start:
lusb info:
lusb scan:
19.fatls:列出DOS FAT文件体系,如:fatls usb 0列出榜首块U盘中的文件
20.fatload:
21.把USB中的aa.txt 读到物理内存0x32000000处!
22.flinfo:
23.loadb:
24.nfs: nfs 32000000 192.168.0.2:aa.txt , 把192.168.0.2(LINUX 的NFS文件体系)中的NFS文件体系中的aa.txt 读入内存0x32000000处。