Linux编程时遇到Oops提示该如何排查?

2018-11-28 16:52 次阅读

各位工程师在Linux下开发程序时,有没有遇到由于系统中存在某些小故障而跳出了“Oops”提示的情况,此时你是如何排查故障?一行行的查看代码吗?其实不用那么复杂,本文将为你介绍一种高效的Linux编程的故障排除方法。

在分析Oops之前,我们先来看以下这么一个例子,使用GPIO的中断做掉电检测,参考《嵌入式Linux开发教程下册》的驱动框架,设计如下程序框图:

Linux编程时遇到Oops提示该如何排查?

这个框架设计之初的理想流程为:应用启动-》程序初始化-》应用open设备-》等待中断事件,但实际项目开发时,往往发生许许多多不可预测的事情。如小王正在调Qt应用,发现老王的进程老在打印,那就不让老王的进程开机自启动,调了两三天后,不定时地提示个Oops提示,小王按照“以前代码不出现,新加的出现,那么起因绝对在新代码内”的惯性思维,认为是新加的Qt导致的,然后小王就不断测试,不断查找bug中。..。..。这样就过去了十年。

但原因其实是小王没有open设备,即驱动层没有初始化定时器队列,那么中断处理函数中50ms触发的队列就为一个空值,空指针时Linux内核当然“哎呦”一下提醒你了,而不定时地提示其实就是因为电源不定时地松动,gpio检测到掉电了所以触发了中断。

实际上,这样的案例十分常见,原本想A-》B-》C,实际使用是A-》D-》C,又或者驱动中有某个变量忘记初始化等等,这时分析Oops就可以十分快速地解决问题。那接下来我们就用Linux中标准驱动去触发一个Oops,对的你没看错,Linux内核标准源码也存在这样的异常,而且我们也可以去修复这样的问题。

使用我司的EasyARM-iMX283开发板,内核源码为光盘内的Linux-2.6.35.3.tar.bz2,编译方法请参考光盘资料,我们需要把lcd的背光驱动修改为ko模式。

Linux编程时遇到Oops提示该如何排查?

烧录完新内核,加载新编译出来的drivers/video/backlight/mxs_bl.ko文件就会提示以下Oops信息:

Linux编程时遇到Oops提示该如何排查?

乍看之下,这段信息跟乱码差不多,但只要你一层层地分析,你就会发现,这些信息已经告诉了我们错误的原因。接下来就开始我们的Oops分析之旅。

1、主要错误信息

Linux编程时遇到Oops提示该如何排查?

用于提示错误的类型,这里表示使用空指针。

2、操作入口

Linux编程时遇到Oops提示该如何排查?

用于提示错误的操作,这里表示加载mxs_bl模块时出错,对应于加载操作insmod mxs_bl.ko。

3、PC指针

Linux编程时遇到Oops提示该如何排查?

用于提示出错时的PC指针位置,PC指针即当前程序运行点的地址,这里提示表示错误函数为regulator_set_current_limit,偏移地址为0xc。

4、LR指针

Linux编程时遇到Oops提示该如何排查?

用于提示出错时的LR指针位置,LR指针即调用子函数的上一个函数名以及入口偏移量,这里表示上一个函数为set_bl_intensity,偏移地址为0xd8。即set_bl_intensity调用regulator_set_current_limit时出错。

5、寄存器

Linux编程时遇到Oops提示该如何排查?

用于记录出错时各个寄存器的值,对于汇编比较熟悉的同志们可以研究一下这段信息。

6、出错进程信息

Linux编程时遇到Oops提示该如何排查?

用于提示出错的进程id号与进程名称。出错进程为insmod, PID号2261,对于多任务系统中,可能存在多个PID调用同一个接口的情况。

7、出错时的堆栈信息

Linux编程时遇到Oops提示该如何排查?

用于提示出错时堆栈内保存的寄存器信息,当程序由于中断发生或子程序调用时,会执行压栈操作,即将运行环境保存到堆栈内,保证退出中断或跳出子程序后,运行环境不发生改变。

而此处的堆栈信息即记录了程序运行时的环境信息。从中我们可以找到许多LR地址,从而分析出函数调用关系,与下一段的信息有类似作用。

8、函数执行的回溯关系

Linux编程时遇到Oops提示该如何排查?

用于表示函数的调用关系,通过这段信息我们可以知道,函数的整个执行流程,知道它的函数调用关系,最后整理出来的函数执行流程如下:

Linux编程时遇到Oops提示该如何排查?

