这个问题同样经典,大意是说u-boot传递的machine id不正确。在网上看到的文章几乎如出一辙:有两种方法,一是修改内核的head.S(具体在./arch/arm/kernel目录下),二是修改u-boot代码。可惜,第二种方法中出现的源代码文件,在我移植的版本中没有发现。

我的提示信息是这样的:

Error: unrecognized/unsupported machine ID (r1 = 0x33f4fee8). Available machine support: ID (hex) NAME 000000c1 SMDK2410 000003f0 SMDK2440 Please check your kernel config and/or bootloader.

(注:这里使用的内核是许久以前我第二次移植linux时使用的。——不禁想起那段奋斗的日子。)

在u-boot代码(./board/samsung/smdk2440/smdk2440.c)中,赋值machine ID的代码如下:

gd->bd->bi_arch_number = MACH_TYPE_SMDK2440;

在linux内核(./arch/arm/mach-s3c2440/mach-smdk2440.c)中,代码是这样:

MACHINE_START(SMDK2440, "SMDK2440")

两者是一致的,都是1008(=0x3f0)。

而且,我在u-boot中打印板子信息也能看到这个machine id(第一行arch_number即是):

LATE2440 $ bd arch_number = 0x000003F0 env_t = 0x00000000 boot_params = 0x30000100 DRAM bank = 0x00000000 -> start = 0x30000000 -> size = 0x04000000 ethaddr = 6c:61:74:65:6c:65 ip_addr = 192.168.1.200 baudrate = 115200 bps

按理说,既然大家都一致了,能正常引导才是啊。可惜还是不行。

于是修改了head.S文件,可以了。但是,这个应该是不推荐的方法。

后来我在cmd_bootm.c文件中的do_bootm_linux函数中添加一行debug信息:

/* new add for debug LL 2011-03-09 */ debug("## LL debug:machine id:%x, params:%x : %x/n", machid, bd->bi_boot_params, &(bd->bi_boot_params)); /* we assume that the kernel is in place */ printf ("/nStarting kernel .../n/n"); cleanup_before_linux (); theKernel (0, machid, bd->bi_boot_params);

在启动时显示如下:

## Transferring control to Linux (at address 30008000) ... ## LL debug:machine id:3f0, params:30000100 : 33f4ffd4 Starting kernel ... Uncompressing Linux..................................................................................... ....................................... done, booting the kernel.

注意,Starting kernel ...这行是u-boot打印的。

上面的信息证实了,在启动内核之前的那一刻,machine id还是0x3f0,是正常的。至于为什么就是不能引导,我也不清楚。

这个问题搞了很久,不过今天下午却能引导起来了。就是不修改head.S文件,不修改u-boot关键代码(加个Debug信息而已),就可以了。

下面是启动信息:

LATE2440 $ bootm * kernel: default image load address = 0x33000000 ## Booting kernel from Legacy Image at 33000000 ... Image Name: linux-2.6.30.2 Created: 2011-03-09 6:33:57 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1979832 Bytes = 1.9 MiB Load Address: 30008000 Entry Point: 30008000 Verifying Checksum ... OK kernel data at 0x33000040, len = 0x001e35b8 (1979832) Loading Kernel Image ... OK OK kernel loaded at 0x30008000, end = 0x301eb5b8 ## Transferring control to Linux (at address 30008000) ... ## LL debug:machine id:3f0, params:30000100 : 33f4ffd4 Starting kernel ... Uncompressing Linux............................................................................................................................ done, booting the kernel. Linux version 2.6.30.2 (latelee@FightNow) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #50 Wed Mar 9 14:27:24 CST 2011

这个诡异的问题到底是怎么回事,山人也不明白。

