LINUX
文章平均质量分 85
刘一痕
知之匪艰,行之惟艰。
展开
-
ubuntu 安装oh-my-zsh
0. 依赖软件(Dependencies)oh-my-zsh 的安装依赖于以下两个软件:git、zsh。这两个软件都可以通过软件包来安装:sudo apt-get updatesudo apt-get gitsudo apt-get zsh安装完之后,可以在Bash 里面输入 zsh,来创建一个新的Shell,并体验 zsh。原创 2017-03-16 18:38:40 · 495 阅读 · 0 评论 -
内核线程函数kernel_thread解析
设备驱动程序中,如果需要几个并发执行的任务,可以启动内核线程,启动内核线程的函数为: int kernel_thread (int ( * fn )( void * ), void * arg, unsigned long flags); kernel_thread函数的作用是产生一个新的线程 内核线程实际上就是一个共享父进程地址空间的进程,它有自己的系统堆栈. 内核线程原创 2017-03-16 18:30:05 · 4349 阅读 · 2 评论 -
对netdev_priv的分析
1. include/linux/netdevice.h#define NETDEV_ALIGN 32#define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1)static inline void *netdev_priv(struct net_device *dev){ return (char *)dev + ((sizeof(struct原创 2017-03-16 18:30:14 · 2346 阅读 · 0 评论 -
硬件设备内存空间被映射的过程函数分析
在main.c函数中,自start_kernel开始,——>setup_arch(),——>page_init()。至此,板级文件初始化好的硬件内存映射,变被加载系统来。 管理员在2009年8月13日编辑了该文章文章。 --> --原创 2017-03-16 18:30:17 · 342 阅读 · 0 评论 -
linux通过结构体struct resource描述一个具体的硬件
linux对挂接在4G总线空间上的设备实体的管理方式 -- struct resource/usr/src/linux-2.6.21.5/include/linux/ioport.hstruct resource { resource_size_t start; resource_size_t end; const char *name; unsigned lon原创 2017-03-16 18:30:20 · 2649 阅读 · 0 评论 -
linux驱动中的platform
从Linux2.6内核起,引入一套新的驱动管理和注册机制:platform_device 和 platform_driver 。Linux 中大部分的设备驱动,都可以使用这套机制,设备用 platform_device 表示;驱动用 platform_driver 进行注册。 Linux platform driver 机制和传统的device driver机制(即:通过 driv原创 2017-03-16 18:30:23 · 177 阅读 · 0 评论 -
linux虚拟机添加额外硬盘方法
linux虚拟机添加硬盘详谈内容简介:一.Linux的硬盘识别 2.6 kernel以后,linux会将识别到的硬件设备,在/dev/下建立相应的设备文件.如: sda表示第1块SCSI硬盘. hda表示第1块IDE硬盘(即连接在第1个IDE接口的Master口上). scd0表示第1个USB光驱. 当添加了新硬盘后 一.Linux的硬盘识别2.6 kernel以后,linux会将识别到的原创 2017-03-16 18:30:26 · 435 阅读 · 0 评论 -
用proc文件管理分析内核的数据
【摘要】本文介绍了Linux proc文件系统的一些细节。首先介绍了proc文件系统的基本概念/存储位置/读取时机/加载方式,接着介绍了如何利用proc文件系统读取系统/内核中的各种信息以及进程相关的各种信息,分析了各个文件的作用及可能对应的系统调用命令等。最后介绍了驱动程序及内核模块如何利用proc 文件系统向用户空间提供调试接口输出调试信息。【关键字】Proc文件系统,Procfs,伪文件系统原创 2017-03-16 18:30:29 · 503 阅读 · 0 评论 -
利用strace ltrace或truss跟踪程序的系统调用
进程无法启动,软件运行速度突然变慢,程序的"Segment Fault"等等都是让每个Unix系统用户头痛的问题,本文通过三个实际案例演示如何使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的"疑难杂症"。 truss和strace用来跟踪一个进程的系统调用或信号产生的情况,而 ltrace用来跟踪进程调用库函数的情况。truss是早期为System V R4开发原创 2017-03-16 18:30:32 · 561 阅读 · 0 评论 -
linux内核中likely和unlikely的含义
在内核代码中经常会看到unlikely和likely的踪影。他们实际上是定义在 linux/compiler.h 中的两个宏。 #define likely(x) __builtin_expect(!!(x), ) #define unlikely(x) __builtin_expect(!!(x), 0) 这里的__built_expect()函数是gcc的內建函数。原创 2017-03-16 18:30:02 · 564 阅读 · 0 评论 -
linux内核符号表
所谓内核符号表就是在内核内部函数或变量中可供外部引用的函数和变量的符号表。在 2.6 内核下,使用以下命令可以看到内核符号表:引用 beyes@linux-beyes:/> cat /proc/kallsyms | morec0100000 T _textc0100000 T startup_32c0100054 t default_entryc01000b0 T startup_32原创 2017-03-16 18:29:52 · 426 阅读 · 0 评论 -
TCP端口状态详解
使用netstat命令查看本机网络状态经常会看到在status栏中有LISTENING,ESTABLISHED,CLOSE_WAIT,TIME_WAIT常量,今天特意上网查了一下,贴在此,以备后用。 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所原创 2017-03-16 18:29:21 · 855 阅读 · 0 评论 -
linux控制台颜色输出设计
这里\033[是转义子列,表示后面接的是颜色代码(亮度;背景色;前景色)01是高亮度,不写是低亮度。40是背景色,40:黑,41:红:42:绿,43:黄,44:青,45:蓝,47:白。 32是前景色:30:黑,31:红,32:绿,33:黄,34:蓝,35:紫,36:青,37:白。printf("\033[0;40;32m Begin to download \033[0m \n");原创 2017-03-16 18:29:24 · 2031 阅读 · 0 评论 -
linux下进度条打印
void bar(){ int i,j; printf("\n"); for(i=0;i { printf("["); for (j=0;j printf("*"); for (; j printf(" "); printf("]"); printf("%3d%%", i*10); if(i == 10) { printf(" [COMPLETED]");原创 2017-03-16 18:29:27 · 1046 阅读 · 0 评论 -
exit和_exit的区别
_exit终止调用进程,但不关闭文件,不清除输出缓存,也不调用出口函数。exit函数将终止调用进程。在退出程序之前,所有文件关闭,缓冲输出内容将刷新定义,并调用所有已刷新的“出口函数”(由atexit定义)。 ‘exit()’与‘_exit()’有不少区别在使用‘fork()’,特别是‘vfork()’时变得很突出。 ‘exit()’与‘_exit()’的基本区别在于前一个调用实施与调用库原创 2017-03-16 18:29:30 · 435 阅读 · 0 评论 -
source insight 快捷键大全
Exit 退出程序 : Alt+F4Redraw Screen 重画屏幕 : Ctrl+Alt+SpaceBack Tab : Shift+TabBackspace : Shift原创 2017-03-16 18:29:33 · 244 阅读 · 0 评论 -
计算机中各个周期的具体含义
先解释振荡周期。振荡周期是指振荡器的周期,多为晶体振荡器,即通常所说的晶振,比如8051单片机上的晶振频率为12MHz,电子表的晶振频率为32768Hz等。振荡周期即晶振频率的倒数。 再解释时钟周期,振荡周期并不一定(几乎都不)是CPU的时钟周期,要么分频,使CPU的时钟周期低于振荡周期,比如8051单片机;要么倍频,使CPU的时钟周期高于振荡周期,比如Intel的奔4CPU。这样经过处原创 2017-03-16 18:29:36 · 2562 阅读 · 0 评论 -
linux内核从启动开始到设备模型初始化完毕经历的函数
在init文件夹下,有main.c文件:start_kernel() ——> rest_init()——>kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND)——kernel_init——>do_basic_setup()——>driver_init()——>devices_init()——>kobject原创 2017-03-16 18:29:46 · 286 阅读 · 0 评论 -
GDB多线程调试
先介绍一下GDB多线程调试的基本命令。 info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。 thread ID 切换当前调试的线程为指定ID的线程。 break thread_test.c:123 thread all在所有线程中相应的行上设置断点thread apply ID1 ID2 com原创 2017-03-16 18:29:49 · 286 阅读 · 0 评论 -
proc文件系统用于内核调试
一、/proc文件系统简介Linux提供了一个特殊的文件系统——/proc,通过建立内核与进程之间发送信息的机制,使得可以在进程运行时动态地读写内核内部的数据结构、改变内核设置。与其他文件系统的不同之处在于,/proc是处于内存之中的。/proc中的每个文件都绑定于一个内核函数,当用户读取某个文件时,将调用指定函数读取所需信息返回给用户空间,对于内核模块调试而言,需要查看内核所处的状态等信息,此时原创 2017-03-16 18:30:35 · 554 阅读 · 0 评论 -
linux启动到字符界面
对于redhat或fedora用下面的方法:在etc文件夹下面有个初始加载文件是用来启动系统的,系统在启动的时候先去env中找到shell的必要配置,然后把shell启动起来,那么再然后就要启动整个系统了,到底是启动图形界面呢,还是字符界面呢,1、vi /etc/inittab有段说明文字:# Default runlevel. The runlevels used by RHS are:原创 2017-03-16 18:30:38 · 921 阅读 · 0 评论 -
linux编译及启动过程分析
Linux内核编译说明1.Linux内核源码结构: 内核源码中主要包含以下子目录: arch :包含了与体系结构相关的代码 对应于每一个支持的体系结构,有一个相应的子目录如i386、arm、alpha等。 其每个体系结构子目录下包含几个主要的子目录: kernel :包含与体系结构相关的内核代码 mm : 包含与体系结构相关的内存管理代码 lib : 包含与体系结构相关的库代码原创 2017-03-16 18:31:38 · 272 阅读 · 0 评论 -
vim使用技巧
Vi指令大全进入vi的命令vi filename: 打开或新建文件,并将光标置于第一行首 vi +n filename: 打开文件,并将光标置于第n行首 vi + filename: 打开文件,并将光标置于最后一行首 vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename: 在上次正用vi编辑时发生系统崩溃,恢复filen原创 2017-03-16 18:31:48 · 296 阅读 · 0 评论 -
tftp服务器的配置
ubuntu 9.04下tftp 设置方法: 1:sudo apt-get install tftp tftpd openbsd-inetd sudo apt-get install xinetd sudo apt-get install netkit-inetd sudo apt-get install tftp-hpa tftpd-hpa 2:在根目录原创 2017-03-16 18:31:51 · 511 阅读 · 0 评论 -
vim 安装taglist
2. taglist能够列出源文件中的tag(function, class, variable, etc)并跳转.注意:taglist依赖于ctags,所以要先装ctags,否则taglist装了也没法用!(1)到http://vim.sourceforge.net/scripts/script.php?script_id=273下载taglist_42.zip,即http:原创 2017-03-16 18:33:26 · 224 阅读 · 0 评论 -
vim剪切板和系统剪切板之间内容交换
在调试的过程中遇到将vim打开的日志文件中的数据拷贝出来,因为日志一行很长,无法在屏幕一屏显示出来,于是在vim中用到了系统剪贴板。Google了一下发现这篇文章(文章1)说的比较清楚。但是在操作的过程中发现在vim中输入:reg没有显示出"+和"#剪切板,于是无法实现vim试用系统剪贴板,继续google 发现需要安装vim部分功能才可以。 需要安装的是 Java原创 2017-03-16 18:33:29 · 414 阅读 · 0 评论 -
linux最受欢迎的20条命令
1. 以 root 帐户执行上一条命令 sudo !! 2. 利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000访问 python -m SimpleHTTPServer 3. 切换到上一次访问的目录 cd - 4. 将上一条命令中的 f原创 2017-03-16 18:33:37 · 268 阅读 · 0 评论 -
关于nerdtree的小问题集锦
如果,在删除文件或文件夹的时候没有删除nerdtree里面的bookmark,下次在启动vim的时候,会出现一些小意外,此时,只要在home目录下,打开.NERDTreeBookmarks,删除里面的相应bookmark,就可以了 管理员在2009年8月13日编辑了该文章文章。 -->原创 2017-03-16 18:35:15 · 697 阅读 · 0 评论 -
KAFKA分布式消息系统
Kafka[1]是linkedin用于日志处理的分布式消息队列,linkedin的日志数据容量大,但对可靠性要求不高,其日志数据主要包括用户行为(登录、浏览、点击、分享、喜欢)以及系统运行日志(CPU、内存、磁盘、网络、系统及进程状态)。 <span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-th原创 2017-03-16 18:37:46 · 210 阅读 · 0 评论 -
do{}while(0)的妙用
在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。通常,如果在一个函数中开始要原创 2017-03-16 18:31:35 · 225 阅读 · 0 评论 -
linux错误代码表
Linux错误代码表分部在两个文件中/usr/include/asm-generic/errno-base.h/usr/include/asm-generic/errno.h我的Linux内核版本号 debian 2.6.26-2-686#ifndef _ASM_GENERIC_ERRNO_BASE_H#define _ASM_GENERIC_ERRNO_BASE_H#defi原创 2017-03-16 18:31:32 · 361 阅读 · 0 评论 -
vim个人使用习惯设置
;设置行号set number ;自动缩进set autoindent ;再加加入下一行,表示专门对C语言进行缩进set cindent ;语法高亮显示syntax on ;设置制表符的宽度为4set tabstop=4 ;设置软制表符宽度为4set softtabstop=4 ;设置缩进的空格数为4set shiftwi原创 2017-03-16 18:30:41 · 370 阅读 · 0 评论 -
程序员的10大谚语
所谓谚语,就是用言简意赅、通俗易懂的方式传达人生箴言和普遍真理的话,它们能很好地帮助你处理生活和工作上的事情。也正因如此,我才整理了10句编程谚语,每位开发人员都应该铭记他们,武装自己。1. 无风不起浪别紧张,这也许只是一场消防演习代码设计是否糟糕,从某些地方就可以看出来。比如: * a. 超大类或超大函数 * b. 大片被注释的代码 * c. 逻辑重复 * d. If/el原创 2017-03-16 18:30:44 · 2071 阅读 · 0 评论 -
文件系统
一个进程在打开一个文件的时候,在struct task_struct结构体里,其字段struct files_struct中,有一个数组,数组类型是struct file。该数组的大小,标示该进程所能打开的文件的最多个数。当open一个文件的时候,该数组的下标便返回,作为fd。file结构体里面有struct inode字段,该字段里有对应的文件系统和对应与该文件系统的操作方法集合struct f原创 2017-03-16 18:30:54 · 180 阅读 · 0 评论 -
ioremap_nocache函数说明
NAMEioremap_nocache - 把内存映射到CPU空间 SYNOPSISvoid __iomem * ioremap_nocache (unsigned long phys_addr, unsigned long size); ARGUMENTSphys_addr 要映射的物理地址 size 要映射资源的大小 DESCRIPTIONioremap_nocache进原创 2017-03-16 18:30:57 · 1967 阅读 · 0 评论 -
kfifo_alloc深度解析
Linux kernel里面从来就不缺少简洁,优雅和高效的代码,只是我们缺少发现和品味的眼光。在Linux kernel里面,简洁并不表示代码使用神出鬼没的超然技巧,相反,它使用的不过是大家非常熟悉的基础数据结构,但是kernel开发者能从基础的数据结构中,提炼出优美的特性。kfifo就是这样的一类优美代码,它十分简洁,绝无多余的一行代码,却非常高效。关于kfifo信息如下:本文分析的原代原创 2017-03-16 18:31:00 · 2351 阅读 · 1 评论 -
linux驱动程序接口
1. Linux驱动程序接口 系统调用是操作系统内核与应用程序之间的接口,设备驱动程序则是操作系统内核与机器硬件的接口。几乎所有的系统操作最终映射到物理设备,除了CPU、内存 和少数其它设备,所有的设备控制操作都由该设备特殊的可执行代码实现,此代码就是设备驱动程序。操作系统内核需要访问两类主要设备:字符设备和块设备。与 此相关主要有两类设备驱动程序,字符设备驱动程序和块设备驱动程序。Linux(也原创 2017-03-16 18:31:03 · 3602 阅读 · 0 评论 -
linux多文件编译方法
一. 常用编译命令选项假设源程序文件名为test.c。1. 无选项编译链接用法:#gcc test.c作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。2. 选项 -o用法:#gcc test.c -o test作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。3. 选项 -E用法:原创 2017-03-16 18:31:12 · 293 阅读 · 0 评论 -
grep常用方法小结
grep -n -r --color ./* 'pattern'针对上式的说明如下: -n 标示打印行号-r 标示递归目录匹配--color 彩色打印patternpattern 标示想要模式匹配查询的对象 管理员在2009年8月13日编辑了该文章文章。 -->原创 2017-03-16 18:31:23 · 277 阅读 · 0 评论 -
C语言中,使用结构体模拟C++类
#include typedef int (*func)(int ,int); struct mystruct { int a; int b; func foo;}; int function(int a,int b){ return a+b;} struct mystruct myobject= { .a =1, .b =2,原创 2017-03-16 18:29:11 · 485 阅读 · 0 评论