网站首页 │ 系统应用 │ 通用技术 │ 数据手册 │ 热点专题 │ 招聘求职 │ 图书专栏 │ 博客 │ 技术论坛 │ 我的空间
您的位置:首页>>AT91RM9200开发笔记——写在前面的话>>正文 AT91RM9200开发笔记(7):machine ID问题解决
推荐给好友 打印 加入收藏 更新于2009-04-30 19:13:25
AT91RM9200 machine ID
1、下载内核源代码,选定Linux 2.6.20.(http://www.kernel.org)
2、打补丁。下载对应版本的补丁。网上http://www.maxim.org.za/AT91ARM9200/2.6/好像失效,在PUDN上下载了补丁,放在这里。
2.6.20-at91.rar
3、移植好,之后,加载到开发板上,出现问题:
Error: unrecognized/unsupported machine ID
原因:
This kind of error message happens if the machine ID which is set in U-Boot doesn't match the kernel's ID(s). Unfortunately a standard U-Boot sets the machine ID on AT91RM9200DK boards not to MACH_TYPE_AT91RM9200DK but to the generic MACH_TYPE_AT91RM9200. You can either this in board/at91rm9200dk/at91rm9200dk.c; I would recommend to obtain a new machine ID and create your own U-Boot board type, using board/at91rm9200dk as a template. The list of machine IDs can be found in include/asm-arm/mach-types.h.
The Linux kernel has to be changed accordingly to the above machine ID. There you can find the information in arch/arm/tools/mach-types arch/arm/boot/compressed/head-at91rm9200.S arch/arm/mach-at91rm9200/board-dk.c
具体资料如下:
U-boot端include/asm-arm/mach-types.h支持的at91rm9200的machine类型有:
#define MACH_TYPE_AT91RM9200 251
#define MACH_TYPE_AT91RM9200DK 262
但是在board/at91rm9200dk/at91rm9200dk.c中,虽然注释中说明使用的是AT91RM9200DK-Board,但是实际使用的是MACH_TYPE_AT91RM9200。
int board_init (void)
{
/* Enable Ctrlc */
console_init_f ();
/* Correct IRDA resistor problem */
/* Set PA23_TXD in Output */
((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_OER = AT91C_PA23_TXD2;
/* memory and cpu-speed are setup before relocation */
/* so we do _nothing_ here */
/* arch number of AT91RM9200DK-Board */
gd->bd->bi_arch_number = MACH_TYPE_AT91RM9200;
/* adress of boot parameters */
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
return 0;
}
Linux内核端:
arch/arm/tools/mach-types支持的at91rm9200的machine的ID有:
at91rm9200 ARCH_AT91RM9200 AT91RM9200 251
at91rm9200dk ARCH_AT91RM9200DK AT91RM9200DK 262
at91rm9200tb ARCH_AT91RM9200TB AT91RM9200TB 380
at91rm9200kr MACH_AT91RM9200KR AT91RM9200KR 450
at91rm9200ek MACH_AT91RM9200EK AT91RM9200EK 705
at91rm9200utl MACH_AT91RM9200UTL AT91RM9200UTL 821
at91rm9200kg MACH_AT91RM9200KG AT91RM9200KG 975
at91rm9200rb MACH_AT91RM9200RB AT91RM9200RB 1060
at91rm9200df MACH_AT91RM9200DF AT91RM9200DF 1119
arch/arm/boot/compressed/head-at91rm9200.S支持的有:
.section ".start", "ax"
@ Atmel AT91RM9200-DK : 262
mov r3, #(MACH_TYPE_AT91RM9200DK & 0xff)
orr r3, r3, #(MACH_TYPE_AT91RM9200DK & 0xff00)
cmp r7, r3
beq 99f
@ Cogent CSB337 : 399
mov r3, #(MACH_TYPE_CSB337 & 0xff)
orr r3, r3, #(MACH_TYPE_CSB337 & 0xff00)
cmp r7, r3
beq 99f
@ Cogent CSB637 : 648
mov r3, #(MACH_TYPE_CSB637 & 0xff)
orr r3, r3, #(MACH_TYPE_CSB637 & 0xff00)
cmp r7, r3
beq 99f
@ Atmel AT91RM9200-EK : 705
mov r3, #(MACH_TYPE_AT91RM9200EK & 0xff)
orr r3, r3, #(MACH_TYPE_AT91RM9200EK & 0xff00)
cmp r7, r3
beq 99f
@ Conitec Carmeva : 769
mov r3, #(MACH_TYPE_CARMEVA & 0xff)
orr r3, r3, #(MACH_TYPE_CARMEVA & 0xff00)
cmp r7, r3
beq 99f
@ KwikByte KB920x : 612
mov r3, #(MACH_TYPE_KB9200 & 0xff)
orr r3, r3, #(MACH_TYPE_KB9200 & 0xff00)
cmp r7, r3
beq 99f
@ Embest ATEB9200 : 923
mov r3, #(MACH_TYPE_ATEB9200 & 0xff)
orr r3, r3, #(MACH_TYPE_ATEB9200 & 0xff00)
cmp r7, r3
beq 99f
@ Sperry-Sun KAFA : 662
mov r3, #(MACH_TYPE_KAFA & 0xff)
orr r3, r3, #(MACH_TYPE_KAFA & 0xff00)
cmp r7, r3
beq 99f
@ Ajeco 1ARM : 1075
mov r3, #(MACH_TYPE_ONEARM & 0xff)
orr r3, r3, #(MACH_TYPE_ONEARM & 0xff00)
cmp r7, r3
beq 99f
@ Unknown board, use the AT91RM9200DK board
@ mov r7, #MACH_TYPE_AT91RM9200
mov r7, #(MACH_TYPE_AT91RM9200DK & 0xff)
orr r7, r7, #(MACH_TYPE_AT91RM9200DK & 0xff00)
99:
真正的配置信息是在arch/arm/mach-at91rm9200/board-dk.c中。
MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")
/* Maintainer: SAN People/Atmel */
.phys_io = AT91_BASE_SYS,
.io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
.boot_params = AT91_SDRAM_BASE + 0x100,
.timer = &at91rm9200_timer,
.map_io = dk_map_io,
.init_irq = dk_init_irq,
.init_machine = dk_board_init,
MACHINE_END
由此可以看出,Uboot使用的AT91RM9200的machine ID,而内核配置的是at91rm9200 dk的machine ID,在这种情况下就出现了不一致。所以更改的方法:
方法一、把Uboot中board init中更改为MACH_TYPE_AT91RM9200DK
方法二、把MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")更改为MACHINE_START(AT91RM9200, "Atmel AT91RM9200-DK")。
只要U-boot和Linux kernel一致即可。
上一节 下一节
添加评论
暂无评论, 点击此处发表评论
今日要闻
第五代iPod Nano拆解
意法半导体STM8L系列面世
索尼力拼电子书市场
恒忆Q2成NOR 闪存王者
晶圆代工产业将现重大改变?
热点专题
便携设备音频设计之路
IIC China 2009秋季篇
09英特尔大学峰会专题
第十届无线技术应用大会
中国电子展(成都)专题
论坛热贴
01. 【经典推荐】[安捷伦出品]ADS200...
02. 【ADS中文视频教程(台湾)】[时长...
03. 【天线工程手册(PDF)版】[应广大...
04. cygwin 中文教程
05. 【射频通信和高速通信仿真软件】...
06. 奉上《实用射频技术》
07. 【热门推荐】[微带天线] 三本经典...
08. 【ADS中文视频教程(台湾)】[第一...
09. 【Agilent公司射频设计—视频教程...
10. 【ADS2005A视频讲解】[安捷伦公司...
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
? 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.
linux_jinx
- 粉丝: 9
- 资源: 4
最新资源
- (源码)基于Spring Boot和Vue的后台管理系统.zip
- 用于将 Power BI 嵌入到您的应用中的 JavaScript 库 查看文档网站和 Wiki 了解更多信息 .zip
- (源码)基于Arduino、Python和Web技术的太阳能监控数据管理系统.zip
- (源码)基于Arduino的CAN总线传感器与执行器通信系统.zip
- (源码)基于C++的智能电力系统通信协议实现.zip
- 用于 Java 的 JSON-RPC.zip
- 用 JavaScript 重新实现计算机科学.zip
- (源码)基于PythonOpenCVYOLOv5DeepSort的猕猴桃自动计数系统.zip
- 用 JavaScript 编写的贪吃蛇游戏 .zip
- (源码)基于ASP.NET Core的美术课程管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