U-BOOT下使用bootm引导内核方法

合集下载

《uboot环境变量:详谈bootcmd和bootargs》

《uboot环境变量:详谈bootcmd和bootargs》

《uboot环境变量:详谈bootcmd和bootargs》1.uboot中的环境变量bootdelay:执⾏⾃动启动的等候秒数baudrate:串⼝控制台的波特率netmask:以太⽹接⼝的掩码ethaddr:以太⽹卡的⽹卡物理地址bootfile:缺省的下载⽂件bootargs:传递给内核的启动参数bootcmd:⾃动启动时执⾏的命令serverip:服务器端的ip地址ipaddr:本地ip 地址stdin:标准输⼊设备stdout:标准输出设备stderr:标准出错设备 以上是⼀些基本的环境变量。

uboot中⼀般会有⼀些缺省的环境变量。

在启动uboot后会将参数放在特定的FLASH区域,之后由kernel去获取解析。

还有另⼀种⽅法设置环境变量就是在uboot启动后进⼊命令⾏模式,设置环境变量,然后执⾏saveenv后,会将设置的环境变量保存到特定区域的FLASH中,由kernel去获取解析。

其中bootargs和bootcmd相对⽐较重要。

2.bootargs解析root: ⽬前很多新的开发板都是使⽤FLASH作为存储。

因为很多都直接使⽤MTD驱动程序。

MTD 驱动程序的主要优点在于 MTD 驱动程序是专门为基于闪存的设备所设计的,所以它们通常有更好的⽀持、更好的管理和基于扇区的擦除和读写操作的更好的接⼝。

Linux 下的 MTD驱动程序接⼝被划分为两类模块:⽤户模块和硬件模块。

有两个流⾏的⽤户模块可启⽤对闪存的访问: MTD_CHAR 和 MTD_BLOCK 。

MTD_CHAR 提供对闪存的原始字符访问,⽽ MTD_BLOCK 将闪存设计为可以在上⾯创建⽂件系统的常规块设备(象 IDE 磁盘)。

与MTD_CHAR 关联的设备是 /dev/mtd0、mtd1、mtd2(等等),⽽与 MTD_BLOCK 关联的设备是 /dev/mtdblock0、mtdblock1(等等)。

由于 MTD_BLOCK 设备提供象块设备那样的模拟,通常更可取的是在这个模拟基础上创建象 FTL 和 JFFS2 那样的⽂件系统。

U-boot启动流程

U-boot启动流程

U-boot启动流程U-Boot启动内核的过程能够分为两个时期,两个时期的功能如下:〔1〕第一时期的功能➢硬件设备初始化➢加载U-Boot第二时期代码到RAM空间➢设置好栈➢跳转到第二时期代码入口〔2〕第二时期的功能➢初始化本时期使用的硬件设备➢检测系统内存映射➢将内核从Flash读取到RAM中➢为内核设置启动参数➢调用内核1.1.1U-Boot启动第一时期代码分析第一时期对应的文件是cpu/arm920t/start.S和board/samsung/mini2440/lowlevel_init.S。

U-Boot启动第一时期流程如下:图 2.1 U-Boot启动第一时期流程依照cpu/arm920t/u-boot.lds中指定的连接方式:ENTRY(_start)SECTIONS{. = 0x00000000;. = ALIGN(4);.text :{cpu/arm920t/start.o (.text)board/samsung/mini2440/lowlevel_init.o (.text)board/samsung/mini2440/nand_read.o (.text) *(.text)}… …}第一个链接的是cpu/arm920t/start.o,因此u-boot.bin的入口代码在cpu/arm920t/start.o中,其源代码在cpu/arm920t/start.S中。

下面我们来分析cpu/arm920t/start.S的执行。

1.硬件设备初始化〔1〕设置专门向量cpu/arm920t/start.S开头有如下的代码:.globl _start_start: b start_code /* 复位*/ldr pc, _undefined_instruction /* 未定义指令向量 */ldr pc, _software_interrupt /* 软件中断向量 */ldr pc, _prefetch_abort /* 预取指令专门向量 */ldr pc, _data_abort /* 数据操作专门向量 */ldr pc, _not_used /* 未使用 */ldr pc, _irq /* irq中断向量 */ldr pc, _fiq /* fiq中断向量 *//* 中断向量表入口地址 */_undefined_instruction: .word undefined_instruction_software_interrupt: .word software_interrupt_prefetch_abort: .word prefetch_abort_data_abort: .word data_abort_not_used: .word not_used_irq: .word irq_fiq: .word fiq.balignl 16,0xdeadbeef以上代码设置了ARM专门向量表,各个专门向量介绍如下:在cpu/arm920t/start.S中还有这些专门对应的专门处理程序。

u-boot简单使用手册

u-boot简单使用手册

u-boot简单使⽤⼿册(转⾃)1.u-boot 简介-----------------------------------------------------------------1.u-boot2.它有两种模式引导模式(⽤于引导OS)下载模式(⽤于开发,在u-boot启动按任意键)进⼊控制台。

在控制台执⾏ boot 命令,则进⼊引导模式去引导OS。

2.u-boot 控制台常⽤命令--------------------------------------------------------------------help 显⽰帮助命令boot ⽤引导常数来引导OS。

bootm 从内存引导OS。

.bootp/tftpboot 从TFTP/BOOTP引导OSgo 从某⼀个地址开始直接运⾏程序mtdparts 管理flash上的分区ping 简单发送⼀个ICMP包测试。

