
linux技术
文章平均质量分 80
gjq_1988
这个作者很懒,什么都没留下…
展开
-
Git详解之二 Git基础1
Git 基础读完本章你就能上手使用 Git 了。本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令。读完本章,你就能初始化一个新的代码仓库,做一些适当配置;开始或停止跟踪某些文件;暂存或提交某些更 新。我们还会展示如何让 Git 忽略某些文件,或是名称符合特定模式的文件;如何既快且容易地撤消犯下的小错误;如何浏览项目的更新历史,查看某两次更新之间的差异转载 2013-04-24 10:58:13 · 644 阅读 · 0 评论 -
设备节点创建过程源代码分析
阅读本文需要linux文件系统基础知识。以下分析基于下面的假设:根设备使用SD卡设备(块设备),根文件系统使用ext4文件系统。linux kernel在初始化的最后阶段,会加载“根文件系统”,按照前面的假设,也就是加载一个ext4文件系统作为根文件系统,这个文件系统位于SD卡上。在加载这个根文件系统前,kernel会先加载一个虚拟的根文件系统,名叫rootfs原创 2014-11-25 16:20:46 · 2528 阅读 · 0 评论 -
(转)调试器工作原理(1):基础篇
本文是一系列探究调试器工作原理的文章的第一篇。我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起。关于本文我打算在这篇文章中介绍关于Linux下的调试器实现的主要组成部分——ptrace系统调用。本文中出现的代码都在32位的Ubuntu系统上开发。请注意,这里出现的代码是同平台紧密相关的,但移植到别的平台上应该不会太难。动机要想理解我们究竟要做什么转载 2015-03-18 10:38:53 · 452 阅读 · 0 评论 -
(转)调试器工作原理(2):实现断点
本文是关于调试器工作原理探究系列的第二篇。在开始阅读本文前,请先确保你已经读过本系列的第一篇(基础篇)。本文的主要内容这里我将说明调试器中的断点机制是如何实现的。断点机制是调试器的两大主要支柱之一 ——另一个是在被调试进程的内存空间中查看变量的值。我们已经在第一篇文章中稍微涉及到了一些监视被调试进程的知识,但断点机制仍然还是个迷。阅读完本文之后,这将不再是什么秘密了。软转载 2015-03-18 17:21:36 · 612 阅读 · 0 评论 -
(转)调试器工作原理(3):调试信息
本文是调试器工作原理探究系列的第三篇,在阅读前请先确保已经读过本系列的第一和第二篇。本篇主要内容在本文中我将向大家解释关于调试器是如何在机器码中寻找C函数以及变量的,以及调试器使用了何种数据能够在C源代码的行号和机器码中来回映射。调试信息现代的编译器在转换高级语言程序代码上做得十分出色,能够将源代码中漂亮的缩进、嵌套的控制结构以及任意类型的变量全都转化为一长串的比特流——这就是机器转载 2015-03-18 19:39:36 · 667 阅读 · 0 评论 -
(转)linux虚拟内存管理简要总结
以下讨论仅限i386平台,一般考虑典型情况linux内核对整个系统的物理内存是通过类型为struct page的数组mem_map来管理的。系统中的伙伴系统分配算法最终是通过操作这个数组来记录物理内存的分配、回收等操作。在这里不要被系统的高端内存、低端内存等概念搞混淆了,高、低端内存的分类主要在于区分物理内存地址是否可以直接映射到内核线性地址空间中。我们知道,linux的内转载 2016-06-24 12:35:58 · 610 阅读 · 0 评论 -
(转)ELF文件的加载和动态链接过程
http://jzhihui.iteye.com/blog/1447570近段时间在研究Erlang核心特性的实现,也许过段时间会有个系列的总结,期待... 今天看到有人写一个深入Hello World的文章,想起来读研的时候做的一个关于程序加载和链接的课程设计,也是以Hello World为例说明的,随发出来共享。文后有下载链接。 ======转载 2016-08-12 10:53:49 · 1020 阅读 · 0 评论 -
GUI显示系统之SurfaceFlinger(1)~(4)
原文链接: http://blog.youkuaiyun.com/xuesen_lin/article/details/8954508文章都是通过阅读源码分析出来的,还在不断完善与改进中,其中难免有些地方理解得不对,欢迎大家批评指正转载请注明:From LXS. http://blog.youkuaiyun.com/uiop78uiop78/第一章: GUI系统之转载 2016-11-01 19:29:15 · 744 阅读 · 0 评论 -
(转)GitHub上优秀的开源项目
原文链接: http://blog.youkuaiyun.com/googdev/article/details/52060211free-programming-books这个项目目前 star 数排名 GitHub 第三,总 star 数超过6w,这个项目整理了所有跟编程相关的免费书籍,而且全球多国语言版的都有,中文版的在这里:free-programming-books-zh,有了这个项转载 2017-03-08 11:12:20 · 1568 阅读 · 0 评论 -
Linux Ida and Ird 源码分析
我有一个毛病就是不爱读源代码, 总是喜欢从宏观上看逻辑架构, 对于一些比较通用的代码,网上的分析很多,这个方法学起来的确比较快,毕竟源码,尤其是代码量比较多的源码,读起来是很费力的.但是现在越来越多的遇到一些code,网上查也查不太到,我就不得不自己去读源码了.也好,读源码的能力还是要锻炼的.Read the Fucking Source Code!简介: IDR机制在Linu原创 2017-06-25 18:35:49 · 2797 阅读 · 0 评论 -
Linux per-CPU变量分配与管理源码分析(未完)
什么是per-CPU变量?per-CPU变量主要用在多处理器系统中,用来为系统中的每个CPU生成一个变量副本,per-CPU变量对于每个处理器都有一个互相独立的副本。per-CPU变量分为静态分配与动态分配两种,静态分配是指在编译内核期间分配好的per-CPU变量,动态分配是指运行期间调用per-CPU memory allocator 分配的per-CPU变量。Linux使用Ch原创 2017-07-18 11:20:20 · 1917 阅读 · 0 评论 -
(笔记) Linux环境下的图形系统简介(X window)
显卡最早只有基本的显示功能,可以称为显示控制器(Display Controller)或者帧缓冲设备,对于这样的显示控制器,当前的Linux内核对其的支持表现为framebuffer驱动,Xorg部分对其的支持是一个名为fbdev的驱动。其后显卡上逐渐加上了2D加速部件,这种情况下面的驱动如下图所示。这个情况下的架构还是比较简单的。转载 2017-12-07 18:15:40 · 2360 阅读 · 3 评论 -
(笔记)spin lock
Linux spin_lock的实现 Spin_lock是Linux内核的一种同步机制。内核代码可以通过获得spin_lock宣称对某一资源的占有,直到其释放该spin_lock;如果内核代码试图获得一个已经锁定的spin_lock,则这部分代码会一直忙等待,直到获得该spin_lock。 Spin_lock的kernel中的实现对单核(UP),多核(SMP)有不同的处理方式。对单转载 2016-11-16 14:41:49 · 792 阅读 · 0 评论 -
linux内核模块动态加载过程
linux内核模块分两种,一是静态编译进内核的模块原创 2014-09-14 13:32:36 · 9219 阅读 · 0 评论 -
(收集/整理)linux 内核启动 解压缩
1. zImage 生成流程:转载 2014-08-15 15:42:50 · 894 阅读 · 0 评论 -
(转)linux 系统调用原理
ARM Linux系统调用的原理操作系统为在用户态运行的进程与硬件设备进行交互提供了一组接口。在应用程序和硬件之间设置一个额外层具有很多优点。首先,这使得编程更加容易,把用户从学习硬件设备的低级编程特性中解放出来。其次,这极大地提高了系统的安全性,因为内核在试图满足某个请求之前在接口级就可以检查这种请求的正确性。最后,更重要的是这些接口使得程序具有可移植性,因为只要内核所提供的一组接口相同,那转载 2014-09-22 11:09:06 · 976 阅读 · 0 评论 -
Git详解之二 Git基础3
限制输出长度除了定制输出格式的选项之外,git log 还有许多非常实用的限制输出长度的选项,也就是只输出部分提交信息。之前我们已经看到过-2 了,它只显示最近的两条提交,实际上,这是 - 选项的写法,其中的 n 可以是任何自然数,表示仅显示最近的若干条提交。不过实践中我们是不太用这个选项的,Git 在输出所有提交时会自动调用分页程序(less),要看更早的更新只需翻到下页即可。另外还转载 2013-04-24 11:29:44 · 765 阅读 · 0 评论 -
Git详解之二 Git基础4
2.5 远程仓库的使用要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库。远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写。同他人协作开发某 个项目时,需要管理这些远程仓库,以便推送或拉取数据,分享各自的工作进展。管理远程仓库的工作,包括添加远程库,移除废弃的远程库,管理各式远程库分 支,定义是否跟踪这些分支,等等。本节我们将详细讨论远程库的转载 2013-04-24 12:28:31 · 709 阅读 · 0 评论 -
Git详解之三 Git分支1
Git 分支几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。有人把 Git 的分支模型称为“必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来。Git 有何特别之处呢?Git 的分支可谓是难以置信转载 2013-04-24 12:41:22 · 1329 阅读 · 0 评论 -
Git详解之三 Git分支2
3.3 分支的管理到目前为止,你已经学会了如何创建、合并和删除分支。除此之外,我们还需要学习如何管理分支,在日后的常规工作中会经常用到下面介绍的管理命令。git branch 命令不仅仅能创建和删除分支,如果不加任何参数,它会给出当前所有分支的清单:$ git branch iss53* master testing注意看 master 分支前的 * 字符:它表示转载 2013-04-24 12:45:17 · 689 阅读 · 0 评论 -
Git详解之二 Git基础2
跳过使用暂存区域尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给git commit 加上-a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add 步骤:$ git status# On branch master## Changed but not up转载 2013-04-24 11:17:27 · 794 阅读 · 0 评论 -
BASH 的基本语法
最简单的例子 —— Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 最简单的例子 —— Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BAS转载 2013-04-17 14:41:56 · 755 阅读 · 0 评论 -
Git详解之一 Git起步
原文链接:http://www.open-open.com/lib/view/open1328069609436.html起步本章介绍开始使用 Git 前的相关知识。我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作。读完本章,你就会明白为什么 Git 会如此流行,为什么你应该立即开始使用它。 1.1 关于版本控转载 2013-04-24 09:59:25 · 724 阅读 · 0 评论 -
(转)系统调用与API
原文:http://www.cnblogs.com/zhuyp1015/archive/2012/05/11/2496730.html系统调用接口往往是通过中断来实现,比如Linux使用0x80号中断作为系统调用的入口,Windows采用0x2E号中断作为系统调用的入口。EAX名字C语言定义含义参数转载 2013-06-15 14:47:24 · 660 阅读 · 0 评论 -
(转)Linux的系统调用
5.5.1 系统调用接口系统调用(通常称为syscalls)接口是Linux内核与上层应用程序进行交互通信的唯一接口,如图5-4所示。从对中断机制的说明可知,用户程序通过直接或间接(通过库函数)调用中断int 0x80,并在eax寄存器中指定系统调用功能号,即可使用内核资源,包括系统硬件资源。不过通常应用程序都是使用具有标准接口定义的C函数库中的函数间接地使用内核的系统调用,如图5-19转载 2013-07-24 14:16:44 · 780 阅读 · 0 评论 -
学习笔记:android.mk 与makefile 的关系
makefile文件控制整个工程的编译规则,比如指定需要生成哪些目标文件,指明生成这些目标文件依赖哪些源文件,指明生成的目标文件放在哪个文件夹下等等。而make就是一个命令工具,可以解析makefile文件中的指令的一个命令工具。 android.mk也是一样的功能,只不过它是android编译环境下的一种特殊的“makefile”文件, 它是经过了android编译系统处理的。所谓an原创 2013-10-10 20:35:00 · 21612 阅读 · 5 评论 -
Android Binder设计与实现 – 设计篇
摘要Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有管道,system V IPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。深入了解Binder并将之与传统 IPC做对比有助于我们深入领会进程间通信的实现和性能优化。本文将对Binder的设计细节做一个全面的阐述,首先通过介绍Binder通信模型和 B转载 2013-11-17 18:10:45 · 797 阅读 · 0 评论 -
Data alignment: Straighten up and fly right
click here to see original author: http://www.ibm.com/developerworks/library/pa-dalign/Data alignment: Straighten up and fly rightAlign your data for speed and correctnessData ali转载 2013-12-21 20:39:15 · 1041 阅读 · 0 评论 -
(转)Linux进程切换以及内核线程的返回值
linux中的进程是个最基本的概念,进程从运行队列到开始运行有两个开始的地方,一个就是switch_to宏中的标号1:"1:/t",另 一个就是ret_form_fork,只要不是新创建的进程,几乎都是从上面的那个标号1开始的,而switch_to宏则是除了内核本身,所有的进程要 想运行都要经过的地方,这样看来,虽然linux的进程体系以及进程调度非常复杂,但是总体看来就是一个沙漏状,而switc转载 2014-09-05 15:20:01 · 1193 阅读 · 0 评论 -
cache coherency & atomic & cpu-reorder
最近看了一些cache一致性以及cpu乱序执行的文章,结合之前看的原子操作写下个人总结。首先这几个概念都是software编程时比较难理解的,其中cache一致性和cpu的乱序执行按理说应该做到对software透明,换句话说sw programer应该不用care这些硬件相关的知识才对。可实际上如果完全不懂这两个概念:software可能会遇到一些非常 “诡异”的bug。cache一致性原创 2018-01-19 19:00:36 · 546 阅读 · 0 评论