2440机器码

2023-12-10 01:58
文章标签 机器码 2440

本文主要是介绍2440机器码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、uboot 启动linux 内核时,无法识别机器码
           shuai2440# tftp 0x32000000 192.168.220.3:uImage.img
           dm9000 i/o: 0x20000300, id: 0x90000a46
           DM9000: running in 16 bit mode
           MAC: 08:00:3e:26:0a:5b
           operating at unknown: 0 mode
           Using dm9000 device
           TFTP from server 192.168.220.3; our IP address is 192.168.220.10
           Filename 'uImage.img'.
           Load address: 0x32000000
           Loading:
           #########################################

           #########################################
           done
           Bytes transferred = 1950540 (1dc34c hex)
           shuai2440# go 0x32000000
           ## Starting application at 0x32000000 ...
           Uncompressing Linux... done, booting the kernel.
           Error: unrecognized/unsupported machine ID (r1 = 0x32fbdeec).
(1)uboot 只能用于启动uImage,不能启动zImage.
(2)出错原因是go 启动内核时,uboot 不会传machiine ID 给内核,因为go 只是执行普通的应用程序,不考虑到传递参数给内核的问题.为了使命令go 能够启动内核,需要修改下面两方面:
            1.修改u-boot 的common/cmd_boot.c 的do_go()函数.
               /*#if defined(CONFIG_I386)*/ <==注释掉
               DECLARE_GLOBAL_DATA_PTR;
               /*#endif*/ <==注释掉
               ....
               #if !defined(CONFIG_NIOS)
               /**************add here*********************/
               if(argc==2)
               rc = ((ulong (*)(int, char *[]))addr) (0, gd->bd->bi_arch_number);
               else
              /*****************add end ********************/
               rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
            2.修改内核的arch/arm/kernel/head.S,直接将s3c2410 的参数赋给内核.
               __INIT
               .type stext, %function
               ENTRY(stext)
               /****************add here*****************/
               mov r0, #0
               mov r1, #0xc1
               ldr r2, =0x30000100
               /***************end add******************/
               msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode
               @ and irqs disabled
(3)也可以直接使用bootm 命令启动内核,该命令可以将uboot 的machine ID传递给内核,正常启动.不过需要用uboot 的mkimage 工具生成uImage 镜像.

二、2440 机器码
     使用uboot 启动linux 内核时,必须使uboot 与kernel 中机器码一致,这样才能正确启动kernel.
(1)uboot 中机器码的设置
     在文件include/asm/mach-types.h 有两处关于2440 机器码的设定.
          #define MACH_TYPE_S3C2440 362
          #define MACH_TYPE_SMDK2440 1008
(2)uboot 中机器码的使用
     在文件board/samsung/lss2440/lss2440.c 中使用了2440 机器码.
           gd->bd->bi_arch_number = MACH_TYPE_S3C2440;
      可以看出,uboot 中使用的机器码为362,因此在kernel 中机器码也必须为362.
(3)kernel 中机器码的使用
      在文件arch/arm/mach-s3c2440 中MACHINE_START 使用了2440 的机器码.
           MACHINE_START(S3C2440, "SMDK2440")
      第一个参数S3C2440 决定了kernel 使用哪个机器码,可以看出kernel使用了S3C2440 的机器码.
(4)kernel 中机器码的设置
      在文件arch/arm/tools 中有两处设置2440 的机器码.
            s3c2440 ARCH_S3C2440 S3C2440 362
            smdk2440 MACH_SMDK2440 SMDK2440 1008
      由于在文件arch/arm/mach-s3c2440 中使用的机器码是"S3C2440",因此可以看出kernel 使用的机器码为362,而不是1008.
【attention】
      在实际移植过程中,或改变uboot 中机器码的设置,或改变kernel 中机器码的设置,但必须使两者保持一致.

这篇关于2440机器码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/475705

相关文章

1、Java简介+DOS命令+java的编译运行(字节码/机器码、JRE/JVM/JDK/JIT的区别)+一个简单的Java程序