从中我们看到了熟悉的init函数、probe函数、以及清楚probe函数下执行的操作过程是到哪一步出错的。现在我们知道了代码的执行流程,出错的PC指针的位置,但还是看不到代码,出错指针处我们只看到了一串数字,那么接下来我们就操作一下,把pc指针的数据变为有意义的代码。

第一步,分辨出错误代码在什么位置

这次实验涉及的二进制文件有内核的烧录固件以及驱动的ko文件,所以第一步分析就需要确定出错代码是在内核固件里还是ko文件里。

首先得到内核代码的范围,用以下命令将内核反汇编。

Linux编程时遇到Oops提示该如何排查?

查看这个文件的格式如是:

Linux编程时遇到Oops提示该如何排查?

第一列行数,第二列运行地址,第三列二进制码,第四列汇编代码,既然第二列为运行地址,即等同于程序运行到这行时,pc指针的值等于这个数值。这样只要翻看这个文件的头部以及尾部,就能知道内核代码的PC指针范围为:c0008000~c0562338。

根据前面第5步寄存器值,出错时PC指针为c02f1878,即在内核源码范围内。

第二步,分析出错函数的出错语句

那么根据第3步PC指针,得到regulator_set_current_limit的汇编代码,如下:

Linux编程时遇到Oops提示该如何排查?

函数入口地址为c02f186c 《regulator_set_current_limit》。

在第3步PC指针指出偏移地址为“PC is at regulator_set_current_limit+0xc”。

PC = 0xc02f1878 = 0xc02f186c + 0xc,符合汇编代码地址。

第三步,找到出错函数的C语言代码

这步可以说是最困难的,因为内核代码层次多,同名函数也可能存在许多份,可能几份编译进内核(static声明的局部函数),也可能没编译进内核,如何从众多的代码中分析出具体哪段呢。

本人就使用了一些小手段,首先给每个同名函数的入口加段乱码,让编译器筛选出编译进内核的文件(因为乱码,所以编译会报错),然后给剩下的函数加打印语句,通常经过第一步之后,可选的目标就两三个,通过打印进一步确认代码即可。

以下为筛选出来的C语言代码。

Linux编程时遇到Oops提示该如何排查?

看到这好像是定位了函数,但对于不熟悉汇编的人来说,C与汇编还是没有关联起来,好像进入了死胡同,但先别气馁,从上面的汇编代码中我们知道,函数名即为函数的首地址,那么调用子函数即需要让CPU知道子函数名,那么汇编如何调用子函数呢?使用bl指令, bl+子函数名。既然汇编有这么一个特性,那么我们看汇编代码。

上面582734行为“bl c0493104 《mutex_lock》”这句调用了子函数,再看C中调用此函数的语句。

Linux编程时遇到Oops提示该如何排查?

那么结果显而易见,不可能定义个变量都报错吧,所以唯一可能错误的语句就是struct regulator_dev *rdev = regulator-》rdev,同理,这句的前半部也只是定义一个rdev的变量,再结合内核给出来的提示——空指针,所以错误就是regulator-》rdev是一个空指针。

最终的问题就归结于,为什么regulatar-》rdev为空指针。这部分的查阅代码以及推理需要更深层次地挖掘,工作量也非本文能说清的,故作者在这里就大胆地推测与上面的A-》B-》C模型类似。所以我们就需要在这个资源存在的时刻,调用它之前给它赋值。

这时侯,我们就需要拿出第8步函数执行的回溯关系图,既然知道这个图中最后的函数的输入参数regulator的rdev为空,那么我们就关心regulator结构体以及它的意义。从结构体的意义我们才能知道如何给它赋值。

Linux编程时遇到Oops提示该如何排查?

在相关的代码文件中搜索关键字”regulator”或”regulator =”(建议搜这个,因为这种才是赋值语句)得到如下代码。

Linux编程时遇到Oops提示该如何排查?

分析这个函数可知,regulator实际是pdata的一个成员,他需要data来初始化,那么接下来的事情就简单了,在回溯关系中找一个位置把data的数据塞入pdata中,刚好这段函数就是初始化的regulator的,那就直接拿去用吧。

把这段添加到probe函数内的这个位置,实现了在mxsbl_probe和mxsbl_do_probe之间赋值此变量。

Linux编程时遇到Oops提示该如何排查?

这样重新编译后即可正常加载ko文件。

热门推荐

收藏 人收藏
分享:

评论

相关推荐

了解CPI对分析程序性能的意义

