![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
hyfcomeon
这个作者很懒,什么都没留下…
展开
-
内核模块初始化函数static int __init init_func() 和退出函数 static void _exit exit_func() _init 和_exit 的理解
模块中初始化函数有的前面有个_init有什么作用。在内核代码iclude/linux/init.h 中有这样的定义#define __init __section(.init.text) __cold notrace#define __initdata __section(.init.data)#define __initconst __section(.init.rodata原创 2013-04-05 16:23:03 · 5550 阅读 · 0 评论 -
Linux内核源代码分析——fork()原理&多进程网络模型
今晚和一位500强的leader喝喝小酒吃吃烤鱼,生活乐无边。这位兄弟伙才毕业2年,已经做到管理层了,机遇和能力不可谓不好。喝酒之余,聊到Linux内核的两个问题——fork()、exec()的原理。 兄弟伙:fork()的原理是什么呢? 我:其实一句话就概括了——copy on write。兄弟伙:copy on wirte我懂转载 2013-06-08 23:30:38 · 7503 阅读 · 2 评论 -
socket通信之read阻塞
read函数只是一个通用的读文件设备的接口。是否阻塞需要由设备的属性和设定所决定。一般来说,读字 符终端、网络的socket描述字,管道文件等,这些文件的缺省read都是阻塞的方式。如果是读磁盘上的文件,一般不会是阻塞方式的。但使用锁和 fcntl设置取消文件O_NOBLOCK状态,也会产生阻塞的read效果。怎么样以非阻塞的方式从管道中读取数据?因为我用read函数时,如果管道没转载 2013-05-22 00:17:54 · 1582 阅读 · 0 评论 -
C程序的内存分配区域
C程序一直由下面几部分组成:1 正文段 :是CPU执行的机器指令部分;正文段通常是共享的,程序执行的时候是在内存中保持一份副本;正文段常常是只读的,这是为了防止程序意外操作破坏正文段2 初始化数据段:就是通常所说的数据段,保存了程序中需要明确赋初值的变量,如出现在任何函数之外的申明 int cout = 24;3 非初始化数据段:通常称为bss段,命名来自早期汇编的运算符, “原创 2013-05-22 00:40:53 · 700 阅读 · 0 评论 -
linux 文件特殊权限位小结
特殊位作用: SUID:对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属主身份来执行。 SGID对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属组身份来执行。 STICKY:粘滞位,通常对目录而言。通常对于全局可写目录(other也可写)来说,让该目录具有sticky后,删除只对属于自己的文件有效(但是仍能编辑修改别人的文件,除了root的)。原创 2013-05-22 00:35:52 · 759 阅读 · 0 评论 -
ioremap 与 mmap
内存映射对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间,如下图:转载 2013-05-08 00:54:04 · 667 阅读 · 0 评论 -
linux网卡驱动-3
紧接上一篇,这里简要介绍net_device 结构和网卡驱动框架。 struct net_device 是一个比sk_buff 更复杂的结构,里面包含了与TCP/IP协议栈通信的接口函数,但是自从2.6.31 之后的内核中这些接口函数就被封装在了 stuct net_device_ops 结构中,在net_device 结构中以 netdev_ops 成员的形式出现。我们就来看如何使转载 2013-05-08 00:44:25 · 871 阅读 · 0 评论 -
linux网卡驱动-2
接上一篇,我们来看与skb相关的一些重要函数:网络模块中,有两个用来分配SKB描述符的高速缓存,在SKB模块初始函数skb_init()中被创建:void __init skb_init(void){skbuff_head_cache = kmem_cache_create("skbuff_head_cache", sizeof(struct sk_buf转载 2013-05-08 00:42:52 · 786 阅读 · 0 评论 -
linux 的普通用户为什么能修改/etc/passwd文件
Unix 的口令文件 /etc/passwd 记录着所有用户和对应的登录密码等信息。/etc/passwd文件的所有者是root而且只有root用户有权限对该文件进行写操作。但是Unix系统其实是允许所有的用户修改自己的登录口令的(即修改/etc/passwd或/etc/shadow 文件)其实现原理如下。首先要说明的是,与每个进程相关联的ID有6个或更多,如图1所示其中进程的有效原创 2013-05-22 00:45:12 · 11224 阅读 · 0 评论 -
Linux 网卡驱动-1
参考:1. 深入理解Linux网络技术内幕 PartIII 2. Essential Linux Device Driver Chap15 3. Linux 内核源码剖析——TCP/IP 实现 5. rtl8139too.c 2010.4 修订 6. Linux 内核 2.6.33 7. google当你转载 2013-05-08 00:41:42 · 698 阅读 · 0 评论 -
Linux TCP/IP 协议栈学习(2)—— 数据帧收发主要函数及net_device 结构
原文地址:http://www.cnblogs.com/zhuyp1015/archive/2012/12/25/2833163.html /*** netif_rx - post buffer to the network code* @skb: buffer to post** This function receives a packet from a d转载 2013-05-08 00:36:41 · 1192 阅读 · 0 评论 -
linux内核定时器的实现
原文地址 :http://simohayha.iteye.com/blog/507576 由于linux还不是一个实时的操作系统,因此如果需要更高精度,或者更精确的定时的话,可能就需要打一些实时的补丁,或者用商用版的实时linux,.这里内的定时器最小间隔也就是1个tick.这里还有一个要注意的,我这里的分析并没有分析内核新的hrt 定时器.这个定时器是Monta Vist转载 2013-05-07 00:03:32 · 832 阅读 · 0 评论 -
linux内核sk_buff的结构分析
原文地址:http://simohayha.iteye.com/blog/556168 我看的内核版本是2.6.32.在内核中sk_buff表示一个网络数据包,它是一个双向链表,而链表头就是sk_buff_head,在老的内核里面sk_buff会有一个list域直接指向sk_buff_head也就是链表头,现在在2.6.32里面这个域已经被删除了。而sk_buff的内存布局转载 2013-05-07 00:12:26 · 483 阅读 · 0 评论 -
linux内核spin_lock分析
今天我们详细了解一下spin_lock在内核中代码实现,我们总共分析四个项目: 1.spinlock_t的定义分析:首先来看一下spinlock_t的定义:typedef struct { raw_spinlock_t raw_lock;#if defined(CONFIG_PREEMPT) &&defined(CONFIG_SMP)转载 2013-08-04 22:08:11 · 3077 阅读 · 0 评论