printenv 打印环境变量setenv 设置环境变量saveenv 把内存的环境变量存到flash上的param分区.usbslave 从USB下载⽂件 (PC机要运⾏dnw)version 显⽰u-boot 版本4. 设置环境变量printenv 打印环境变量bootargs=noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0bootcmd=nboot 0x32000000 kernel; bootm 0x32000000bootdelay=0baudrate=115200ethaddr=0a:1b:2c:3d:4e:5fipaddr=192.168.1.6serverip=192.168.1.8netmask=255.255.255.0stdin=serialstdout=serialstderr=serialmtdids=nand0=nandflash0mtdparts=mtdparts=nandflash0:256k@0(bios),128k(params),128k(toc),512k(eboot),1024k(log)partition=nand0,0mtddevnum=0mtddevname=biosEnvironment size: 453/131068 bytes经常修改是 bootargs ( 启动参数)ipaddr (开发板IP地址)serverip( 默认tftp/NFS/...下载主机)setenv 命令只是改变内存的环境变量值,如果不调⽤saveenv,下次的设置仍然是旧的配置。

烧写ARM开发板系统教程-----uboot、内核以及文件系统

烧写ARM开发板系统教程-----uboot、内核以及文件系统

烧写ARM开发板系统教程-----uboot、内核以及⽂件系统⼀、sd启动将u-boot镜像写⼊SD卡,将SD卡通过读卡器接上电脑(或直接插⼊笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是/dev/sdb.(内存卡的节点)。

当有多个交叉编译器是,不⽅便设置环境变量时,可以在编译命令中指定交叉编译器,具体如下:在源码中操作以下步骤:make distcleanmake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- mrpropermake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- tiny210_configmake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- all spl编译出tiny210-uboot.bin,注意交叉编译⼯具路径执⾏下⾯的命令$sudo dd iflag=dsync oflag=dsync if=tiny210-uboot.bin of=/dev/sdb seek=1把内存卡插⼊开发板,使⽤串⼝⼯具设置环境变量:setenv gatewayip 192.168.1.1(电脑⽹关)setenv ipaddr 192.168.1.102(开发板ip,不要与虚拟机和电脑ip冲突)setenv netmask 255.255.255.0setenv serverip 192.168.1.10(虚拟机ip)saveenv⼆、nand启动烧写Uboot:通过SD卡启动的u-boot for tiny210 将u-boot镜像写⼊nandflash在虚拟机下重启tftp sudo service tftpd-hpa restart开发板终端下执⾏下⾯的命令:[FriendlyLEG-TINY210]# tftp 21000000 tiny210-uboot.bin[FriendlyLEG-TINY210]# nand erase.chip[FriendlyLEG-TINY210]# nand write 21000000 0 3c1f4 (写⼊长度)内核的烧写位置是0x600000开始的区域,⽂件系统烧写位置为0xe00000开始的区域。

UBoot操作和常用命令

UBoot操作和常用命令

UBoot常用命令
• usb start: 起动usb 功能 • usb info: 列出设备 • usb scan: 扫描usb storage(u 盘)设备 • f的at文ls:件列出DOS FAT文件系统, 如:fatls usb 0列出第一块U盘中 • fatload: 读入FAT中的一个文件,如:fatload usb 0 0x30000000
• 通常,Boot Loader 是严重地依赖于硬件而实现的, 特别是在嵌入式世界。因此,在嵌入式世界里建 立一个通用的Boot Loader 几乎是不可能的。尽管 如此,我们仍然可以对Boot Loader 归纳出一些通 用的概念来,以指导用户特定的Boot Loader 设计 与实现。
UBoot来源
• nand write [内存地址] [NAND地址] [大小]
– 将SDRAM中地址0x31000000中大小为0x00200000的内容写入NAND Flash的0x100000地址。
– nand write 0x31000000 0x00100000 0x00200000 – NAND write: device 0 offset 1048576, size 2097152 ... 2097152 bytes
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-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

uboot cmd机制

uboot cmd机制

uboot cmd机制U-Boot Cmd机制U-Boot是一种开源的引导加载程序,常用于嵌入式系统中。

它提供了一系列的命令行指令(Cmd)来管理和控制系统的启动和运行。

本文将介绍U-Boot Cmd机制,并探讨其在嵌入式系统中的应用。

一、U-Boot Cmd机制的基本原理U-Boot的Cmd机制是通过在源代码中定义一系列的命令函数来实现的。

每个命令函数对应一个特定的命令,当用户在U-Boot的命令行界面输入相应的命令时,U-Boot会调用对应的命令函数来执行相应的操作。

Cmd机制的实现依赖于两个关键的数据结构:cmd_tbl_t和cmd_tbl_list。

cmd_tbl_t是一个结构体,用于存储每个命令的相关信息,如命令名称、命令函数等。

cmd_tbl_list则是一个数组,用于存储所有命令的cmd_tbl_t结构体。

在U-Boot的初始化过程中,所有的命令函数都会被注册到cmd_tbl_list数组中。

当用户输入一个命令时,U-Boot会遍历cmd_tbl_list数组,在数组中找到对应的命令函数,并调用该函数执行相应的操作。

二、U-Boot Cmd机制的使用方法U-Boot的命令行界面提供了丰富的命令,用于管理和控制嵌入式系统的启动和运行。

以下是一些常用的U-Boot命令:1. boot:用于启动系统。

可以指定从哪个设备启动、加载内核镜像和设备树等。

2. printenv:用于打印环境变量。

可以查看当前系统的环境变量设置。

3. setenv:用于设置环境变量。

可以修改系统的环境变量值。

4. saveenv:用于保存环境变量。

将当前环境变量保存到存储设备中,以便下次启动时恢复。

5. ping:用于测试网络连接。

可以向指定的IP地址发送网络请求,测试网络的连通性。

6. tftpboot:用于通过TFTP协议下载文件。

可以从TFTP服务器下载文件到内存中。

7. mmc:用于操作SD卡。

可以查看SD卡的分区、格式化SD卡、读写SD卡中的文件等。

2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

凌FL2440超详细U-BOOT作业(UBoot介绍+H-jtag使用+Uboot使用)Bootloader是高端嵌入式系统开发不可或缺的部分。

它是在操作系统内核启动之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

现在主流的bootloader有U-BOOT、vivi、Eboot等。

本次作业先做Uboot的烧写吧。

希望通过这个帖子,能让更多的初学者朋友了解一些UBoot的知识,也希望高手朋友对我的不足予以斧正。

首先说一下什么是Uboot:U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。

从FAD SROM、8xxROM、PPCBOOT逐步发展演化而来。

其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

但是U-Boot不仅仅支持嵌入式Linu x系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。

其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。

这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。

这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。

bootm命令参数

bootm命令参数

bootm命令参数(原创版)目录1.bootm 命令参数概述2.常见 bootm 命令参数及其功能3.使用 bootm 命令参数的注意事项正文【1.bootm 命令参数概述】bootm 命令是在 Linux 系统中用于启动和管理内存映射(镜像)的工具,通常用于启动 Linux 内核。

bootm 命令的参数丰富,功能强大,能够满足不同场景下启动和管理内存映射的需求。

【2.常见 bootm 命令参数及其功能】以下是一些常见的 bootm 命令参数及其功能:- -f:指定内核映像文件的路径。

例如:bootm -f /boot/linux.img - -F:指定内核映像文件的格式。

例如:bootm -F extable -f elf_i386-m 0x8000 -L 0x00000000其中,extable 表示文件格式为 extable,elf_i386 表示内核类型为 i386,-m 0x8000 指定内核映像文件从 0x8000 地址开始,-L0x00000000 指定内核映像文件的长度。

- -A:指定启动参数。

例如:bootm -A 0x00000001 -A 0x00000002 其中,0x00000001 和 0x00000002 分别为两个启动参数。

- -s:指定内核启动方式。

例如:bootm -s 0x0000其中,0x0000 表示内核启动方式为直接启动。

- -c:指定内核压缩方式。

例如:bootm -c gzip其中,gzip 表示内核采用 gzip 压缩方式。

【3.使用 bootm 命令参数的注意事项】在使用 bootm 命令参数时,请注意以下几点:- 确保内核映像文件的路径、格式、地址和长度等参数正确无误,以免导致启动失败。

- 启动参数的值需要根据实际情况进行设置,部分参数的值可能需要查阅相关文档或向专业人士咨询。

- 选择合适的内核启动方式,以确保系统能够正常运行。

- 根据内核映像文件的实际情况选择合适的压缩方式。

uboot的bootcmd bootargs参数详解

uboot的bootcmd bootargs参数详解
或者
setenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.3:/nfs ip=192.168.0.5’
上面就是我们经常使用的几种bootargs的组合,老实说,bootargs非常非常的灵活,所以设置的方法有很多中形式,具体的还应该根据你的平台具体的情况来设置。
mtdparts的格式如下:
mtdparts=[;
:= :[,]
:= [@offset][][ro]
:= unique id used in mapping driver/device
:= standard linux memsize OR "-" to denote all remaining space
3). 假设文件系统是jffs2类型的,且在flash中,bootargs的设置应该如下
setenv bootargs ‘mem=32M console=ttyS0,115200 noinitrd root=/dev/mtdblock2 rw rootfstype=jffs2 init=/linuxrc’
这两种方法可以用,不过很明显第二种要详细很多,请注意第二种中which netcard 是指开发板上的网卡,而不是主机上的网卡。
说完常见的几种bootargs,那么我们来讨论平常我经常使用的几种组合:
1). 假设文件系统是ramdisk,且直接就在内存中,bootargs的设置应该如下:
setenv bootargs ‘initrd=0x32000000,0xa00000 root=/dev/ram0 console=ttySAC0 mem=64M init=/linuxrc’

