uboot无法引导uImage错误及其解决方法
先编译友善提供的linux内核:
make ARCH=arm mini2440_defconfig
make CROSS_COMPILE=arm-linux- uImage
在arch/arm/boot/uImage 生成uImage
在使用《mini2440移植uboot 2014.04(六)》中移植的uboot来加载刚才编译的uImage,拷贝到tftp文件夹,重启tftp服务器:
tftp uImage
bootm
此时内核无法加载,在显示下面的信息后就不再显示其他内容。
Starting kernel ...
这是因为uImage实际上是在zImage前添加了64个字节的文件头,可以用mkimage工具查看uImage的文件头信息:
$ mkimage -l arch/arm/boot/uImage
Image Name: Linux-2.6.32.2-FriendlyARM
Created: Thu Jul 3 10:05:23 2014
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2275212 Bytes = 2221.89 kB = 2.17 MB
Load Address: 30008000
Entry Point: 30008000
其中有两个重要的地址,一个是加载地址(Load Address),另一个是入口地址(Entry Point).
加载地址是uboot在加载内核时的存放地址,入口地址是内核代码的开始执行地址。
在使用前面的uboot加载uImage时,把uImage加载到加载地址(0x30008000)处,然后就在入口地址(0x30008000)处开始执行,而实际的代码执行地址是0x30008040(入口地址+文件头长度)。
所以无法启动uImage.
以前我在《mini2440移植uboot 2011.03(上)》和《mini2440移植uboot 2014.04(四)》中执行下面的命令才正常加载内核:
# tftp 30007fc0 uImage
# bootm
但是这种方法看起来会让人觉得有点怪,有种违和感。
其实也可以直接将uImage中的加载地址修改为0x30008040就也能正常加载内核,只需要修改内核源码文件arch/arm/boot/Makefile即可:
删除一行:
$(obj)/uImage: STARTADDR=$(LOADADDR)
在删除行后面添加一行:
$(obj)/uImage: STARTADDR=$(shell echo $(LOADADDR) | sed -e "s/..$$/40/")
此行内容用于将30008000最后两位替换成40,即30008040,正好和我们的要求相符合。
修改后重新编译uImage,并加载,可以正常启动内核了。
此时执行mkimage查看uimage,如下所示:
$ mkimage -l arch/arm/boot/uImage
Image Name: Linux-2.6.32.2-FriendlyARM
Created: Thu Jul ::
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: Bytes = 2221.89 kB = 2.17 MB
Load Address:
Entry Point:
uboot无法引导uImage错误及其解决方法的更多相关文章
- Eclipse启动时发生An internal error occurred during: "Initializing Java Tooling".错误的解决方法
问题描述: Eclipse启动时发生An internal error occurred during: "Initializing JavaTooling".错误的解决方法 解决 ...
- GCC-4.6.3编译linux2.6.32.12内核出现“重复的成员‘page’”错误的解决方法
使用gcc4.6.3编译linux2.6.32.12内核出现错误如下: In file included from drivers/net/igbvf/ethtool.c:36:0: drivers/ ...
- Linux系统Vsftp 传文件出现 553 Could Not Create File错误的解决方法
解决方法: 登录出现了这个错误提示:553 Could not create file SELinux设置如下 查看SELinux设置 [root@localhost ~]# getsebool -a ...
- [转]权限问题导致Nginx 403 Forbidden错误的解决方法
权限问题导致Nginx 403 Forbidden错误的解决方法 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-08-22 这篇文章主要介绍了权限问题导致Nginx 403 F ...
- ueditor上传大容量视频报http请求错误的解决方法
故障现象: 当使用百度编辑器ueditor上传大容量视频或大容量图片的时候,编辑器报"http请求错误"的解决方法详解: 原因分析: 目前很多CMS整合了百度的ueditor编辑器 ...
- window10 安装出现the error code is 2503错误的解决方法
window10 安装出现the error code is 2503错误的解决方法: 设置 C:\WINDOWS\TEMP的权限
- MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法
MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法 分类: javaweb2013-06-03 14:4 ...
- Jquery中使用setInterval和setTimeout会提示缺少对象的错误,解决方法如下:
直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下: 方法1. 应用jQuery的扩展可以解决这个问题. $(document).ready(function(){ $.extend( ...
- ASP.NET MVC 3 loginUrl自动变成Account/Login,并且发生404错误的解决方法
http://www.cnblogs.com/think8848/archive/2011/07/08/2100814.html ASP.NET MVC 3 loginUrl自动变成Account/L ...
随机推荐
- eclipse 遇关键字enum编译问题解决
今天公司系统升级 JDK1.4 到 JDK1.5, 结果工程在eclipse中编译不能通过: Enumeration enum = ………… 但是eclipse报错: Multiple markers ...
- Chai.js断言库API中文文档【转载】
基于chai.js官方API文档翻译.仅列出BDD风格的expect/should API.TDD风格的Assert API由于不打算使用,暂时不放,后续可能会更新. BDD expect和shoul ...
- Handler机制原理
andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Loo ...
- Nginx nginx.conf配置文件详细说明
在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络. #运行用户user www-data; #启动进程,通常设置成和cpu的数量相等worker_process ...
- 前端基础------JS
JS中的语句要以分号 ; 为结束符. JS语言基础: 1, JS 的变量名可以使用 下划线, 数字, 字母, $ 组成. 不可以是数字开头 2, 声明变量使用var 变量名. 的格式来进行声明. v ...
- JS HTML DOM---Document对象
Document 对象 当浏览器载入 HTML 文档, 它就会成为 document 对象. document 对象是HTML文档的根节点与所有其他节点(元素节点,文本节点,属性节点, 注释节点). ...
- Token bucket
w https://en.wikipedia.org/wiki/Token_bucket
- 插叙LTE
- JS获取短信验证码60秒
<script language="javascript"> function get_mobile_code(){ $.post("{{ ...
- Linux中的awk命令
awk '条件1{动作1} 条件2{动作2} ...' 文件名 条件: BEGIN 在处理文件里的第一行数据之前执行 END 在处理完文件里的最后一行数据 ...