linux查看内核版本

cat/proc/version或者cat/etc/issue或者uname-a...
代码星球 代码星球·2021-01-31

OutputDebugString输出调试信息到debugtrack

OutPutDebugString()函数的输出则可以用DebugView捕获(DebugView也可以捕获TRACE宏的输出)eg:OutPutDebugString("输出第一调试信息");备注:先启动了debugview然后按F5运行我的代码。在开发环境里调试貌似是不行的。你可以编译了你的程序以后,直接运行你的程序,就好了,不要在开发环境里调试运行。要是想在开发环境里看调试信息,在开发环境底部的"输出"标签就可以看得到(VC),之所以DebugView看不到消息,应该是被开发环境截取了。...

《PHP内核探索系列文章》系列分享专栏

《PHP内核探索系列文章》已整理成PDF文档,点击可直接下载至本地查阅PHP内核探索系列文章收藏夹收藏有关PHP内核方面的知识的文章,对PHP高级进阶的朋友提供PHP内核方面的知识点探讨PHP内核探索:从SAPI接口开始PHP内核探索:一次请求的开始与结束PHP内核探索:一次请求生命周期PHP内核探索:单进程SAPI生命周期PHP内核探索:多进程/线程的SAPI生命周期PHP内核探索:Zend引擎PHP内核探索:再次探讨SAPIPHP内核探索:Apache模块介绍PHP内核探索:通过mod_php5支持PHPPHP内核探索:Apache运行与钩子函数PHP内核探索:嵌入式PHPPHP内核探索:PHP的FastCGIPHP内核探索:如何执行PHP脚本PHP内核探索:PHP脚本的执行细节PHP内核探索:操作码OpCodePHP内核探索:PHP里的opcodePHP内核探索:解释器的执行过程PHP内核探索:变量概述PHP内核探索:变量存储与类型PHP内核探索:PHP中的哈希表PHP内核探索:理解Zend里的哈希表PHP内核探索:PHP哈希算法设计PHP内核探索:翻译一篇HashTables文...

