当前位置:文档之家› so调试(10-40)

so调试(10-40)

so调试(10-40)
so调试(10-40)

试Android上的c/c++程序一直是个难题,以前我经常靠输出log来解决问题,对于稍复杂一些的工程,这几乎是个不可能完成的任务,尤其有些错误,在wincewindows下都没事,只在android 上出现,就更难找了。后来看了些资料,知道可以用gdbserver来调试,今天决定必须把这个先弄清楚,不然以后干活效率实在是太低了,找了很多网站,终于成功了。这里把整个过程整理一下,以备以后查阅。

1. 准备gdbserver。

android 1.0 代码刚开放到时候,里面并没有带gdbserver,有些强人就自己编译了gdbserver 来使用。不过现在好了,android的新源码里已经包含了gdbserver,就在prebuilt目录下。如果想在android 1.0里使用,可以到如下地址下载:

https://www.doczj.com/doc/d615007565.html,/?p=platform/prebuilt.git;a=tree。gdbserver的二进制文件就在android-arm/gdbserver/gdbserver,我们只需要把gdbserver这个可执行文件放到模拟器上即可。

准备把它放在/system/bin,这样它就在默认的PATH里了。启动模拟器后:

adb push gdbserver /system/bin

如果提示文件系统不可写的话,执行一下“adb remount”,因为默认是用只读模式挂载的。

2. 编译程序。

默认情况下,android的编译系统在编译程序时已经使用了“-g”选项,即已经生成了调试信息。但是在生成最终的文件时,是经过strip的,去除了所有到调试信息。所以最终我们到调试目标要使用strip之前的文件。用make showcommands查看详细的命令信息,下面是其中某次的输出:

target Executable: libomstts

(out/target/product/generic/obj/EXECUTABLES/libomstts_intermediates/LINKED/libomstts) prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-g++ -nostdlib -Bdynamic

-Wl,-T,build/core/armelf.x -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections

-Wl,-z,nocopyreloc -o

out/target/product/generic/obj/EXECUTABLES/libomstts_intermediates/LINKED/libomstts

-Lout/target/product/generic/obj/lib -Wl,-rpath-link=out/target/product/generic/obj/lib -llog

-lcutils -lutils -landroid_runtime -lnativehelper -lstdc++ -lz -lc -lstdc++

-lm out/target/product/generic/obj/lib/crtbegin_dynamic.o out/target/product/generic/ obj/EXECUTABLES/libomstts_intermediates/src/tts.o

out/target/product/generic/obj/EXECUTABLES/libomstts_intermediates/src/TTSWrapper.o

out/target/product/generic/obj/lib/crtend_android.o

target Non-prelinked: libomstts (out/target/product/generic/symbols/system/bin/libomstts) out/host/linux-x86/bin/acp -fpt

out/target/product/generic/obj/EXECUTABLES/libomstts_intermediates/LINKED/libomstts out/target/product/generic/symbols/system/bin/libomstts

target Strip: libomstts

(out/target/product/generic/obj/EXECUTABLES/libomstts_intermediates/libomstts)

out/host/linux-x86/bin/soslim --strip --shady --quiet

out/target/product/generic/symbols/system/bin/libomstts --outfile

out/target/product/generic/obj/EXECUTABLES/libomstts_intermediates/libomstts

Install: out/target/product/generic/system/bin/libomstts

out/host/linux-x86/bin/acp -fpt

out/target/product/generic/obj/EXECUTABLES/libomstts_intermediates/libomstts

out/target/product/generic/system/bin/libomstts

生成的可执行文件是libomstts,可以看到,初次链接的目标文件是

“out/target/product/generic/obj/EXECUTABLES/libomstts_intermediates/LINKED/libomstts”,然后拷贝到“out/target/product/generic/symbols/system/bin/libomstts”,strip后的文件是“out/target/product/generic/obj/EXECUTABLES/libomstts_intermediates/libomstts”和

“out/target/product/generic/system/bin/libomstts”。调试只能使用前两个文件。

把带调试信息到可执行文件放到模拟器上,我用到是

“out/target/product/generic/symbols/system/bin/libomstts”:

adb push out/target/product/generic/symbols/system/bin/libomstts /system/bin

3. 启动调试器

首先在模拟器上启动gdbserver:

adb shell

进入模拟器的控制台后

gdbserver 10.0.2.2:1234 /system/bin/libomstts

10.0.2.2是模拟器的默认ip地址,让gdbserver在模拟器上监听1234端口。如果启动成功会显示以下信息:

Process /system/bin/libomstts created; pid = 1025

Listening on port 1234

为来让gdb能连接到模拟器上到gdbserver,必须进行数据转发:

telnet localhost 5554

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

Android Console: type 'help' for a list of commands

OK

redir add tcp:1234:1234

OK

exit

上面的telnet localhost 5554,redir add tcp:1234:1234,exit是自己输入的命令,其他的是输出信息。5554是模拟器控制台的监听端口,这些命令是将所有到localhost:1234的数据转发到模拟器的1234端口。

最后在本机启动gdb:

arm-eabi-gdb out/target/product/generic/symbols/system/bin/libomstts

arm-eabi-gdb是android自带的toolchain里的,注意后面的可执行文件是strip之前的。

gdb启动后,在gdb里输入命令连接gdbserver:

target remote localhost:1234

连接到gdbserver成功后,就可以使用所有的gdb调试命令啦

现在的这个gdbserver还不能调试动态链接库,只能先编译成可执行文件调试。

posted on 2009-02-19 17:05 飘雪阅读(7053) 评论(4)编辑收藏引用

Feedback