本小节讲述为什么使用 CPI 分析程序性能的意义。如果已经非常了解 CPI 对分析程序性能的意义,可....

的头像 Linuxer 发表于 12-15 10:30 364次 阅读
了解CPI对分析程序性能的意义

MontaVista推出下一代嵌入式linux操作系统 集成了最新的linux2.6内核

montavista软件公司日前宣布推出下一代嵌入式linux操作系统——montavistalin....

发表于 12-15 09:59 71次 阅读
MontaVista推出下一代嵌入式linux操作系统 集成了最新的linux2.6内核

Shell的18条常用命令整理资料合集

Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显....

的头像 马哥Linux运维 发表于 12-15 09:24 183次 阅读
Shell的18条常用命令整理资料合集

如何替代TOP工具6种TOP工具的替代方案详细说明

在本文档中,我会介绍一些针对 top 工具(也就是命令行任务管理器程序)的替代方案。

的头像 Linux爱好者 发表于 12-15 09:14 156次 阅读
如何替代TOP工具6种TOP工具的替代方案详细说明

BootLoader引导程序的详细实验资料说明

完整的系统由x-loader、u-boot、kernel(内核)、rootfs(根文件系统)组成,x....

发表于 12-14 13:42 27次 阅读
BootLoader引导程序的详细实验资料说明

MySQL教程之MySQL 5权威指南中文版资料免费下载

本书全面深入地介绍了MySQL的功能,主要内容包括MySQL、PHP、 Apache、 Perl 等....

发表于 12-14 13:42 20次 阅读
MySQL教程之MySQL 5权威指南中文版资料免费下载

FP系列PLC编程手册补充版的详细资料免费下载

本文档的主要内容详细介绍的是FP系列PLC编程手册补充版的详细资料免费下载。适用于FP-X, FPΣ....

发表于 12-14 08:00 26次 阅读
FP系列PLC编程手册补充版的详细资料免费下载

Bootloader的详细资料分析免费下载

本文档的主要内容详细介绍的是Bootloader的详细资料分析免费下载。主要内容包括了:熟悉Boot....

发表于 12-13 17:08 23次 阅读
Bootloader的详细资料分析免费下载

嵌入式Linux开发教程之嵌入式Linux应用开发手册资料免费下载

本书全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Li....

发表于 12-13 16:46 22次 阅读
嵌入式Linux开发教程之嵌入式Linux应用开发手册资料免费下载

Linux教程之如何进行Bootloader的编写详细驱动学习资料汇总

Bootloader 把外部flash 中的内核代码读入内存(需要读flash 的驱动,初始化时钟,....

发表于 12-13 13:53 30次 阅读
Linux教程之如何进行Bootloader的编写详细驱动学习资料汇总

从Synthesis到比特流生成在TRCE期间失败

当前操作系统:Linux 32位 Device Virtex 5 LX50 利用率:90% 我们正在运行我们的设计实现,从Synthesis到比特流生成。...

发表于 12-13 10:51 89次 阅读
从Synthesis到比特流生成在TRCE期间失败

基于嵌入式Linux与S3C2440双USB接口的视频存储

针对长途客车“三超”(中途超载上人,超时,超速)以及在非正常停靠站私自停车上人导致的客车超载,同时目前市面上视频监控设备由...

发表于 12-13 09:49 134次 阅读
基于嵌入式Linux与S3C2440双USB接口的视频存储

Linux 如何快速上手

作为一个学习嵌入式单片机的小渣渣,我觉得linux是必须要学习的,除非是做纯裸机开发的,要不然早晚都要学...

发表于 12-12 16:56 113次 阅读
Linux 如何快速上手

超详细的Linux用户和用户组管理

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员....

的头像 嵌入式ARM 发表于 12-12 16:46 182次 阅读
超详细的Linux用户和用户组管理

通过LAN从Linux笔记本电脑在34972A上运行测试脚本

我的同事,我的同事想要从Linux笔记本电脑上运行34972A测试仪上的Expect(TCL)脚本。 我们将Linux笔记本电脑和测试仪器...

发表于 12-12 16:05 55次 阅读
通过LAN从Linux笔记本电脑在34972A上运行测试脚本

可以重新定义许可证文件的位置吗?

我正在尝试在我们的IT部门部署的标准Linux系统上使用Vivado。 在此设置中,/ usr / local / share是一个校园范围的共享卷,...

发表于 12-12 10:42 79次 阅读
可以重新定义许可证文件的位置吗?

linux嵌入式编程开发必备知识,这些你都要知道 | 外赠C语言相关电子书

在技术迅猛发展的今天,嵌入式成为现在最热门的IT技术之一,对于嵌入式来说,学习嵌入式最重要的就是嵌入式linux系统了,这是嵌...

发表于 12-12 10:18 105次 阅读
linux嵌入式编程开发必备知识,这些你都要知道 | 外赠C语言相关电子书

Java零基础入门书籍之零基础学Java第4版电子教材免费下载

Java语言拥有面向对象、跨平台、分布式、高性能、可移植等优点和特性,是目前应用最广泛的编程语言之一....

发表于 12-12 08:00 30次 阅读
Java零基础入门书籍之零基础学Java第4版电子教材免费下载

Linux教程之Linux如何进行进程创建

这是一个经典的操作系统问题:进程是什么?相信很多人可以回答出来:进程就是一个运行中的程序实体。回答得....

发表于 12-11 17:33 32次 阅读
Linux教程之Linux如何进行进程创建

Linux服务器配置全程实录电子教材免费下载

Linux 服务器配置是Linux的最主要应用之一,在企业中应用广泛,本书以企业Linux服务器架设....

发表于 12-11 17:11 25次 阅读
Linux服务器配置全程实录电子教材免费下载

移植Bootloader的过程总结资料说明

linux系统上电后启动过程:---启动引导加载程序bootloader(一些CPU在运行bootl....

发表于 12-11 17:11 34次 阅读
移植Bootloader的过程总结资料说明

明远智睿MY-IMX6-EK200 L3035测试手册(1)

1 测试前的准备 1)请按照《Linux快速启动手册》中的“Linux快速启动” -> “连接设备”进行连接。 2)请按照《Linux快速...

