首页
登录 | 注册

U-boot引导Linux-2.6.39.3内核问题(转)

作者:于连庆,华清远见嵌入式学院讲师。

u-boot引导Linux内核有两种方式,go命令或者bootm命令。go命令引导zImage格式的内核映像,默认方式下不向内核传递参数,需要我们修改,相应的修改也有两种选择。一种是用使用struct param_struct传递内核参数,另一种是以标记列表(tagged list)的形式来传递启动参数。第一种方式设置简单,Linux2.6继续支持该格式,未来是否继续支持有待考察。实践中,用struct param_struct方式引导Linux-2.6.35没问题,但在引导Linux-2.6.39.3时失败。提示以下信息:

Root-NFS: No NFS server available, giving up. 
        VFS: Unable to mount root fs via NFS, trying floppy.

怀疑是内核参数传递不正确。因此,尝试用bootm命令引导Linux-2.6.39.3。

bootm命令只能引导uImage格式的内核映像,用make uImage命令生成uImage格式的内核映像,用bootm命令引导Linux-2.6.39.3,但也不成功。经查,bootm命令默认方式也不向内核传递参数,需要在配置头文件(例如,include/configs/smdk2410.h)中定义以下两个宏:

#define CONFIG_SETUP_MEMORY_TAGS 1
        #define CONFIG_CMDLINE_TAG 1

重新编译生成u-boot.bin,烧写到开发板中并重启开发板,引导Linux-2.6.39.3仍不成功。

zImage格式的内核映像和uImage格式的内核映像文件头部分不同,后者多64个字节。注意到make uImage时的提示信息:

Load Address: 0x30108000
        Entry Point: 0x30108000

这两个地址一个是解压后的加载地址,一个是内核映像的执行入口地址,二者应该不同,有64(0x40)字节的偏移。

打开arch/arm/boot目录中的Makefile,找到$(obj)/uImage: STARTADDR=$(LOADADDR) 这一句,显然,直接把加载地址赋给了执行地址。修改如下:

$(obj)/uImage: STARTADDR=$(shell echo $(LOADADDR) | sed –e “s/..$$/40/”)

其中,sed –e “s/..$$/40/”的意思是把字符串的最后两个字节用40替换。

重新make uImage,提示信息为:

Load Address: 0x30108000
        Entry Point: 0x30108040

在开发板上重新引导内核:

# tftp 33000000 uImage
        # bootm 33000000

系统引导成功。

相关文章

  • dmesg此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.SUSE.openSUSE. 1dmesg [-c]  [-r]  [-n level]  [-s bufsize] 2选项 -c -r -s - ...
  • BCC – 用于Linux性能监视,网络和更多的动态跟踪工具
    BCC(BPF编译器集合 )是用于创建足智多谋内核跟踪和操作程序一套功能强大的适当的工具和示例文件. 它采用扩展BPF( Berkeley包过滤器 ),最初被称为eBPF这是在Linux的3.15的新功能之一. BCC / BPF – 用于 ...
  • 我服务器报错:环境 centos 6.3 _64bit  强氧服务器  less eth0.txt   May 19 03:33:01 media rsyslogd: [origin software="rsyslogd" ...
  • 注意,我并不会是百分之一百正确的.例如,一个系统很可能没有/proc文件系统支持,但是大多数系统肯定有.这里我假定你是"随大流的",并有一个典型配置的系统. 什么是符号(Symbols)? 内核符号表(Kernel Sy ...
  • GNU C 增加一个 __atttribute__ 关键字用来声明一个函数.变量或类型的特殊属性.声明这个特殊属性有什么用呢?主要用途就是指导编译器在编译程序时进行特定方面的优化或代码检查.比如,我们可以通过使用属性声明指定某个变量的数据边 ...
  • 我们的线上web服务器在访问量很大时,就会出现网络连接丢包的问题,通过dmesg命令查看日志,发现如下信息: kernel: ip_conntrack: table full, dropping packet. kernel: printk ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.013 s.
京ICP备10005923号