# re: Debug Nat ive c/c++ Applicat ion for Android(Step by Step) 2009-09-07 19:18 huangxiao0322

你好,我有几个问题想请教

第一、在进入模拟器的控制台后,运行gdbserver 10.0.2.2:1234/system/bin/ libomstts,libomstts 是打包成功的so文件吗?我要在后面加.S O后缀名,否则会提示没有文件或者文件夹。另外我运行运行gdbserver 10.0.2.2:1234/system/bin/ libomstts也不能够成功,发现根本就连接不上,是否是gdb的权限要用root呢

第二、源代码应该放在哪个文件夹下呢

第三、libomstts.so怎么能放在system/bin下面呢,bin应该是一些系统所带的命令啊

回复更多评论

# re: Debug Nat ive c/c++ Applicat ion for Android(Step by Step) 2009-09-13 22:24 smartcook@https://www.doczj.com/doc/d615007565.html,

我的始终链接不成功

提示Connection refused

我的是在终端linux上,通过putty连接windows上的emulator 回复更多评论

# re: Debug Nat ive c/c++ Applicat ion for Android(Step by Step) 2010-05-22 14:47 BertieParrish21

Good article just about this topic! In fact, that’s worth to

href="https://www.doczj.com/doc/d615007565.html,">buy essays to receive an academic success! 回

复更多评论

# re: Debug Nat ive c/c++ Applicat ion for Android(Step by Step) 2010-12-23 09:43 aries

楼主有个地方疏忽了。

在没有root你的系统前,adb remount是不行的。

所以需要先得到android系统的root权限,然后才可以adb remount.

I'm from 米狗族(https://www.doczj.com/doc/d615007565.html,) 回复更多评

Linux内核崩溃原因分析及错误跟踪技术

Linux内核崩溃原因分析及错误跟踪技术 随着嵌入式Linux系统的广泛应用,对系统的可靠性提出了更高的要求,尤其是涉及到生命财产等重要领域,要求系统达到安全完整性等级3级以上[1],故障率(每小时出现危险故障的可能性)为10-7以下,相当于系统的平均故障间隔时间(MTBF)至少要达到1141年以上,因此提高系统可靠性已成为一项艰巨的任务。对某公司在工业领域14 878个控制器系统的应用调查表明,从2004年初到2007年9月底,随着硬软件的不断改进,根据错误报告统计的故障率已降低到2004年的五分之一以下,但查找错误的时间却增加到原来的3倍以上。 这种解决问题所需时间呈上升的趋势固然有软件问题,但缺乏必要的手段以辅助解决问题才是主要的原因。通过对故障的统计跟踪发现,难以解决的软件错误和从发现到解决耗时较长的软件错误都集中在操作系统的核心部分,这其中又有很大比例集中在驱动程序部分[2]。因此,错误跟踪技术被看成是提高系统安全完整性等级的一个重要措施[1],大多数现代操作系统均为发展提供了操作系统内核“崩溃转储”机制,即在软件系统宕机时,将内存内容保存到磁盘[3],或者通过网络发送到故障服务器[3],或者直接启动内核调试器[4]等,以供事后分析改进。 基于Linux操作系统内核的崩溃转储机制近年来有以下几种: (1) LKCD(Linux Kernel Crash Dump)机制[3]; (2) KDUMP(Linux Kernel Dump)机制[4]; (3) KDB机制[5]; (4) KGDB机制[6]。 综合上述几种机制可以发现,这四种机制之间有以下三个共同点: (1) 适用于为运算资源丰富、存储空间充足的应用场合; (2) 发生系统崩溃后恢复时间无严格要求; (3) 主要针对较通用的硬件平台,如X86平台。 在嵌入式应用场合想要直接使用上列机制中的某一种,却遇到以下三个难点无法解决: (1) 存储空间不足 嵌入式系统一般采用Flash作为存储器,而Flash容量有限,且可能远远小于嵌入式系统中的内存容量。因此将全部内存内容保存到Flash不可行。

SSB变桨系统试验常见故障

1.SSB变桨系统地面出厂试验时,在调整95°限位开关及挡块位置时操作人员不慎将60947-5-1#95°限位开关直动头冲断。 2.G8-064315变桨控制柜,实验时变桨速度过快,执行速度远大于设定速度。初步判 断电机驱动器损坏,造成无法正常使用。 3. 473399-60#旋编编码器做变桨功能试验时,编码器存在角度无变化故障 4、466631-04#旋编编码器做变桨功能试验时,编码器存在角度跳变故障 5. 叶轮功能试验时,由于操作人不慎误将G8-070588变桨控制柜内的1F1防雷模块的火线与零线接反,导致1F1防雷模块烧坏。 6.变桨控制柜实验时系统报电机过温PTC故障,经更换柜内9A1模块后此故障消除。 7、变桨控制柜实验时系统报电机过温PTC故障,经更换柜内9A1模块后此故障消除。 8、G8-070093#变桨控制柜实验时柜内12A1模块指示灯不亮,经更换此故障消除。 9. 旋编编码器做变桨功能试验时,编码器角度始终保持在0°无变化,无法正常使用。 10、旋编编码器旋转时有卡阻现象,并且内部有异响。无法正常使用 11. 95°限位开关压下直动头不能正常复位,造成该95°限位开关无法正常使用。 12. 变桨系统中有2个限位开关触头有卡阻现象,活动不自如,无法正常使用。 13. 叶轮组在调试时发现,闭合电容开关时,9U1不动作,面板上显示9U1故障,无法正常使用 14. LED显示H.N,面板显示:变流器故障,散热片温度故障,无法正常使用。 15. 变桨柜G8-065677打开电容开关后面板显示电容电压9U1为故障状态,9U1不动作,无法正常使用。 16. SSB控制柜配套带来的旋转编码器形状不同, 一套三个旋编信号线接头位置不同,装后性能不受影响。