发表于 12-11 16:37 575次 阅读
明远智睿MY-IMX6-EK200 L3035测试手册(1)

零基础如何入门c语言

工作中,接触过很多想到学习c语言而又没有一点计算机基础的人。经常有人问”我没有一点基础,该怎么入门c语言啊”。看过很多初学...

发表于 12-11 16:24 384次 阅读
零基础如何入门c语言

linux嵌入式开发板推荐,资深程序员教给你|外赠Linux必读电子书

嵌入式开发板如何选择? 首先了解嵌入式linux开发板,了解了之后,那就是如何选择的问题了,选择linux开发板其实简单的说就是有...

发表于 12-11 16:08 423次 阅读
linux嵌入式开发板推荐,资深程序员教给你|外赠Linux必读电子书

关于天嵌TQIMX6Q工控板的LTIB安装配置的技术分享

  关于天嵌TQIMX6Q工控板的LTIB安装配置的技术分享,LTIB(Linux Target Image Builder)工程是一个使用在不同...

发表于 12-11 16:06 563次 阅读
关于天嵌TQIMX6Q工控板的LTIB安装配置的技术分享

Linux教程之Linux网络基础的详细资料概述

主要让读者在使用Internet之前对Internet有一个大致的了解,以帮助读者对本书后续章节的学....

发表于 12-11 14:00 28次 阅读
Linux教程之Linux网络基础的详细资料概述

嵌入式教程之Bootloader的详细资料说明

Linux 内核的启动是需要一定的必要条件的,但在CPU 刚上电启动时,一般连内存控制器都没有配置过....

发表于 12-11 13:59 34次 阅读
嵌入式教程之Bootloader的详细资料说明

LT48XP_610编程软件免费下载

本文档的主要内容详细介绍的是LT48XP_610编程软件免费下载。

发表于 12-11 08:00 27次 阅读
LT48XP_610编程软件免费下载

安卓系统使用教程之安卓系统的50个使用技巧资料免费下载

安卓最近两年的发展,现在的用户界面和交互都比较人性化了,但是很多安卓的新用户还是不怎么了解安卓系统手....

发表于 12-10 08:00 28次 阅读
安卓系统使用教程之安卓系统的50个使用技巧资料免费下载

关于Linux不要尝试着去使用的10条命令

Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。

的头像 马哥Linux运维 发表于 12-09 10:15 384次 阅读
关于Linux不要尝试着去使用的10条命令

Linux入门教程之快速学习Linux AWK命令的教程免费下载

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时....

的头像 马哥Linux运维 发表于 12-08 10:39 328次 阅读
Linux入门教程之快速学习Linux AWK命令的教程免费下载

IMX6 MfgTool烧录的详细步骤

