《1UBoot操作和常用命令.ppt》由会员分享,可在线阅读,更多相关《1UBoot操作和常用命令.ppt(16页珍藏版)》请在三一文库上搜索。
1、UBoot操作和常用命令,主要内容,u-boot概念解释 u-boot基础指令使用介绍 u-boot环境变量 u-boot NAND Flash操作命令及烧录Linux内核和文件系统,BootLoader概念,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境 通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的Boot Loader 几乎是不可能的。尽管如此,我们仍然可以
2、对Boot Loader 归纳出一些通用的概念来,以指导用户特定的Boot Loader 设计与实现。,UBoot来源,U-Boot 是 Das U-Boot 的简称,其含义是 Universal Boot Loader,是遵循 GPL 条款的开 放源码项目。最早德国 DENX 软件工程中心的 Wolfgang Denk 基于 8xxROM 和 FADSROM 的源码创建了 PPCBoot 工程项目,此后不断添加处理器的支持。而后,Sysgo Gmbh 把 PPCBoot 移植到 ARM 平台上,创建了 ARMBoot 工程项目。最终,以 PPCBoot 工程和 ARMBoot 工程为基础,创
3、建了 U-Boot 工程。 而今,U-Boot 作为一个主流、通用的 BootLoader,成功地被移植到包括 PowerPC、ARM、X86 、MIPS、NIOS、XScale 等主流体系结构上的百种开发板,成为功能最多、灵活 性最强,并且开发最积极的开源 BootLoader。目前。U-Boot 仍然由 DENX 的 Wolfgang Denk 维护,烧写UBoot,UBoot编译完成后,会在源码目录下生成u-boot.bin这个二进制文件。 利用JLink工具把u-boot.bin烧写到NORFlash的0x00000000位置即可。,mkimage,在使用UBoot引导Linux内核时
4、,必须对Linux内核镜像文件做适当的修改让UBoot可以引导使用mkimage程序来对linux内核文件增加UBoot头。 uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么,mkimage使用,Usage: mkimage -l image -l = list image h
5、eader information mkimage -x -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file:data_file. image -A = set architecture to arch -O = set operating system to os -T = set image type to type -C = set compression type comp -a = set load address to addr (hex) -e = set entry point to ep (hex)
6、 -n = set image name to name -d = use image data from datafile -x = set XIP (execute in place) 制作uImage 内核镜像文件 mkimage -n linux-2.6.33.7 -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage uImage,烧录Linux内核,烧录Linux内核并实现自启动。 1)通过mkimage工具把Linux内核镜像文件转为UBoot格式通过tftp协议烧写到开发板内存的的0x300
7、08000位置 2)PC的虚拟机Linux安装ftfp服务器端并配置测试连接成功 3)重启开发板ping通虚拟机linux 4)配置传给linux的命令行参数 5)开发板UBoot通过tftp协议和Linux进行连接,把Linux内核读入SDRAM后通过nand 命令写入nandflash的指定位置; 6)根据Linux启动信息获得Linux内核默认的MTD分区并做出相应的修改后,把文件系统烧入相应位置,tftp的安装和配置,redhat9下载tftp-server-0.32-4.i386.rpm软件包 rpm -ivh tftp-server-0.32-4.i386.rpm安装 Fedora
8、9下可以使用yum在线安装tftp-server yum install tftp-server 新建tftp根目录并授予权限 mkdir /var/tftproot chmod -R 777 /var/tftproot tftp server 配置 tftp server配置文件,/etc/xinetd.d/tftp,修改tftp配置文件,# default: off # description: The tftp server serves files using the trivial file transfer # protocol. The tftp protocol is ofte
9、n used to boot diskless # workstations, download configuration files to network-aware printers, # and to start the installation process for some operating systems. service tftp disable = no /设置为no,开启服务 socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args
10、= -s /var/tftproot -c /这里配置tftp服务器根目录,-c参数表示可以写文件 per_source = 11 cps = 100 2 flags = IPv4 ,tftp服务器配置,UBoot环境变量,1)bootargs参数 bootargs参数是启动时传递给Linux操作系统的信息,其配置语句为: set bootargs root=/dev/mtdblock3 console=ttyS0,115200 rootfstype=cramfs mem=32mb root:/dev/mtdblock2表示从nand的第三个分区启动文件系统,Linux启动后会自动搜索nand
11、分区信息。 console:表示Linux操作系统使用的控制台,我们使用第一个串口,因此是ttyS0,后面跟的115200表示串口使用的波特率。 rootfstype:表示文件系统的格式,我们烧录在nand中的文件系统使用cramfs,所以在这里要填写cramfs,否则linux会尝试自动挂载,可能会出错。 mem:表示Linux操作系统的内存容量,目前开发板板载32MB内存,因此填32mb。 2)bootcmd参数 bootcmd参数表示开发板上电,bootdelay结束后执行的指令。这里填写内容的含义是用tftp这条命令,将主机上的vmlinux.img(即Linux内核)加载到内存的30
12、007fc0这个地址,然后从30007fc0启动内核。如果将Linux内核烧录到nandflash上,则指令又有不同,下面会详细介绍。,UBoot常用命令,usb start: 起动usb 功能 usb info: 列出设备 usb scan: 扫描usb storage(u 盘)设备 fatls:列出DOS FAT文件系统, 如:fatls usb 0列出第一块U盘中的文件 fatload: 读入FAT中的一个文件,如:fatload usb 0 0x30000000 aa.txt flinfo: 列出flash的信息 nfs: nfs 32000000 192.168.0.2:aa.txt
13、 , 把192.168.0.2(LINUX 的NFS文件系统)中的NFS文件系统中的aa.txt 读入内存0x32000000处 tftp: tftp 32000000 vmlinux, 把server(IP=环境变量中设置的serverip)中/tftpdroot/ 下的vmlinux通过TFTP读入到物理内存32000000处 ping:注:只能开发板PING别的机器 bootm:起动UBOOT TOOLS制作的压缩LINUX内核, bootm 3200000 mw: 对RAM中的内容写操作, mw 32000000 ff 10000(把内存0x32000000开始的0x10000字节设为
14、0xFF),UBoot对NandFlash操作,nand info查看NAND Flash信息命令 nand info Device 0: Samsung unknown 64Mb at 0x11000200 (64 MB, 16 kB sector) nand erase 地址 大小擦除NAND Flash命令 将NAND Flash中起始地址0x00100000 大小为0x00200000的内容擦除。切记NAND Flash使用前一定要先擦除。 SEP4020=nand erase 0x00100000 0x00200000 NAND erase: device 0 offset 1048
15、576, size 2097152 . OK nand write 内存地址 NAND地址 大小 将SDRAM中地址0x31000000中大小为0x00200000的内容写入NAND Flash的0x100000地址。 nand write 0x31000000 0x00100000 0x00200000 NAND write: device 0 offset 1048576, size 2097152 . 2097152 bytes written: OK 烧写文件系统 nand write.yaffs 0x30008000 0x560000 0x3b22c00,文件系统的烧写,UBoot启
16、动Linux内核后会在某个固定位置读取文件系统信息,这个具体位置通过Linux代码common-smdk.c文件的MTD分区来决定( arch/arm/plat-s3c24xx/目录下),Creating 5 MTD partitions on “NAND 256MiB 3,3V 8-bit“: 0x000000000000-0x000000040000 : “supervivi“ ftl_cs: FTL header not found. 0x000000040000-0x000000060000 : “param“ uncorrectable error : 0x000000060000-
17、0x000000560000 : “Kernel“ ftl_cs: FTL header not found. 0x000000560000-0x000040560000 : “root“ mtd: partition “root“ extends beyond the end of device “NAND 256MiB 3,3V 8-bit“ - size truncated to 0xfaa0000 ftl_cs: FTL header not found. 0x000000000000-0x000040000000 : “nand“ mtd: partition “nand“ extends beyond the end of device “NAND 256MiB 3,3V 8-bit“ - size truncated to 0x10000000,MTD分区,需要注意的是,不同版本的内核分区情况可能会有不同,在使用中要注意阅读内核发布时的说明文档,根据实际情况进行操作。 本文档中使用上述分区方式。其中mtdblock0 留出空间可以存放Uboot或者vivi;mtdblock1 用来存放UBoot传给Linux的参数信息;mtdblock2 用来存放Linux内核镜像文件,mtdblock3 用来挂载yaffs 文件系统或其他分区。,
链接地址:https://www.31doc.com/p-3485227.html