技术及安全保证措施

技术及安全保证措施 第一章工程概况 一、概况 本工程位于 二、安装工程的主要特点 工作量大:该安装工种主要包括电气安装及设备安装拆除等方面的内容,系统大且比较复杂,安装工种的工作量比较大。 综上所述:只有掌握本安装的自身特点,才能在安装过程中做到有的产矢,才能把施工质量和施工进度时刻把握好,达到合同要求的质量目标和施工进度目标。

第二章施工前期准备 安装工程前期施工准备工作可分为临设的搭设、技术准备、劳动力准备、材料准备、机具准备五大部分。为提高施工准备工作的质量,加快施工准备工作的进度,必须加强建设单位、设计单位、监理单位及总承包施工单位四者之间的协调工作,并要做到统一步调,共同做好施工准备工作。 建立健全施工准备工作责任制,按计划将责任落实到有关部门甚至个人,同时明确各级技术负责人在施工准备工作中所负的责任,各级技术负责人应是各阶段施工准备工作的负责人,负责审查施工准备工作计划和施组织计划,督促检查各分项施工准备工作。 建立施工准备工作检查制度,使施工准备工作有组织、有计划、有分工地进行,检查的目的在于督促和发现薄弱环节,不断改进工作。由此可见,工程施工进度的快慢、施工质量的好坏,都与施工准备工作有着直接联系、准备工作充分与否,直接影响到施工工序的能否正常进行,施工准备工作是组织施工生产的重要因素。] 一、技术准备 认真熟悉和审查施工图纸,了解设计者的意图,结合水、电、通风与空调及相关弱电施工图纸,进行纵横比较和联系,使水、电、通风专业相结合、相对照。发现有不合理或有疑问的地方,及时作好记录,作为日后图纸会审的内容,并把

会审记录作为资料保存好。了解水、电及通风各专业图纸上预留、预埋的孔洞和管线位置,并结合土建结构图纸,核对总包单位预留的影响。 编制施工图预算,列出各分项工程的工作量,并确定安装工程中各分项工程用料、用工和机具使用情况,并汇总成表,以便为材料准备和劳动力组织准备及机具准备提供可靠的理论依据。 编制安装工程施工技术方案,确定采取的技术措施,保证施工技术既合理先进又能提高施工进度,缩短工期。编写详细的安全和技术方面的交底记录。交底内容应具体、明了且具有针对性,以保证安装工程施工安全和施工质量符合规范要求。 组织施工人员进行技术培训,使职工对各项技术操作规程、规范做到心中有数,在安装时才能做到有的放矢,确保工程施工质量符合规程、规范的要求。 二、材料准备 根据施工进度计划的要求,按材料名称、规格、使用时间、材料储备定额和消耗定额进行汇总,编制材料需要量计划,为组织备料、确定仓库、堆放场地所需面积和组织运输等提供依据。 根据材料计划单,组织货源,联系生产厂家,确定加工、供应地点和供应方式,使材料的供应由项目部依据工程的进

Lust变桨系统调试相关事项说明_更新

Lust变桨系统调试说明 1、操作说明: 为确保系统调试安全,必须预先进行以下措施: ①现场调试人员必须佩戴好安全帽; ②400V电源的三相线、零线和地线必须可靠连接,避免缺相或漏接; ③上电前确认主控箱和轴控箱的开关处于断开状态; ④所有连接电缆连接正确(电机后面的编码器电缆号是S1、S2和S3;冗 余编码器的电缆号是T1、T2和T3,若反接,会出现飞车故障); ⑤上电前将电机的轴键拆除或利用扎带将其捆扎牢固; ⑥上电前确认电机与底座是否可靠固定; ⑦电池箱箱盖闭合(完成检查); 2、系统紧急顺桨: ①Profibus通信故障(或者不正常); ②Pitch Master故障; ③电机侧编码器故障; ④安全链信号输入无+24V(硬输入点); ⑤未提供+24COM(硬输入点); ⑥Emergency mode位为1; 3、手动模式 手动模式用于机械调零和现场安装调整用,转动速度为2.5度/秒。 手动模式前提条件: ①手动模式信号为1(硬输入点),并观察主控箱的9A1的第8通道的灯是 否点亮; ②Profibus通信正常,或者短接17K7的13、14引脚; ③Normal Operation Mode设置为0; ④Emergency Mode位为0; ⑤转动任一个桨叶时,另外两个桨叶为91度位置(或者通过关闭轴箱的电 源模拟); ⑥轴箱电池开关处于断开状态; ⑦手动旋钮的通道选择的0、1、2和3分别对应空档、轴控箱1、轴控箱2 和轴控箱3;转动方向旋钮控制的是电机的正传和反转; 4、自动模式

