编译kernel是的no machine record defined 错误,网上有一些解法,其实都是错误的,以讹传讹。不打算自己写,找到一篇还算靠谱的,转摘一下。

其根本原因是没有在 __proc_info_end  与 __proc_info_begin 之间找到有效的machine ID。

http://hi.baidu.com/rwen2012/item/9f5191c64036d87ecfd4f849

在新的kernel 2.6.29 上编译不能通过,终端提示:

arm-none-linux-gnueabi-ld: no machine record defined

解决方法 
放狗搜后,按照如下方法可以解决。将arch/arm/kernel/vmlinux.lds的最后两行(如下),给注释起来,但都没说是为了什么

ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support") 
ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined")

自己到arch/arm/kernel/vmlinux.lds里看的时候,才发现那两行的上头写着

/* These must never be empty 
If you have to comment these two assert statements out, your binutils is too old (for other reasons as well) */ 
ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support") 
ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined")

我想可能不是我交叉编译器太旧的缘故,而是太新了! 
我用的是:Sourcery G++ Lite 2009q1-126 for ARM GNU/Linux 
而官方是:Sourcery G++ Lite 2008q1-126 for ARM GNU/Linux

机器ID错误: 
现在注释后可以正常编译内核了!替换新的内核文件,在boot后提示: 
uncompressing linux ................................................. 
然后再没有动静了,我想可能解压后给kernel传递参数时出现问题了吧。但是是什么参数可能出的问题就不晓得啦。

在这里困住了好久!因为这句话啥都没提示!好歹有句话啊。。。。。。。。

经过多方搜索,发现了一个调试技巧,嘿嘿嘿,一般人我不告诉他!那就是下面解决方法中提到的设置Kernel debugging,设置后,再重启启动内核就会出现详细的问题说明。

因为内核启动时首先进入SVC模式,关闭中断,并machine ID,如果uboot传输过来的 machine ID跟编译的内核machine ID不一致,那就就咯屁了。具体表现为:啥反应都没有!

解决方法: 
1)。执行make xconfig

在配置中进入Kernel hacking,打开Kernel debugging和Kernel low-level debugging functions.

选中这两项的目的是打印出调试信息,重新make uImage

Starting kernel ...

Uncompressing Linux........................................................................................... done, booting the kernel.

Error: unrecognized/unsupported machine ID (r1 = 0x000007d1).

Available machine support:

ID (hex) NAME

罓?0009

Please check your kernel config and/or bootloader.

终于看到阻在这里的原因啦,是机器ID错误,别人的机器ID错误至少有个NAME值啊,我的咋为空呢?

2) 是不是没有注册机器ID?猜测。这一步保证系统支持的ID里面含有devkit8000!

make xconfig 发现system type菜单下面没有devkit的选项,肯定是哪里的配置文件还没有添加,经过分析,找到了/kernel/arch/arm/mach-omap2/Kconfig文件,在末尾配置添加了devkit8000支持。

config MACH_OMAP3_BEAGLE

bool "OMAP3 BEAGLE board"

depends on ARCH_OMAP3 && ARCH_OMAP34XX

config MACH_OMAP3_DEVKIT8000

bool "OMAP3 DEVKIT8000 board"

depends on ARCH_OMAP3 && ARCH_OMAP34XX

然后make xconfig 发现system type菜单,选择devkit选项,选devkit8000,保存。

3)上一步仅仅能保证可以支持,要想能正确支持,还要修改下面的文件。

1. 我们进到arch/arm/mach-omap2/board_devkit8000.c,在最后一段有这句

MACHINE_START(OMAP3_DEVKIT8000 , ”OMAP3 beggle board”)

这里OMAP3_DEVKIT8000就是machine ID的代号~ 呢具体值是多少呢?~

2. 在文件arch/arm/tools/mach-types中最后一行添加,设置我们的machine ID是2001。

omap3_devkit8000 ARCH_OMAP3_DEVKIT8000 OMAP3_DEVKIT8000 2001

通过修改Kconfig和mach-types两个文件,我们可以使系统正确的识别我们的machine ID,并且从上面我们也可以看到r1= 0x000007d1,0x7d1就是2001。与我们所设置的machine ID是相一致的。

