嵌入式系统烧写uboot/bootloader/kernel的一般方法

本文介绍了在嵌入式系统中烧写uboot/bootloader/kernel 的一般方法,以及如果uboot或者内核出现错误,  www.2cto.com

引导失败等情况时如何重新烧写uboot/kernel.

烧写uboot/kernel的方式一般有两种,一种是在linux本身(shell中),直接将uboot/kernel的影像文件(二进制文件)使用操作烧写flash的命令烧写到flash特定分区上,

另一种是在uboot界面上,通过配置serverip,ipaddr,使用tftp命令下载uboot/kernel到flash上

例子如下:

//一,在linux的shell中烧写uboot/kernel

mtd write命令是自定义的烧写flash命令。

//烧写uboot ,/dev/mtd0 是bootloader 的特定分区

mtd write u-boot.bin /dev/mtd0

//烧写kernel, mtd1 是kernel的特定分区

mtd write vmlinux.elf /dev/mtd1

//重启

reboot

//二,在uboot界面中烧写uboot/kernel,以kernel为例子

//在bootloader 界面中

//本机uboot 的ip地址

setenv ipaddr 10.10.167.10

//服务器ip地址

setenv serverip 10.10.167.249

//下载linux内核vmlinux52

tftpboot 0 vmlinux52

// 烧写到flash 上。

// 0x20000000 是vmlinux52的存贮位置。

// 0x1dd00000 是系统内核的起始位置(每个设备位置不同),

// +0x600000是文件长度

upgrade 0x20000000 0x1dd00000 +0x600000

// 重启linux

bootoctliux

*************************************** **

如果因为uboot或者内核有错误而导致启动失败,出现卡死状态等,那么需要判断问题是出在uboot阶段还是linux阶段,这可以通过观察启动过程中的debug信息来判断,

如果uboot出现问题是比较麻烦的,因为这需要有一个装有正确的uboot/bootloader的flash芯片作为引导,

将系统重新引导至uboot界面中,之后再重新烧写uboot到系统本身的flash中,进而烧写内核(如有必要)。

一,重新烧写uboot

首先需要一个特定的PCLL(flash芯片),这个PCLL上固化了一个正确的bootloader, 通过这个bootloader可以成功进入bootloader界面, 在此条件下重新烧写uboot/bootloader。

使用此PLCC的步骤是:

在系统下电情况下, 使用跳线/拨码开关等将此系统的启动方式变从外部flash(即PLCC)引导,

之后将系统上电, 这时会从PLCC 启动。

启动成功后,进入uboot界面,  即命令行显示Dream 5220# #(类似命令行提示符)

此时将版卡的启动方式变为 从 nor flash 启动。  之后重新烧写uboot到此nor flash 上。

再用 kermit  来操作。

Kermit是一个串口服务工具,类似与minicom ,功能比minicom 多。

//kermit/usb0.cfg  是kermit 的配置文件, 在其中可以配置 /dev/ttyUSB0 等路径

kermit -y kermit/usb0.cfg

-y kermit/usb0.cfg   指定配置文件。

该文件内容如下:

/*

set line /dev/ttyUSB0

set speed 115200

set carrier-watch off

set hardshake none

set flow-control none

robust

set file type bin

set file name lit

set rec pack 1000

set send pack 1000

set window 5

*/

将此文件保存在主目录下, 命名为:kermit/usb0.cfg(可自定义)

执行后进入kermit 界面, 按 c

进入 串口界面(就是设备的界面)

切换回kermit 界面快捷键:Ctrl + \  , 之后再按 c  。

执行:

Dream 5220# # detect

显示:

Checking for NOR flash...

Flash detect 33554432Mb

这说明flash状态良好。

//让串口进入接受状态。

Dream 5220# # loadb

进入kermit 界面: ctrl + \  按 c

执行:

send  uboot.bin

就是将当前目录下的uboot.bin 文件发送给串口。

完成后,进入串口界面。

执行:

Dream 5220# # upgrade 0x20000000 0x1dc00000 +0xe0000

0x20000000 是 kermit 执行 send  后 将文件send 到的默认地址。

再将文件写到nor flash 的首地址:0x1dc00000  +0xe0000为写的长度。

执行:reset。让系统重启。