自动模式必须满足以下条件: ①先闭合主控箱的400V电源; ②Profibus通信正常; ③将Fault Reset置位1,然后置0; ④闭合轴箱的电池开关和电源开关前确保通信的Emerge Mode(读)为0 和Normal Operation Mode(写)为0;硬接点的Safety Signal(为高电平)、+24V和0V有正常连接,Manual Operation为0。否则会出现飞车现象; ⑤轴控箱上电顺序:先闭合电池开关(5Q1),然后闭合电源开关(6S1)。 正常状态下电机会由于内部的电路的控制不会出现转动; ⑥自动控制是通过通信软件控制,先设置好控制桨叶的目标角度、转速(建 议为3度/秒以下)和加速度(建议0.5~2度/秒2),然后将Normal Operation Mode置1,启动自动模式;若要中途停止,只能通过以下任一方式:将Normal Operation Mode置0、将对应的91度限位开关触发和关闭轴控箱电源(6S1); 5、限位开关 91度限位开关用于控制Pitch Master(主控变频器)的输出控制,当触发了该限位开关后,7K6复位,然后电机会停止,相对而言动作比较缓慢; 96度限位开关用于控制电机和Ptich Master的ENPO信号,当触发了该限位开关后,6K2和6K3复位,然后电机立即停止,相对而言动作比较迅速。 6、Bypass Bypass信号是用于旁通2个限位开关触发了以后继续启动电机转动,有硬信号和软信号之分。 Bypass软信号是对应91度限位开关。当91度触发了以后,利用通信将对应桨叶的Bypass信号置1,然后电机才可以往96度方向转动;而需要往0度方向转动不需要将对应桨叶的Bypass信号置1(实际上该Bypass信号用途不大); Bypass硬信号是对应96度限位开关,当96度触发了以后,利用硬结点的Bypass信号置1,然后电机只可以往0度方向转动; 7、温度预处理说明 根据通信中的所有温度值,需要在控制当中进行预处理,其温度的预处理值建议如下(根据Lust技术人员的建议): ①Pitch Master停机温度值为80度;

实例—使用gdb调试器

2.4 实例—使用gdb调试器 1.编写实例程序gcctest.c,见2.2小节的开头部分 2.编译 3.启动GDB,执行程序 启动gdb,进入gdb调试环境,可以使用gdb的命令对程序进行调试。 [root@localhost gdbtest txt]# gdb //启动gdb GNU gdb Fedora (6.8-27.el5) Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu". (gdb) run gcctest //在gdb中,运行程序使用r或是run命令,注意,gcctest没有调试信息Starting program: gcctest No executable file specified. Use the "file" or "exec-file" command. //要使用file或exec-file命令指出要运行的程序 (gdb) file gcctest //使用file命令指出要运行的程序gcctest,注意,对gdb命令也可以使用Tab gcctest gcctest.c gcctestg (gdb) file gcctest //使用file命令指出要运行的程序gcctest Reading symbols from /root/Desktop/gdbtest txt/gcctest...(no debugging symbols found)...done. (gdb) r //在gdb中,运行程序使用r或是run命令 Starting program: /root/Desktop/gdbtest txt/gcctest gcctest (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) hello in main hello 1 hello 2 sum=54125560035401396161080590579269632.000000 Program exited with code 057. (gdb) file gcctestg //使用file命令指出要运行的程序gcctestg Reading symbols from /root/Desktop/gdbtest txt/gcctestg...done. (gdb) r //在gdb中,运行程序使用r或是run命令 Starting program: /root/Desktop/gdbtest txt/gcctestg gcctest hello in main hello 1 hello 2 sum=54125560035401396161080590579269632.000000 Program exited with code 057. (gdb) q //使用q或是quit命令退出gdb [root@localhost gdbtest txt]# 4.GDB命令简介

浅谈高压试验的安全保证措施

浅谈高压试验的安全保证措施 压试验是电气试验中较为非凡且危险性较大的工作,确保高压试验的安全进行是保证人身安全和电力系统安全的重要保证。在高压试验过程中,应当从主观和客观、安全和技术等多个角度理解和应用保证安全的各种措施,从而保证电力生产的安全运行。 关键词】电气试验;高压;安全 0引言 电是当今人类生活中不可缺少的能量形式之一。为我们提供电能的电力系统包括众多的电气设备,这其中的一些设备在发生故障的情况下就会危及到整个系统的安全供电。据有关统计分析,电力系统中60%以上的停电事故是由设备绝缘缺陷引起的。[1]为了防患于未然,保证电力系统安全、经济运行,就必须定期对电力设备按规定开展检测试验工作,电气试验工作的重要性由此可见一斑。高压试验作为电力系统运行维护的必要环节之一,经常在不同的地点、不同的时间进行,同时电气设备的电压等级不同又造成了进行此项工作时试验电压的不同,所以每一次的高压电气试验都具有其非凡性和不确定性,在这样的条件下很容易形成安全隐患,对人身和设备安全造成威胁。因此,确保高压试验工作的安全是十分必要的,各种安全保证措施是保护一线试验工作人员生命安全和电气设备安全,稳定运行的重要保证。 1确保安全的主观措施 1.1加强人员的技术培训和安全意识的培养

1.1.1加强员工自身技术培训在平时的培训中应当着重提高员工的业务技术水平,结合日常工作做好高压试验专业知识的培训工作,为安全生产打下坚实的技术基础。以良好的培训为基础,在熟悉高压试验的原理、被试品内部结构以及整个试验过程和各种情况下可能发生的现象后,才能根据所把握的客观的科学规律,结合每一次试验现场的具体情况,分析试验现象和数据,根据这些及时对试验结果、被试品状态和整个试验过程做出正确、有效的判定。这样,不但能够提高工作效率,同时也从技术层面上保证了每一个参试人员的人身安全。 1.1.2加强员工安全意识培养加强对员工安全意识的培养也是保证高压试验安全的重要措施之一。电气试验是一个需要细心细心再细心的工作,在实际工作中有许多辅助性的,但是必须要做的预备工作,这些工作做起来并不起眼,但是假如有做不到位的地方都会给即将开展的试验工作带来一定的安全隐患。比如在每次工作前制定试验计划、步骤,查找被试设备历史试验记录以及熟悉被试设备的电气连接状态、安装位置和使用环境,选择试验设备、工器具,预备好原始记录本、遮栏、标示牌等。这些辅助工作有高压试验技术上的需要,也有安全上的需要,而这些工作不能仅仅依靠在工作中形成的习惯来保证实施。在日常的培训工作中应当对以上所提到的相关辅助性工作的必要性从电气原理、电气安全和可能产生的危害等方面认真分析,使每个试验人员都能够牢记于心,将主动的安全意识带入每一个高压试验的环节。 1.2认真仔细的进行试验前检查高压试验不同于其他的电气试验,被试设备不同,所需的试验设备、接线的方式以及试验标准都大不相同,因