U-BOOT介绍以及常用U-bot命令介绍

U-BOOT介绍以及常用U-bot命令介绍

U-BOOT介绍以及常用U-bot命令介绍一. BootLoader简介在专用的嵌入式板子运行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就是在操作系统内核运行之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

经典=Uboot-2-命令详解(bootm)

经典=Uboot-2-命令详解(bootm)

bootm命令中地址参数,内核加载地址以及内核入口地址分类:u-boot2010-11-04 10:472962人阅读评论(0)收藏举报downloadlinuxbytecmdheaderimagebootm命令只能用来引导经过mkimage构建了镜像头的内核镜像文件以及根文件镜像,对于没有用mkimage对内核进行处理的话,那直接把内核下载到连接脚本中指定的加载地址0x30008000再运行就行,内核会自解压运行(不过内核运行需要一个tag来传递参数,而这个tag是由bootloader提供的,在u-boot下默认是由bootm命令建立的)。

通过mkimage可以给内核镜像或根文件系统镜像加入一个用来记录镜像的各种信息的头。

同样通过mkimage也可以将内核镜像进行一次压缩(指定-C none/gzip/bzip2),所以这里也就引申出了两个阶段的解压缩过程:第一个阶段是u-boot里面的解压缩,也就是将由mkimage压缩的镜像解压缩得到原始的没加镜像头的内核镜像。

第二个阶段是内核镜像的自解压,u-boot 里面的解压实际上是bootm 实现的,把mkimage -C bzip2或者gzip 生成的uImage进行解压;而kernel的自解压是对zImage进行解压,发生在bootm解压之后。

