uboot无法引导uImage错误及其解决方法
2014-07-03 11:01
316 查看
先编译友善提供的linux内核:
在arch/arm/boot/uImage 生成uImage
在使用《mini2440移植uboot 2014.04(六)》中移植的uboot来加载刚才编译的uImage,拷贝到tftp文件夹,重启tftp服务器:
此时内核无法加载,在显示下面的信息后就不再显示其他内容。
这是因为uImage实际上是在zImage前添加了64个字节的文件头,可以用mkimage工具查看uImage的文件头信息:
其中有两个重要的地址,一个是加载地址(Load Address),另一个是入口地址(Entry Point).
加载地址是uboot在加载内核时的存放地址,入口地址是内核代码的开始执行地址。
在使用前面的uboot加载uImage时,把uImage加载到加载地址(0x30008000)处,然后就在入口地址(0x30008000)处开始执行,而实际的代码执行地址是0x30008040(入口地址+文件头长度)。
所以无法启动uImage.
以前我在《mini2440移植uboot 2011.03(上)》和《mini2440移植uboot 2014.04(四)》中执行下面的命令才正常加载内核:
但是这种方法看起来会让人觉得有点怪,有种违和感。
其实也可以直接将uImage中的加载地址修改为0x30008040就也能正常加载内核,只需要修改内核源码文件arch/arm/boot/Makefile即可:
此行内容用于将30008000最后两位替换成40,即30008040,正好和我们的要求相符合。
修改后重新编译uImage,并加载,可以正常启动内核了。
此时执行mkimage查看uimage,如下所示:
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 30008000 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 3 10:23:53 2014 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2275212 Bytes = 2221.89 kB = 2.17 MB Load Address: 30008000 Entry Point: 30008040
相关文章推荐
- SQL Server 1069 错误(由于登录失败而无法启动服务)解决方法 2006-6-8-2
- SQL Server 2000启动1069错误(由于登录失败而无法启动服务)解决方法
- Oracle OLE DB驱动无法安装,注册出现错误,解决方法!
- 无法向会话状态服务器发出会话状态请求 错误的解决方法
- 1069错误(由于登录失败而无法启动服务)解决方法
- SQL Server 2000启动1069错误(由于登录失败而无法启动服务)解决方法
- 分析器错误信息: 无法识别的属性“xmlns”的解决方法
- 【控件包含代码块,因此无法修改控件集合。】错误的解决方法
- deepin精简版XP中windows update出现错误0x8007041D以及live messenger等无法安装的解决方法
- “无法解决 equal to 操作的排序规则冲突。”的错误分析和解决方法
- iis无法启动,发生意外错误0x8ffe2740----解决方法
- 重装WIN2000 IIS5报500错误 asp无法访问解决方法
- 错误信息: 无法识别的配置节“connectionStrings”[解决方法]
- 最近ISA服务器出现无法打开网页(错误代码64错误)的解决方法
- vs2003无法打开或创建Web应用程序解决办法(HTTP/1.1 500server error错误处理方法)
- 1069错误(由于登录失败而无法启动服务)解决方法
- SQL Server 1069 错误(由于登录失败而无法启动服务)解决方法
- ASP.NET 无法向会话状态服务器发出会话状态请求 错误的解决方法
- MySQL服务无法启动【错误代码1067】的解决方法
- 错误14274:无法添加、更新或删除从msx服务器上发起的作业(或其步骤或调度)的解决方法