首先,有必要了解开发板支持的各系统版本,并根据自己的需要选择对应的 系统版本。

发表于 12-08 09:26 94次 阅读
IMX6 MfgTool烧录的详细步骤

Linux入门教程之Linux的基本操作详细资料说明

本文档的主要内容详细介绍的是Linux入门教程之Linux的基本操作详细资料说明主要内容包括了:1,....

发表于 12-07 17:21 107次 阅读
Linux入门教程之Linux的基本操作详细资料说明

25个有用的技巧和窍门,帮助你让Linux系统更加安全

你真的需要安装所有的服务么?建议不要安装无用的包,避免由这些包带来的漏洞。这将最小化风险,因为一个服....

的头像 马哥Linux运维 发表于 12-07 16:10 268次 阅读
25个有用的技巧和窍门,帮助你让Linux系统更加安全

嵌入式教程之Linux的基础命令详细资料说明

本文档的主要内容详细介绍的是嵌入式教程之Linux的基础命令详细资料说明主要内容包括了:1.Linu....

发表于 12-06 17:31 45次 阅读
嵌入式教程之Linux的基础命令详细资料说明

Android教程之如何使用命令行工具和Android模拟器

到目前为止,本书包含了一些非常宽的科目关于学习如何运行Android平台。就这一点来说,对于使用Ec....

发表于 12-06 10:15 28次 阅读
Android教程之如何使用命令行工具和Android模拟器

你真的了解ARM吗

51单片机寄存器比较少,指令只有111条;而arm芯片寄存器较多,指令集也多,要掌握它需要耐心和时间....

的头像 电子发烧友网工程师 发表于 12-06 08:48 280次 阅读
你真的了解ARM吗

C语言入门教程之C语言编程实例源代码资料免费下载

本文档的主要内容详细介绍的是C语言入门教程之C语言编程实例源代码资料免费下载。

发表于 12-06 08:00 121次 阅读
C语言入门教程之C语言编程实例源代码资料免费下载

3CX统一通信解决方案,解决企业通信问题

3CX是一个完整的统一通讯解决方案。将语音、视频、移动办公和信息服务集成在一个平台上,因而不需要多台....

的头像 CTI论坛 发表于 12-05 15:20 191次 阅读
3CX统一通信解决方案,解决企业通信问题

C++的新标准又双叒叕要到来了,C++20要来了!

然而,模版编程还存在一些问题,比如有些模版的代码写起来比较困难,读起来比较难懂,尤其是编译出错的时候....

的头像 嵌入式资讯精选 发表于 12-05 13:43 325次 阅读
C++的新标准又双叒叕要到来了,C++20要来了!

C#入门教程之面向对象编程简介的详细资料概述

本文档的主要内容详细介绍的是C#入门教程之面向对象编程简介的详细资料概述主要学习的目标是1.面向对象....

发表于 12-05 11:54 37次 阅读
C#入门教程之面向对象编程简介的详细资料概述

学会分析Linux内核需要多久?8分钟

出于简便考虑,在此分析中,我忽略了对大内核的处理的分析,因为对大内核的处理,只是此引导过程中的一个很....

的头像 马哥Linux运维 发表于 12-04 17:06 303次 阅读
学会分析Linux内核需要多久?8分钟

如何安装和配置NI USB数据采集(DAQ)设备

本指南描述了如何安装和配置NI USB数据采集(DAQ)设备,以及如何验证这些设备是否正常工作。NI....

发表于 12-03 08:00 44次 阅读
如何安装和配置NI USB数据采集(DAQ)设备

Linux教程之如何进行软件包管理

软件包管理器(RPM)是开放打包系统,在Red Hat Linux 里,因为有了Red Hat Pa....

发表于 11-30 16:36 46次 阅读
Linux教程之如何进行软件包管理

为幼儿园学生设计的AI教材曝光!谷歌AI专家指导,幼儿园娃娃就要学AI

Scratch编程环境:该编程环境主要用于编程入门学习。它基于开源的Scratch 3.0系统进行二....

的头像 悟空智能科技 发表于 11-29 17:00 480次 阅读
为幼儿园学生设计的AI教材曝光!谷歌AI专家指导,幼儿园娃娃就要学AI

如何使用ARM开发板和Linux嵌入式系统设计一个智能点菜系统

本课题设计是以ARM开发板搭载Linux嵌入式系统为核心,使用QT编程制作GUI点菜终端,用LCD屏....

发表于 11-29 08:00 234次 阅读
如何使用ARM开发板和Linux嵌入式系统设计一个智能点菜系统