下面通过cmd_bootm.c文件中对bootm命令进行解析以及执行的过程来分析,这三种不同地址的区别:ulong load_addr = CFG_LOAD_ADDR; /* Default Load Address */int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){......if (argc < 2) {addr = load_addr;//当bootm命令后面不带地址参数时,将默认的加载地址赋值给addr} else {addr = simple_strtoul(argv[1], NULL, 16); //如果bootm命令后面带了加载地址,则将该地址赋值给addr,所以最终有用的地址还是bootm命令后附带的地址}......//switch (hdr->ih_comp) { //开始判断利用mkimage命令后是否对内核镜像进行了压缩case IH_COMP_NONE: //如果没有被压缩,只是在原有的内核镜像前加了一个头if(ntohl(hdr->ih_load) == addr) { //这步很重要,涉及到我们要讨论的两个地址,我们知道在利用mkimage时指定-a选项后面就是指定的内核加载的地址,这个地址会被存放到镜像头结构的ih_load成员变量中如在smdk2410中ih_load为0x30008000,在这里开始作地址的判断,如果指定的加载地址和之前的addr也就是bootm后面附带的地址相同,则不用将内核镜像搬到其他地方,就在这个地址上执行,这样内核的入口地址就要在加载地址之后的64个字节(因为镜像头占了64个字节),所以入口地址为0x30008040printf (" XIP %s ... ", name);} else {//如果指定的加载地址和bootm命令后的附加地址不相同,我们看看下面data此时表示的是什么地址:data = addr + sizeof(image_header_t);可以看到如果指定加载地址与bootm命令后地址不相同,则从bootm命令后面地址所在地取出内核镜像的头进行检验,检验完后data指向真正的内核,然后将内核拷贝到指定的加载地址处来进行自解压运行,这个时候内核的入口地址就和加载地址一样,不需要加上40个字节,因为内核镜像前面的40个字节的头已经被取出来了。

uboot中bootfmh调用流程

uboot中bootfmh调用流程

bootm命令在U-Boot 中是用来启动Linux 内核或者Flat Device Tree (FDT) 格式的设备树以及可能包含的根文件系统镜像的命令。

bootm命令执行的流程通常涉及以下步骤:1.加载内核与设备树:在bootm执行前,通常需要使用fatload、ext2load或其他加载命令将Linux 内核映像(例如zImage 或uImage)、设备树blob(dtb 文件)加载到内存中预定义的位置。

2.验证与解析镜像头:bootm命令首先会检查指定内存区域的内容是否符合Multi-Component Boot (MCB) 格式,该格式允许在一个单一的二进制块中包含多个可启动组件的信息。

如果找到合法的MCB 头,它会进一步解析内核镜像和其他组件的相关信息。

3.设置环境变量:U-Boot 会根据加载的内核类型设置必要的环境变量,如bootargs(传递给内核的启动参数),fdtcontroladdr(设备树的加载地址)等。

4.初始化板级硬件:在启动内核前,确保所有必要的外设和SOC 功能已经被正确初始化,以便内核能够顺利接管控制权。

5.调用启动例程:最后,bootm命令会调用相关的启动例程来启动内核。

这个过程通常涉及到跳转到特定的启动函数,该函数会配置CPU 进入特定模式以运行ARM Linux 内核,然后调用内核的入口点开始执行内核代码。

具体来说,bootm命令在U-Boot 源代码中对应的实现部分主要包括:•cmd_bootm.c文件中包含了do_bootm()函数,它是bootm命令的主要执行体。

•在do_bootm()函数内部,会按照不同类型的镜像(单内核、多组件)分别处理。

•如果内核支持flattened device tree,会加载并验证设备树数据,并将其地址写入适当的寄存器或内存位置供内核启动时获取。

•设置栈指针、CPU模式、以及重定位向量表等,为内核启动做准备。

•最终,bootm调用类似boot_jump_linux()函数来跳转到内核的入口点开始执行。

bootm命令参数

bootm命令参数

bootm命令参数(原创实用版)目录1.概述 bootm 命令2.bootm 命令的参数3.参数的使用方法和示例4.常见问题和解决方法正文bootm 命令是 Linux 系统中用于引导内存棒的命令,它可以将内存棒中的 Linux 内核和初始化程序加载到内存中,并启动 Linux 系统。

在使用 bootm 命令时,需要了解其参数的使用方法,以便正确地引导内存棒。

1.概述 bootm 命令bootm 命令是 Linux 系统中的一个实用程序,主要用于引导内存棒。

它可以将内存棒中的 Linux 内核和初始化程序加载到内存中,并启动Linux 系统。

bootm 命令通常用于嵌入式系统或实时操作系统,这些系统通常使用内存棒作为引导设备。

2.bootm 命令的参数bootm 命令有多个参数,这些参数用于指定内存棒的类型、设备文件、内核和初始化程序等。

以下是 bootm 命令的一些常用参数:- -d:指定内存棒的设备文件。

- -f:指定内存棒中的文件系统类型。

- -k:指定内核的压缩方式。

- -l:指定内核的启动选项。

- -m:指定内存棒的类型。

- -s:指定内核的引导参数。

- -v:显示详细的输出信息。

3.参数的使用方法和示例以下是使用 bootm 命令的一些示例:- 引导一个名为"my_kernel"的内核,并使用"my_root_fs"作为文件系统:```bootm -d /dev/mmcblk0p2 -f ext3 -k gzip -l my_kernel -m 128M -s my_root_fs```- 引导一个名为"my_kernel"的内核,并使用"my_root_fs"作为文件系统,同时显示详细的输出信息:```bootm -d /dev/mmcblk0p2 -f ext3 -k gzip -l my_kernel -m 128M -s my_root_fs -v```4.常见问题和解决方法在使用 bootm 命令时,可能会遇到一些问题,例如内存棒无法识别、内核无法引导等。

UBoot中MAC地址设置及往内核中传递修订版

UBoot中MAC地址设置及往内核中传递修订版

U B o o t中M A C地址设置及往内核中传递集团标准化小组:[VVOPPT-JOPP28-JPPTL98-LOPPNN]一、内核参数的传递U-Boot向Linux驱动传递参数的方式有两种,一为在系统启动的时候由bootloader传入,还有一种是将驱动编译成模块,将参数作为模块加载的参数传入。

内核通过setup接口接受Bootloader传入的参数。

方式如下:staticint__initparam_mac_setup(char*str){……}__setup(“mac=”,param_mac_setup);这样,当在Bootloader中指定“mac=00:2E:79:38:6D:4E”,系统在加载这个模块的时候,就会执行相应的param_mac_setup()函数,而传入给它的参数就是等号后面的物理地址“00:2E:79:38:6D:4E”。

这样,该函数就可以对它进行相应的处理。

在U-Boot中,默认设置mac地址的参数为ethaddr,我们可以用过setenvethaddrMac地址来设置开发板的mac地址。

二、bootm传递参数的方式在bootm执行的流程图中,可以看到会调用do_bootm_linux()在执行Linux内核,内核的起始地址如下:void(*theKernel)(intzero,intarch,uintparams);image_header_t*hdr=&header;theKernel=(void(*)(int,int,uint))ntohl(hdr->ih_ep);header是uImage的头部,通过头部,得到内核映像起始的执行地址,标识为theKernel。

从中也可以看到,内核接受三个参数,第一个为0,第二个为系统的ID号,第三个是传入内核的参数。

在do_bootm_linux()的最后,会跳到内核去执行:theKernel(0,bd->bi_arch_number,bd->bi_boot_params);最后两个参数在board/smdk2410/smdk2410.c的board_init()中被初始化:/*archnumberofSMDK2410-Board*/gd->bd->bi_arch_number=MACH_TYPE_SMDK2410;/*193*//*adressofbootparameters*/可以看到,U-Boot传给内核的参数表存放在内存中起始偏移0×100的位置,这里只是指定了“指针”的位置,但还没初始化其中的值,这是在do_bootm_linux()中跳到内核前去完成的。

uboot分析之bootm

uboot分析之bootm

uboot分析之bootmbootm命令执⾏过程中调⽤了bootm_start函数,这个函数⽐较重要,所以先分析它。

mon/cmd_bootm.cCpp代码1. static int bootm_start(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])2. {3. void *os_hdr;4. int ret;5. memset ((void *)&images, 0, sizeof (images));//images是⼀个bootm_headers_t类型的全局变量。

见下⾯的分析。

6. images.verify = getenv_yesno ("verify");//从环境变量中检查是否要对镜像的数据(不是镜像头)进⾏校验。

7. bootm_start_lmb();//不做任何有意义的⼯作,除了定义# define lmb_reserve(lmb, base, size)8. /* get kernel image header, start address and length */寻找可⽤的内核镜像,见下⾯的分析。

主要根据传⼊的参数检查镜像的合法性并获取信息。

9. os_hdr = boot_get_kernel (cmdtp, flag, argc, argv,10. &images, &images.os.image_start, &images.os.image_len);//返回指向内存中镜像头的指针11. if (images.os.image_len == 0) {12. puts ("ERROR: can't get kernel image!\n");13. return 1;14. }15. /* get image parameters */16. switch (genimg_get_format (os_hdr)) {//根据镜像魔数获取镜像类型17. case IMAGE_FORMAT_LEGACY:18. images.os.type = image_get_type (os_hdr);//镜像类型19. p = image_get_comp (os_hdr);//压缩类型20. images.os.os = image_get_os (os_hdr);//操作系统类型21. images.os.end = image_get_image_end (os_hdr);//当前镜像的尾地址22. images.os.load = image_get_load (os_hdr);//镜像数据的载⼊地址23. break;24. default:25. puts ("ERROR: unknown image format type!\n");26. return 1;27. }28. /* find kernel entry point */29. if (images.legacy_hdr_valid) {//如果镜像已经通过验证30. images.ep = image_get_ep (&images.legacy_hdr_os_copy);//获取⼊⼝地址,填充images.ep 。

uboot 代码运行流程

uboot 代码运行流程

uboot 代码运行流程U-Boot代码运行流程U-Boot(Universal Bootloader)是一个开源的引导加载程序,广泛应用于嵌入式系统中。

它负责在系统上电后初始化硬件并加载操作系统内核,是系统启动的重要一环。

下面将从U-Boot代码的运行流程方面进行介绍。

1. 启动阶段当系统上电后,处理器会从预定义的存储器地址开始运行代码。

U-Boot的启动代码通常存放在ROM中,处理器会从ROM的起始地址开始执行。

启动代码负责初始化处理器和一些外设,然后跳转到U-Boot的入口点。

2. 入口点U-Boot的入口点是指U-Boot的main()函数。

在启动代码的最后,会调用main()函数,从而进入U-Boot的主循环。

U-Boot的主循环负责处理用户输入的命令,并根据命令执行相应的操作。

3. 硬件初始化在main()函数中,首先会进行硬件的初始化工作。

这包括初始化串口、初始化存储器控制器、初始化网络接口等。

硬件初始化的目的是为了确保系统能够正常运行,并为后续的操作做好准备。

4. 系统启动硬件初始化完成后,U-Boot会尝试从存储设备(如闪存、SD卡)中加载操作系统内核镜像。

U-Boot会根据预定义的启动命令(例如bootcmd)来确定从哪个设备加载内核镜像,并执行相应的加载操作。

加载完成后,U-Boot会将控制权交给操作系统内核,进入操作系统的启动阶段。

5. 用户交互一般情况下,U-Boot会在系统启动后进入命令行界面,等待用户输入命令。

用户可以通过串口、网络等方式与U-Boot进行交互,执行各种操作,例如烧写固件、修改配置等。

U-Boot提供了丰富的命令集,可以满足不同的需求。

6. 系统重启当用户输入重启命令或系统发生异常时,U-Boot会执行系统重启操作。

重启操作包括重新初始化硬件、重新加载内核镜像等步骤,以重新启动系统。

U-Boot会将控制权交给重新加载的内核,然后进入内核的启动流程。

总结:U-Boot代码的运行流程包括启动阶段、入口点、硬件初始化、系统启动、用户交互和系统重启等几个关键步骤。

UBOOT引导Linux内核及向内核传递参数的方式

UBOOT引导Linux内核及向内核传递参数的方式

UBOOT引导Linux内核及向内核传递参数的⽅式 ⼀直以来没有想过有什么好的办法通过寄存器向内核传递参数,直到今天读UBOOT的实现⽅式。

在UBOOT中,引导内核最常⽤的⽅法是bootm命令,bootm命令可以引导“UBOOT格式”的内核。

先花点时间了解⼀下什么是“UBOOT格式”的内核吧:⽤UBOOT⾃带的mkimage命令⽣成的内核称为"UBOOT"格式的内核。

以下⾯这条命令为例: mkimage -n "Kernel 2.4.18" -A arm -O linux -T kernel -C none -a30007fc0 -e 30008000 -d 4020.bin vmlinux-2.4.18.img 其中与内核引导最密切的是-e 30008000,也就是内核的⼊⼝地址。

其它参数可以参考帮助信息。

其它UBOOT格式的内核与原来相⽐,只是进⾏(可选)了压缩,并在前⾯加了⼀个0x40⼤⼩的头。

这个头⾥放了内核的位置(0x30007fc0)和⼊⼝地址(0x30008000)和其它信息。

bootm命令执⾏时,先对头部信息等进⾏校验,然后把头信息放到⼀个结构⾥⾯。

最后根据内核类型调⽤相应的启动函数。

对于Linux⽽⾔就是do_bootm_linux,在启动函数⾥⾯,有这么⼀个操作:theKernel = (void (*)(int, int, uint))ntohl(hdr->ih_ep);,这是最关键的⼀个操作,将内核的⼊⼝地址0x30008000赋给了theKernel,在启动函数的最后,使⽤theKernel (0, bd->bi_arch_number, bd->bi_boot_params);启动内核。

根据传参规范,三个变量分别⽤r0,r1,r2传给内核,这样就巧妙地利⽤了函数指针进⾏了参数传递,实在是精妙!上⾯讲完了内核的引导及传参,需要引起注意的就是在使⽤mkimage命令⽣成内核时,-e后⾯的地址要⽐-a后⾯的地址偏移0x40,原因很简单,就不在细说了。

Bootm的流程分析

Bootm的流程分析

Bootm的流程分析Bootm的流程分析一、在开始之前先说明一下bootm相关的东西。

1、首先说明一下,S3C2410架构下的bootm只对sdram中的内核镜像文件进行操作(好像AT91架构提供了一段从flash复制内核镜像的代码,不过针对s3c2410架构就没有这段代码,虽然可以在u-boot下添加这段代码,不过好像这个用处不大),所以请确保你的内核镜像下载到sdram中,或者在bootcmd下把flash中的内核镜像复制到sdram中。

2、-a参数后是内核的运行地址,-e参数后是入口地址。

3、1)如果我们没用mkimage对内核进行处理的话,那直接把内核下载到0x30008000再运行就行,内核会自解压运行(不过内核运行需要一个tag来传递参数,而这个tag建议是由bootloader提供的,在u-boot下默认是由bootm命令建立的)。

2)如果使用mkimage生成内核镜像文件的话,会在内核的前头加上了64byte 的信息,供建立tag之用。