关于Linux 内核中五个主要子系统的介绍

关于Linux 内核中五个主要子系统的介绍 发布时间:2008.01.02 06:23来源:赛迪网作者:sixth 1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。 2.内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。 3.虚拟文件系统(VirtualFileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。 4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。 5.进程间通讯(IPC) 支持进程间各种通信机制。处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调度。

变桨系统带载测试平台要求

变桨系统带载测试平台试验大纲 1 前言 本部分规定了各种型号的电动变桨驱动系统工作性能的测试要求和测试方法。适用于各种电动 变桨驱动系统出厂性能验收和新产品性能测试。 2 测试内容 电机负载测试内容主要分成三个部分: 1)变桨系统带载功能性测试 2)变桨系统带载故障模拟测试 3)变桨系统带载连续运行测试 测试的主要部件为:变桨电机、刹车系统、伺服驱动器、蓄电池、编码器。 3 测试依据 2MW 风机根据《变桨驱动系统采购规范》SB-030.02.05-A 3.6MW 风机根据《变桨驱动系统采购规范》V-69.2-BV.MR.00.00-A-D GB/T 1311-2008《直流电机试验方法》 GB/T 1029-2005《三相同步电机试验方法》 4 变桨系统带载功能测试 4.1 变桨电机额定负载测试 需测试电机在额定负载下的变桨位置、电机转速、转矩响应特性。位置给定范围为(0°~30°), 测试变桨速度为2°/S。 测试需要得到如下响应曲线图:电机运动位置给定曲线、电机位置响应曲线、电机速度响应曲 线、电机转矩响应曲线、电机电流变化曲线、电机温升曲线。 Y520000064-2 变桨系统带载测试平台试验大纲共3 页第 2 页 FDJL-JS-027 4.2 变桨电机变化负载测试 需测试电机在变化负载下的变桨位置、电机转速、转矩响应特性。位置给定范围为(0°~30°), 变化负载范围为额定负载的±50%,测试变桨速度为2°/S。 测试需要得到如下响应曲线图:电机运动位置给定曲线、电机位置响应曲线、电机速度响应曲 线、电机转矩响应曲线、电机电流变化曲线、电机温升曲线。 4.3 变桨电机最大负载测试 需测试电机在最大负载下(3s 内)的变桨位置、电机转速、转矩响应特性。位置给定范围为(0°~ 30°),测试变桨速度为2°/S。 测试需要得到如下响应曲线图:电机运动位置给定曲线、电机位置响应曲线、电机速度响应曲

试验室安全管理规定

试验室安全管理规定 Document serial number【KK89K-LLS98YT-SS8CB-SSUT-SST108】

路桥集团第一公路工程局 试验室安全管理规定 第一章总则 第一条为规范全局的试验室安全管理工作,确保试验人员的安全和健康,控制和预防试验工作中的安全事故,特制定本规定。 第二条本规定适用于全局的试验安全管理工作和试验人员。 第三条本规定未涉及的内容按照国家和行业的现行法规、标准、规范执行。 第四条各试验室应指定专人负责试验室的安全工作,并纳入隶属单位的安全和环境管理体系。 第二章试验室的危险源 第五条试验室的危险源分为以下五类: 1、火灾危险源:烘箱、电炉、冬季取暖用火炉、电线和易燃物品等; 2、用电设备危险源:电源、导线和用电设备等; 3、试验设备危险源:万能材料试验机、混凝土压力试验机、水泥及水泥砼搅拌机、沥青混和料拌和机、核子密度仪等; 4、试验用材料危险源:放射性物品、腐蚀性物品、易爆物品、化学试剂和粉尘材料等; 5、试验室环境危险源:试验室所处位置附近的变压器、高压线、危险地形、危险建筑物等。 第六条易燃、易爆、腐蚀性、放射性物品等均属危险物品。 第三章工地环境中的危险因素 第七条工地现场交通安全 乘坐交通工具去工地时,须遵守本单位的交通安全规定,不得强行拦车、扒车或坐在自卸车后斗里; 在工地现场取样时,须先放置好安全标志,注意来往的施工机械,严禁在平地机、压路机、洒水车等施工机械的阴凉下操作、休息。 第八条现场试验操作安全 1、在水泥砼拌和站取样时及测坍落度时,严防机器搅拌叶片和传动带伤人;在沥青砼拌和站取样或试验时,严防被沥青高温烫伤及机器碰伤。 2、做钻孔桩的泥浆比重等试验时,要注意取样安全和钻机周围的环境,防止钻机、钻锥、掏渣筒等机具碰砸伤人,严防掉入孔内。 3、在钢筋加工现场取试件时,要注意钢筋加工机械操作的安全,严防被碰伤、砸伤、划伤。 4、在预应力构件压浆现场,不得站在构件出浆口方向,以防灰浆飞溅伤人。 5、在水泥砼罐车上取样时,要事先与司机协商好,征得同意后再取样。 6、在沥青施工中,需到沥青混合料运输车上测温时,须事先与司机协商好,征得同意后再上车测温。

Linux内核移植开发手册