首发:周立功教授《嵌入式软件工程方法与实践丛书》在北航正式出版开售

11月24日,由周立功教授主导撰写的《嵌入式软件工程方法与实践丛书》前三本,共计200万字,在全国嵌....

的头像 人间烟火123 发表于 11-28 16:41 2757次 阅读
首发:周立功教授《嵌入式软件工程方法与实践丛书》在北航正式出版开售

私人订制Linux的全部操作,打造一个属于自己的Linux小系统

我们要在一个现有的Linux系统上加一块硬盘/dev/sdb,在硬盘上分两个分区,一个是/boot,....

的头像 马哥Linux运维 发表于 11-28 16:22 384次 阅读
私人订制Linux的全部操作,打造一个属于自己的Linux小系统

Linux操作系统实用教程之如何进行Linux的安装启动与关闭

用户首先明确安装用途以及和现有计算机操作系统的关系,进行确认,了解掌握Linux操作系统安装的一般性....

发表于 11-28 15:56 32次 阅读
Linux操作系统实用教程之如何进行Linux的安装启动与关闭

Linux应用基础教程之Linux如何进行系统管理

本文档的主要内容详细介绍的是Linux应用基础教程之Linux如何进行系统管理主要内容包括了:1 用....

发表于 11-28 15:56 40次 阅读
Linux应用基础教程之Linux如何进行系统管理

Linux应用基础教程之Linux的网络服务资料概述

本文档的主要内容详细介绍的是Linux应用基础教程之Linux的网络服务资料概述主要内容包括了:1 ....

发表于 11-28 15:56 26次 阅读
Linux应用基础教程之Linux的网络服务资料概述

如何成为Linux驱动工程师

由于很多人总问这个问题,所以这里做一个总结供大家参考。这里必须先说明,以下的步骤都是针对Linux系....

的头像 玩转单片机 发表于 11-28 15:50 305次 阅读
如何成为Linux驱动工程师

软件开发工程师的5种类型

在我的代码旅程和编程经历中,已经遭遇很多奇特的对手,还有更为奇特的盟友。我至少发现有5种代码勇士,有....

的头像 工程师人生 发表于 11-28 15:20 203次 阅读
软件开发工程师的5种类型

如何在Win下安装linux的虚拟机详细安装方法资料概述

本文档的主要内容详细介绍的是如何在Win7下安装linux的虚拟机详细安装方法资料概述免费下载。

发表于 11-28 15:03 32次 阅读
如何在Win下安装linux的虚拟机详细安装方法资料概述

在单片机编程中什么时候需要用到enum呢

当变量的数值在几个范围之间,如一个week变量取值只有Monday,Tuesday,Wednesda....

的头像 畅学单片机 发表于 11-28 09:18 375次 阅读
在单片机编程中什么时候需要用到enum呢

GTK+和Glade GUI编程教程资料免费下载

如果你没有任何GTK+ 的编程经验, 那么, 对于我将要阐述的一些概念你也许会听着犯迷糊。不过,不用....

发表于 11-27 16:37 34次 阅读
GTK+和Glade GUI编程教程资料免费下载

中软的一套面试题和一些C++的经典面试题资料合集免费下载

本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用语法,不涉及数据结构、算法以及....

发表于 11-27 15:03 48次 阅读
中软的一套面试题和一些C++的经典面试题资料合集免费下载

俄罗斯反病毒软件厂商Dr.Web发现了一种新型木马

如果程序尚不存在,它甚至可以自行下载 nohup 工具来实现这一点。在牢牢掌握了受感染的主机之后,它....

的头像 Linux爱好者 发表于 11-26 15:27 273次 阅读
俄罗斯反病毒软件厂商Dr.Web发现了一种新型木马

如何在Linux下实现MySQL数据库定时自动备份

备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机....

的头像 马哥Linux运维 发表于 11-26 11:05 259次 阅读
如何在Linux下实现MySQL数据库定时自动备份

顶级Linux开发者必不可少的编程阅读书籍

Linux 是在大约上世纪 90 年代开发出来的,与它一起问世的还有其他一些完成基础功能的开源软件。....

的头像 人间烟火123 发表于 11-25 10:47 2814次 阅读
顶级Linux开发者必不可少的编程阅读书籍

AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)

TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。 这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。 这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。 处理器子系统基于ARM Cortex-A9内核,PowerVR SGX™图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。 可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...

发表于 09-25 11:51 36次 阅读
AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)