uncompressing linux .................................................后没反应解决办法
编译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 .................................................后没反应解决办法的更多相关文章
- win10开始菜单打不开怎么办 win菜单键没反应解决办法
win10开始菜单打不开怎么办 win菜单键没反应解决办法 —————————————————————————————————————————————————————————————————————— ...
- CentOS7在VMWare12中安装后不能上网解决办法
首先要保证你的VMWare Workstation12 在安装号CentOS7后没改动什么关于网络相关的. 1.我的电脑一开始用的是VMWare WorkStations10,发现VMnet8根本不通 ...
- Centos7从3.10升级内核到4.9后无法启动解决办法:mpt[23]sas驱动问题
Centos7升级内核后无法启动解决办法:mpt[23]sas驱动问题 前言 这个问题存在有一段时间了,之前做的centos7的ISO,在进行内核的升级以后就存在这个问题: 系统盘在板载sata口上是 ...
- (原创)Windows下编译的Shell脚本不能再Linux中运行的解决办法
一.原理 Windows编译的文件和Linux编译的文件格式不太一样,导致在Linux运行Shell脚本的时候会提示:/bin/bash^M: bad interpreter: 没有那个文件或目录. ...
- dell r710 安装ubuntu 12.04 server 启动后进入initramfs解决办法
dell r710 安装ubuntu 12.04 server 启动后进入initramfs解决办法 grub 启动菜单后加入 rootdelay=90, 如下:/boot/vmlinuz-2.6.3 ...
- 通过virtualbox最小化安装centos 6.3后无法上网解决办法
通过virtualbox最小化安装centos 6.3后无法上网解决办法 1.设置virtualbox的网络连接方式,如下图使用桥接方式,桥接的网卡为宿主正在上网的网卡,现在我是通过无线来上网的,所以 ...
- 树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法
树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法 人穷,闲鱼淘了个二手的树莓派3 英国版,无奈咱也不会用,很无奈~ 安装教程百度到的差不多都可以,找个格式正常的一步一步 ...
- win7 Host文件修改后无效的解决办法
win7 Host文件修改后无效的解决办法 正常情况下hosts文件随时修改随时生效,如果出现修改后不生效的情况,首先确定文件是ascii编码,以windows格式为换行符,然后依次采用如下方法 1 ...
- 20190713_(转)IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决办法 (转)
此文为转载; 原文链接地址: https://www.cnblogs.com/mrma/p/3529859.html ----------------------------------------- ...
随机推荐
- nginx开启HSTS让浏览器强制跳转HTTPS访问
在上一篇文章中我们已经实现了本地node服务使用https访问了,看上一篇文章 效果可以看如下: 但是如果我们现在使用http来访问的话,访问不了.如下图所示: 因此我现在首先要做的是使用nginx配 ...
- 整理:sql server 中sql语句执行顺序
SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是 ...
- MPAndroidChart开源图表库---折线图
项目地址:点击打开,原文参考地址:点击打开 1. 将mpandroidchartlibrary-2-0-8.jar包copy到项目的libs中 2. 定义xml文件 <?xml version= ...
- 响应式及Bootstrap
一丶CSS3的@media 查询 使用 @media 查询,你可以针对不同的屏幕大小定义不同的样式. @media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@med ...
- Android学习笔记1——Android开发环境配置
一.JDK配置 Android是基于Java进行开发的,首先需要在电脑上配置JDK(Java Development Kit).在http://www.androiddevtools.cn/下载对应系 ...
- 基于jeesit下的工作流开发步骤
首先jeesit是开源的OA系统,采用的框架是springMVC和mybatis,采用shiro安全验证. 1.新建流程所属表: 在数据库新建所需工作流的表之后,登录jeesit系统,在“代码生成”- ...
- Windows下用cmd命令安装及卸载服务[转]
第一种方法: 1. 开始 ->运行 ->cmd2. cd到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727(Framework版本号按IIS配置) ...
- linux 命令——2 cd (转)
Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的. 所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧. 1. ...
- linux 命令——18 locate (转)
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 di ...
- js学习笔记之随机数
一. JS获取任意两个数之间的随机数 参考:https://www.jb51.net/article/89629.htm 二.获取一个10–100范围的数 参考:https://zhidao.baid ...