
Linux
潜水企鹅
这个作者很懒,什么都没留下…
展开
-
driver: Linux设备模型之input子系统详解
linux输入子系统本节从整体上讲解了输入子系统的框架结构。有助于读者从整体上认识linux的输入子系统。在陷入代码分析的过程中,通过本节的知识能够找准方向,明白原理。本节重点: 输入子系统的框架结构 各层对应内核中的文件位置 输入子系统的事件处理机制 输入子系统的驱动层基本操作流程转载 2016-04-14 10:35:42 · 577 阅读 · 0 评论 -
Linux kernel debug技巧----开启DEBUG选项
原文地址:http://www.wowotech.net/linux_application/kernel_debug_enable.htmlkernel的source code中有很多使用pr_debug/dev_dbg输出的日志信息(例如device tree解析的代码,drivers/of/fdt.c)。默认情况下,kernel不会将这些日志输出到控制台上,除非:转载 2016-11-07 11:12:41 · 7140 阅读 · 0 评论 -
动态库优化——Prelink(预连接)技术
Prelink是Red Hat 开发者 Jakub Jelinek 所设计的工具,正如其名字所示,Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销,是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具。我们在上一章中详细介绍了动态链接和加载的过程,这种运行时的动态链接尤其是重定位(re转载 2016-10-20 11:02:50 · 5271 阅读 · 0 评论 -
在Linux中如何利用backtrace信息解决问题
在Linux中如何利用backtrace解决问题一、导读在程序调试过程中如果遇到程序崩溃死机的情况下我们通常多是通过出问题时的栈信息来找到出错的地方,这一点我们在调试一些高级编程语言程序的时候会深有体会,它们通常在出问题时会主动把出问题时的调用栈信息打印出来,比如我们在eclipse中调试java程序时。当这些换到Linux上的C/C++环境时情况将变的稍微复杂一些,通常在原创 2016-12-05 00:27:44 · 33004 阅读 · 12 评论 -
记录
wpa_supplicant用于终端下的无线网卡配置程序原创 2016-10-21 16:24:04 · 373 阅读 · 0 评论 -
Linux内核中双向链表的经典实现
原文地址: http://www.cnblogs.com/skywang12345/p/3562146.htmlLinux内核中双向链表的经典实现 概要前面一章"介绍双向链表并给出了C/C++/Java三种实现",本章继续对双向链表进行探讨,介绍的内容是Linux内核中双向链表的经典实现和用法。其中,也会涉及到Linux内核中非常常用的两个经典宏定义of转载 2016-11-24 20:03:08 · 2429 阅读 · 0 评论 -
深入分析 Linux 内核链表
原文地址: https://www.ibm.com/developerworks/cn/linux/kernel/l-chain/一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表转载 2016-11-24 20:23:13 · 404 阅读 · 0 评论 -
使用 getopt() 进行命令行处理
原文地址:http://www.ibm.com/developerworks/cn/aix/library/au-unix-getopt.html引言在早期的 UNIX® 中,其命令行环境(当时的唯一用户界面)包含着数十种小的文本处理工具。这些工具非常小,通常可很好地完成一项工作。这些工具通过较长的命令管道链接在一起,前面的程序将其输出传递给下一个程序以作为输入,整个过转载 2017-02-15 23:41:44 · 403 阅读 · 0 评论 -
vim 配置记录
工欲善其事必先利其器,不经配置的 vim 在实际使用过程中会有诸多不便之处,但只要稍加配置即十分称手。一、.vimrc 文件与 .vim 目录那 .vimrc 即是 vim 的配置文件了,它位于 $HOME 目录,即 ~ 目录下。vim 每次启动时多会去读取它,同时修改它并不能立即生效,需要重启生效。如果你发现它没有的话可以手动的创建它。我的 vim 配置文件备份到了 vim_conf...原创 2018-03-08 14:29:51 · 271 阅读 · 0 评论 -
vim 操作记录
vim 操作记录记录一些我的常用操作移动跳转1、上下左右移动:k、j、h、l2、按单词移动:向前 w、向后 b3、行首行尾移动:行首0或 ^ (行首第一个非空白字符)、行尾 $4、fc 光标向前移动至字符 c 处;Fc 同理但光标向后;再配合 ; 可重复操作5、% 移动到匹配的括号6、nG 移动到文件第 n 行7、H 屏幕顶端、M 屏幕中间、L 屏幕底端...原创 2018-03-13 22:00:43 · 567 阅读 · 0 评论 -
程序调试之 gdb 大法
一、说说 gdbgdb 是一款 UNIX 系统下基于命令行的程序调试利器,它功能强大,但其命令行的方式想必是挡住了一大波程序员,默默的继续使用 printf。但作为 Linux 下的程序员应当是要掌握这一强大的调试利器,至少了解下吧,解 bug 的时候肯定用的上。而且掌握它之后再也不用羡慕那些使用 IDE 开发自带图形化调试页面的同学啦,酷炫的命令行式的操作是不是会更有吸引力。好了...原创 2018-04-30 22:11:52 · 719 阅读 · 0 评论 -
当 gdb 遇上第三者
第一章 和谐的二人世界小明是一个无忧无虑的嵌入式程序员,他精通 printf 大法,足以处理绝大多数的 bug,他非常的开心。虽然和有着 IDE 集成开发环境下各种图形化的断点调试、变量观察等高效程序调试方法的程序员相比,小明的程序调试方法比较原始,但作为一个 Linux 环境下的嵌入式程序员,小明并没有太多的选择,命令行才是王道。终于有一天小明想尝试一下早已耳闻的程序调试利器 ...原创 2018-04-30 22:13:02 · 369 阅读 · 0 评论 -
利用手机触摸屏控制 Ubuntu 鼠标指针
一、前言这个东西我做出来已经过去很久了,一直躺在我的电脑里面,今天把它拿出来分享,少了刚开始做出来时的那份激情突然不知道怎么来写。废话少说,先上最终的效果视频:https://v.youku.com/v_show/id_XMzY4MTgxMjk1Mg==.html?spm=a2h3j.8428770.3416059.1然而这有什么用呢。。。。哈哈哈。。。理解掌握它可以丰富系统的...原创 2018-06-23 15:09:01 · 1861 阅读 · 0 评论 -
获取进程的内核转储
获取进程的内核转储(coredump)内核转储(coredump)保存了进程某一时刻的运行状态,它在进程发生问题时产生,此时只要有程序的可执行文件和 coredump 即可对其进行调试,了解产生 coredump 那一刻进程的状态,从而发现问题点。某些情况下我们也可以主动来获取 coredump,比如进程发生死锁卡住的情况,这时我们可以使用 kill 命令来触发 coredump 的生成,...原创 2018-07-21 16:33:57 · 645 阅读 · 0 评论 -
5. automake 和 autoconf 使用简明教程
原文地址 http://www.nuvoton.com/hq/products/microprocessors/arm9-mpus/n3292-h.264-codec-series/?__locale=zh_TW5.1. 步骤概览create projecttouch NEWS README ChangeLog AUTHORSautoscanconfigure.scan ==> c转载 2016-10-25 16:44:15 · 2245 阅读 · 0 评论 -
17 个 tar 命令实用示例
Tar(Tape ARchive,磁带归档的缩写,LCTT 译注:最初设计用于将文件打包到磁带上,现在我们大都使用它来实现备份某个分区或者某些重要的目录)是类 Unix 系统中使用最广泛的命令,用于归档多个文件或目录到单个归档文件中,并且归档文件可以进一步使用 gzip 或者 bzip2 等技术进行压缩。换言之,tar 命令也可以用于备份:先是归档多个文件和目录到一个单独的 tar 文件或归档文件转载 2016-09-24 21:01:33 · 509 阅读 · 0 评论 -
嵌入式系统C编程之堆栈回溯(二)
前言 本文作为《嵌入式系统C编程之堆栈回溯》的补充版。文中涉及的代码运行环境如下: 一 异常信号 信号就是软件中断,用于向正在运行的程序(进程)发送有关异步事件发生的信息。Linux应用程序发生异常时,操作系统会产生相应的信号。硬件检测到异常(非法指令、对无效的内存引用等)时也会通知内核,内核将其转换为适当的信号并发给该异常发生转载 2016-08-01 17:27:37 · 1467 阅读 · 0 评论 -
Linux 动态库剖析
原文地址:http://www.ibm.com/developerworks/cn/linux/l-dynamic-libraries/进程与 API动态链接的共享库是 GNU/Linux® 的一个重要方面。该种库允许可执行文件在运行时动态访问外部函数,从而(通过在需要时才会引入函数的方式)减少它们对内存的总体占用。本文研究了创建和使用静态库的过程,转载 2016-08-03 20:48:41 · 419 阅读 · 0 评论 -
剖析共享程序库
原文地址:http://www.ibm.com/developerworks/cn/linux/l-shlibs.html初识共享程序库共享程序库通过版本号来完成对应用程序所使用的程序库的升级,同时保留了对原有应用程序的兼容。本文将讨论此方法的实际内幕,以及在常规 Linux™ 系统上的 /usr/lib 中有很多符号链接的原因。转载 2016-08-03 21:01:15 · 478 阅读 · 0 评论 -
Linux动态链接(1)惰性链接
原文地址:http://tsecer.blog.163.com/blog/static/150181720124993733491/一、动态链接在Linux(unix族谱)下,共享目标文件称为so文件,它和windows下的DLL机制对应,该功能在节省物理内存使用量上有重要意义,但是更重要的它还是一种扩展框架,也就是很多所谓的“插件”的实现基础。从它的出现频率上来看,它和Linux下的转载 2016-08-03 21:07:41 · 1018 阅读 · 1 评论 -
Linux动态链接(2)so初始化执行
原文地址:http://tsecer.blog.163.com/blog/static/15018172012410105633824/一、so文件和exe文件这两种文件其实具有很多相似自出,或者说so文件是介于obj文件和exe文件的一种中间过渡形式,它虽然不能直接运行(但是经过特殊编写的so文件内核是支持加载运行的,例如ld.so),但是具有了自己的一些更为高级的内容,例如一些转载 2016-08-03 21:16:49 · 2651 阅读 · 0 评论 -
Linux动态链接(3)so文件映射地址
原文地址:http://tsecer.blog.163.com/blog/static/1501817201241392950708/一、so文件的加载地址so文件一般在程序刚启动的时候由动态连接器映射入可执行程序的地址空间,也可以通过dl库中的dlopen来映射入可执行程序的地址空间中,它的底层实现都是通过mmap来实现,这个没有什么好说的。通常来说,我们自己使用的so文件是很少主动确定转载 2016-08-03 21:22:13 · 6314 阅读 · 0 评论 -
Linux动态链接(4)ldd与ldconfig
原文地址:http://tsecer.blog.163.com/blog/static/15018172012414105551345/一、动态链接工具ldd和ldconfig是动态链接的两个重要辅助工具,所谓“辅助”,是相对于真正的主角动态链接器ld.so,说它是工具,是只它相对于配置文件/etc/ld.so.conf文件。ldd不直接参与链接过程,它依赖于ld.so,但是ld.转载 2016-08-03 21:24:14 · 616 阅读 · 0 评论 -
Linux动态链接(5)动态库符号搜索顺序
原文地址:http://tsecer.blog.163.com/blog/static/15018172012415101413986/一、动态搜索与静态搜索这里的动态搜索是指通过dlopen+dlsym来搜索动态库符号的过程,而静态搜索则是指程序在运行的过程中的惰性链接实现。这里其实又是一个比较边界的问题,但是也是可能存在的,另外这些问题可以促使感兴趣的同学看一下真正的实现代码。转载 2016-08-03 21:25:32 · 2595 阅读 · 0 评论 -
linux下生成coredump文件
原文地址:http://tsecer.blog.163.com/blog/static/15018172012416103941861/一、coredump文件这种文件通俗的说法叫进程转储,其中比较洋气的“转储”就是dump的翻译,这个词在计算机中用的比较多,所以建议大家多用,显得比较专业。在windows下可以通过MiniDumpWriteDump这个API来直接生成一个运行进程转载 2016-08-03 21:33:38 · 3196 阅读 · 0 评论 -
linux proc maps文件分析
原文地址:http://blog.youkuaiyun.com/lijzheng/article/details/23618365 Proc/pid/maps显示进程映射了的内存区域和访问权限。对应内核中的操作集为proc_pid_maps_op,具体的导出函数为show_map。内核中进程的一段地址空间用一个vm_area_struct结构体表示,所有地址空间存储在task->mm->转载 2016-08-03 21:43:34 · 1973 阅读 · 0 评论 -
linux/unix 段错误捕获(打印栈,addr2line使用)
原文地址:http://www.cnblogs.com/lidabo/p/4545644.htmlLinux的Core调试方法之二Linux环境下段错误的产生原因及调试方法小结 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmenta转载 2016-08-03 21:47:33 · 2723 阅读 · 0 评论 -
linux 内存查看方法:meminfo\maps\smaps\status 文件解析
原文地址:http://www.cnblogs.com/jiayy/p/3458076.htmllinux 下面查看内存有多种渠道,比如通过命令 ps ,top,free 等,比如通过/proc系统,一般需要比较详细和精确地知道整机内存/某个进程内存的使用情况,最好通过/proc 系统,下面介绍/proc系统下内存相关的几个文件 单个进程的内存查看 cat /proc转载 2016-08-03 21:48:55 · 6470 阅读 · 0 评论 -
Linux 笔记
Linux进程栈和线程栈大小1、进程的栈大小是在进程执行的时刻才能指定的,即不是在编译的时候决定的,也不是在链接的时候决定的2、进程的栈大小是随机确定的至少比线程栈要大,但是不到线程栈大小的2倍3、线程栈大小是固定的,也就是ulimit -a 显示的值参考:http://www.cnblogs.com/luosongchao/p/3680312.html原创 2016-08-01 16:18:12 · 343 阅读 · 0 评论 -
嵌入式系统C编程之堆栈回溯
前言 在嵌入式系统C语言开发调试过程中,常会遇到各类异常情况。一般可按需添加打印信息,以便观察程序执行流或变量值是否异常。然而,打印操作会占用CPU时间,而且代码中添加过多打印信息时会显得很凌乱。此外,即使出错打印已非常详尽,但仍难以完全预防和处理段违例(Segment Violation)等错误。在没有外部调试器(如gdb server)可用或无法现场调试的情况下,若程序能在突发转载 2016-08-01 17:26:25 · 2983 阅读 · 0 评论 -
二进制修改程序改初始化数据
给我修改个初始化参数吧有天公司硬件找到我,要我给他修改一个功放初始化参数,调试效果。找到功放驱动源码,功放初始化参数是写在一个二维数组,地址和数据一一对应,在系统初始化过程,一个个写进功放。在他看来需求很简单,改一个寄存器的初始化值然后编译输出一个临时软件给他验证。可是,这套代码很庞大,编译非常耗时,而且还要考虑版本匹配等问题,好吧,得动点歪主意了。认识 nm 命令只是改个数字,直接二...原创 2018-12-31 17:11:10 · 1516 阅读 · 0 评论