嵌入式系统烧写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重复上述烧写过程。
- 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统
驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...
- EASYARM-IMX283 烧写uboot和linux系统
新入手一台EASYARM-IMX283开发板(以下简称IMX823),价格比较便宜,配置也不错. 开发板默认安装了WINCE,我还是决定重新烧写uboot和linux内核. 开发板配套光盘里面有不少烧 ...
- 友善之臂tiny4412-1306开发板安卓系统烧写
折腾了很久,终于烧写成功.不废话,咱们说说流程吧. 首先,我们需要有一个基于tiny4412的kernel,从友善之臂官网获取. 然后解压: 1.tar -xvf linux-3.5 .... 然后 ...
- Linux学习之路2-linux系统烧写
fastboot烧写方式 准备工作: 硬件– 串口线连接开发板串口con3到PC的串口– OTG线连接开发板的OTG接口和PC的USB接口软件– 串口工具(超级终端),默认波特率为115200– 烧写 ...
- 通过NORFLASH中的uboot烧写uboot到nandFlash
在mini2440的教程中,在构建nandflash系统的时候是首先通过supervivi借助dnw烧写uboot.bin到nand flash 第零块, 由于我使用的是64位操作系统,usb驱动没安 ...
- Jlink 烧写Uboot
第一章 Hi3531_SDK_Vx.x.x.x版本升级操作说明 如果您是首次安装本SDK,请直接参看第2章. 第二章首次安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100 ...
- Tiny4412 烧写uboot到emmc步骤
将uboot写入emmc,并通过EMMC驱动,不在只用SD卡启动 烧写uboot的之前用如下命令查看EMMC卡信息及分区信息: mmcinfo 0: 查看mmc卡信息, 0表示SD卡:1表示emmc卡 ...
- arm+linux 裸机环境搭建之初试minicom+dnw烧写uboot
下面的步骤将会实现在linux下面使用dnw+minicom来烧写uboot 一.安装minicom 下载地址:http://download.csdn.net/detail/king_bingge/ ...
- Tiny210编译和烧写u-boot步骤
当有多个交叉编译器是,不方便设置环境变量时,可以在编译命令中指定交叉编译器,具体如下: make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/ ...
随机推荐
- Big Data 應用:第二季(4~6月)台湾地区Game APP 变动分布趋势图
图表简介: 该示意图表示了台湾地区第二季内所有Game APP类别的分布情形,经由该图表我们可以快速的了解到在这三个月内,哪类型的APP是很稳定:抑或者哪类型的APP是非常不稳定的. 名词解释: 类别 ...
- Java SE (1)之 JFrame 组件 FlowLayout 布局
package com.sunzhiyan; import java.awt.*; import java.awt.event.*; import javax.swing.*; public clas ...
- 什么是WordPress?
(今天由于好友 肖知虎的 的需求 , 我开始了帮助小虎建站的需求, 就这样开始学习了Wordpress. 这些文章就是为了记录这些我在学习过程当中的心得,和记录下来的文字而已) 什么是WordPre ...
- js使用
js使用 HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 <head&g ...
- python文件操作汇总
1.创建文件 f = open(filename,'w+')
- 使用switch case语句来显示月份的对应天数
方法一:控制台输入月份 package com.liaojianya.chapter1; import java.util.Scanner; /** * This program demonstrat ...
- Lost connection to MySQL server at ‘reading initial communication packet', system error: 0 mysql远程连接问题
在用Navicat for MySQL远程连接mysql的时候,出现了 Lost connection to MySQL server at ‘reading initial communicatio ...
- Windows7 QT5.6.0(64位)使用mysql(64位)环境搭建详解
1 说明 使用环境为:Windows7 VS2015 QT5.6.0(64位),MYSQL 5.7.13(64位). 网上各种错误.模糊.抽象的资料,配置环境花了半天,痛定思痛,总结出来,方便后来人. ...
- 在js脚本里计算多个小数的加法问题
当在js脚本里计算多个小数的加法时,算得的结果往往会自动取整,这时候我们就应该加入以下代码: function toDecimal(x) { var val = Number(x); if (!isN ...
- php接口开发--复制缩减Codeigniter的车轮
接口需求: 输出json 单一入口 安全 http://segmentfault.com/q/1010000000143852基于token验证?session? 缓存 session cookie ...