自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (4)
  • 收藏
  • 关注

原创 backtrace调试程序段错误

1、backtrace的用处一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。主要用于程序异常退出时寻找错误原因。通常情况下,程序发生段错误时系统会发送SIGSEGV信号给程序,缺省处理是退出函数。我们可以使用 signal(SIGSEGV, &y...

2019-01-21 23:54:00 2254

原创 内核数据结构之linux哈希表实现分析

1、内核哈希表冲突解决方法hash 最重要的是选择适当的hash函数,从而平均的分配关键字在桶中的位置,从而优化查找 插入和删除所用的时间。然而任何hash函数都会出现冲突问题。内核采用的解决哈希冲突的方法是:拉链法,拉链法解决冲突的做法是:将所有关键字为同义词的 结点链接在同一个链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针(struct hlist_head name)...

2019-01-21 21:39:59 972

原创 Linux内核微观设计——语句表达式和max/min/container_of宏(学习了!!!)

语句表达式的定义GNU C 对 C 标准作了扩展,允许在一个表达式里内嵌语句,允许在表达式内部使用局部变量、for 循环和 goto 跳转语句。这样的表达式,我们称之为语句表达式。语句表达式的格式如下:({ 表达式1; 表达式2; 表达式3; })语句表达式最外面使用小括号()括起来,里面一对大括号{}包起来的是代码块,代码块里允许内嵌各种语句。语句的格式可以是 “表达式;”这种一...

2019-01-16 17:49:35 265

原创 内核数据结构之认识哈希表

关于哈希表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数(哈希函数),存放记录的数组叫做散列表。Hash的四大优点如下所示:事先不需要排序。 搜寻速度与数据多少无关。 数字签名的密码技术保密性(Security)高。 可做数据...

2019-01-16 16:20:06 493

原创 数据结构之内核队列record使用例子

关于kfifo的实现参考   数据结构之内核队列kfifo例子来自内核下的samples/kfifo/record-example.c /* * Sample dynamic sized record fifo implementation * * Copyright (C) 2010 Stefani Seibold <[email protected]> * ...

2019-01-14 17:12:45 481

原创 数据结构之内核队列kfifo

kfifo概述据wiki介绍,环形缓冲区(ring buffer),也称作圆形队列(circular queue),圆形缓冲区(circular buffer),循环缓冲区(cyclic buffer),是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。圆形缓冲区的一个有用特性是:当一个数据元素被用掉后,其余数据元素不需要移动其存储位置。相反,一个非圆形缓冲区(例如一...

2019-01-10 16:40:27 3123

原创 静态库的格式

The ar format has never been standardized; modern archives are based on a common format with two known variants, BSD and GNU.

2019-01-10 13:44:13 1036

转载 locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory”

locate是Linux系统中的一个查找(定位)文件命令,和find命令等找寻文件的工作原理类似,但 locate是通过生成一个文件和文件夹的索引数据库,当用户在执行loacte命令查找文件时,它会直接在索引数据库里查找,若该数据库太久没更新或不存在,在查找文件时就提示:“locate: can not open `/var/lib/mlocate/mlocate.db': No such f...

2019-01-09 13:25:42 4665 1

原创 Exynos 4412的启动过程

1. 启动介质在芯片手册 "Booting Sequence"一节说了Exynos 4412支持从以下设备介质启动:NAND flash memory SD/MMC memory card eMMC memory USB device友善之臂Tiny4412 支持 SD 卡和 eMMC 两种启动模式,通过 S2 开头来进行切换启动模式。CPU通过读取OM引脚寻找启动介质。软...

2019-01-01 14:16:12 849 1

原创 ELF文件系列第六篇ELF文件运行视图相关结构

介绍这节首先描述程序头的格式和运行程序相关的ELF文件结构,然后是程序的装载过程。程序头可以算是程序结构的一个总纲,它指明了文件中各个段的位置,还包含一些用于创建内存镜像的必要内容。准备一个程序的内存镜像,可以大体上分为装载和连接两个步骤。前者把目标文件装载入内存,后者解析目标文件中的符号引用。一个已装载完成的进程空间会包含多个不同的“段(segment)”,比如代码段(text segmen...

2018-12-24 17:38:03 1563 1

原创 数据结构之内核链表

内核链表设计的非常巧妙,但也不是什么难理解的内容,关于内核链表的介绍网上有很多,这里就不赘述了,来个使用的例子吧。list.h#ifndef HS_KERNEL_LIST_H#define HS_KERNEL_LIST_H#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)#define co...

2018-12-13 12:39:13 125

原创 ELF文件系列第五篇ELF文件静态结构中的重定位项

重定位重定位(relocation)是把符号引用与符号定义连接在一起的过程。当程序调用一个函数时,将从当前运行的指令跳转到一个新的指令地址去执行。在编写程序的时候,只需指明所要调用的函数名(即符号引用),在重定位的过程中,函数名会与实际的函数所在地址(即符号定义)联系起来,使程序知道应该跳转到哪里去。重定位文件必须知道如何修改其所包含的“节”的内容,在构建可执行文件或共享目标文件的时候,把...

2018-12-12 09:03:52 2202

原创 ELF文件系列第四篇ELF文件静态结构中的字符串表和符号表

默认字符串表这节描述默认字符串表。字符串表中包含有若干个以’null’结尾的字符串。在ELF文件中,这些字符串通常是符号的名字或者节的名字。当ELF文件的其它部分需要引用某个字符串时,只需要提供该字符串在字符串表中的序号即可。字符串表中的第一个字符串(序号为 0)永远是”null”,它用于表示一个空的名字或者没有名字。所以,字符串表的第一个字节是’null’。字符串表也可以是空的,不含有任...

2018-12-11 10:37:57 3135

原创 ELF文件系列第三篇ELF文件静态结构中的节

节概述在ELF文件中可以包含很多“节”(section),所有这些“节”都记录在一张称为“节头表”(section header table)的数组里。节头表的每一个表项是一个 Elf32_Shdr 结构,通过每一个表项可以定位到对应的节。在 ELF 文件头中, e_shoff 成员给出节头表在 ELF 文件中相对于文件开始处的偏移量;e_shnum 成员指明节头表中包含多少个表项;e_s...

2018-12-10 12:22:48 2778

原创 ELF文件系列第二篇ELF文件静态结构中的文件头

ELF文件头表示文件头中含有整个文件的结构信息,包括一些控制单元的大小。可以用以下这个数据结构体来描述文件头:#define EI_NIDENT 16typedef struct { unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word ...

2018-12-06 18:03:00 668

原创 ELF文件系列第一篇ELF文件的静态结构概述

前言在看uboot编译过程时发现最终生成u-boot.bin文件时生成了一个ELF格式的中间文件u-boot,后来对ELF文件了解了一下后发现平时用的对象文件、可执行文件和库文件都是ELF格式的。考虑到平时一直在使用这些文件却对他们知之甚少,因此从这里开始系统学习一下ELF文件格式。UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link ed...

2018-12-06 17:55:28 761

原创 调试篇-综合运用各种工具分析程序状态

目录gdb 调试利器更强大的工具cgdb分析线程栈lsof命令查看进程打开的资源IPC资源管理pstack跟踪栈空间 strace分析系统调用nm列出目标文件的符号清单objdumpreadelfsize查看程序内存占用file文件类型查询strings查询二进制文件中的文本信息fuser显示文件使用者ldd 查看程序依赖库gdb 调...

2018-12-04 11:26:48 772

原创 补丁文件介绍

补丁介绍顺带说一下“补丁”,一个“补丁”指的是文件之间一系列差异,这些差异能被Unix的 diff 程序应用在源代码树上。使用 diff 工具来创建“差异”(或“补丁”),然后使用该工具将它们 “打” 在一个没有这个补丁的同样的源代码版本上。diff用法及输出如下:$ diff -Naur file1 file2输出如下:--- a.txt 2018-11-15 17:15:30....

2018-11-27 17:04:49 1598 1

原创 npm install 报错sill pacote range manifest for hmac-drbg@^1.0.0 fetched

 npm config set registry  https://registry.npm.taobao.org  

2018-11-27 17:03:42 9978

原创 u-boot的编译过程及其makefile结构深入分析

概述这篇文章会彻底分析uboot的编译过程,并对它的makefile的结构分布剖析,最终弄明白u-boot是怎么生成的。写这篇文章的目的是为了方便理解及日后查阅,如有错误的地方欢迎留言。从makefile开始编译Makefile(部分)内容如下SRCTREE := $(CURDIR)MKCONFIG := $(SRCTREE)/mkconfigunconfig: @rm ...

2018-11-23 13:50:07 400

原创 在linux mint 18.3安装深度音乐

一直以来在linux上听音乐都不太方便,没有想酷狗、QQ音乐这么好用的音乐播放器,今天偶然发现了深度音乐可以装百度音乐插件,于是下面开始跳坑爬坑的过程。另外,还给rhythmbox播放器安装了一个OSD Lyrics显示桌面歌词的工具,都比较好用。安装的软件:deepin-media-player_1.1+20140703161214_6ac6ea0a8b_all.debdeepin...

2018-11-22 17:23:01 643

原创 ImportError: No module named aptsources.distro

gm@Inspiron:~/Downloads/deepmusic$ sudo apt-add-repository ppa:noobslab/deepin-scTraceback (most recent call last):  File "/usr/lib/linuxmint/mintSources/mintSources.py", line 8, in <module> ...

2018-11-22 13:06:54 621

原创 搜狗输入法在Linux Mint系统上的问题总结

系统环境:linux mint 18.3 1,、在Linux Mint系统上安装搜狗输入法后,任务栏不显示搜狗输入法图标?搜狗输入法下载。下载完成后双击或者sudo dpkg -ivh <path>安装搜狗输入法。安装完成后右下角不显示图标。解决方法:  apt-get下载fcitx软件,然后重新安装搜狗输入法后就好了。2、搜狗输入法显示两个图标  可能安装...

2018-11-15 10:22:23 1138

原创 gdb和gdbserver调试开发板

1.下载gdb的源码  ftp://sourceware.org/pub/gdb/snapshots/current/gdb-7.11.50.20160801.tar.xz2.编译:cd gdb-7.11.50.20160801./configure --target=arm-linux --prefix=$PWD/build -vmakemake install至此,gdb...

2018-11-13 15:53:22 326

原创 ARM汇编-从内嵌汇编开始

这是一篇Hello World的入门文章开始对于基于ARM的RISC处理器,GNU C编译器提供了在C代码中内嵌汇编的功能。这种特性提供了C代码没有的功能,比如手动优化软件关键部分的代码、使用相关的处理器指令。 __asm__ __volatile__("hlt"); "__asm__"表示后面的代码为内嵌汇编,"asm"是"__asm__"的别名。"__volatile__"表示编译...

2018-11-09 10:59:22 3418

原创 数据结构之深入理解红黑树

概述本文将会透彻理解什么是红黑树,有什么特点、优点与缺点,与其它树结构(二叉查找树、平衡二叉树、2-3-4树)有什么区别和联系。写作本文的目的旨在加深自己的理解,文中许多内容参考了网络上的文章并根据自己的理解进行了整理。第一部分:什么是红黑树红黑树(英语:Red–black tree),一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。红黑树,作为一...

2018-11-08 17:58:25 249

转载 【转】Linux内存管理

摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使用。在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭Linux内存管理。前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无论市...

2018-10-24 13:29:22 265

原创 数据结构之-平衡二叉树(AVL)

背景不同结构的二叉查找树,查找效率有很大的不同。如何解决这个问题呢?关键在于如何最大限度的减小树的深度。正是基于这个想法,平衡二叉树出现了。前言平衡二叉搜索树(英语:Balanced Binary Tree)是一种结构平衡的二叉搜索树。 它能在O(log n)时间内完成插入、查找和删除操作。它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它的左子树和右子树都是平衡二叉树,...

2018-10-24 12:42:37 375

转载 Linux内核的虚拟地址、逻辑地址、线性地址、物理地址的区别

概述分页机制在段机制之后进行,以完成线性—物理地址的转换过程。段机制把逻辑地址转换为线性址页机制进一步把该线性地址再转换为物理地址   几种地址的解释分析linux内存管理机制,离不了上述几个概念,在介绍上述几个概念之前,先从《深入理解linux内核》这本书中摘抄几段关于上述名词的解释: 首先一、《深入理解linux内核》的解释逻辑地址(Logical Address) ...

2018-10-22 13:17:20 931

程序设计说明书

系统备份还原程序设计说明书,这是一篇程序设计文档,工作时写的

2016-03-12

deb包制作调研

deb包制作的调研文档,详细描述了rules规则的编写方法,和deb包的制作过程

2016-01-25

编写udev规则中文版-writing_udev_rules

该文档是writing_udev_rules文档的中文翻译文档,对udev规则感兴趣的朋友学习

2016-01-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除