u-boot移植随笔:关于u-boot引导内核出现“Error: unrecognized/unsupported machine ID (r1 = 0x33f4fee8)”的问题相关推荐

  1. Exynos4412 Uboot 移植(四)—— Uboot引导内核过程分析

    bootloader 要想启动内核,可以直接跳到内核的第一个指令处,即内核的起始地址,这样便可以完成内核的启动工作了.但是要想启动内核还需要满足一些条件,如下所示: 1.cpu 寄存器设置   * R ...

  2. Bcdedit 删除 Boot Menu 中的多余启动引导

    概述 在过去一篇博文<如何科学卸载 Ubuntu?>中曾提到 Ubuntu 启动引导的删除,其中先后通过 EasyUEFI 与 diskpart 工具删除了 Ubuntu 的启动引导条目以 ...

  3. u-boot移植随笔:解决引导内核遇到undefined instruction的错误

    前天解决了内核不能引导的问题了.在网上搜索了一些资料,才有点明白这个是怎么回事. 不能引导内核时提示的信息各种各样.像ERROR: can't get kernel image!.Bad Magic ...

  4. u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统

    http://www.linuxidc.com/Linux/2012-09/70510.htm  来源:Linux社区  作者:赵春江 uboot最主要的功能就是能够引导内核启动.本文就介绍如何实现该 ...

  5. tiny4412 uboot 2020.10版本移植(四)——uboot修改支持sd卡、eMMC引导内核及其他一些杂项设置

    本文在<tiny4412 uboot 2020.10版本移植(三)--uboot初步启动> 的基础上继续向tiny4412 uboot 2020.10版添加功能. 主要有三块内容:1. D ...

  6. Spring Boot (一)Spring Boot 概述

    Spring Boot(一) 一 . Spring Boot 是什么? 首先Spring Boot不是一个框架,它是一种用来轻松创建具有最小或零配置的独立应用程序的方式.这是方法用来开发基于Sprin ...

  7. 树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核

    目录 一.树莓派Linux源码配置(适合树莓派) 总体概述 配置的三种方式 1.照搬厂家的配置(使用这种方式) 2.参考厂家的配置(感受一下) 3.完全自主配置(需要一定工作经验) 二.树莓派Linu ...

  8. Spring Boot(5)---第一个Spring Boot应用程序

    Spring Boot入门:开发您的第一个Spring Boot应用程序 本节介绍如何开发一个简单的"Hello World!"Web应用程序,该应用程序重点介绍Spring Bo ...

  9. Linux移植随笔:对tslib库的ts_test测试程序代码的一点分析

    本文是作者对tslib库的ts_test.c文件进行分析的随笔,其实tslib的几个测试程序结构差不多,譬如ts_print.c和ts_print_raw.c等. 本文并没有涉及太多概念,也没有详细介 ...

最新文章

  1. tensorflow随笔-collection收集器
  2. Django目录结构说明
  3. java 图形校验_java图形验证码生成工具类 web页面校验验证码
  4. 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
  5. Error和Exception有什么区别?(还在总结)
  6. Qtum量子链帅初受邀火星特训营面对面授课
  7. Mac OS X下查看CPU信息
  8. CVPR2020|无需3D运动数据训练,最新SOTA人体姿势估计方法
  9. 推荐一个强大的Go库-rk-boot,未来 Go领域的SpringBoot?
  10. 腾讯再投500亿元资金助力共同富裕;数学家将π计算到62.8万亿位;Go 1.17正式发布|极客头条...
  11. 大学计算机基础上机考试试卷,大学计算机基础上机考试试卷(答案).doc
  12. 使用python的requests模块实现百思不得其姐抓取(多线程版)
  13. weiui使用jquery infinite无限滚动加载,数据重复自执行
  14. 数据库服务器使用的RAID存储架构初步介绍
  15. pygame小项目 ~ 3 :Python完成简易飞机大战
  16. 还在抠图?百万张PNG透明图片免费下载!
  17. 计算机网络重要知识点总结(期末复习笔记)
  18. ffmpeg使用硬件加速hwaccel、cuvid、h264_cuvid、h264_nvenc
  19. Python将小写字母转化为大写字母
  20. iPhoneXR过于廉价,iPhoneX或许成为畅销的手机

热门文章

  1. 告别30元!喜茶承诺今年绝不涨价:不再推29元以上产品
  2. iPhone 14进入代工试产阶段:首款打孔屏iPhone要来了
  3. iPhone 14或让果粉再度“梦碎”:屏幕指纹和120Hz高刷屏都没了
  4. 顺丰同城:拟通过香港IPO发行1.31亿股H股 预期将于12月14日在港交所上市
  5. 阿里巴巴张勇:有信心在本财年末国内年度活跃消费者达10亿
  6. 任正非就“注册姚安娜商标”事件道歉:为防恶意抢注,第一次公权私用
  7. 买iPhone将可能只有盒子了?网友:库克账号多少,我直接打钱吧?
  8. 情怀无价!诺基亚225 4G正式开售:320元
  9. 微软宣布将永久关闭所有零售店:专注于线上
  10. 华为发布The New P30 Pro新机:全新配色+EMUI10系统