江苏中科龙梦科技有限公司 Linux内核移植开发手册 修 订 记 录 项 次 修订日期 版 本修订內容修订者审 核 1 2009‐02‐04 0.1 初版发行陶宏亮, 胡洪兵 2 2009‐11‐20 0.2 删除一些 多余文字 陶宏亮, 胡洪兵

DISCLAIMER THIS DOCUMENTATION IS PROVIDED FOR USE WITH LEMOTE PRODUCTS. NO LICENSE TO LEMOTE PROPERTY RIGHTS IS GRANTED. LEMOTE ASSUMES NO LIABILITY, PROVIDES NO WARRANTY EITHER EXPRESSED OR IMPLIED RELATING TO THE USAGE, OR INTELLECTUAL PROPERTY RIGHT INFRINGEMENT EXCEPT AS PROVIDED FOR BY LEMOTE TERMS AND CONDITIONS OF SALE. LEMOTE PRODUCTS ARE NOT DESIGNED FOR AND SHOULD NOT BE USED IN ANY MEDICAL OR LIFE SUSTAINING OR SUPPORTING EQUIPMENT. ALL INFORMATION IN THIS DOCUMENT SHOULD BE TREATED AS PRELIMINARY. LEMOTE MAY MAKE CHANGES TO THIS DOCUMENT WITHOUT NOTICE. ANYONE RELYING ON THIS DOCUMENTATION SHOULD CONTACT LEMOTE FOR THE CURRENT DOCUMENTATION AND ERRATA. JIANGSU LEMOTE TECHNOLOGY CORPORATION LIMITED MENGLAN INDUSTRIAL PARK,YUSHAN,CHANGSHU CITY,JIANGSU PROVINCE,CHINA Tel: 0512‐52308661 Fax: 0512‐52308688 Http: //https://www.doczj.com/doc/d615007565.html,

gdb单步调试(中)

一、设置断点(BreakPoint ) 我们用break 命令来设置断点。正面有几点设置断点的方法: break 在进入指定函数时停住。C++ 中可以使用class::function 或function(type,type) 格式来指定函数名。 break 在指定行号停住。 break +offset break -offset 在当前行号的前面或后面的offset 行停住。offiset 为自然数。 break filename:linenum 在源文件filename 的linenum 行处停住。 break filename:function 在源文件filename 的function 函数的入口处停住。 break *address 在程序运行的内存地址处停住。 break break 命令没有参数时,表示在下一条指令处停住。 break ... if ... 可以是上述的参数,condition 表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100 ,表示当i 为100 时停住程序。 查看断点时,可使用info 命令,如下所示:(注:n 表示断点号) info breakpoints [n] info break [n] 二、设置观察点(WatchPoint ) 观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点: watch 为表达式(变量)expr 设置一个观察点。一量表达式值有变化时,马上停住程序。 rwatch

(安全生产)质量安全保证措施

质量安全保证措施 一、质量保证措施 (一)、工程质量目标 确保本工程达到“合格”标准。 (二)、质量标准 依据建设工程质量管理条例、国家现行建筑安装工程施工验收规范标准及国家强制性条文。 (三)、质量方针 塑造品牌、建造精品;信守承诺、顾客至上;竭诚服务、追求创新。 (四)、质量管理体系 成立以项目经理全面负责,项目经理为首,由专业技术负责、生产负责及各质量员组成的质量保证体系对施工全过程进行质量控制。项目经理任组长,技术负责及生产负责任副组长,其他管理人员任组员。质量管理体系

(五)、质量管理制度 1、技术、质量交底制度 ①、本工程由项目技术负责向施工、技术管理人员进行交底的内容有: 施工组织设计和特殊施工方案; 施工图纸会审记录; 建设单位、设计单位、监理单位及公司召开的与本工程项目有关技术质量会议的通报、决定、意见等内容; 设计变更; 安全、文明施工措施制度; ②、各专业工长负责向施工班组进行技术质量交底的内容有: 分部工程的施工方法、质量标准、重点特殊部位的要求和注意的事项; 分项工程的施工方法、质量标准、规范要求、技术质量保证措施,检查验收标准及质量验收后的奖罚措施; 设计变更的部位、内容、施工方法、操作方法及质量目标; 新技术、新材料的施工方法、注意事项、质量标准、质量目标; 技术安全措施、工完场清要求、产品保护措施等。 ③、所有技术、质量交底均应有书面材料,交底后填写“技术交底记录”。交底内容应全面,有针对性。专业工长的书面交底材料,须由项目部技术负责审查确认,确认后方可进行交底,交底内容在施工任务书中签署。 ④、交底后由交底人、被交底人、班组人员在交底记录上签字,作为技术资料交由项目部资料员保存。

嵌入式Linux之Kernel(裁减移植)启动调试、打印技术 printascii(补充)、内核调试

