为您找到搜索结果:740个
Linux内核静态映射表的建立过程
/* * 平台: s5pv210 * 内核版本号:2.6.35.7 */ kernel/arch/arm/mach-s5pv210/mach-smdkc110.c这个文件是由三星在移植内核时提供的一个很重要的文件,这个文件中的函数都是与硬件相关的。mach-smdkc110.c文件中的smdkc110_map_io函数就是静态映射表建立过程调用的一个函数开机时调用映射表建立函数: 问题:开机时(kernel启动时)smdkc110_map_io怎么被调用的?start_kernel setup_arch paging_init devicemaps_init { ...
Linux内核中断学习
1、内核中断概述(1)在OS环境下编写中断处理函数与之前在裸机中编写中断处理函数的方式是不一样的,在Linux内核中提供了一套用来管理硬件中断资源的软件体系架构。(2)在操作系统中,中断号与gpio、内存一样被认为是一种硬件资源,当我们需要使用某一个中断号时必须向操作系统申请中断资源,只有申请成功才能够使用,否则就不能被自己使用。 2、中断的申请及释放在Linux内核中提供了专用接口用来申请中断资源,这个接口就是:request_irq(1)函数原型: request_irq(unsignedintirq,irq_handler_thandler,unsignedlongflags, constchar*name,void*dev)(2)参数说明: irq: 需要申请的中断号,需要注意的是这里的中断号是内核中相关头文件中定义好的,与实际的硬件平台是相对应的,这个是内核移植的时候就做好的,不需要你去关系。 handler: 中断处理函数指针 &nbs...
内核链表操作函数/宏
之前说过Linux内核中建立了一套内核链表体系,包括在内核中链表的定义和使用方法。由于内核中定义的对链表的操作方法太多了,限于时间和能力的问题,我将记录在学习过程中所用到的操作方法。内核中源文件位置:includelinuxlist.h 1、list_entry宏(1)原型: #definelist_entry(ptr,type,member) container_of(ptr,type,member)(2)作用:从上面可以看出来,list_entry宏其实就是container_of宏,这个宏之前说过,是内核中一个很重要的宏。可以通过结构体中的某一个变量的指针来获取 整个结构体变量的指针;ptr就是这个结构体中某个变量的指针,type就是这个结构体的类型,member就是ptr指针对应的变量的变量名。(3)使用例子:1structA{2inta;3intb;4intc;5};6structAa={0};7structA*ptr=list_entry(&a...
Linux内核启动logo
之前在分析samsung的fb驱动代码的时候,其中有一段代码是处理内核logo显示相关的,今天就内核logo这个话题来聊一聊! 一、处理内核logo显示相关的代码在哪?回到samsung的fb驱动代码中,因为fb的驱动代码是基于platform平台总线编写的,所以我们需要找到platform_driver结构体中的probe函数,如下所示: 1、函数执行流程/***********************************************************************/s3cfb_probe // "driversvideosamsungs3cfb.c" fb_prepare_logo //准备logo文件,也就是去找到需要显示的logo文件 "driversvideofbmem.c" fb_find_logo ...
proc文件系统在内核中的表现
当Linux内核启动起来之后,我们可以通过proc虚拟文件系统来查看内的中的一些动态信息。例如:可以cat /proc/misc 来查看系统中装载的所有misc类设备cat /proc/devices 来查看系统中装载的字符设备和块设备 但是需要注意的是:proc文件系统现在用到比较少了,主要原因我之前也说过,proc中的文件目录关系混乱,不好管理,现在一般都是用sys文件系统,所以在内核配置的时候是可以将proc文件系统给去掉的。 今天也来说说proc文件系统内部的实现:1、在proc文件系统下创建文件:proc_create(以/proc/misc文件为例子)proc_create("misc",0,NULL,&misc_proc_fops); // misc_proc_fops是一个struct file_operations结构体的变量,这个跟字符设备注册中的结构体是一样的 2、misc_seq_open函数分析: 从上面可以看出来,mi...
内核中防止竞争状态的手段
1、什么是竞争状态,之前在应用编程的学习中已经提到过。竞争状态就是在多进程环境下,多个进程同时抢占系统资源(内存、CPU、文件IO),竞争状态对OS来说是很危险的,此时OS如果没处理好就会造成意想不到的结果。写程序当然不希望程序运行的结果不确定,所以我们写程序时要尽量消灭竞争状态。操作系统给我们提供了一系列的消灭竟态的机制,我们需要做的是在合适的地方使用合适的方法来消灭竟态。这是之前在应用编程中说的,但是在内核态中同样存在竞争状态,所以今天来说说Linux内核中提供的用来消灭竞争状态的方法。内核中消灭竞争状态的方法:互斥锁、信号量、原子访问、自旋锁首先说明本次使用的内核版本是:Linux2.6.35.7一些概念:临界段、互斥锁、死锁同步:多CPU、多任务、中断2、互斥锁互斥也就是相互排斥的意思,排他性,在编程中引入互斥是为了保证公共访问对象在同一时间(这个同一时间指的是宏观上的同一时间)内只能被一个线程进行访问操作。当有一个线程在访问这个对象的时候,其他的线程是无法对他进行访问的。他的实现原理就是通过互斥锁来实现的,当线程访问公共对象时,在访问之前他需要先去获取访问这个对象的锁,如果此...
内核链表与普通链表
1、在Linux内核中经常能够看到structlist_head这样的一个结构体,这个就是内核中的一个链表,内核链表structlist_head{structlist_head*next,*prev;};这个结构体中只有两个指向链表结构体的指针,分为前向指针和后向指针,因为可以用来构建一个双向链表,但是这个链表的用法与我们普通的链表的用法不一样,我们的一般的链表结构体中都会包含两部分:一个是指针(前向指针和后向指针)部分,还有就是有效数据部分。将我们链表需要存放的数据放在结构体中的有效数据区中,通过两个节点分别指向上一个节点和下一个节点。这是一般的链表的使用方法。(1)但是内核链表的结构体中只有两个指针,并没有有效数据区,所以内核链表的用法和我们的普通链表的用法是不一样的,我们使用内核链表的方法就是:自己建立一个结构体去包含这个内核链表,将整个结构体作为一个链表的节点,然后使用内置的链表的前向指针指向下一个结构体中内置的链表,使用内置的链表的后向指针指向上一个结构体中内置的链表。例如:structA{ ...
vue 移动端调试工具(vconsole)
平时在web应用开发过程中,我们可以console.log去输出一些信息,但是在移动端,也就是在手机上,console.log的信息我们是看不到的。这种情况下,可以选择使用alert弹出一些信息,但是这种方法不怎么方便,也会阻断JS线程,导致后面的线程都不执行。也影响调试体验。那么,如果将console.log应用到移动端呢?需要借助第三方插件:vConsole1、安装npminstallvconsole2、在main.js引入importVconsolefrom'vconsole';newVconsole();3、在需要的地方console.log(内容) ...
Idea IntelliJ远程调试教程
第一步:修改startup.sh在倒第二行加上exportJPDA_ADDRESS=8787最后一行在start前面加上" jpda "第二步:配置Idea,Remote,修改服务器调试端口号和IP对于分布式系统的调试不知道大家有什么好的方法。对于我来说,在知道远程调试这个方法之前就是在代码中打各种log,然后重新部署,上线,调试,这样比较费时。今天咱们来了解了解Java远程调试这个牛逼的功能,本文以IntellijIDEA为例讲解怎么使用远程调试。以Thrift入门教程这篇文章中使用的程序作为例子。这个程序由Thrift服务端和客户端组成。描述一下远程调试需要解决的问题:服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。下面按照步骤介绍怎么远程debug。要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是:-Xdebug-Xrunjdwp:transport=dt_socket,suspen...
查看Linux内核及发行商版本命令
一、查看Linux内核版本命令(两种方法):1.cat/proc/versionLinuxversion3.10.0-327.el7.x86_64(builder@kbuilder.dev.centos.org)(gccversion4.8.320140911(RedHat4.8.3-9)(GCC))#1SMPThuNov1922:10:57UTC20152.uname-aLinuxvm-prd-ccctd-ccctd-185-192.tuniu.org3.10.0-327.el7.x86_64#1SMPThuNov1922:10:57UTC2015x86_64x86_64x86_64GNU/Linux 二、查看Linux系统版本的命令(两种方法):1.lsb_release-aroot@debian:~#lsb_release-aNoLSBmodulesareavailable.DistributorID:DebianDescription:DebianGNU/Linux8.8(jessie)Release:8.8Codename:jessie 2.cat/etc...
RookeyFrame 一些心得 或者 调试技巧等
因为没有依赖具体的实现层,类库的输出路径又没有设置在web层的bin目录,所以每次都要拷贝实现层的DLL过去,有时候拷贝过去了还是没有反应,估计是缓存什么的吧,解决:先那几个web层bin目录的DLL(实现层的)删掉,刷新一下页面,会报错,因为找不到那几个DLL。然后再把相应的DLL拷贝过去,这样一部是没有问题的 要非常非常注意这些DLL的版本,不然一个不小心就会报错 引用了 Newtonsoft.Json(4.5.0.0)的类库: Rookey.Frame.Common Rookey.Frame.Operate.Base ...
C# VS 调试 动态加载的 DLL
原文:https://www.cnblogs.com/DasonKwok/p/10510218.html在这篇文章的底部,有提供示例的Demo,可以参考一下哦,拿来直接就可以运行。 说明: 编译类库的时候,除了生成dll文件,还会一起生成pdb文件 pdb文件包含了编译后程序指向源代码的位置信息,用于调试的时候定位到源代码,主要是用来方便调试的。(原文:https://zhidao.baidu.com/question/350744050.html) 核心代码大概就下面这句:动态加载DLL文件的时候,也要把.pdb文件也一起加载进来,然后项目里面又有源码,调试时,就可以进入到外部的DLL文件里面的(实际上应该是生成外部DLL的项目里面) 其它的理解后面再补充 ...
钉钉微应用H5的调试方法
因为微应用遇到了兼容性方面的问题,一直在寻找钉钉微应用真机的调试方法。钉钉的文档还是很不完善的,只在这里找到了些提示,却又没有提供相关开发版的下载。最后还是提交了个工单,按照提供的文档总算是可以调试微应用了。官方提供的文档https://ding-doc.dingtalk.com/doc#/kn6zg7/zunrdk Re在往钉钉上微应用,真机调试怎么调试? 参考文章:https://www.jianshu.com/p/56b2341c416c您用钉钉开发版开启“微应用调试”,手机打开USB调试,USB连上PC机后,运行chrome://inspect,在chrome里的Apps里能看到的是钉钉开发版还是微应用呢? ————————————————版权声明:本文为CSDN博主「yuashuai」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blo...
gdb调试报错:Missing separate debuginfos, use: debuginfo-install glibc-XXX
解决方案:1、先修改“/etc/yum.repos.d/CentOS-Debuginfo.repo”文件的enable=1;2、使用sudoyuminstallglibc安装;3、使用 debuginfo-installglibc-2.12-1.132.el6.i686 安装。 摘自:http://blog.csdn.net/testcs_dn/article/details/19565411http://jingyan.baidu.com/article/37bce2be1839ca1003f3a253.html...