前言:本文属于黑马程序员和javaguide的混合笔记,仅作学习分享使用,建议感兴趣的小伙伴去看黑马原视频或javaguide原文。如有侵权,请联系删除。 Java类型: JavaSE 标准版:以前称为J2SE,主要用来开发桌面应用程序或简单的服务器应用程序。JavaEE 企业版:建立在 Java SE 的基础上,包含了支持企业级应用程序开发和部署的标准和规范(如Servlet、Jsp、

BZOJ 2440 2301 莫比乌斯应用

http://www.lydsy.com/JudgeOnline/problem.php?id=2440 Description 小 X 自幼就很喜欢数。但奇怪的是,他十分讨厌完全平方数。他觉得这些 数看起来很令人难受。由此,他也讨厌所有是完全平方数的正整数倍的数。然而 这丝毫不影响他对其他数的热爱。  这天是小X的生日,小 W 想送一个数给他作为生日礼物。当然他不能送一 个小X讨厌

arm汇编指令与机器码对应分析

转载:https://www.cnblogs.com/51qianrushi/p/4614491.html   我们编写的汇编程序还是不够底层,CPU都是对机器码进行操作的,所以还需要用汇编器将汇编代码转换成机器码才能被CPU处理。下面举几个例子来说说分析ARM机器码的方法。   对编译连接之后得到的ELF进行反汇编:arm-linux-objdump   查看得到的反汇编代码。这里如果想

网卡驱动设计--2440

注意学习软件的移植。。 从uboot中找出DM9000的参考代码;先参考其初始化代码,进行了如下步骤: 前两步需分析得出 1、由于DM9000是一个单独的芯片,所以要设置其片选 1.1设置数据位宽 1.2设置其工作时序(参考uboot--初始化CPU对应目录U-Boot\arch\arm\cpu\arm920t\s3c2440\lowlevel_init.s) 2、中

LiveGBS流媒体平台GB/T28181用户手册-版本信息:查看机器码、切换查看流媒体服务

LiveGBS流媒体平台GB/T28181用户手册--版本信息:查看机器码、切换查看流媒体服务 1、版本信息1.1、查看机器码1.2、多个流媒体服务1.3、提交激活 2、搭建GB28181视频直播平台 1、版本信息 版本信息页面,可以查看到信令服务 流媒体服务相关信息,包含硬件信息、运行时间、软件信息、授权时间 、机器码等信息 1.1、查看机器码 1.2、多个流媒体服

c++ 获取机器码

看到网上代码代码都没什么好的,自己备用一个 #include <iostream>#include <string>#include <sstream>#include <iomanip>#include <Windows.h>#include <iphlpapi.h> // 包含这个头文件以获取 PIP_ADAPTER_INFO#include <intrin.h> // 包含这个

MDK + Jlink + SDRAM 裸奔2440教程

MDK下裸奔2440教程 1、背景 很多人学习嵌入式编程都是从裸机开始的(我个人也是)。这并不是偶然,想要零基础入门嵌入式开发,玩转裸机绝对是最好的入手点。这样至少可以培养以下必备技能: l  CPU体系结构,编程模式及汇编语言、指令结构的知识 l  芯片内部外设,如串口、定时器、LCD、Nandflash等的相关编程知识 l  编程环境(这里主要介绍MDK),调试

Jlink调试2440进不了中断

很多人学习2440都是从裸机开始的。刚开始的小菜LED,然后定时器、按键这些常用内部外设,最后则是LCD、Nand等复杂外设。     用Jlink裸机调试2440小程序时,中断的调试是一个重要内容。像定时器、按键等外设调试都需要用到中断。     今天在调试以前写的定时器测试工程时活见鬼的总是不成功。因为是以前调试ok的工程,所以可以肯定代码没有错的,应该是调试方面的错误。于是乎:

微软宣布.NET Native预览版 C#可编译为本地机器码

微软宣布.NET Native预览版 C#可编译为本地机器码 投递人 itwriter  发布于 2014-04-03 17:05  评论(70)  有6766人阅读   原文链接   [收藏]   «  »   英文原文:Announcing .NET Native Preview   微软在 MSDN 博客上宣布了 .NET Native 的开发者预览版。.NET N

编译器如何将高级语言转换为机器码,包括词法分析、语法分析、中间代码生成和优化、代码生成等步骤。

编译器是将高级编程语言(如C++、Java等)转换成机器码(即计算机可以直接执行的指令)的软件。编译过程通常包括几个关键阶段:词法分析、语法分析、中间代码生成与优化、以及代码生成。下面详细介绍这些阶段: 词法分析(Lexical Analysis) 词法分析是编译的第一阶段,负责将源代码文本分解成一系列的记号(tokens)。这一过程涉及扫描代码并识别出构成语言基本元素的模式,如标识符、关键字