嵌入式系统搭建过程中,对于系统平台搭建工程师在完成Bootloader 的调试之后就进入Kernel 裁减移植的阶段,其中最重要的一步是Kernel 启动的调试,在调试Kernel 过程中通常遇到最常见的问题是启动异常: Uncompressing Linux............................................................ ........................... done, booting the kernel.( 挂死在此处) 注意:这里是arch/arm/boot/compressed/head.S的解压过程,调用了decompress_kernel()(同目录下的misc.c)->include/asm-arm/arch-xxx/uncompress.h的putc()实现。这是在uboot中初始化的,用的是物理地址,因为此时内核还没有起来。 而printascii则是调用了汇编。printascii()位于arch/arm/kernel/debug.S,他需要调用虚拟地址,此虚拟地址通过machine_start提供,而相关的宏在include/asm/arch-xxx/debug-macro.S实现,这下明白了。 10-05-14添加:debug.s里面需要判断一下当前是否打开了mmu,然后指定uart的基址。在解压阶段的head.s,mmu是1:1映射,目的是加快速度。到了内核的head.s,就是真正的mmu了,此时就是虚拟地址了。 导致驱动异常(启动挂死)的原因有很多,如基于EVM 板的硬件做了修改(如更改了FLASH 空间大小、地址和型号,更改了SDRAM 、DDR SDRAM 空间大小、地址和型号,更改了晶振频率等),板卡ID号不支持等。那么如何进行调试那,其实有两种调试技术比较有效。 Kernel 启动调试技术- 使用printascii() 函数跟踪start_kernel() 有没运行,在booting the kernel 之后Kernel 最先执行的是start_kernel() 函数,确认start_kernel() 有否执行就是在其开始代码段添加printascii("start_kernel …") ,如果串口没有打印出start_kernel …,说明start_kernel() 没有运行,那么可能的原因有Bootloader 配置的启动参数错误、 Kernel 加载到(DDR) SDRAM 的地址不正确, Kernel 编译时指定的(DDR) SDRAM 运行地址不正确等。这样就需要一项一项排查错误,当错误被排查完毕,通常打印出start_kernel …是种必然,如果打印出这仪信息说明 Kernel已进入到start_kernel() 执行,如果此时有串口启动打印就比较成功了,如果仍然没有打印启动信息,就需要另外一种调试技术。 附代码修改:init/main.c <<- … extern void printascii(const char*); // Modify asmlinkage void __init start_kernel(void)

gbd调试

用GDB调试程序 GDB概述 ———— GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UN IX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。 从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。 一个调试示例 —————— 源程序:tst.c

1 #include 2 3 int func(int n) 4 { 5 int sum=0,i; 6 for(i=0; i cc -g tst.c -o tst 使用GDB调试:

质量安全保证体系及措施.doc

质量控制措施 第一节质量保证体系及措施 一、质量目标 1、确保工程一次交验合格。 2、满足规定的需要和用途,在确保安全生产的前提下,加强综合管理,以质量求效益,实行科学管理,精心施工。 3、满足用户对工程产品的质量要求和期望(适用性、可靠性、耐久性、美观性、经济性) 4、符合社会有关安全环境保护方面的法令或条例的规定。 5、使企业获得良好的经济效益。 二、质量目标管理的组织保证 建立质量管理体系,健全质量目标控制管理制度和落实质量责任制。认真贯彻公司按照ISO9002标准制定的《质量保证手册》和各个工作程序文件,建立项目质量保证体系,确保每道工序受控。并将总目标横向展开到各科室,纵向分解到各队组,做到环环相扣,人人有责,形成相互协调、相互制约、相互促进的管理网络。 三、质量管理体系 为确保质量体系能有序运行,成立工程质量管理领导小组,建立完善的质量管理体系,切实树立“质量第一,用户第一,信

誉第一”的思想。形成“人人心里有目标,人人手中有标准”,达到质量创优 目标明确,工艺过程管理严格,施工监督认真负责,以强化全员意识为先导,以争创优质工程为龙头,以务实管理为重点,以推进科技进步为保证的全员争先氛围。质量是企业的生命,是企业竞争和发展的基础,更是本工程实施进程中贯穿始终的主题。 1、由项目经理任工程质量第一责任人,对质量全面负责承担工程项目建设实行全方位质量控制;负责组织实施人、财、物的高效合理运行,及时处理纠正施工过程中出现的偏差,确保承诺的实现。 2、技术管理层:各位项目管理人员在项目经理的统一指挥下,分工负责工程中的技术质量、过程质量等全面管理工作,科学地编制施工方案,及时应用先进的技术和施工工艺,解决施工中的技术质量问题,彻底根治工程中出现的质量通病。 3、生产职能保证层:落实实现优良的多项技术措施和工作内容,实行优质样板工程,以质量标准为准则,加大三检的力度,严格把好四道关口(材料质量关、质量交底关、优质样板关、成品保护关),实现各个分部达优。 四、质量保证措施 ㈠加强思想教育、提高质量意识 1、加强思想教育,强化质量管理,不断提高全员的质量意识,

使用QEMU+GDB调试Linux内核

使用QEMU调试Linux内核 一.使用QEMU安装Ubuntu10.04 1.安装qemu ubuntu下使用sudo apt-get install 安装的qemu版本是0.12.3,该版本中存在bug,使得无法在断点处停下;因此需要在qemu官方网站https://www.doczj.com/doc/d615007565.html,/Download上下载最新的版本qemu-0.12.5.tar.gz的源代码包自己进行编译安装: ●Sudo apt-get install zlib1g-dev libsdl-dev ●解压源代码后,进入源代码所在目录执行./confingure ●执行make ●执行sudo make install 2.创建QEMU格式的硬盘 qemu-img create –f qcow2name.img size 例如:qemu-img create –f qcow2 ubuntu10.04.img 4GB 3.在创建的硬盘上安装操作系统 qemu–hdaname.img–cdrom ~/Download/ubuntu10.04.iso –boot d 说明:使用hda指定硬盘镜像,使用CDROM选定光驱。-boot d 指从cdrom启动,-boot a是软盘,-boot c 是硬盘;使用qemu或qemu-system-x86_64(64为机子),有时安装系统会很慢,这是可以考虑使用kvm来代替。 例如:kvm–hda ubuntu10.04.img –cdrom ./ubuntu-10.04.iso -boot

