
Linux
文章平均质量分 56
kevinyu723
这个作者很懒,什么都没留下…
展开
-
fopen、open和popen区别
open:直接操作物理设备,比如磁盘、设备文件 一般设备/设备文件都通过open来操作 fopen:则通过缓冲区来操作,读写都在缓冲区上 popen:会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令 依照popen参数中的type值建立管道连接到子进程的输入/输出设备中,通过返回的指针对子进程 的输入、输出设备进行操作。原创 2015-01-28 10:11:32 · 11075 阅读 · 0 评论 -
Linux启动过程概述(X86)
x86 CPU启动的第一个动作CS:EIP=FFFF:0000H(换算为物理地址为000FFFF0H,因为16位CPU有20根地址线),即BIOS程序的位置。http://wenku.baidu.com/view/4e5c49eb172ded630b1cb699.htmlBIOS例行程序检测完硬件并完成相应的初始化之后就会寻找可引导介质,找到后把引导程序加载到指定内存区域后,就把控制权转载 2015-03-17 23:04:49 · 910 阅读 · 0 评论 -
构造一个简单的Linux系统MenuOS,使用gdb调试内核
使用自己的Linux系统环境搭建MenuOS的过程# 下载内核源代码编译内核cd ~/LinuxKernel/wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xzxz -d linux-3.18.6.tar.xztar -xvf linux-3.18.6.tarcd转载 2015-03-17 23:01:41 · 740 阅读 · 0 评论 -
Linux内核中的init_task进程和idle进程
当Power on PC时,BIOS的代码开始执行,然后是Linux初始化的代码,这其中大约很长一段时间Linux都没有进程这一概念,但是这不影响CPU执行它的二进制代码。如果不是多任务以及进程调度的需要,Linux内核可以一直这样走下去。但是因为多任务的需求,Linux必须能支持任务这一特性,任务即进程,或者更简单地说由task_struct对象实例所代表的一段代码的集合,用以完成特定的任务转载 2015-03-17 23:12:05 · 645 阅读 · 0 评论 -
start_kernel分析
start_kernel是linux内核的入口函数,定义在init/main.c里面。start_kernel里面包含了一系列的初始化代码。asmlinkage void __init start_kernel(void){ char * command_line; extern const struct kernel_param __start___param[],原创 2015-03-17 23:22:06 · 1011 阅读 · 0 评论 -
C语言嵌入汇编
概述:linux内核源码中,有很多C语言中嵌入了汇编语句,如何理解这些汇编语句,对理解内核有很重要的作用。 具有输入和输出参数的嵌入式汇编语句的基本格式为: asm("汇编语句" :输出寄存器 :输入寄存器转载 2015-03-12 21:10:48 · 1713 阅读 · 0 评论 -
使用core dump调试方法
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类转载 2015-03-14 11:07:44 · 844 阅读 · 0 评论 -
系统调用号列表
(1)系统调用号的定义在 /usr/include/asm/unistd.h 文件中 (2)2.6.16的定义如下所示: #define __NR_restart_syscall 0 #define __NR_exit 1 #define __NR_fork 2 #define __NR_read 3 #define __NR_write 4 #define __NR_转载 2015-03-24 09:18:30 · 1308 阅读 · 0 评论 -
用户态和内核态的概念区别
究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子:1)例子C代码1. void testfork(){ 2. if(0 = = fork()){ 3. printf(“create new process su转载 2015-03-24 09:11:21 · 446 阅读 · 0 评论 -
Linux系统调用程序分析
当用户态进程调用一个系统调用时,CPU切换为内核态,并开始执行一个内核函数;在Linux中是通过执行int $0x80来执行系统调用,这条汇编指令产生向量为128的编程异常。内核实现了很多不同的系统调用,进程需要指明系统调用号作为参数进行调用,使用eax寄存器。原创 2015-03-25 20:40:22 · 754 阅读 · 0 评论 -
搭建OS kernel环境方法
It is a platform to write your own OS kernel,its based on Linux Kernel 3.9.4 source code.Set up this platformsudo apt-get install qemu # install QEMUsudo ln -s /usr/bin/qemu-system-i386 /usr转载 2015-03-14 11:20:50 · 1948 阅读 · 0 评论 -
linux 下gprof 和 oprofile 分析程序性能工具
有些时候,我们特别关注程序的性能,特别是底层软件,比如驱动程序,OS等。为了更好的优化程序性能,我们必须找到性能瓶颈点,“好钢用在刀刃上”才能取 得好的效果,否则可能白做工作。为了找到关键路径,我们可以使用profilng技术,在linux平台上,我们可以使用gprof和oprofile工 具。gprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行转载 2015-02-18 17:12:02 · 949 阅读 · 0 评论 -
日期和时间函数
函数说明asctime()将时间日期以字符串格式表示ctime()将时间日期以字符串格式表示gettimeofday()获取当前时间(由秒和微秒组成)gmtime()获取当前时间和日期localtime()获取当前时间和日期并转换为本地时间mktime()将时间转换成经过的秒数set原创 2015-02-02 10:01:07 · 597 阅读 · 0 评论 -
Linux延迟函数
从Linux应用层和内核两方面来区分下延迟函数:1. 应用层 1> sleep usleep 微秒级 头文件为;3> nanosleep 相比标准UNIX 的sleep 调用具有更高高精度的版本。和普通的sleep 调用计算整秒数不同,nanosleep 接受一个指向一个struct timespec 对象的指针作为参数,它可以表示毫微秒(nanoseco原创 2015-02-03 17:47:37 · 969 阅读 · 0 评论 -
linux内核中memcpy和memmove函数的区别和实现
linux内核中memcpy和memmove函数的区别和实现Kernel version:2.6.32CPU architecture:ARMAuthor:ce123(http://blog.youkuaiyun.com/ce123)嵌入式开发交流群:280352802,欢迎您的加入!memcp转载 2015-02-04 21:55:20 · 827 阅读 · 0 评论 -
尽量使用strncpy,snprintf,少用strcpy,sprintf
strncpy,snprintf函数的好处是指定了要拷贝/存储的空间大小,而strcpy,sprintf并没有指定。后者导致的结果是,如果dest的空间不够大,会出现内存溢出的情况,覆盖原有内存的数据,这种情况在linux内核的开发情况更为明显。因此,多采用strncpy,snprintf函数。原创 2015-02-04 22:16:21 · 721 阅读 · 0 评论 -
memcpy使用注意事项
memcpy函数原型为:void *memcpy(void *dest, const void *src, size_t n)memcpy用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。在c中,很多时候都要用到这个函数,这是一个高效的函数。在使用的时候有几点需要注意:1、如果复制的字节数n超出了dest的空间容量,或者n超出src的容量,这个函数是不会进行原创 2015-02-04 21:54:02 · 7612 阅读 · 0 评论 -
网络性能测试iperf
iperf 是一个 TCP/IP 和 UDP/IP 的性能测量工具,能够提供网络吞吐率信息,以及震动、丢包率、最大段和最大传输单元大小等统计信息;从而能够帮助我们测试网络性能,定位网络瓶颈。iperf是开源的,源代码可以从http://sourceforge.net/projects/iperf/下载。1. iperf能够做什么提起iperf,想必大家都知道它是用转载 2015-02-14 12:57:42 · 1068 阅读 · 0 评论 -
临界区,互斥量,信号量,事件的区别
四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。 临界区(Critical Section)保证在某一转载 2015-02-18 15:34:38 · 483 阅读 · 0 评论 -
Linux的NAT即时生效问题
引:超长的前言Linux的NAT不能及时生效,因为它是基于ip_conntrack的,如果在NAT的iptables规则添加之前,此流的数据包已经绑定了一个ip_conntrack,那么该NAT规则就不会生效,直到此ip_conntrack过期,如果一直有数据在鲁莽地尝试传输,那么就会陷入僵持状态。 在Linux系统中,ip_conntrack创建成功是按照一个流的头包是否成功转载 2015-02-18 17:36:47 · 1060 阅读 · 0 评论 -
分析system_call中断处理过程
用gdb追踪系统mkdir执行系统调用的过程,并分析system_call的中断处理过程。首先应当将有关mkdir代码载入menu中,重新装载menu:之后打开test.c文件,在其中加入调用mkdir函数的定义。执行make rootfs,从而打开menu镜像,我们发现mkdir就装载进menu的命令中了:然后我们用gdb在sys_原创 2015-04-07 09:21:49 · 832 阅读 · 0 评论