/*

至此,新的uboot烧写完成,reset后, 如果还是不成功的话,那么问题肯定出在linux的的启动阶段或者新的uboot还是有问题,这可以通过启动过程中的debug信息看出来

一,如果内核有问题,导致linux没有进入shell界面,要重新进入Uboot环境,就是在reset 之后,一直按 ctrl + c  ,这样在uboot启动完成后, 不会进入kernel的启动阶段,而是停留在uboot的命令行中,

在这个uboot 环境下,烧写新内核, 配置ipaddr,serverip等,同最开始的例子中操作是一样的。

//本机uboot 的ip地址

setenv ipaddr 10.10.167.10

//服务器ip地址

setenv serverip 10.10.167.249

//下载linux内核vmlinux52

// 在服务器的tftpboot目录下存在相应文件,搭建到tftp服务环境

tftpboot 0 vmlinux52

// 烧写到flash 上。

// 0x20000000 是vmlinux52的存贮位置。

// 0x1dd00000 是系统内核的起始位置(每个设备位置不同),

// +0x600000是文件长度

upgrade 0x20000000 0x1dd00000 +0x600000

在reset 之前,一般还要设置一下环境变量。

比如

setenv linux_args mtdparts=octeon_nor0:1m(BOOT),7m(LINUX),21m(CONFIG),3m(MD)

setenv bootcmd ‘bootoctlinux 0x1dd00000 coremask=0x3 mem=700‘

//保存

saveenv

bootoctliux

二 ,如果新烧写的uboot本身有问题,那么修改uboot代码,编译通过后, 使用PLCC重复上述烧写过程。

时间: 2024-10-06 00:07:14

嵌入式系统烧写uboot/bootloader/kernel的一般方法的相关文章

驱动开发读书笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统

驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflash或者nandflash:只好用另一块arm9(i.mx283a)来继续学习: 从开发教程上面可知,烧写uboot和Linux是通过各种批处理脚本和exe程序来执行的,称之为固件烧写,然而并没有需要我们选择uboot路径.Linux内核和文件系统的地方.这样的话是不是意味着只能烧写官方默认提供的文件

EASYARM-IMX283 烧写uboot和linux系统

新入手一台EASYARM-IMX283开发板(以下简称IMX823),价格比较便宜,配置也不错. 开发板默认安装了WINCE,我还是决定重新烧写uboot和linux内核. 开发板配套光盘里面有不少烧写工具,其中大部分都是windows平台下的工具,所以我选择从windows平台下执行烧写 . 参考光盘内的<EasyARM-iMX283 Linux开发指南 V1.03>(以下简称<IMX283开发指南>)烧写uboot和linux内核. 因为以前安装了WINCE,根据<<

友善之臂tiny4412-1306开发板安卓系统烧写

折腾了很久,终于烧写成功.不废话,咱们说说流程吧. 首先,我们需要有一个基于tiny4412的kernel,从友善之臂官网获取. 然后解压: 1.tar -xvf  linux-3.5 .... 然后cp  tiny4412-android_deconfig  .config 接下来make zImage 在 arch/arm/boot/生成对应的zImage ,这个也就是我们的kernrl. 当然在此之前,我们需要安装交叉编译工具arm-linux-gcc.没有的话就装上这个环境,arm-li

Linux学习之路2-linux系统烧写

fastboot烧写方式 准备工作: 硬件– 串口线连接开发板串口con3到PC的串口– OTG线连接开发板的OTG接口和PC的USB接口软件– 串口工具(超级终端),默认波特率为115200– 烧写工具“USB_fastboot_tool”工具– PC机安装USB驱动(Android adb驱动) 镜像组合– Uboot 镜像“u-boot-iTOP-4412.bin”– 内核镜像“zImage”– 文件系统“ramdisk-uboot.img”和“system.img “步骤: • 拷贝前面

用uboot 烧写uboot linux内核 文件系统到nandflash的 过程以及bootm go命令启动与区别

原文:http://blog.sina.com.cn/s/blog_6b94d5680100nd48.html 文章结构结构顺序有变化-1:烧写uboot0: bootargs bootcmd 命令参数的设置1:制作yaffs2的过程2:烧写yaffs2的过程3:制作uimage 的过程4: 烧写uiamge的过程5:uimage zimage vmlinux 的区别6: uboot传递给内核的参数结构 tag7:bootm go 的 启动过程 以及区别8:加载地址 入口地址 等 ///////

如何利用JLINK烧写U-boot到NAND Flash中

原文:http://blog.csdn.net/yanghao23/article/details/7689534  很多同学使用笔记本作为自己的ARM开发和学习的平台,绝大多数笔记本都没有并口,也就是无法使用JTag调试和烧写程序到Nand Flash中,幸好我们还有JLINK,用JLINK烧写U-boot到Nor Flash中很简单,大部分NOR Flash都已经被JLink的软件SEGGER所支持,而新手在学习的时候经常会实验各种各样的命令,最悲剧的莫过于将NAND Flash中原有的bo

通过NORFLASH中的uboot烧写uboot到nandFlash

在mini2440的教程中,在构建nandflash系统的时候是首先通过supervivi借助dnw烧写uboot.bin到nand flash 第零块, 由于我使用的是64位操作系统,usb驱动没安装成功,就尝试了其他方法烧写uboot.bin到nandflash,尝试了N多种方法都失败了, 静下心来一想,既然NORFLASh中的uboot可以启动,为什么不直接通过uboot烧写呢,于是就试了一下,UBOOT下用tftp下载到内存,然后用nand write 指令烧写,成功了

debian下使用ft232为stm32f429i-discovery烧写uboot和uImage

操作系统:debian 软件: openocd  minicom 硬件:  MiniUSB线.stm32f429i-discovery, WaveShare FT232串口模块(可以在淘宝上买到) 关于openocd的配置可以参看我的博文: <debian下烧写stm32f429I discovery裸机程序> u-boot源码下载: git clone https://github.com/EmcraftSystems/u-boot.git linux源码下载: git clone http

6410开发板sd卡启动时烧写u-boot.bin以及u-boot-spl-16k.bin步骤

参考文档:<SMDK6410_IROM_APPLICATION NOTE_REV 1.00>(可以从这里下载到> 参考博客:Tekkaman的博文<u-boot-2010.09 for mini6410 (add MMC support)> <Tiny6410_SMDK从SD卡直接启动裸板代码> <使uboot支持S3C6410的SD启动> <S3C6410开发全纪录(一)<还原SD卡启动的真相>> sd卡启动布局方式(假定一个