bootm命令会首先判断bootm xxxx 这个指定的地址xxxx是否与-a指定的加载地址相同。

(1)如果不同的话会从这个地址开始提取出这个64byte的头部,对其进行分析,然后把去掉头部的内核复制到-a指定的load地址中去运行之(2)如果相同的话那就让其原封不同的放在那,但-e指定的入口地址会推后64byte,以跳过这64byte的头部。

bootm 用于加载并启动U-Boot 能辨识的操作系统映像,即bootm 加载的映像必须是用mkimage工具打过包的映像,bootm 不能启动直接的内核映像,因为bootm必须从映像的头获取映像的一些信息,比如操作系统的类型,映像是否压缩,映像的加载地址和压缩地址等。

更详细的映像头信息可以查看mkimage 工具的说明。

而bootm的详细用法可通过help bootm获得。

=> help bootmbootm [addr [arg ...]]- boot application image stored in memory passing arguments 'arg ...'; when booting a Linuxkernel, 'arg' can be the address of an initrd imageBootm 用于将内核映像加载到指定的地址,如果需要还要进行解压映像。

U-Boot命令命令命令命令

U-Boot命令命令命令命令

U-Boot命令命令命令命令U-Boot命令刘通平Homepage: /doc/fc2093964.html,/~tonyliu/U-Boot运行稳定后,可以用它的内部命令来查看目标系统的信息,设置环境变量等。

