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 ...
随机推荐
- 利用微信小程序实现web监控界面
1.实现思路 利用小程序去调用公司zabbix的接口获取网站监控数据并展示出来. 2.准备阶段 1.小程序公众号 2.企业号 3.zabbix接口 3.实现过程
- <转载> Jquery的使用技巧-实用!
1.使用方法在需要使用JQuery的页面中引入JQuery的js文件即可.例如:<script type="text/javascript" src="js/jqu ...
- 深入PHP内核 SAPI探究
转自 http://www.csdn.net/article/2014-09-26/2821885-exploring-of-the-php-2 SAPI是Server Application Pro ...
- keras常用的网络层
一.常用层 常用层对应于core模块,core内部定义了一系列常用的网络层,包括全连接.激活层等. 1.Dense层 Dense层:全连接层. keras.layers.core.Dense(outp ...
- I - Doing Homework again(贪心)
I - Doing Homework again Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- EasyNVR对接EasyCloud视频云平台进行云端录像
EasyCloud视频云平台是一套能够接入各种类型流,进行统一的设备管理.直播.录像.回放的视频平台,同时,EasyCloud视频云平台集成了云端运维功能,在云端就可以直接维护和控制各个现场的软件运行 ...
- 阻塞(sleep等等)区别 中断(interrupt)+ 中断的意义
不客气地说,至少有一半人认为,线程的"中断"就是让线程停止.如果你也这么认为,那你对多线程编程还没有入门. 在java中,线程的中断(interrupt)只是改变了线程的中断状态, ...
- Linux 下安装svn
安装步骤如下: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下图: 我们知道svn在bin目录下生成了几个二进制文件. 输入 ...
- 使用 mock 测试
参考文章:https://semaphoreci.com/community/tutorials/getting-started-with-mocking-in-python What are the ...
- 相似度模型 similarity model
Lucene4.0附加了相似度模型,允许在文档中使用不同的公式.