[3.Sys] Linux
文章平均质量分 67
林学森
《机器学习观止——核心原理与实践》
《深入理解Android内核设计思想》
展开
-
GDB 调试
<br />1. 编译时<br /> 在-c前加上-g (调试库时也是一样的,在编译库文件依赖的所有.o前加上-g)<br /> <br />2.调试时<br /> l(list)可以列出文件,list 文件名:行号 可以进入这个文件(在工程中一般都有很多文件)<br /> 加断点:break 行号 或者 break 文件名:行号<br /> 取消断点:disable delete等等<br /> 程序运行: run, continue(下个断点停住)<br /> 单步:s(有点像step in,原创 2010-11-30 11:36:00 · 889 阅读 · 0 评论 -
关于[特权级],[一致/非一致] 代码段 [内核栈] 的思考
<br />逻辑上应该是这样: - 为什么要有特权级概念? “现实”的需要,导致了硬件设计中包括了所谓特权级的概念,我们对现实问题的分析和认识,发现了特权级的思想应该存在于OS设计中,这种思想的物理表现形式就是硬件寄存器中的CPL,DPL,RPL位以及一整套实现特权级审查逻辑的电路; - 为什么要有所谓一致和非一致代码段的概念呢?还是因为“现实”的需要,由于OS设计时的需要,OS无疑应该是整个计算机系统环境中最高级的部分,但是也不能一概而论,OS中有些高权级代码(比如提供服务的代码)是允许低权级程序访问的,转载 2011-02-05 10:22:00 · 1125 阅读 · 0 评论 -
CPU能做什么
1. 运行指令,CS+IP 2. 提供各种段寄存器 3. 提供TR,LDT,GDT,IDT等描述符寄存器 4. 通过电路实现权级检查 5. 提供各种设置,比如是否使用分页机制。提供CR3用于协助分页机制 6. 响应中断,提供时间机制原创 2011-02-05 10:45:00 · 1173 阅读 · 0 评论 -
Linux Device Driver Summarization
1. Classes of devices and modules There are three fundamental device types, which means char module, block module, and network module.原创 2011-03-13 18:45:00 · 1831 阅读 · 0 评论 -
Linux系统调用-Printf从函数库到OS跟踪流程
<br />Linux系统调用[z]<br /><br />摘要:本期重点和大家讨论系统调用机制。其中涉及到了一些及系统调用的性能、上下文深层问题,同时也穿插着讲述了一些内核调试方法。并且最后试验部分我们利用系统调用与相关内核服务完成了一个搜集系统调用序列的特定任务,该试验具有较强的实用和教学价值。<br />什么是系统调用<br />顾 名思意,系统调用说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通 过文件系统相关的调用请求转载 2011-03-14 14:44:00 · 1505 阅读 · 0 评论 -
Linux内核编译后地址空间的整理
<br />有这么一系列的问题,是否在困扰着你:用户程序编译连接形成的地址空间在什么范围内?内核编译后地址空间在什么范围内?要对外设进行访问,I/O的地址空间又是什么样的?<br /> 先回答第一个问题。Linux最常见的可执行文件格式为elf(Executable and Linkable Format)。在elf格式的可执行代码中,ld总是从0x8000000开始安排程序的“代码段”,对每个程序都是这样。至于程序执行时在物理内存中的实际地址,则由内核为其建立内存映射时临时分配,具体地址取决于当时所分配转载 2011-05-14 16:08:00 · 1108 阅读 · 0 评论 -
关于linux内核中多进程(线程)间同步和互斥
<br />Linux设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导致竞态,linux提供了多种解决竞态问题的方式,这些方式适合不同的应用场景。<br /><br />Linux内核是多进程、多线程的操作系统,它提供了相当完整的内核同步方法。内核同步方法列表如下:<br />中断屏蔽<br />原子操作<br />自旋锁<br />读写自旋锁<br />顺序锁<br />信号量<br />读写信号量<br />BKL(大内核锁)<br />Seq锁<br />一、并发与竞态:<br转载 2011-05-31 11:57:00 · 2930 阅读 · 0 评论 -
Linux内核移植和根文件系统制作
<br /><br /> 第一章 移植内核 <br />1.1 Linux内核基础知识 <br />在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起。 <br />1.1.1 Linux版本 <br />Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: <br />VE转载 2011-04-19 17:26:00 · 1186 阅读 · 0 评论 -
linux内核编译系统-kbuild系统详解
<br /><br />众所周知,内核的编译系统kbuild是个很庞大的系统。但是,它所使用的make和我们平时用的make是一模一样的。kbuild只是通过预定义一些变量(obj-m,obj-y等等)和目标(bzImage ,menuconfig等等),使内核的编译和扩展变得十分方便。我们不妨yy一下kbuild的一些功能:<br />1.考虑到Linux能够方便地移植到各个硬件平台,kbuild也必须很容易添加对某个新的平台的支持,同时上层的Makefile不需要做大的改动。<br />2.Linu转载 2011-04-19 17:30:00 · 2920 阅读 · 0 评论 -
进程上下文和中断上下文的区别
进程上下文和中断上下文的区别 内核空间和用户空间是现代操作系统的两种工作模式,内核模块运行在内核空间,而用户态应用程序运行在用户空间。它们代表不同的级别,而对系统资源具有不同的访问权限。内核模块运行在最高级别(内核态),这个级下所有的操作都受系统信任,而应用程序运行在较低级别(用户态)。在这个级别,处理器控制着对硬件的直接访问以及对内存的非授权访问。内核态和用户态有自己的内存映射转载 2011-06-18 10:34:00 · 1059 阅读 · 0 评论 -
分段式内存管理
<br />Linux内存管理<br />进程与内存 进程如何使用内存? <br />毫无疑问所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。<br /><br />对任何一个普通进程来讲,它都会涉及到5种不同的数据段。稍有编程知识的朋友都该能想到这几个数据段种包含有“程序代码段”、“程序数据段”、“程序堆栈段”等。不转载 2011-04-30 17:52:00 · 1831 阅读 · 0 评论 -
Virtualbox, guestos=ubuntu的vdi瘦身方法
如果guestos是windows的话比较简单,网上有很多教程。对于ubuntu的情况,有不少文档介绍使用remount 根文件系统为read only的方法(init 1),这种方法在文件系统为ext4时无效。所以在这里我们采用另一种方式来实现。1.) Install “zerofree” on your virtualbox guest machine.2.) Boot t原创 2012-01-12 11:54:13 · 2431 阅读 · 0 评论 -
8086 CPU 寄存器简介
引子打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些基础知识,自然,还是得从最基础的开始,那就从汇编语言开刀吧,从汇编语言开刀的话,我们必须还先要了解一些其他东西,像 CPU ,内存这些知识点还是理解深刻一点的比较好,所以这一篇博文就绕着 80x86 CPU 中寄存器的基础部分下手,至于其他的一些将会在后续的博文中介绍 。同时在这里转载 2012-05-06 17:23:30 · 1522 阅读 · 0 评论 -
Linux系统调用讲义
Linux下系统调用的实现Unix/Linux操作系统的体系结构及系统调用介绍什么是操作系统和系统调用 操作系统是从硬件抽象出来的虚拟机,在该虚拟机上用户可以运行应用程序。它负责直接与硬件交互,向用户程序提供公共服务,并使它们同硬件特性隔离。因为程序不应该依赖于下层的硬件,只有这样应用程序才能很方便的在各种不同的Unix系统之间移动。系统调用是Unix/Lin转载 2012-11-02 08:50:12 · 2356 阅读 · 0 评论 -
linux重定向
在shell 程式中,最常使用的FD 大概有三個,分別为: 0: Standard Input (STDIN)1: Standard Output (STDOUT)2: Standard Error Output (STDERR) 在标准情況下,這些FD 分別跟如下设备关联:stdin(0): keyboardstdout(1): monitorstderr(2):转载 2012-12-12 18:25:03 · 1480 阅读 · 0 评论 -
Linux Test Tools
Linux Test ToolsThe purpose of this Linux Test Tools Table is to provide theopen-source community with a comprehensive list of tools commonly usedfor testing the various components of Linux.My hope is转载 2017-02-16 21:19:21 · 986 阅读 · 0 评论 -
保护模式概述
<br />保护模式概述<br /><br />以下内容并不成熟,希望抛砖引玉,大家讨论一下吧:)<br /><br /> 称其为概述是因为我希望能给出一个关于保护模式的概貌性的描述,而不是深入每个细节,因为篇幅不允许也没有必要,细节还是应该看相关的文档.<br /><br />第一:实模式下程序的运行回顾.<br /><br /> 程序运行的实质是什么?其实很简单,就是指令的执行,显然CPU是指令得以执行的硬件保障,那么CPU如何知道指令在什么地方呢?对了,80x86系列是使用CS寄存器配合I转载 2011-02-05 10:17:00 · 964 阅读 · 0 评论 -
linux0.11中的fork实现和一些注意事项
最近几天刚开始在读代码,读的挺爽的,不过碰到了很多问题,慢慢来吧。。<br />有一个fork的系统调用一直没弄明白,查了一下再CSDN上有一篇好文,记录一<br />下,顺便自己添加一些自己的想法。下面是思路和提问。<br /><br />内核是linux0.11版本,里面的fork()用于创建子进程。<br />但我现在在找这个函数的具体定义时遇到了一些困难。<br />先把我的查找过程说下:<br />1、init里的main.c中有static inline _syscall0 (int, fork转载 2011-01-30 21:23:00 · 1411 阅读 · 0 评论 -
linux下的lib文件知识
<br />随着Linux性能的不断提升和逐渐普及,会有越来越多的人在Linux下从事应用软件的开发。这里笔者根据从事Linux应用程序开发的经验,介绍Linux编程库使用的一些基础知识。零点网络Pgt$lvyleQ<br />零点网络/DJD` S-J3F9} B<br />库的定义和种类<br />#@X D3BsfE0零点网络 w0I+@o2@m,[<br />所谓编程库就是指始终可以被多个Linux软件项目重复使用的代码集。库是Linux软件开发所追求的目标,C语言转载 2010-11-04 23:50:00 · 1847 阅读 · 0 评论 -
LINUX库
Linux 共享库<br /><br /> Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 —换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。<br /><br /> 第二类是动态链接的可执行程序。<br />静态可执行程序与动态可执行程序比较<br /><br /> 我们可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的:<br /> # ldd /转载 2010-11-05 23:13:00 · 882 阅读 · 0 评论 -
VBOX File sharing
<br /><br />1》Vbox中安装了Linux系统<br />在Vbox中安装了Linux系统后,就需要使的Linux虚拟机系统和真实的主机系统共享文件了,这里这个真是的主机系统可以是windows也可以是Linux,这个对后期设置没有什么太大的影响。<br />a。首先在开启的虚拟机停止的情况下操作(在虚拟机开启的情况下也是可以操作的,只不过那样添加的是零时的,这里介绍永久有效的),在配置管理中选择数据空间管理,添加新的文件夹并且给此次添加命名,比如添加了E:/,并且命名为epan。<br />b转载 2010-11-09 14:29:00 · 873 阅读 · 0 评论 -
Linux下动态库的生成及链接方法
<br />Linux下动态库文件的扩展名为".so"(Shared Object)。按照约定,所有动态库文件名的形式是libname.so(可能在名字中加入版本号)。这样,线程函数库被称作libthread.so。静态库的文件名形式是libname.a。共享archive的文件名形式是libname.sa。共享archive只是一种过渡形式,帮助人们从静态库转变到动态库。<br /><br />本文仅以简单的例子介绍动态库文件的生成和链接方法。<br />操作系统:Debian/GNU Linux 2.6转载 2010-11-12 17:25:00 · 1080 阅读 · 0 评论 -
使用diff和patch进行简单的文件版本管理
本文来自: http://blog.chinaunix.net/u1/50916/showart_679530.html在Unix系统下,维护源码版本可以使用很多方法,其中最常用的当然是大名鼎鼎的CVS,但实际上,简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具,Unix标配中的diff和patch工具就完全可以完成代码的简单备份和升级工作。<br />diff 以"行"为单位比较两个文本文件(也可以是目录比较),并将不同之处以某种格式输出到标准输出上;patch可以读入这种输出,并按照一定转载 2010-11-11 10:47:00 · 1583 阅读 · 0 评论 -
makefile小结
首先牢记make的规则A:B CA依赖B,当B的日期比A新时,执行C1.伪目标: 伪目标是一个标签,它的目的不在于生成文件,而是执行命令(感觉有点像宏定义。不用太纠结于定义,记住MAKE的规则就能知道它怎么做的)clean:rm *.o tempclean 依赖于空的文件。个人认为在出现这种空依赖时,A)如果当前目录没有同名文件或文件夹时, make将其认为是.PHONY。所以当我们敲make clean或make(如果clean在第一个)时,它会被执行(伪目标是用来执行命令的,所以当你调用时,原创 2010-11-13 12:09:00 · 987 阅读 · 0 评论 -
pkg-config用法
pkg-configpkg-config程序是干什么用的?简单的说就是向用户向程序提供相应库的路径、版本号等信息的程序。譬如说我们运行以下命令:<br />pkg-config 查看gcc的CFLAGS参数<br />$pkg-config --libs --cflags opencv会显示如下信息:-I/usr/include/opencv -lcxcore -lcv -lhighgui -lcvaux各位看官,你看这不就是我们用gcc编译连接时CFLAGS的参数吗?因此当我们需要编译连接某个库时,我们转载 2011-01-08 21:30:00 · 5313 阅读 · 0 评论 -
/lib,usr/lib,/usr/local/lib区别
<br />简单说,/lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的. /lib/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件。目录 /usr/lib/ 中含有更多用于用户程序的库文件。/lib目录下放置的是/bin和/sbin目录下程序所需的库文件。/lib目录下的文件的名称遵循下面的格式: libc.so.* ld* 仅仅被/usr目录下的程序所使用的共享库不必放到/lib目录下。只有/bin和/sbin下的程序所需要的库有必要放到/lib目转载 2011-01-08 22:04:00 · 4739 阅读 · 2 评论 -
库文件搜索路径及GCC搜索路径总结
<br />1.<br />-L指定搜索的路径, -l指定库名<br /> <br /> <br />如何指定GCC的默认头文件路径<br />网上偶搜得之,以之为宝:)<br />原地址:<br />http://blog.chinaunix.net/u/28781/showart.php?id=401631<br />===============================================================================<br />在交叉编译的时转载 2011-01-08 22:24:00 · 2365 阅读 · 0 评论 -
内存管理相关之分段分页机制
1. 分段,分页机制 不分页: 线性地址 == 物理地址 分页: 线性地址 != 物理地址 线性地址空间也就是所有可能线性地址的范围. 操作系统会在启动的时候测量到实际的内存有多少, 什么范围. 如果支持分页, 线性地址是多少无所谓, 只要最后映射到的物理地址在16M范围内就可以 -------- 虚拟地址是操作系统提供的一种地址描述,处理器本身并无虚拟地址的提法 而线性地址是处理器具有的一种地址描述原创 2011-01-15 01:19:00 · 3287 阅读 · 4 评论 -
内核管理之CPU基本组件
<br />要想弄懂Linux内核的工作原理,就必须懂点基本的硬件知识。这里我们主要介绍Intel 80x86系列CPU保护模式下最核心的部件中几个寄存器的作用,这些寄存器在Linux内核运行时起着至关重要的作用。至于其他那些各式各样的硬件设备,我们在讲解设备驱动时会针对具体的驱动程序来介绍的。首先,大家先看看CPU的主要架构:<br /> <br />EU(通用寄存器、运算器和控制器)执行部件:完成指令所要求的功能。<br />SU(段寄存器、段转换器)分段部件:完成执行单元的地址请求, 将虚地址转换为线转载 2011-01-15 23:25:00 · 1811 阅读 · 0 评论 -
linux汇编工具之GAS(AT&T 语法)和NASM(Intel 语法)比较
<br />前言:在学校时,学过的汇编是Intel语言的汇编,编译器是MASM,使用的是DOS系统。惭愧的是那时没有对汇编语言有较深入的研究,有许多问题也不慎了解,迷迷糊糊至今。最近,在看《使用开源软件-自己写操作系统》http://code.google.com/p/writeos/ 和《自己动手写操作系统》里面提到了GNU AS编译器 和NASM编译器 ,于是,重新复习了一下汇编语言编程的相关知识,对汇编语言有了进一步的了解。 <br />在Linux0.11内核源码中,bootsect.s和setup转载 2011-01-18 22:49:00 · 4260 阅读 · 0 评论 -
Intel 8086/8088 CPU 寄存器结构
<br />1. 段寄存器<br /> <br />需执行程序的各部分(指令代码、数据、堆栈)分别放在主存的指定段中。<br /> <br />段寄存器:用来存放每个段的段基值,即段基址的高16位,每个段寄存器有特定功能,不能互换。<br /> <br />当前段:由CS、DS、SS、ES指向的段,如图:<br /> <br /><br /> <br />CS ----- 代码段用来存放程序的指令代码序列,CS用来存放当前代码段首址的高16位,即段基值。<br /> <br />DS ----- 数据段用来转载 2011-01-19 11:12:00 · 2914 阅读 · 0 评论 -
GCC内嵌汇编语法
<br />gcc内嵌汇编简介收藏<br />在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。 <br /><br />1、简单的内嵌汇编 <br />例: <br />__asm__ __volatile__("hlt"); "__asm__"表示后面的代码为内嵌汇编,"asm"是"__asm__"的别名。"_转载 2011-01-18 21:41:00 · 961 阅读 · 0 评论 -
Linux系统概要总结
这篇文章概要地把整个LINUX系统(0.11)串起来。部分图片来自于《Linux内核完全注释》一书,版权归原作者所有。另,以下总结,纯属个人观点,并不一定是对的,欢迎指正。 零. 总括 LINUX 系统总的来说分为几部分管理,即内存,进程,文件系统,中断,进程通信,网络接口 一. 硬件 Linux 0.11是基于80386系统芯片的。所以寄存器信息如下 http://blog.csdn.net/yunsongice/archive/2010/10/04/59218原创 2011-01-21 18:41:00 · 2334 阅读 · 0 评论 -
Linux测试
前言Linux基金会在4月3日公布了Linux开发年报,向我们展示了linux kernel作为世上最大开源合作项目之一的魅力。自2005年以来,共有800家公司7800名开发人员参与Linux kernel开发,最近一年也有200家公司共1000名开发人员参与。目前在Linus Torvalds的监督之下,Linux核心约2到3个月发布一个新的稳定版本,每次更新大约包含8000到12000项修改转载 2017-02-16 21:21:25 · 1757 阅读 · 1 评论