U-Boot 在硬件初始化完成后将进入main_loop()函数,main_loop()函数将进入一个无限循环,当用户输入命令后,首先将调用run_command()函数进行处理。

在run_command()函数中,将调用find_cmd()函数把用户从终端输入的命令进行比较,当find_cmd()返回值不为0时证明系统支持用户输入的命令,在对命令进行检验后最后将调用命令处理函数。

find_cmd()函数将从系统默认的命令表中查询一个匹配的命令,查看源代码发现,find_cmd()将把__u_boot_cmd_start开始到__u_boot_cmd_end结束的所有命令一一和用户输入的命令进行比较。

而关于__u_boot_cmd_start和__u_boot_cmd_end的定义是在板级相关的链接文件中定义的,比如对于fads的板子,在board/fads/u-boot.lds中有以下定义:__u_boot_cmd_start = .;.u_boot_cmd : { *(.u_boot_cmd) }__u_boot_cmd_end = .;从以上定义可知,.u_boot_cmd是真正的命令部分,而.u_boot_cmd的定义在command.h中,#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \ cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage}因此,即U_BOOT_CMD可以把一个命令加入到全局的命令表中,查询U_BOOT_CMD可知,common目录下的所有cmd_***文件和command.c文件都包含有U_BOOT_CMD宏定义。