uncompressing linux .................................................后没反应解决办法的更多相关文章

  1. win10开始菜单打不开怎么办 win菜单键没反应解决办法

    win10开始菜单打不开怎么办 win菜单键没反应解决办法 —————————————————————————————————————————————————————————————————————— ...

  2. CentOS7在VMWare12中安装后不能上网解决办法

    首先要保证你的VMWare Workstation12 在安装号CentOS7后没改动什么关于网络相关的. 1.我的电脑一开始用的是VMWare WorkStations10,发现VMnet8根本不通 ...

  3. Centos7从3.10升级内核到4.9后无法启动解决办法:mpt[23]sas驱动问题

    Centos7升级内核后无法启动解决办法:mpt[23]sas驱动问题 前言 这个问题存在有一段时间了,之前做的centos7的ISO,在进行内核的升级以后就存在这个问题: 系统盘在板载sata口上是 ...

  4. (原创)Windows下编译的Shell脚本不能再Linux中运行的解决办法

    一.原理 Windows编译的文件和Linux编译的文件格式不太一样,导致在Linux运行Shell脚本的时候会提示:/bin/bash^M: bad interpreter: 没有那个文件或目录. ...

  5. dell r710 安装ubuntu 12.04 server 启动后进入initramfs解决办法

    dell r710 安装ubuntu 12.04 server 启动后进入initramfs解决办法 grub 启动菜单后加入 rootdelay=90, 如下:/boot/vmlinuz-2.6.3 ...

  6. 通过virtualbox最小化安装centos 6.3后无法上网解决办法

    通过virtualbox最小化安装centos 6.3后无法上网解决办法 1.设置virtualbox的网络连接方式,如下图使用桥接方式,桥接的网卡为宿主正在上网的网卡,现在我是通过无线来上网的,所以 ...

  7. 树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法

    树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法 人穷,闲鱼淘了个二手的树莓派3 英国版,无奈咱也不会用,很无奈~ 安装教程百度到的差不多都可以,找个格式正常的一步一步 ...

  8. win7 Host文件修改后无效的解决办法

    win7 Host文件修改后无效的解决办法 正常情况下hosts文件随时修改随时生效,如果出现修改后不生效的情况,首先确定文件是ascii编码,以windows格式为换行符,然后依次采用如下方法  1 ...

  9. 20190713_(转)IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决办法 (转)

    此文为转载; 原文链接地址: https://www.cnblogs.com/mrma/p/3529859.html ----------------------------------------- ...

随机推荐

  1. js中快速的访问某个url

    在做项目中经常会遇到这样的需求,自动向后台发送统计日志,也不需要关心返回值,当然了方法有很多,其中一个方法就是使用Ajax. 在这里我要介绍的方法的原理是使用图片,给这个图片符url,这样就会自动的触 ...

  2. Linux查找文件内容(grep)

    转载链接:http://www.eguidedog.net/linux-tutorial/05-grep.php grep是Linux命令行下常用于查找过滤文本文件内容的命令.最简单的用法是: gre ...

  3. WPF动画的几种模式

    最近在用WPF做简单动画,以下是几点经验总结: 1. 使用DispatcherTimer做动画 VB6的年代大家就用Timer做动画了,不用多解释,这个DispatcherTimer和本身的Timer ...

  4. redis空间键详解

    前言 redis的空间键通知是在2.8.0版本以后加入的,客户端通过发布订阅的方式,订阅某个频道,接收通过某种方式影响redis中数据的事件. 目录: 1.空间键事件分类 2.如何启用redis的空间 ...

  5. 模块详解及import本质

    一.模块的定义 用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的Python文件(文件名test.py,对应的模块名:test) 包:用来从逻辑上组织模块的 ...

  6. Linux下安装maven和nexus

    Linux下安装maven1.首先到Maven官网下载安装文件,目前最新版本为3.0.3,下载文件为apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令: 2.进入下载 ...

  7. 如何处理CloudFoundry应用部署时遇到的254错误

    使用SAP云平台的CloudFoundry部署应用: 在cockpit遇到错误信息:instance: a0abe2b5-7623-4cf1-4c65-0c79, index: 0, exit_des ...

  8. Python开发第二篇

    运算符 1.算术运算符 % 取余运算符,返回余数 ** 幂运算符 //返回商的整数部分 2.逻辑运算符 and  与运算符 a and b 如果a为False是,表达式为False,如果a为True返 ...

  9. js 获取时间戳 登陆验证码生成要加时间戳

    JavaScript 获取当前时间戳,登陆验证码生成要加时间戳,防止存在session不重新请求第一种方法: var timestamp = Date.parse(new Date()); 结果:12 ...

  10. UVA 1642 Magical GCD(gcd的性质,递推)

    分析:对于区间[i,j],枚举j. 固定j以后,剩下的要比较M_gcd(k,j) = gcd(ak,...,aj)*(j-k+1)的大小, i≤k≤j. 此时M_gcd(k,j)可以看成一个二元组(g ...