Kafka学习之内核原理剖析

  整个生产者客户端由两个线程协调运行,这两个线程分别为主线程和Sender线程(发送线程)。在主线程中由KafkaProducer创建消息,然后通过可能的拦截器、序列化器和分区器的作用之后缓存到消息累加器(RecordAccumulator,也称为消息收集器〉中。Sender线程负责从RecordAccumulator中获取消息并将其发送到Kafka中。    ProducerRecord:消息对象。Interceptor:拦截器,Kafka一共有两种拦截器:生产者拦截器和消费者拦截器。生产者拦截器既可以用来在消息发送前做一些准备工作,比如按照某个规则过滤不符合要求的消息、修改消息的内容等,也可以用来在发送回调逻辑前做一些定制化的需求,比如统计类工作。Serializer:序列化器,把对象转换成字节数组才能通过网络发送给Kafka。Partitioner:分区器,消息经过序列化之后就需要确定它发往的分区,如果消息ProducerRecord中指定了partition字段,那么就不需要分区器的作用,因为partition代表的就是所要发往的分区号。如果消息ProducerRecord中...

Tomcat配置远程调试端口(windows、Linux)

  当我们需要定位生产环境问题,而日志又不清晰的情况下,我们可以借助Tomcat提供的远程调试,设置如下://Linxu系统:apach/bin/startup.sh开始处中增加如下内容:declare-xCATALINA_OPTS="-server-Xdebug-Xnoagent-Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081"//Windows系统:apach/bin/startup.bat开始处中增加如下内容:SETCATALINA_OPTS=-server-Xdebug-Xnoagent-Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081  linux打开端口命令的使用方法: nc-lp8081&(打开8081端口)   linux查看是否打开8081端口: netstat-an|grep8081  注:linux下10...

Helloworld模块之内核makefile详解

HelloWorld模块以及对应的内核makefile详解 hello.c:#include<linux/module.h>//所有模块都需要的头文件#include<linux/init.h>//init&exit相关宏MODULE_LICENSE("GPL");MODULE_AUTHOR("feifei");MODULE_DESCRIPTION("helloworldmodule");staticint__inithello_init(void){printk(KERN_ERR"helloworld");return0;}staticvoid__exithello_exit(void){printk(KERN_EMERG"helloexit!");}module_init(hello_init);module_exit(hello_exit);/*注释:这个模块定义了两个函数,一个在模块加载到内核时被调用(hello_init)以及一个在模块被去除时被调用(hello_exit).moudle_init和module_exit是比较特别的内...

嵌入式中的 *(volatile unsigned int *)0x500 解释

C语言中*(volatileunsignedint*)0x500的解释:如下;(unsignedint*)0x500:将地址0x500强制转化为int型指针*(unsignedint*)0x500=0x10:对地址为0x500赋值为0x10其中volatile关键字有以下用途:(1)用来同步,因为同一个东西可能在不同的存储介质中有多个副本,有些情况下会使得这些副本中的值不同,这是不允许的,所以干脆用volatile,让它只有一个,没有其他的副本,这样就不会发生不同步的问题。如下所示:volatile的意思是告诉编译器,在编程源代码时,对这个变量不要使用优化。在一般的程序设计中,如:int*a;intb;b=(*a)*(*a);这种情况。通常编译器为了减少存储器的读写时间,会把代码优化为:int*a;intb;intc;c=*a;b=c*c;如果把int*a改为volatileint*a编译器就不会自动把它优化掉了。在整个运算过程中,对变量*a的值又读取了一次。防止因变量*a的值在这一期间发生了改变,而导致程序结果的错误。(2)防止编译器优化去掉某些语句,像我在arm中见到个寄存器非常奇...

Linux下编译内核配置选项简介

Codematurityleveloptions代码成熟度选项Promptfordevelopmentand/orincompletecode/drivers显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择Generalsetup常规设置Localversion-appendtokernelrelease在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname-a"命令看到Automaticallyappendversioninformationtotheversionstring自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持Supportforpagingofanonymousmemory(swap)使用交换分区或者交换文件来做为虚拟内存SystemVIPCSystemV进程间通信(IPC)支持,许多程序需要这个功能.必选,除非你知道自己在做什么IPCNamespacesIPC命名空间支持,不确定可以不选POSIXMessageQueuesPOSIX消息队列,这是POSIXIPC中的一部分BSDProcessAc...

Ubuntu下编译内核

一、下载源代码和编译软件的准备 下载内核源代码:http://www.kernel.org/ 注意,点击2.6.25内核的F版,即完整版。 如果你懒得去网站点联接,运行下列命令: $cd~$wgethttp://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.10.tar.bz2安装有关编译程序。安装make,gcc,make-kpkg,运行menuconfig等等和编译内核相关的工具。安装不了,请检查/etc/apt/sources.list文件。有关命令:$sudo apt-getinstallbuild-essentialkernel-package  libncurses5-dev二、解压源代码注意,网上很多教程上说应该解压到/usr/src,纯属以讹传讹,linux掌门人linus说解压到任何目录上都可以。当然,linus的说法是正确的。我放在自己的主目录下的src目录。如果你下载源代码是放到自己的主目录下或者运行上面的wget下载的,那么运行下列命令:$...
代码星球 代码星球·2021-01-24

Linux内核学习方法

Makefile不是MakeLove  从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉。毕业的时候,人家跟我说Makefile我完全不知,但是一说MakeLove我就来劲了,现在想来依然觉得丢人。  毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。基本上,Linux内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件。对于一个希望能够在Linux内核的汪洋代码里看到一丝曙光的人来说,将它们放在怎么重要的地位都不过分。  我们去香港,通过海关的时候,总会有免费的地图和各种指南拿,有了它们在手里我们才不至于无头苍蝇般迷惘的行走在陌生的街道上。即使在内地出去旅游的时候一般来说也总是会首先找份地图,当然了,这时就是要去买了,拿是拿不到的,不同的地方有不同的特色,只不过有的特色是服务,有的特色是索取。  Kconfig和Makefile就是LinuxKernel迷宫里的地图。地图引导我们去认识一个城市,而Kconfig和Makefile则可以让我们了解一个Kernel目录下面的结构。我们每次浏览kernel寻找...
代码星球 代码星球·2021-01-24

linux内核源码注解

轻松学习Linux操作系统内核源码的方法针对好多Linux爱好者对内核很有兴趣却无从下口,本文旨在介绍一种解读linux内核源码的入门方法,而不是解说linux复杂的内核机制;一.核心源程序的文件组织:1.Linux核心源程序通常都安装在/usr/src/linux下,而且它有一个非常简单的编号约定:任何偶数的核心(例如2.0.30)都是一个稳定地发行的核心,而任何奇数的核心(例如2.1.42)都是一个开发中的核心。本文基于稳定的2.2.5源代码,第二部分的实现平台为RedHatLinux6.0。2.核心源程序的文件按树形结构进行组织,在源程序树的最上层你会看到这样一些目录:●Arch:arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系结构,例如i386就是关于intelcpu及与之相兼容体系结构的子目录。PC机一般都基于此目录;●Include:include子目录包括编译核心所需要的大部分头文件。与平台无关的头文件在include/linux子目录下,与intelcpu相关的头文件在include/asm-i386子目录下,而include/sc...
代码星球 代码星球·2021-01-24

GDB调试详解

GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。命令解释示例file<文件名>加载被调试的可执行程序文件。因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。(gdb)filegdb-samplerRun的简写,运行被调试的程序。如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。(gdb)rcContinue的简写,继续执行被调试程序,直至下一个断点或程序结束。(gdb)cb<行号>b<函数名称>b*<函数名称>b*<代码地址>d[编号]b:Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。d:Deletebreakpoint的简写,删除指定编号的某个断点,...
代码星球 代码星球·2021-01-24

VS2010调试入门指南

1导言在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间。通常,debug是指发现缺陷并改正的过程。修正缺陷紧随debug之后,或者说二者是相关的。如果代码中存在缺陷,我们首先要识别造成缺陷的根本原因(rootcause),这个过程就称作调试(debugging)。找到根本原因后,就可以修正缺陷。那么如何调试代码呢?VisualStudio提供了很多用于调试的工具。有时调试需要花费大量时间去识别rootcause。VS提供了许多辅助调试的便捷的工具。调试器(Debugger)包含错误列表、添加断点、可视化的程序流程、控制执行流程、DataTips、监视窗口(watchwindows)、多线程调试、线程窗口、并行调试概览以及IntelliTrace调试概览。我希望本文能够对调试功能的使用者有所裨益。请注意,本文使用VS2010。某些功能在旧版本中也是一致的,但是VS2010新增了许多features(Labelingbreakpoint,PinnedDataTip,Multit...
代码星球 代码星球·2021-01-24

vs2010的11个调试技巧和方法

调试是软件开发周期中很重要的一部分。它具有挑战性,同时也很让人疑惑和烦恼。总的来说,对于稍大一点的程序,调试是不可避免的。最近几年,调试工具的发展让很多调试任务变的越来越简单和省时。这篇文章总结了可能节省你大量时间的11个Visualstudio的调试技巧和方法。1悬停鼠标查看表达式值调试是很有挑战性的。比如在函数内逐步运行可以看出哪里出错,查看堆栈信息可以知道函数被谁调用等等……但是无论哪种情况下,查看表达式和局部变量的值都是很麻烦的(把表达式和局部变量放到watch窗口里)。一种更简单的方法,把鼠标停在所需查看的数据上。如果是类或结构,那么点击展开可以很方便快速地查看其字段。2在运行过程中改变变量值调试器不仅仅是分析程序崩溃和诡异行为的工具,还可以通过逐步调试检查数据和行为是否符合程序预期的方法解决许多bug。有时,你会想是否设置某些条件为真,程序就能正确运行了。其实你只要把鼠标移动到变量上,双击值,然后输入你需要的值。这样就不需要修改代码,重启程序了。3设置下一个运行位置一个典型的调试案例是我们经常会用逐步调试的方法去分析为什么函数出错了。这时你遇到这个函数调用其他函数返回错误,...

Linux内核gpiolib注册建立过程

1、相关的数据结构1structs3c_gpio_chip{//这个结构体是三星在移植gpiolib时封装的一个结构体用来描述一组gpio端口信息2structgpio_chipchip;3structs3c_gpio_cfg*config;//三星封装的用来配置一个gpio端口的结构体主要是上下拉模式配置4structs3c_gpio_pm*pm;//这个是电源管理相关的数据结构5void__iomem*base;//gpio相关寄存器的虚拟基地址6inteint_offset;7spinlock_tlock;8#ifdefCONFIG_PM9u32pm_save[7];10#endif11}; 1structgpio_chip{//内核提供的用来描述一组gpio端口信息的结构体2constchar*label;//一个标号也就是gpio端口的名字3structdevice*dev;//device指针指向这个gpio端口设备4structmodule*owner;56int(*request)(structgpio_chip*chip,//请求gpio申请7unsigne...
首页上一页...910111213...下一页尾页