使用uboot去挂载根文件系统(优推内容)

使用uboot去挂载根文件系统(优推内容)

1、根文件系统的制作1)创建根文件系统主目录:mkdir rootfs2)创建根文件系统的子目录cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录mkdir usr/bin usr/lib usr/sbin lib/modules4)创建设备文件内核在引导时设备节点console,null必须存在cd dev/注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1mknod -m 666 null c 1 3c:表明类型为字符设备第一个数字(5,1):主设备号第二个数字(1,3):次设备号这两个设备文件设备号是固定的5)安装etcetc目录主要是一些启动时的脚本文件一般不需要修改tar etc.tar.gz –C /xxx/rootfs这个命令可能不给用改为:tar xvzf etc.tar.gz –C /xxx/rootfs6)编译内核模块内核模块保存在lib下面的module下配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住进入Linux内核目录(linux-2.6.32.2)make modules ARCH=arm CROSS_COMPILE=arm-linux-添加了ARCH=arm表示现在编译的是arm架构的内核CROSS_COMPILE=arm-linux-表示使用交叉编译工具链安装内核模块到根文件系统:make modules_install ARCH=armINSTALL_MOD_PATH=/xxx/rootfs7)配置busybox因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。

Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

U-BOOT下使用bootm引导内核方法注:u-boot使用的是打上:/cgi-bin/topic.cgi?forum=3&topic=651&show=0上keety大侠提供的补丁生成的u-boot-1.1.3这段时间不断有人问我u-boot启动内核的问题,记得在上次提供的u-boot源码中提到了go的方案,不过其实u-boot本来有一种更好的方案:bootm花了不少时间,查看了论坛上不少的帖子,认真阅读了bootm的源码,终于使用bootm把内核给跑起来了,现把解决方法介绍如下:一、在开始之前先说明一下bootm相关的东西。

1、首先说明一下,S3C2410架构下的bootm只对sdram中的内核镜像文件进行操作(好像AT91架构提供了一段从flash复制内核镜像的代码,不过针对s3c2410架构就没有这段代码,虽然可以在u-boot下添加这段代码,不过好像这个用处不大),所以请确保你的内核镜像下载到sdram中,或者在bootcmd下把flash中的内核镜像复制到sdram中。

2、-a参数后是内核的运行地址,-e参数后是入口地址。

3、1)如果我们没用mkimage对内核进行处理的话,那直接把内核下载到0x30008000再运行就行,内核会自解压运行(不过内核运行需要一个tag来传递参数,而这个tag建议是由bootloader提供的,在u-boot下默认是由bootm命令建立的)。

2)如果使用mkimage生成内核镜像文件的话,会在内核的前头加上了64byte的信息,供建立tag之用。

bootm命令会首先判断bootm xxxx 这个指定的地址xxxx是否与-a指定的加载地址相同。

(1)如果不同的话会从这个地址开始提取出这个64byte的头部,对其进行分析,然后把去掉头部的内核复制到-a指定的load地址中去运行之(2)如果相同的话那就让其原封不同的放在那,但-e指定的入口地址会推后64byte,以跳过这64byte的头部。

二、好,接着介绍使用mkimage生成镜像文件并下载运行的方法。