d 4.从已经装好操作系统的硬盘启动 qemu–hda ubuntu10.04.img 5.在64位的主机上要使用qemu-system-x86_64命令来代替qemu 二.自己编译内核 现将Linux的编译调节过程简述为: 1. 下载自己要调试的Linux内核的源代码,这个可以从Linux内 核的官方网站上得到:https://www.doczj.com/doc/d615007565.html, 2. 编译内核最主要的便是配置文件.config,为了能够准确的得到 结果(第一次不要求编译时间),将本机的config文件直接拷 贝到解压后的源代码中。 3.然后进行make操作,结束后将产生的bzImage文件拷到boot 目录下,重启,选择自己编译的内核,这样一般不会出问题,但时间较慢,大约编译一次需要40分钟。 3.1以前编译内核是为调试内核服务的,现在做华为的项目, 发现需要在实际的机器上运行自己编译的内核,参考网站: https://www.doczj.com/doc/d615007565.html,/tips/compiling-linux-kernel-26.html 4.为了降低编译时间,就需要对配置文件进行裁剪,在配置文件 中有好多是本机不需要的模块,参考: https://www.doczj.com/doc/d615007565.html,/Linux/kernel_options.html。另外调试内 核与模块无关,所以辨识为M的直接可以不选。 5.剪裁的时候采用“逐步瘦身”法,先剪裁掉某个或某几个模块, 然后在进行编译,若没错,在进行模块裁剪,这样可以最大程

工程质量及安全保障措施

工程质量及安全保障措施 1、工程质量保证措施 1.1 质量目标 质量目标:“ 合格” 1.2 质量保证体系 我公司已通过国际质量标准体系ISO9002体系认证,建立了一套完整的质量管理及质量保证运行体系和企业质量运行标准。在该项目上我们将严格按照 ISO9002质量标准进行质量的预控和全面管理工作,并建立以项目经理为核心,项目技术负责人为主管的工程质量保证体系,层层监督落实质量管理制度,贯彻谁管生产谁管质量,谁操作,谁保证质量的原则,实行工程质 量岗位责任制。为实现本工程质量目标,根据公司质量体系的要求,建立本项目质量保证体系。质量保证体系附后 1.3 施工管理质量保证措施 1.3.1 建立健全各项质量目标责任制,做到目标明确,任务落实,责任 到位。 1.3.1.1 在该工程施工中,按照ISO9001标准的全部要素组织施工,公司建立以主任工程师为首的质量监督检查机构,包括各职能机构,项目直至施工班组,形成质量管理网络,项目建立以项目经理为总负责,项目质量工程师中间控制,项目质检员基层检查的管理系统,对工程质量进行全员、全过程、全方位的控制。 1.3.1.2公司实行严格的质量责任签订制度,首先由公司经理与项目经

理签订项目经理责任状,确定质量目标,实行风险抵押,然后由项目经理与项目管理人员签订工程质量责任状,确定分部分项质量目标。层层签订责任制度,以利于质量目标的实现。 1.3.1.3建立项目五条控制线,即:主体控制线、装修控制线、材料供 控制线、现场文明、现场管理控制线。每条控制线由专人负责,并与项目经 理签订责任状,与经济挂勾,做到目标落实,奖金兑现。 1.3.1.4建立民主管理,针对项目工程的关键点及采用的新技术、新工 艺,开展群众性的QC小组活动,在管理人员中成立QC质量小组,用 QC方法向科技进步要质量、要工期、要效益。 1.3.1.5施工中实行质量一票否决制。 1.3.2建立健全和严格执行各项制度 推行施工现场工程组织管理总负责人技术管理工作责任制,用严谨的科 学态度和认真的工作作风严格要求自己。严格贯彻执行公司的各项技术规 定,科学地组织各项技术工作,建立正常的工程技术秩序,把技术管理工作的重点集中放到提高工程质量,缩短建设工期和提高经济效益的具体技术工 作业务上。 1.3. 2.1建立健全各级技术责任制,正确划分各级技术管理工作的权 限,使每位工程技术人员各有专职、各司其职,真正做到有职、有权、有责、有利。以充分发挥每一位工程技术人员的工作积极性和创造性,为本工程建设发挥应有的骨干作用。 1.3. 2.2 建立施工组织设计和施工方案审查制度。工程开工前,将我公司 技术主管部门批准的工程施工组织设计报送监理工程师审核。对于重大或

在vmware虚拟机上调试内核

安装系统(在创建一个新的虚拟机时一定要用IDE硬盘) 1、在vmware上安装一个linux虚拟机(我用的软件版本:vmware 5.5, fedora 6) 从Internet下载源代码 1、linux-2.6.16 2、kgdb-2.6.16 编译内核 1、将kgdb-2.6.16补丁打到Linux内核源码里。 2、编译内核(make menuconfig, make, make modules_install, make install) 在内核配置菜单的Kernel hacking选项中选择kgdb调试项,例如: [*] KGDB: kernel debugging with remote gdb [*] KGDB: Console messages through gdb Method for KGDB communication (KGDB: On generic serial port (8250)) ---> < > KGDB: On ethernet [*] Simple selection of KGDB serial port (115200) Debug serial port baud rate (0) Serial port number for KGDB 3、修改grub.conf 例如: title Fedora Core (2.6.16) root (hd0,0) kernel /vmlinuz-2.6.16 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.16_debug.img 改为: title Fedora Core (2.6.16) root (hd0,0) kernel /vmlinuz-2.6.16 ro root=/dev/VolGroup00/LogVol00 kgdb8250=0,115200 initrd /initrd-2.6.16_debug.img 4、请检验新编译的内核是否可用。如果不能启动,可能是编译选项没有选好(一直困扰我的问题。实在不行就多选点)。如果没有问题,关闭这个linux虚拟机,进入下一步。

相关主题
文本预览
相关文档 最新文档