AT91RM9200启动源代码crt0.s中的错误分析

合集下载

基于AT91RM9200的Linux启动分析

基于AT91RM9200的Linux启动分析

0 (
图 1引导程序算法流程 图
3O
科技论 文
它首先激活芯片 内部的启动程序, 依次查找连接在S I P上的Da Fah 连接在两线接 tl 、 a s E T 上的E P O l WO ( E R M或连接在外部总线接 V(B ) I I E 上的8 位存储器器件上的8 位有效
A M异常向量。 R 所有异常向量必须是由Bbac或L R . nh D 指令载入寄存器。 r 其中A M异常 R的大dKDaa l h t O dwnodr  ̄ t a  ̄f: Fs 类
的系统引导加载程序。Ub o 就是满足需要的开放源码项 目。 -ot
21 .o t . U b o 介绍 U B o,全称 U i r l ot odr 。ot nv s o L ae,是遵循 G L条款的开放源码项 目。它是在 eaB P P C O T以及 A MB O PB O R O T的基础上逐步发展成熟和稳定。UB o 不仅仅支持嵌入式 — ot lu i x系统的引导,当前 ,它还支持 N t S , x rs Q X R E , R O , y x S n e D V Wo , N , T MS A T S L nO B k
型。
若启动程序发现有效的启动 , 就将代码载入内部S A R M中。 在利用MMU 单元完成内 存重映射后, R M将映射到从00 00 0开始的地址 ( SA x 000 0 见图2 , ) 此时将pN转到S A cg R M 的起始地址后开始运行 。
I l 砬省 a
S RAM REM I 埘 a 擅e l
31
电信技 术研 究
20 年 第 9期 08
嵌入式操作系统 。同时 U bo 除了支持 A M 系列的处理器外 ,还能支持 MIS 8、 —ot R P 、x 6 Pwe C、NI 、XSae o r P OS cl等诸 多常 用系列 的处理器 , b o 已经成 为嵌 入式开 发中事实 U—ot

MySQL 错误代码以及出错信息对照大全之欧阳歌谷创编

MySQL 错误代码以及出错信息对照大全之欧阳歌谷创编

0101 属于其他进程的专用标志。

欧阳歌谷(2021.02.01)0102 标志已经设置,无法关闭。

0103 无法再次设置该标志。

0104 中断时无法请求专用标志。

0105 此标志先前的所有权已终止。

0106 请将软盘插入驱动器 %1。

0107 后续软盘尚未插入,程序停止。

0108 磁盘正在使用或已由其他进程锁定。

0109 管道已经结束。

0110 系统无法打开指定的设备或文件。

0111 文件名太长。

0112 磁盘空间不足。

0113 没有其他可用的内部文件标识符。

0114 目标内部文件标识符不正确。

0117 该应用程序所运行的 IOCTL 调用不正确。

0118 校验写入的开关参数值不正确。

0119 系统不支持所请求的命令。

0120 该系统上不支持此功能。

0121 标记已超时。

0123 文件名、目录名或卷标语法错误。

0124 系统调用层不正确。

0125 磁盘没有卷标。

0126 找不到指定的模块。

0127 找不到指定的过程。

0128 没有要等候的子进程。

0129 模式下运行。

0130 试图使用操作(而非原始磁盘I/O)的已打开磁盘分区的文件句柄。

0131 试图将文件指针移至文件开头之前。

0132 无法在指定的设备或文件中设置文件指针。

0133 对于包含已连接驱动器的驱动器,不能使用 JOIN 或 SUBST 命令。

0134 试图在已经连接的驱动器上使用 JOIN 或 SUBST 命令。

0135 试图在已经替换的驱动器上使用 JOIN 或 SUBST 命令。

0136 系统试图删除尚未连接的驱动器的 JOIN。

0137 系统试图删除尚未替换的驱动器的替换项。

0138 系统试图将驱动器连接到已连接的驱动器下的目录。

0139 系统试图将驱动器替换成已替换的驱动器下的目录。

0140 系统试图将驱动器连接到已替换的驱动器的一个目录中。

0141 系统试图将驱动器替换成到已连接的驱动器下的目录。

0142 此时系统无法运行 JOIN 或 SUBST。

AT91RM9200启动源代码crt0.s中的错误分析

AT91RM9200启动源代码crt0.s中的错误分析

AT91RM9200启动源代码crt0.s 中的错误分析本人的AT91RM9200采用从norflash 启动方式,产品采用的norflash 型号为JS28F128J3D75,后来更换为JS28F128J3F75。

当采用JS28F128J3D75时代码正常启动,当采用JS28F128J3F75时代码无法正常启动,程序卡在了clearbss 函数中,因此对启动文件BOOT 源代码进行了分析。

系统上电检测到BMS 为低电平时,系统将外部norflash 地址映射为0x0,并且CPU 从0x0地址处读取命令执行。

此地址norflash 存储的是BOOT 程序。

BOOT 程序所包含的源代码包括:entry.S 、crt0.S 、initboot.c 、main.c 等。

程序在entry.S 中初始化时钟,调用AT91F_LowLevelInit 初始化函数,初始化各种运行模式下的堆栈范围,然后跳转至_main 函数中,_main 函数在crt0.S 文件中,进行了数据拷贝和bss 数据初始化工作,然后跳转至main 函数,进行端口打印和uboot 解压缩。

流程如下图所示:BMS 为0,norflash 地址为0x0entry.S crt0.S main.c initboot.c :初始化sdram 、flash 、串口等程序中定义的有初始值的全局变sdata 段,将本段的数据拷贝至变量区。

程序中定义的未初始化的全局变量,在变量区初始化为0Gcc 在编译时按照链接文件ld.script 描述语言将源代码中的程序和只读变量放置在text 段,将已初始化的全局变量(包括初始化为0)按照地址排列至data 段,将未初始化的全局变量按照地址排列值bss 段。

ld.script : MEMORY {ram : ORIGIN = 0x20000000, LENGTH = 0xf000 rom : ORIGIN = 0x00000000, LENGTH = 0xf000}SECTIONS { .text : {_stext = . ; *(.text) *(.rodata) . = ALIGN(4); _etext = . ; } > rom .data : {_sdata = . ; *(.data) *(.glue_7*) . = ALIGN(4); _edata = . ; } > ram .bss : {_sbss = . ; *(.bss). = ALIGN(4); _ebss = . ; } > ram}由ld.script 文件可以看出,text 段在rom 区,起始地址为0x0,data 段在ram 区,起始地址为0x20000000,bss 段紧接着data 段存储。

解决Docker容器启动失败的常见错误和故障处理技巧

解决Docker容器启动失败的常见错误和故障处理技巧

解决Docker容器启动失败的常见错误和故障处理技巧Docker已经成为现代软件开发和部署的必备工具之一。

它的容器化技术能够将应用程序和依赖项封装在一个隔离的环境中,提供了高度可移植性和灵活性。

然而,尽管Docker的使用相对简单,但在实际使用过程中,容器启动失败是一个常见的问题。

本文将介绍一些常见的错误和故障处理技巧,以帮助您快速解决这些问题。

错误一:端口冲突当您尝试运行一个新的容器时,可能会遇到端口冲突的错误。

这是因为Docker 使用主机上的网络资源,不同的容器可能会尝试绑定相同的端口导致冲突。

解决这个问题的方法是指定一个不冲突的端口来运行容器,或者停止占用该端口的其他容器。

错误二:内存不足大型应用程序可能会需要较大内存才能正常运行。

如果您的主机上的内存资源有限,当尝试启动一个内存需求较高的容器时,可能会遇到内存不足的错误。

这时您可以尝试限制容器使用的内存资源,或者增加主机的内存容量来解决这个问题。

错误三:镜像下载失败在运行一个新的容器之前,Docker会尝试从镜像仓库中下载相应的镜像。

但由于网络问题或镜像仓库不可用等原因,可能会导致镜像下载失败。

为了解决这个问题,您可以尝试切换到其他可用的镜像仓库,或者使用已经下载好的本地镜像。

错误四:文件权限问题有时候,容器启动失败可能是由于文件权限问题引起的。

Docker会在运行容器时将主机上的文件系统挂载到容器中,如果文件的权限设置不正确,可能会导致容器无法正常运行。

为了解决这个问题,您可以尝试更改文件的权限,或者在Dockerfile中明确设置文件权限。

故障处理技巧一:查看容器日志Docker提供了一个方便的日志功能,您可以通过查看容器的日志来快速定位问题所在。

使用docker logs命令,您可以查看容器的标准输出及错误输出。

日志中可能会显示一些有用的错误信息,帮助您判断问题的原因。

故障处理技巧二:使用调试模式Docker提供了调试模式,可以让您在容器启动过程中暂停并进入容器的命令行环境中进行调试。

LoadRunner出现error问题及解决方法总结

LoadRunner出现error问题及解决方法总结

LoadRunner出现error问题及解决方法总结一、Step download timeout (120 seconds)这是一个经常会遇到的问题,解决得办法走以下步骤:1、修改run time setting中的请求超时时间,增加到600s,其中有三项的参数可以一次都修改了,HTTP-request connect timeout,HTTP-request receieve timeout,Step download timeout,分别建议修改为600、600、5000;run time setting设置完了后记住还需要在control组件的option的run time setting中设置相应的参数;2、办法一不能解决的情况下,解决办法如下:设置runt time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。

切记此法只对windows系统起作用,此法来自zee的资料。

二、问题描述Connection reset by peer这个问题不多遇见,一般是由于下载的速度慢,导致超时,所以,需要调整一下超时时间。

解决办法:Run-time setting窗口中的‘Internet Protocol’-‘Preferences’设置set advanced options(设置高级选项),重新设置一下“HTTP-request connect timeout(sec),可以稍微设大一些”;三、问题描述connection refused这个的错误的原因比较复杂,也可能很简单也可能需要查看好几个地方,解决起来不同的操作系统方式也不同;1、首先检查是不是连接weblogic服务过大部分被拒绝,需要监控weblogic的连接等待情况,此时需要增加acceptBacklog,每次增加25%来提高看是否解决,同时还需要增加连接池和调整执行线程数,(连接池数*Statement Cache Size)的值应该小于等于oracle数据库连接数最大值;2、如果方法一操作后没有变化,此时需要去查看服务器操作系统中是否对连接数做了限制,AIX下可以直接vi文件limits修改其中的连接限制数,还有tcp连接等待时间间隔大小,wiodows类似,只不过wendows修改注册表,具体修改方法查手册,注册表中有TcpDelayTime项;四、问题描述open many files问题一般都在压力较大的时候出现,由于服务器或者应用中间件本身对于打开的文件数有最大值限制造成,解决办法:1、修改操作系统的文件数限制,aix下面修改limits下的nofiles 限制条件,增大或者设置为没有限制,尽量对涉及到的服务器都作修改;2、方法一解决不了情况下再去查看应用服务器weblogic的commonEnv.sh文件,修改其中的nofiles文件max-nofiles数增大,应该就可以通过了,具体就是查找到nofiles方法,修改其中else条件的执行体,把文件打开数调大;修改前记住备份此文件,防止修改出错;五、问题描述has shut down the connection prematurely一般是在访问应用服务器时出现,大用户量和小用户量均会出现;来自网上的解释:1> 应用访问死掉小用户时:程序上的问题。

外部数据库驱动程序(1)中的意外错误

外部数据库驱动程序(1)中的意外错误

外部数据库驱动程序(1)中的意外错误在软件开发中,外部数据库驱动程序是连接应用程序与数据库之间的桥梁。

然而,在使用外部数据库驱动程序的过程中,我们可能会遇到一些意外错误。

本文将介绍一些常见的外部数据库驱动程序中的意外错误,并提供相应的解决方案。

1. 连接错误连接错误是在建立与数据库的连接过程中会遇到的常见问题之一。

当尝试连接到数据库时,可能会出现以下错误:java.sql.SQLException: The server time zone value 'UTC' is unrecogni zed or represents more than one time zone.这个错误通常是由于数据库驱动程序和数据库服务器之间的时区设置不匹配所致。

解决这个问题的方法是在连接URL中指定正确的时区,如:jdbc:mysql://localhost/mydatabase?useUnicode=true&useJDBCCompliantTi mezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC2. 数据类型错误另一个常见的外部数据库驱动程序中的意外错误是数据类型错误。

在使用外部数据库驱动程序时,应该注意确保Java代码和数据库中的数据类型匹配。

否则,可能会遇到以下错误:java.sql.SQLException: Cannot convert value 'abc' from column N to T IMESTAMP.这个错误表示在将数据库中的数据转换为Java对象时出现问题。

解决这个问题的方法是检查数据类型是否一致,并进行必要的转换或映射。

3. 查询错误在执行数据库查询时,有时可能会遇到意外的错误。

例如,当执行查询时可能会收到以下错误信息:java.sql.SQLException: Table 'mydatabase.table_name' doesn't exist.这个错误表示查询的表不存在于数据库中。

91错误问题汇总

91错误问题汇总

在总账中,查询管理费用时报"7-内存溢出"或“未设置对象变量,运行时91错误”。

此问题请检查机器环境: 机器名是否含特殊字符或中文,登陆操作系统的操作员名是否含特殊字符或中文,其权限是否为超级管理员或高级用户. 重新注册软件的所有组件,可使用通网站服务工具中的维护通2.0中的三十九号工具进行注册. 清空系统临时文件夹,路径: C:\Documents and Settings\Administrator\LocalSettings\Temp 如问题未解决,请将账套引入到其它机器确定是否为数据问题.2. 在总账记账时提示“运行时错误 91,未设置对象变量或With block 变量”。

总账中遇到这种错误,可能就是和计算机名称、登陆账户有关。

计算机名称最好是全英文的,登陆账户也应该用英文名。

查看登陆操作系统的用户具有什么权限,我们要求必须是超级用户以上的权限才可以。

3. 客户在使用薪资统计查询时,出现“91号错误,未设置对象变量或With block 变量”同时个人工资统计查询表不可用,不能查询出结果此问题是因为组件丢失所致请重新注册一下组件或是重新安装一下软件4. 销售发票列表联查销售发票,出错“运行错误91”开发已做出补丁,请上网下载相应版本的补丁。

补丁路径:用友通10.2标准版:\\tongserver\补丁包\补丁包\用友通10.2补丁包\标准版\2007-11-05星期一\23335-23067 用友通10.2工业版\\tongserver\补丁包\补丁包\用友通10.2补丁包\工业版\2007-11-05星期一\23335- 230675. 查询账表时提示,运行时错误91,服务器为2000server可以正常登陆,客户端为xp出现此问题< /font>使用服务工具中的维护通2.0中的工具三十九把客户端的组件重新注册一下,或卸载客户端软件,删除system32\ fcomsql这个文件夹,然后再重新安装软件。

AT91RM9200器件失效分析报告

AT91RM9200器件失效分析报告

AT91RM9200 器件失效分析报告报告编号:开始日期:完成日期:编写人:XXX失效产品描述:失效器件描述:失效分析团队:1. 问题描述1.1. 无法启动,或者红灯、绿灯闪烁不同步,初步定位ARM芯片不良。

2. 失效分析方案2.1. 参考半导体器件失效分析流程。

3. 失效分析过程3.1. 板级失效分析3.1.1. 失效现象确认测试工站重新测试,不良板重现不良现象。

3.1.2. 目视和光学检测3.1.2.1. 目视: 未发现IC焊接不良3.1.2.2. 光学目检:(BGA芯片需要X-ray检查)N/A3.1.3. 器件交换验证3.1.3.1. 把良品板上的ARM重新安装到此不良品板上,PCBA测试结果PASS。

3.1.3.2. 把不良板上的ARM安装到良品板上,PCBA测试结果:重现失效现象。

3.1.4. 板级失效分析总结通过交换测试,发现不良跟芯片走,因此初步定位为ARM芯片异常。

3.2. 器件级失效分析3.2.1. 目检:用显微镜观察IC本体有无损伤。

无异常3.2.2. Curver Trace测量:测量芯片I-V曲线是否异常。

3.2.2.1. I-V曲线:测试所有引脚(pin1~pin208)对GND(pin39)的IV特性。

不良品与良品,对比测试,结果显示IV曲线无异常,如上图。

3.2.3. X-Ray检查:无异常(1)良品:(2)不良品:3.2.4. C-Sam检测:内部是否有分层的状况样品说明:1#、3#样品属于不良品;4#样品属于良品。

1#不良品C-SAM结果:存在异常,不合格3#不良品C-SAM结果:存在异常,不合格4#良品C-SAM结果:无异常3.2.5. D-Cap检查:检查是否有EOS/ESD3#、4#样品开封观察,无发现异常:3.2.6. 器件级失效分析结果不良品C-SAM检测,有分层现象,具体如下:(样品说明:1#、3#为不良品;4#为良品)3.3. 总结3.3.1. 综合以上分析,不良机理及原因是芯片受潮经过回流焊发生“爆米花”现象,导致内部分层。

AT91RM9200DK U-Boot 开发人员手册(指南)

AT91RM9200DK U-Boot 开发人员手册(指南)

AT91RM9200DK U-Boot 开发人员手册(指南)1 - 目的本文档针对描述AT91RM9200DK开发套件中内嵌的bootloader而写。

它从开发人员的角度对U-Boot进行了叙述,主要介绍了:∙U-Boot的构成∙如何编译U-Boot∙升级U-Boot或由零开始烧写U-Boot的不同解决办法∙U-Boot相关工具本文档是U-Boot用户指南(手册)的补充,它主要面向需要对U-Boot进行修改的开发人员。

2 - 特性针对AT91RM9200系列基于ARM的产品,U-Boot软件有以下特性:∙独立的原始自举程序(bootstrap)∙小体积∙不依赖于特定的操作系统(OS)∙自动启动和交互启动方式∙命令行界面(CLI)∙非易失的环境变量∙能够对Flash进行编程∙能够对DataFlash进行编程(可在最近的开源下载中获得)∙通过串行接口(Kermit协议)下载目标代码∙通过以太网(tftp)下载目标代码∙完整的引导协议(bootp)∙支持脚本3 - 软件包说明U-Boot是由开源社区支持的一个计划(project)。

它在通用公共许可证(GPL)下发布。

参见U-Boot源代码来获得credits和licensing的相关信息。

U-Boot源代码提议:∙在一个U-Boot版本中包含所有的源代码。

注意:本版本不一定是U-Boot的最新版本。

如果要做很大改动,那么请从U-Boot网站获得最新的源代码。

∙在一个Boot版本中包含原始的自举程序(bootstrap)和已解压的源代码。

∙在一个Loader版本包含允许从头开始U-Boot的所有源代码。

AT91RM9200DK U-Boot软件版本由三个不同的部分组成:∙一个包含U-Boot、Boot和Loader源代码的目录。

∙一个包含了无需经过任何编译过程就可以直接烧写Flash的所有U-Boot二进制文件的目录。

∙一个含有用户指南和开发人员指南的目录。

简单说说U-boot的修改

简单说说U-boot的修改

的修改简单说说U-boot的修改uboot是一个通用的免费开放源码的boot程序,支持很多的处理器。

以下是现在网上下载一个u-boot-1.1.1版本,用于at91rm9200系统的修改的例子。

最后在redhat8.0上,用gcc2.95编译通过。

在网上下载了uboot-1.1.1版本。

要用于自己的at91rm9200的系统,这个系统的情况是: SDRAM: 32Mbytes NCS1FLASH: 8Mbytes NCS0涉及到的文件有四个:common.hflash.cflash.h”./board/at91rm9200dk/config.mk”以下简单的说说。

一、首先读读uboot自带的readme文件,了解了一个大概。

二、看看common.h,这个文件定义了一些基本的东西,并包含了一些必要的头文件。

再看看flash.h,这个文件里面定义了flash_info_t为一个struct。

包含了flash的一些属性定义。

并且定义了所有的flash的属性,其中,AMD的有:AMD_ID_LV320B,定义为“#define AMD_ ID_LV320B 0x22F922F9”。

三、对于“./borad/at91rm9200dk/flash.c”的修改,有以下的方面:“void flash_identification(flash_info_t *info)”这个函数的目的是确认flash的型号。

注意的是,这个函数里面有一些宏定义,直接读写了flash。

并获得ID号。

四、修改:”./board/at91rm9200dk/config.mk”为TEXT_BASE=0x21f80000 为TEXT_BASE=0x21f00000 (当然,你应该根据自己的板子来修改,和一级boot的定义的一致即可)。

五、再修改”./include/configs/at91rm9200dk.h”为修改flash和SDRAM的大小。

AT91RM9200处理器引导程序及其启动方式

AT91RM9200处理器引导程序及其启动方式

第42卷第8期2013年8月热力发电T H E R M A LP O W ER G E N E R A T l0NV01.42N o.8A ug.2013A T91R M9200处理器引导程序厦舆名劲方式梁志福1,谈三勤2,崔逸群31.上都发电有限责任公司,内蒙古正蓝旗0272002.江苏协联热电集团有限公司,江苏宜兴2142033.西安热工研究院有限公司,陕西西安710032[摘要]介绍了A T91R M9200处理器[13引导程序的整体流向,总结了A T91R M9200处理器从外部存储器引导和从内部存储器引导2种启动方式,分析了内部启动程序主要包括的引导装入程序(B oot L oader)和上传程序(B oot U pl oade r)功能,并给出了对引导程序的限制。

[关键词]A T91R M9200处理器;引导程序;启动方式;引导装入程序;上传程序[中图分类号]T P332.3;T P317[文献标识码]A[文章编号]l002—3364(2013)08一0141一03[D oI编号]10.3969/j.i ss n.1002—3364.2013.08.141B oot s t r ap pr ogr am of t he A T91R M9200pr oces s er and t he st a r t i ng m et hodsL I A N G Z hi f ul,T A N S a nqi n2,C U I Y i qun31.S ha ngdu P ow er C o.,L t d.,Z h eng L an B an ner027200,C hi n82.Ji a ngsu X i e l i an T her m al P ow e r G r oup,Y i xi ng2l4203,C hi n83.X r an T her m al P ow e r R es ea r ch I ns t i t ut e C o.,L t d.,C hi na H u anen g G roup,X ra n710032,C hi naA bs t r a ct:T he over aU f l ow of boot st r a p pr ogr a m of t he A T91R M9200pr oce ss or w as i nt r oduced.T w o st ar i ng m et hods of t hi s pr oces sor,st a r t i n g f r om t he ext er na l s t or a ge and f r om t he i nne r st o卜a ge w er e s um m ar i zed.M oreover,t he f unct i ons of t he B oot L oader and B oot U pl oader w hi c h c o n—s i s t s of t he i nner st ar t i ng pr ogr am w er e anal yzed.Besi des,t he r est r i ct i ons of above f unct i ons on t he boot st r a p pr ogr a m w er e al s o des cr i bed.K ey w or ds:A T91R M9200pr oc e ssor;boot s t r ap pr ogr am;s t a r t i ng m et hod;boot st r ap l oade r;boot uD l oader引导程序整体流向激活B oot l oa der,以查找连接在SPI上的只读存储器(D a t a Fl ash)和连接在两线接口(T w I)上的E E PR O M或连接在外部总线接口(E B I)中的8位存储器上的8位有效A T91R M9200微处理器(A R M)异常向量。

U-boot应用于AT91 RM9200重映射机制的修正

U-boot应用于AT91 RM9200重映射机制的修正

机 制 的使 用上 , 存在 不合 理 性 , 移植 带 来 了很 多不 便 。本 文详 细 介 绍 A 9 R 20的 重 映射 机 制 以及 给 T 1 M9 0
启 动 流程 , 出一 种检 测 易 失性 存 储介 质 的算 法 ; 用 情 景 分 析 的 方 法 给 出 U ~b o 提 采 o t三 种 模 式 启 动 无 关
引 言
在 嵌 入 式 系统 中 , 序 代码 必 须 放 在 非 易 失性 存 储 介 程
质里 , 但嵌 入 式 处 理 器 的 速度 远 远 大 于 非 易失 性 存 储 介 质
同在 于 A2 O—B O这 对地 址 线 , 以硬 件 实 现 只 需 对 此 进 2 所
行 处 理 就 可 以 了 。如 图 2所 示 , 论 A O为 高 电平 还 是 无 2 低 电 平 , 应 的 B o都 是 高 电平 。C U 访 问 {x0 0 0 0 对 2 P 00 0 0 0
i B f MS为 高 电 平
F( X): o tm e r - RO M b o mo y ̄
es le
下, 以下 不 区分 “ 射 ” “ 映射 ” 两 个术 语 。嵌 入 式 系 映 和 重 这 统 中 , 映 射对 应 的输 入 、 出都 是 地 址 数 据 。下 面 举 一 重 输
一 一
性 的修 正方 案 , U — ot 对 b o 移植 和 b olae 的设 计 有 一 定的 参 考 价值 。 o t dr o
关键词 U —b o AT9 RM 9 0 重 映 射 ot 1 20
{ x 0 0 0 0—0 0 1ff) 0 0 10 0 x 0 ff 的重 映 射 。可 以看 出 , f 它们 的不

软件系统运维技术使用中常见问题配置文件错误

软件系统运维技术使用中常见问题配置文件错误

软件系统运维技术使用中常见问题配置文件错误在软件系统运维的过程中,配置文件错误是一种经常遇到的问题。

配置文件包含了系统运行所需的各项参数和设置,当配置文件出现错误时,会导致系统无法正常运行或者产生异常结果。

本文将针对软件系统运维技术使用中常见的配置文件错误进行详细介绍,并提供解决方案。

1. 格式错误:配置文件一般采用特定的格式,如XML、INI等。

当配置文件的格式错误时,系统无法正确解析配置文件中的参数,从而导致系统无法正常运行。

解决方案是使用文本编辑器检查配置文件的格式是否正确,同时查看系统文档或参考文档中的配置文件示例以确保格式的正确性。

2. 参数值错误:配置文件中的参数值决定了系统运行的行为和性能。

如果配置文件中的参数值设置错误,系统可能无法按照预期的方式运行。

常见的参数值错误包括无效的路径、错误的端口号、无效的用户名和密码等。

解决方案是仔细检查配置文件中的各个参数值是否符合系统要求,并确保参数值的合法性。

3. 缺少必要的参数:一些软件系统的配置文件中需要包含一些必要的参数,如果这些参数缺失,系统将无法正常运行。

解决方案是查看系统文档或参考文档,确保配置文件中包含了系统要求的所有必要参数,并正确设置这些参数的值。

4. 参数重复:配置文件中的参数是唯一的,如果配置文件中出现了重复的参数,系统将可能无法正确解析这些参数,从而导致系统运行异常。

解决方案是使用文本编辑器检查配置文件中是否出现了重复的参数,并删除或合并这些重复的参数。

5. 注释错误:配置文件中的注释用于提供对配置项的解释和说明,但是如果注释的使用不当,可能会导致配置文件错误。

常见的注释错误包括注释符号使用错误、注释未及时更新等。

解决方案是仔细检查配置文件中的注释,确保注释与实际配置项一致,并保持注释的及时更新。

6. 编码问题:配置文件可能会遇到编码问题,特别是在不同操作系统之间或者不同编辑器之间进行配置文件的转换时。

解决方案是使用合适的文本编辑器打开配置文件,并在保存时注意选择正确的编码格式,确保配置文件的编码一致性。

AT91RM9200处理器的内部启动机制

AT91RM9200处理器的内部启动机制

1.引言在开发基于AT91RM9200处理器的嵌入式系统时,以何种方式启动系统是一个首先要考虑的基本问题。

庆幸的是,AT91RM9200处理器提供了各种各样的启动方式,总体上可分为从外部的DATAFLASH、二线EEPROM或8位并行存储器引导启动和从内部的BOOTROM引导启动两种情况。

当从外部存储器启动时,存储器中的启动代码又是从那里来的呢?有3种手段,可以直接通过编程器将启动代码写入外部存储器,也可以通过JTAG 接口从主机下载到目标系统的闪存芯片,还可以由AT91RM9200处理器的内部BOOTROM 启动系统与主机建立通信并下载所需代码再写入闪存芯片。

那么当从内部的BOOTROM启动时,所需的启动代码又是如何得到的呢?很简单,芯片厂商在生产芯片时就嵌入了这段代码。

内嵌的启动代码被存储在AT91RM9200处理器的片内ROM中,片内ROM的起始物理地址是0x0010_0000,片内SRAM的起始物理地址为0x0020_0000。

我们都知道ARM 处理器启动时会产生复位异常,程序计数器PC指向复位异常向量地址0x0000_0000,也就是说启动时首先执行的是位于地址0x0000_0000处的指令。

因此从0x0000_0000到0x0010_0000的1M的内部存储区域(内部存储区0)在上电启动时的代码将决定系统的启动过程。

那么是应该由外部存储器中的启动代码来占据内部存储区0以实现外部启动,还是应该由位于0x0010_0000(内部存储区1)处的ROM中的内嵌启动代码来占据这一空间以实现内部启动呢?这就需要一个仲裁机制来进行选择。

这就是AT91RM9200芯片的PA31/BMS引脚(在PQFP封装中为79脚,在BGA封装中为A10脚)。

BMS即Boot Mode Select(启动模式选择),若BMS=1,则将内部存储区1的数据映射至内部存储区0,即从内部的ROM启动;若BMS=0,则将外部存储器的区域0映射至内部存储区0,即从外部存储器启动。

Linux中启动weblogic服务器报错怎么办

Linux中启动weblogic服务器报错怎么办

Linux中启动weblogic服务器报错怎么办Linux系统操作中,在启动weblogic受管服务器时提示报错,其中有两种报错是比较常见的,下面店铺就给大家介绍下Linux下启动weblogic受管服务器两大常见报错问题的解决方法,一起来了解下吧。

linux系统启动weblogic受管服务器报如下错误时:解决方法:进入cd Middleware/ ,使用 find 。

-name *.lok 命令查找文件,然后删除即可。

例: rm 。

/user_projects/domains/base_domain/servers/pc-linux01/tmp/pc-linux01.loklinux系统启动weblogic受管服务器报Socket closed错误linux系统启动weblogic受管服务器报如下错误时:Multicast socket receive error:.SocketException:Socket closed……java.io.IOException: Invalid argument解决办法:打开/home/weblogic/Oracle/Middleware/user_projects/domains/ba se_domain/bin下的startManagedWebLogic.sh文件,找到JAVA_OPTIONS=“-Dweblogic.security.SSL.trustedCAKeyStore=”/home/weblogic/ Oracle/Middleware/wlserver_10.3/se rver/lib/cacerts“ ${JAVA_O PTIONS}”修改为JAVA_OPTIONS=“-Dweblogic.security.SSL.trustedCAKeyStore=”/home/weblogic/ Oracle/Middleware/wlserver_10.3/server/lib/cacerts“ ${JAVA_O PTIONS} .preferIPv4Stack=true”上面就是Linux下启动weblogic受管服务器两种常见报错的解决方法,如果你在启动weblogic受管服务器的时候出现如上错误提示,可以尝试使用本文介绍的方法进行解决。

配置GDB调试U-BOOT

配置GDB调试U-BOOT

配置GDB调试U-BOOTGDB是什么正像Windows和Linux的对比,集成开发环境比GDB在嵌入式开发领域,拥有更多的用户,但这并不意味的GDB不好。

GDB(GNU Project Debugger)是开源软件组织GNU开发和维护的一种调试工具,它能调试目前所有的能跑Linux的CPU,当然ARM也是其中一员。

对于初学者来说,不建议使用GDB,还是先从集成开发环境入手,例如ADS、SDT、Keil、IAR之类的。

其实从编译器的层面来讲,集成开发环境和GDB所用的编译器GCC没有什么区别,但集成开发环境里面提供了源文件组织与浏览、工程文件管理、调试等多种功能,用起来很友好。

GCC+GDB光学习写相当于工程文件的Makefile就要花很多的时间。

但是,一旦你的学习进了一步到了Linux的Loader和内核,集成开发环境就无能为力了。

前面已经提到了,本文覆盖了从刚开始的裸奔代码到涉足操作系统的GCC+GDB调试环境的建立方法。

本文关于GDB的部分应该是国内挺难找到的HOWTO,转载请注明来自EE 小站。

关于GDB,可以参考下我之前的这篇文章/blog/cns!4201FDC93932DDAF!268.entry。

在开始之前请先确认你的电脑有并口,如果是笔记本就算了,买个PCMIA转并口的卡的钱够买个盗版U-Link了;要是肯下血本买盗版J-Link,那就看我以后写的文章。

∙首先说代码裸奔怎么做你需要的东西有:● 带并口的电脑一台● 并口延长线一根● Wiggler一个● 随便什么ARM7或ARM9的开发板一个如果没有并口延长线,可以去电脑城买一根。

如果没有Wiggler,你可以选择DIY,下面这张图是Wiggler的一种版本:如果不想DIY,上淘宝淘一个去。

ARM开发板也可以在淘宝上淘淘,看你的经济能力了。

你需要的软件有:● ADS (ARM Developer Suite) V1.2● H-JtagADS在一般学校的FTP上都有,H-JTAG请访问。

终端常见出错问题及解决办法

终端常见出错问题及解决办法

下面详细解答下关于这一类问题的原因,偶尔出现无所谓我所熟悉的0X000000该内存不能为read或者written的解决方法硬件:电脑硬件是很不容易坏的。

内存出现问题的可能性并不大(除非你的内存真的是杂牌的一塌徒地),主要方面是:1。

内存条坏了(二手内存情况居多)、2。

使用了有质量问题的内存,3。

内存插在主板上的金手指部分灰尘太多。

4。

使用不同品牌不同容量的内存,从而出现不兼容的情况。

5。

超频带来的散热问题。

你可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。

二、如果都没有,那就从软件方面排除故障了。

原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在缓冲区,需要操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。

这就是“动态内存分配”,内存地址也就是编程中的“光标”。

内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。

当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的光标,而是系统向应用程序发出的一个通知,告知出现了错误。

作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。

若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用光标,继续在之后的执行中使用这块内存。

真正的0地址内存区储存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。

在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即当机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。

这时候,就会出现上述的内存不能为“read”错误,并指出被引用的内存地址为“0x00000000“。

elasticsearch connectiontimeout error -回复

elasticsearch connectiontimeout error -回复

elasticsearch connectiontimeout error -回复【Elasticsearch Connection Timeout Error】Elasticsearch是一个开源的分布式搜索和分析引擎,被广泛应用于各大公司及网站中。

然而,当我们在使用Elasticsearch过程中,有时候会遇到“Connection Timeout Error”连接超时错误。

这个错误可能出现在我们尝试与Elasticsearch建立连接时,或者在进行搜索、索引或更新操作时。

本文将逐步解答这个问题,并提供一些解决方法。

第一步:了解连接超时错误当我们在连接Elasticsearch时,如果连接的时间超过了默认设置的超时时间,就会出现连接超时错误。

默认情况下,Elasticsearch的连接超时时间为1秒钟,这在大多数情况下是足够的。

然而,如果我们的网络环境较差,或者Elasticsearch集群负载较高,可能会导致连接超时错误。

下面是一些常见的错误信息:Caused by: .ConnectException: Connection timed out (Connection timed out)接下来,我们将逐步解决这个错误。

第二步:检查网络连接首先,我们需要检查我们的机器与Elasticsearch集群之间的网络连接。

确保我们的机器可以正常访问网络,并且网络连接是稳定的。

可以通过尝试使用ping命令或telnet命令确定网络连接是否正常。

第三步:检查Elasticsearch集群的状态接下来,我们需要检查Elasticsearch集群的健康状态。

如果集群处于红色或黄色状态,可能会导致连接超时错误。

红色状态表示有分片丢失,黄色状态表示部分分片不可用。

我们可以使用以下curl命令检查集群状态:curl -X GET "localhost:9200/_cat/health?v"如果集群状态为红色或黄色,需要进行一些维护操作以恢复集群的健康状态。

elasticsearch service 故障排查方法

elasticsearch service 故障排查方法

elasticsearch service 故障排查方法排查Elasticsearch服务故障常见的方法包括以下步骤:1. 检查日志文件:查看Elasticsearch的日志文件,通常位于`/var/log/elasticsearch/`目录下,检查是否有任何错误或异常信息。

可以使用命令`tail -f /var/log/elasticsearch/elasticsearch.log`实时监控日志文件。

2. 检查集群健康状态:使用Elasticsearch的API或命令行工具(如curl或kibana)获取集群的健康状态。

健康状态包括绿色(正常)、黄色(部分分片不可用)和红色(大部分分片不可用)。

如果集群的健康状态不是绿色,那么可能存在问题。

3. 检查服务进程:使用命令`ps -ef | grep elasticsearch`检查Elasticsearch服务的进程是否正在运行。

如果没有运行,尝试使用命令`service elasticsearch start`启动服务。

如果启动失败,查看错误信息以确定原因。

4. 检查磁盘空间:确保Elasticsearch运行所在的磁盘有足够的可用空间。

可以使用命令`df -h`查看磁盘空间的使用情况。

5. 检查网络连接:确保Elasticsearch集群的节点之间可以通过网络进行通信。

检查防火墙设置、网络连接是否正常,以及Elasticsearch配置文件中的网络设置是否正确。

6. 检查配置文件:检查Elasticsearch的配置文件(通常位于`/etc/elasticsearch/elasticsearch.yml`)是否正确设置。

重要的配置包括集群名称、节点名称、监听地址等。

7. 检查硬件资源:检查服务器的硬件资源,包括CPU、内存和磁盘的使用情况。

如果资源不足,可能导致Elasticsearch服务故障。

8. 检查索引状态:使用Elasticsearch的API或命令行工具(如curl或kibana)检查索引的状态。

AT91RM9200处理器同步串口SSC的特性分析与应用

AT91RM9200处理器同步串口SSC的特性分析与应用

AT91RM9200处理器同步串口SSC的特性分析与应用非常灵活。

内部发送时钟TCLK(接收时钟RCLK)来源非常灵活,可以来自处理器主时钟MCK 经SSC 分频后得到的分频时钟D_CLK、TK 引脚(RK 引脚)或者RCLK(TCLK),如图1 所示。

处理器内部主时钟MCK 通过初始化程序配置时钟选择器、预分频器和分频器得到MCK,再经过SSC 分频器使得分频时钟D_CLK 为2.048 Mb/s,如图2 所示。

主模式下帧定位信号TF/RF 也非常灵活,通过配置相关寄存器,可以使其为正脉冲或者负脉冲,脉冲宽度可以调节,与发送/接收信号的相位关系也可以灵活调整,能够与标准的E1 成帧器背板信号直接连接。

数据流中可以发送或者接收一个特定标记数据(帧同步数据),类似于E1 帧结构中的帧同步数据。

每帧起始位置可以通过寄存器设置,帧脉冲生效后,数据起始位置与时钟信号有关,主要有4 种模式:连续、TK/RK 上升或下降沿触发、TK/RK 高或低电平触发、TK/RK 电平变化或沿跳变触发,如图3 所示,接收起始模式与发送类似。

发送数据或者接收数据帧格式由发送器帧模式寄存器(SSC_TFMR)以及接收器帧模式寄存器(SSC_RFMR)编程设定,可以分别设置的参数有:启动数据传输条件;帧脉冲前沿到第一个数据位的延时;数据长度(DATLEN);每帧传输的数据数(DATNB);帧同步数据寄存器长度(FSLEN);比特意义:高位或低位在前(MSBF)。

上述设置可以配置SSC 同步串口每帧长度最大为512 位长,由于E1 帧格式每帧固定长度8 乘以32 位=256 位,因此,配置适当SSC 相关寄存器不仅可以保证SSC 同步串口与E1 接口时钟、帧脉冲、收/发数据等时序一致,而且数据帧格式也能保持一致。

tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AT91RM9200启动源代码crt0.s 中的错误分析
本人的AT91RM9200采用从norflash 启动方式,产品采用的norflash 型号为JS28F128J3D75,后来更换为JS28F128J3F75。

当采用JS28F128J3D75时代码正常启动,当采用JS28F128J3F75时代码无法正常启动,程序卡在了clearbss 函数中,因此对启动文件BOOT 源代码进行了分析。

系统上电检测到BMS 为低电平时,系统将外部norflash 地址映射为0x0,并且CPU 从0x0地址处读取命令执行。

此地址norflash 存储的是BOOT 程序。

BOOT 程序所包含的源代码包括:entry.S 、crt0.S 、initboot.c 、main.c 等。

程序在entry.S 中初始化时钟,调用AT91F_LowLevelInit 初始化函数,初始化各种运行模式下的堆栈范围,然后跳转至_main 函数中,_main 函数在crt0.S 文件中,进行了数据拷贝和bss 数据初始化工作,然后跳转至main 函数,进行端口打印和uboot 解压缩。

流程如下图所示:
BMS 为0,norflash 地址为0x0
entry.S crt0.S main.c initboot.c :初始化sdram 、
flash 、串口等
程序中定义的有初始值的全局变sdata 段,将本段
的数据拷贝至变量区。

程序中定义的未初始化的全局变
量,在变量区初始化为0
Gcc 在编译时按照链接文件ld.script 描述语言将源代码中的程序和只读变量放置在text 段,将已初始化的全局变量(包括初始化为0)按照地址排列至data 段,将未初始化的全局变量按照地址排列值bss 段。

ld.script : MEMORY {
ram : ORIGIN = 0x20000000, LENGTH = 0xf000 rom : ORIGIN = 0x00000000, LENGTH = 0xf000
}
SECTIONS { .text : {
_stext = . ; *(.text) *(.rodata) . = ALIGN(4); _etext = . ; } > rom .data : {
_sdata = . ; *(.data) *(.glue_7*) . = ALIGN(4); _edata = . ; } > ram .bss : {
_sbss = . ; *(.bss)
. = ALIGN(4); _ebss = . ; } > ram
}
由ld.script 文件可以看出,text 段在rom 区,起始地址为0x0,data 段在ram 区,起始地址为0x20000000,bss 段紧接着data 段存储。

链接文件定义了c 程序运行环境参数,当c 程序运行时,全局变量便会去0x20000000开始的ram 区相应的地址去查找。

在c 程序中引用的全局变量按照地址的形式使用,地址范围在ram 地址规定的范围里面。

当设备上电后,程序从flash 执行,全局变量从ram 中读取,由于ram 是易失性的,上电时里面的内容是乱的,因此在全局变量使用之前需要首先对全局变量区域进行初始化,这些初始化值被烧写在了flash 中。

因此烧写在flash 中的boot 文件结构为:
_stext
_etext
因此在上电时程序执行copydata 函数就是从flash 中将全局变量初始值拷贝至data 段,并且将ram 中bss 段数据清0,执行完后,数据结构如下图所示:
_stext
_etext _sdata
_edata _sbss
_ebss
0x0
0x20000000
此时,运行带有全局变量c 程序的环境已经建立起来。

由上面分析可知,程序运行时copydata 函数是将flash 地址_etext 开始的一段内容拷贝到0x20000000开始的地址内,大小为(_edata-_sdata )。

Clearbss 函数是将_sbss 开始的一段内容清0。

Crt0.s 内容如下: @ r0 -> start of flash @ r1 -> where to load data @ r2 -> start of program
.text .align
.global main,_main
main: _main:
# copy .data section ldr r3, =_etext ldr r4, =_sdata ldr r5, =_edata subs r5, r5, r4 bl copydata
# clear .bss section ldr r4, =_sbss ldr r5, =_ebss subs r5, r5, r4 mov r0, #0 bl clearbss
# and jump to the kernel b boot
copydata:
subs r5, r5, #4 ldr r6, [r3], #4
str r6, [r4], #4
bne copydata
mov pc, lr
clearbss:
subs r5, r5, #4
str r0, [r3], #4
bne clearbss
mov pc, lr
由代码可以看出,clearbss函数是将flash中烧写的全局变量初始值区后开始的bss 段大小空间清0。

而在实际使用中,程序会去找ram空间中的bss段,而非flash段,因此上面的程序存在错误,应该将“str r0, [r3], #4”改为“str r0, [r4], #4”,通过实验验证了这一结论。

在main.c文件文件中声明一个未初始化的全局变量,并将这一全局变量地址和内容打印出来,发现此地址在ram空间bss段,且值不为0,也就证明了原先的clearbss函数没有起到应有的作用。

当把“str r0, [r3], #4”改为“str r0, [r4], #4”后,重新试验,此变量值为0,验证了修改的正确性。

另外,如果声明的全局变量初始化为0,则打印出来的结果显示,此变量在data段,并不在bss段,因此不论clearbss是否正确,打印出来值都是0。

通过分析IAR编译器编译完成的stm32f103的启动代码发现烧写在flash中的全局变量初始值是经过算法优化的,所以在flash中data区大小是要小于ram中data区大小的。

修改crt0.s后,焊接JS28F128J3F75的板卡正常启动,问题得以解决。

但是为什么未修改前JS28F128J3D75可以启动,JS28F128J3F75无法启动,却不得而知。

通过分析两颗芯片的对比文件并未发现有太多的不同,仅仅增加了密码保护命令和对错误命令处理机制上不同。

通过前面的试验发现焊接JS28F128J3D75时,clearbss也并未真正把相应的flash空间清0。

怀疑是clearbss非正常写入flash时两颗芯片的处理方式不同吧,由于问题已经解决,也就不再去花太多力气去分析了。

相关文档
最新文档