方法一、1、首先,用u-boot/tools/mkimage这个工具为你的内核加上u-boot引导所需要的文件头,具体做法如下:[root@localhost tftpboot]#mkimage -n 'linux-2.6.14' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage zImage.img Image Name: linux-2.6.14Created: Fri Jan 12 17:14:50 2007Image Type: ARM Linux Kernel Image (uncompressed)Data Size: 1262504 Bytes = 1232.91 kB = 1.20 MBLoad Address: 0x30008000Entry Point: 0x30008000这里解释一下参数的意义:-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)-n ==> set image name to 'name'-d ==> use image data from 'datafile'-x ==> set XIP (execute in place)2、下载内核U-Boot 1.1.3 (Jan 12 2007 - 16:16:36)U-Boot code: 33F80000 -> 33F9BAC0 BSS: -> 33F9FBACRAM Configuration:Bank #0: 30000000 64 MBNor Flash: 512 kBNand Flash: 64 MBIn: serialOut: serialErr: serialHit any key to stop autoboot: 0sbc2410=>tftp 0x31000000 zImage.imgTFTP from server 192.168.1.115; our IP address is 192.168.1.128 Filename 'zImage.img'.Load address: 0x31000000Loading:############################################################################################################################## ################################################################# ########################################################doneBytes transferred = 1263324 (1346dc hex)3.运行sbc2410=>bootm 0x31000000## Booting image at 31000000 ...Image Name: linun-2.6.14Image Type: ARM Linux Kernel Image (uncompressed)Data Size: 1263260 Bytes = 1.2 MBLoad Address: 30008000Entry Point: 30008000Verifying Checksum ... OKOKStarting kernel ...Uncompressing Linux.............................................................Linux version 2.6.14 (root@luofuchong) (gcc version 3.4.1) #21 Fri Oct 20 17:206CPU: ARM920Tid(wb) [41129200] revision 0 (ARMv4T)Machine: SMDK2410Memory policy: ECC disabled, Data cache writebackCPU S3C2410A (id 0x32410002)S3C2410: core 202.800 MHz, memory 101.400 MHz, peripheral 50.700 MHz S3C2410 Clocks, (c) 2004 Simtec ElectronicsCLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL onUSB Control, (c) 2006 sbc2410CPU0: D VIVT write-back cacheCPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 setsCPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 setsBuilt 1 zonelistsKernel command line: console=ttySAC0 root=/dev/nfsnfsroot=192.168.1.115:/frien"irq: clearing subpending status 00000002PID hash table entries: 512 (order: 9, 8192 bytes)timer tcon=00500000, tcnt a509, tcfg 00000200,00000000, usec 00001e4cConsole: colour dummy device 80x30Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) Memory: 64MB = 64MB totalMemory: 62208KB available (1924K code, 529K data, 108K init) Mount-cache hash table entries: 512CPU: Testing write buffer coherency: oksoftlockup thread 0 started up.NET: Registered protocol family 16S3C2410: Initialising architectureSCSI subsystem initializedusbcore: registered new driver usbfsusbcore: registered new driver hubS3C2410 DMA Driver, (c) 2003-2004 Simtec ElectronicsDMA channel 0 at c4800000, irq 33DMA channel 1 at c4800040, irq 34DMA channel 2 at c4800080, irq 35DMA channel 3 at c48000c0, irq 36NetWinder Floating Point Emulator V0.97 (double precision) devfs: 2004-01-31 Richard Gooch (rgooch@atnf.csiro.au) devfs: devfs_debug: 0x0devfs: boot_options: 0x1yaffs Oct 18 2006 12:39:51 Installing.Console: switching to colour frame buffer device 30x40fb0: s3c2410fb frame buffer devicefb1: Virtual frame buffer device, using 1024K of video memory led driver initializeds3c2410 buttons successfully loadeds3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a S3C2410 s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a S3C2410s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2410io scheduler noop registeredio scheduler anticipatory registeredio scheduler deadline registeredio scheduler cfq registeredRAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize usbcore: registered new driver ubCirrus Logic CS8900A driver for Linux (Modified for SMDK2410)eth0: CS8900A rev E at 0xe0000300 irq=53, no eeprom , addr: 08: 0:3E:26:0A:5B S3C24XX NAND Driver, (c) 2004 Simtec Electronicss3c2410-nand: mapped registers at c4980000s3c2410-nand: timing: Tacls 10ns, Twrph0 30ns, Twrph1 10nsNAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bi)Scanning device for bad blocksBad eraseblock 1884 at 0x01d70000Creating 4 MTD partitions on "NAND 64MiB 3,3V 8-bit":0x00000000-0x00020000 : "vivi"0x00020000-0x00030000 : "param"0x00030000-0x00200000 : "kernel"0x00200000-0x04000000 : "root"usbmon: debugfs is not availables3c2410-ohci s3c2410-ohci: S3C24XX OHCIs3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000hub 1-0:1.0: USB hub foundhub 1-0:1.0: 2 ports detectedInitializing USB Mass Storage driver...usbcore: registered new driver usb-storageUSB Mass Storage support registered.usbcore: registered new driver usbmousedrivers/usb/input/usbmouse.c: v1.6:USB HID Boot Protocol mouse driver mice: PS/2 mouse device common for all mices3c2410 TouchScreen successfully loadedUDA1341 audio driver initializedNET: Registered protocol family 2IP route cache hash table entries: 1024 (order: 0, 4096 bytes)TCP established hash table entries: 4096 (order: 2, 16384 bytes)TCP bind hash table entries: 4096 (order: 2, 16384 bytes)TCP: Hash tables configured (established 4096 bind 4096)TCP reno registeredTCP bic registeredNET: Registered protocol family 1IP-Config: Complete:device=eth0, addr=192.168.1.128, mask=255.255.255.0, gw=192.168.1.1, host=luofuchong, domain=, nis-domain=(none),bootserver=192.168.1.1, rootserver=192.168.1.115, rootpath=Looking up port of RPC 100003/2 on 192.168.1.115Looking up port of RPC 100005/1 on 192.168.1.115VFS: Mounted root (nfs filesystem).Mounted devfs on /devFreeing init memory: 108Kinit started: BusyBox v1.1.3 (2006.09.20-14:52+0000) multi-call binary Starting pid 696, console /dev/tts/0: '/etc/init.d/rcS'Please press Enter to activate this console.方法二、1、首先,用u-boot/tools/mkimage这个工具为你的内核加上u-boot引导所需要的文件头,具体做法如下:[root@localhost tftpboot]#mkimage -n 'linux-2.6.14' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage zImage.img Image Name: linux-2.6.14Created: Fri Jan 12 17:14:50 2007Image Type: ARM Linux Kernel Image (uncompressed)Data Size: 1262504 Bytes = 1232.91 kB = 1.20 MBLoad Address: 0x30008000Entry Point: 0x300080402、下载内核U-Boot 1.1.3 (Jan 12 2007 - 16:16:36)U-Boot code: 33F80000 -> 33F9BAC0 BSS: -> 33F9FBACRAM Configuration:Bank #0: 30000000 64 MBNor Flash: 512 kBNand Flash: 64 MBIn: serialOut: serialErr: serialHit any key to stop autoboot: 0sbc2410=>tftp 0x30008000 zImage.imgTFTP from server 192.168.1.115; our IP address is 192.168.1.128 Filename 'zImage.img'.Load address: 0x30008000Loading:############################################################################################################################## ############################################################doneBytes transferred = 1263324 (1346dc hex)3.运行sbc2410=>bootm 0x30008000## Booting image at 30008000 ...Image Name: linux-2.6.14Image Type: ARM Linux Kernel Image (uncompressed)Data Size: 1261056 Bytes = 1.2 MBLoad Address: 30008000Entry Point: 30008040Verifying Checksum ... OKXIP Kernel Image ... OK内核启动信息省。

相关文档
最新文档