linux
文章平均质量分 55
ZhengboCai
热爱it
展开
-
linux 2.6 内核学习小结---硬件相关概念
1、特权级 Intel体系结构引入特权级是为了实现保护。所谓386保护模式就是在此基础上建立起来的。系统中每个段(CS、DS、SS)都有自己的特权级,系统中每个任务或程序也都有自己的特权。 2、操作模式 处理器加电或重启后,首先进入实模式,操作系统初始化部分负责从实模式到保护模式的切换。 3、段、段描述符 段是一块连续的内存区域,是基本的内存保护单位。用段描述符来描述。 4、全局和局部转载 2010-03-06 16:41:00 · 432 阅读 · 0 评论 -
转帖 copy_to_user,copy_from_user,get_user和put_user函数详解
copy_to_user,copy_from_user,get_user和put_user函数详解 字符设备驱动驱动的读,写。如:ssize_t xxx_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos);ssize_t xxx_w转载 2010-04-15 14:00:00 · 1505 阅读 · 0 评论 -
转载-linux 2.6 进程总结
转载-linux 2.6 进程总结 进程、轻量级进程(LWP)、线程 进程:程序执行体,有生命期,用来分配资源的实体 线程:分配CPU的实体。 用户空间实现,一个线程阻塞,所有都阻塞。 内核实现,不会所用相关线程都阻塞。用LWP实现,用线程组表示这些线程逻辑上所属的进程。进程描转载 2010-04-15 13:43:00 · 651 阅读 · 0 评论 -
转载 linux 2.6线程创建源码分析
linux 2.6线程创建源码分析 上章讲到线程,现在对线程创建的代码流程分析下。来一步一步揭开她神秘的面纱 linux内核创建线程函数 kernel_thread(),最终会调用do_fork(). 前面谈到线程也是用task_struct结构表示它拥有的信息,只是是共享进程的资源。 根据clone_flags标志,来转载 2010-04-15 13:55:00 · 821 阅读 · 0 评论 -
转帖 linux 公司面试题
linux 公司面试题 1. 在Linux系统中,以文件 方式访问设备 。2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统。3. Linux文件系统中每个文件用 i节点来标识。4. 全部磁盘块由四个部分组成,分别为引导块 、专用块、 i节点表块 和数据存储块。5. 链接分为:转载 2010-04-15 14:04:00 · 768 阅读 · 0 评论 -
转载 wait队列,及函数解析
wait队列,及函数解析 在内核里面,等待队列是有很多用处的,尤其是在中断处理、进程同步、定时等场合。有时候,一个进程可能要等待一些事件的发生,如磁盘操作结束、一些系统资源的释放等等。等待队列存放着是暂时资源未得到满足的进程。如果需求的资源得到满足,就会从等待队列移动到运行队列(linux没有就绪队列)。它通过一个双链表和把转载 2010-04-15 14:06:00 · 1144 阅读 · 1 评论 -
GCC编译关键字“__attribute__”
让GCC编译关键字“__attribute__”给你带来方便 直接引入我们的主角(粗体部分): int my_printf (void *my_object, const char *my_format, ...) __attribute__ ((format (printf, 2, 3))); my_printf是一个你自己写的函数,比如可能是对vsnprintf等函数进行转载 2010-04-15 14:20:00 · 973 阅读 · 0 评论 -
浅析container_of(ptr, type, member)
浅析container_of(ptr, type, member)#define container_of(ptr, type, member) ({ / const typeof( ((type *)0)->member ) *__mptr = (ptr); / (type *)( (ch转载 2010-04-16 10:21:00 · 894 阅读 · 0 评论 -
如何导出内核模块符号以及如何引用导出的符号
以下是file1.c文件:#include#includeMODULE_LICENSE("Dual BSD/GPL");int add_integar(int a, int b){ return a+b;}int sub_integar(int a, int b){ return a-b;}/*导出符号*/EXPORT_SYMBOL(add_integar);EXPORT_原创 2010-04-17 09:39:00 · 3416 阅读 · 1 评论 -
关于LUN的概念
a、lun的概念 lun的全称是logical unit number,也就是逻辑单元号。我们知道scsi总线上可挂接的设备数量是有限的,一般为6个或者15个,我们可以用target ID(也有称为scsi id的)来描述这些设备,设备只要一加入系统,就有一个代号,我们在区别设备的时候,只要说几号几号就ok了。 而实际上我们需要用来描述的对象,是远远超过该数字的,于是我们引进了lun的转载 2010-04-06 19:03:00 · 667 阅读 · 0 评论 -
内核中的 likely() 与 unlikely() 收藏
内核中的 likely() 与 unlikely() 收藏 在 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别? 首先要明确: if(likely(value)) 等价于 if(value) if(unlikely(value)) 也等价于 if(value)也就翻译 2010-04-04 09:18:00 · 569 阅读 · 0 评论 -
kthread_run()和kthread_stop()函数
1 使用kthread_create创建线程: struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char *namefmt, ...);这个函数可以像printk一样传入某种格式转载 2010-05-17 23:35:00 · 13769 阅读 · 0 评论 -
mkimage能用交叉编译编译后到板子上运行吗
有那位大侠用过把mkimage这个工具用交叉编译器编译出来,然后在目标板上运行制作ramdisk的吗?原创 2011-12-27 18:45:29 · 742 阅读 · 1 评论 -
工作中的主观臆断
昨天遇到linux2.6下webs命令不能使用的情况,但是在另一个项目上是能用的,两个项目上的uboot、内核都是一样的,唯独文件系统是裁剪过的,于是首先定位是文件系统的问题。一点一点恢复文件系统后(主要是lib下面的东东),发现还是不行。这期间怀疑过应用的问题,但是应用的程序放到另一个项目上又是能用的,没办法,搞不定,最后老大出马了,首先他和我思路是一样的,把能用的文件系统一点一点的添加到裁剪的原创 2012-01-12 22:43:03 · 1418 阅读 · 0 评论 -
浅谈linux2.4 内核中断下半部分(softirq机制)
linux2.4 内核中断下半部分(bottom half)理解(请结合linux2.4内核代码看):首先先说一下为什么要采用中断下半部分:中断服务函数大多需要在关中断的情况下去执行,但是有的中断服务函数执行需要较长的时间,如果系统长时间关中断就会让其他的中断得不到响应,所以把需要关中断执行的部分放到中断的上部分,而把对实时性要求不高,不需要关中断执行的操作放到中断下半部分中去。但是中原创 2012-10-10 23:23:48 · 848 阅读 · 0 评论 -
转载 linux 2.6内核进程管理
linux 2.6内核进程管理 linux每个进程对应一个task_struct类型结构。该结构包含进程相关的所有信息。linux进程通过list_head组织双向链表,每一个结点就是一个进程描述符。进程描述符里面包含了进程所有的信息:进程所打开的文件、进程的地址空间、挂起信号、进程状态和其他更多的信息。以下是进程描述符的部分定转载 2010-04-15 13:58:00 · 818 阅读 · 0 评论 -
转载 linux2.6内核进程调度
linux2.6内核进程调度 Linux2.4内核进程调度的缺陷: Linux2.4 内核的进程调度采用时间片轮转和优先级相结合的调度策略,但存在以下几个致命缺陷: 1>调度算法时间复杂度是 O(n)。2.4 内核每次调度都要进行一次循环,耗时与当前就绪进程数有关,因此达不到实时性的要求;时间片重算时必须给 task转载 2010-04-15 13:57:00 · 1260 阅读 · 0 评论 -
目录里的两个你不知道文件揭秘
不小心在图书馆看到linux的书籍,不小心翻开了一下,不小心才知道一个道理.这个道理可能很多人已经知道的,其实我早想过这个问题,只是第一次书告诉我关于这个.我只看到一句话:每个目录有以下两个文件. 1). 2)..前面一个是当前目录,后一个是父目录.其实我早应该猜到这么一回事了.也看到过.只是没太注意)自从DOS年代的cd..就让人见识到了什么是".."了后来每次用WINRA转载 2010-03-09 21:47:00 · 665 阅读 · 0 评论 -
文件系统中的对象总结及对目录项对象的重点理解
文件系统中主要对象:●超级块(superblock)对象: 存放系统中已安装文件系统的有关信息。对于基于磁盘的文件系统(具有I/O操作),这类对象通常对应于存放在磁盘上的文件系统控制块(FCB),也就是说,每个文件系统都有一个超级块对象。●索引节点(inode)对象: 存放关于具体文件的一般信息。对于基于磁盘的文件系统,这类对象通常对应于存放在磁盘上的文件控制块(FCB),也就是说,每原创 2010-03-09 22:05:00 · 4056 阅读 · 1 评论 -
Linux内核的同步机制
在进入正文前先看一下我在网上看到的帖子:问:atomic_set(v,i)的定义是这样的: #define atomic_set(v,i) v->counter=i 但是,在i386体系结构中,不能直接把一个内存操作数通过一条mov指令存到另一个内存操作数中, 比如要把int32类型的变量 i 设置成 j,必须经过两条指令: mov eax,j mov i,eax 如果这样理解正确的话,那at转载 2010-03-17 18:57:00 · 760 阅读 · 0 评论 -
copy_to_user,copy_from_user,get_user,put_user函数比较
copy_to_user,copy_from_user,get_user,put_user函数比较copy_to_user -- Copy a block of data into user space. copy_from_user -- Copy a block of data from user space.get_user -- Get a simple va转载 2010-03-17 20:27:00 · 448 阅读 · 0 评论 -
printk()函数的总结
printk()函数的总结我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况。对程序的调试起到了很重要的作用。(下文中的日志级别和控制台日志控制级别是一个意思)printk(日志级别 "消息文本");这里的日志级别通俗的说指的是对文本信息的一种输出范围上的指定。日志级别一共有8个级别,printk的日志级别定义如下(转载 2010-03-17 20:00:00 · 689 阅读 · 1 评论 -
需要一个1000000的数组实现方法
今天在网上看到如题的一个帖子,觉得值得收藏一下实现方法:1. 放在全局区static int c[1000 * 1000];2. 动态分配.int *c;c = malloc(sizeof(int) * 1000 * 1000); #includestdio.h>#includestdlib.h>int main(){ int *p = (int *)malloc(100转载 2010-03-18 09:31:00 · 2108 阅读 · 0 评论 -
linux内核分析---系统调用实现代码分析
作者:e4gle by e4gle from http://e4gle.org 2001年6月5日 启动早就读完,现在为了写笔记再从启动之后粗略的大体读一遍,基本就是几个大模块:启动和初始化, 中断信号,进程及调度,内存管理,文件系统,网络,驱动和模块等,我主要也从这几块入手。由于启动 部分在start_kernel之前牵涉到大量的x86体系相关的汇编知识,需要大量的时间,于是我跳过转载 2010-01-09 19:49:00 · 716 阅读 · 0 评论 -
Linux头文件说明
头文件 说明 验证程序断言 c p i o归档值 字符类型 目录项 出错码 文件控制 浮点常数 文件树漫游转载 2010-03-24 19:48:00 · 446 阅读 · 0 评论 -
mkyaffsimage_2 命令找不到处理方法
今天在制作文件系统的时候,在最后一步将root_2.6.25.8文件系统框架制成root_2.6.25.8.yaffs yaffs文件系统格式的镜像时,发现找不到mkyaffsimage_2命令,于是到网上下载了mkyaffsimage_2命令安装包,解压后是/usr/local/sbin/mkyaffsimage_2的二进制文件,但是重新运行mkyaffsimage_2 root_2.6.25.原创 2010-03-26 22:11:00 · 2913 阅读 · 0 评论 -
双向循环链表详细讲解
双向循环链表tdhlshx@yahoo.com.cn, 2008-4-30内核中很多地方使用双向循环链表来维护一些信息,比如任务队列。双向循环链表定义于include/linux/list.h,只有两个成员next与prev分别指向后继与前趋结点。一般内嵌到别的结构体内使用。避免了每个需要双向循环链表的数据结构都自己维护指针并编写链表操作函数。struct list_head { struc转载 2010-03-28 09:31:00 · 1250 阅读 · 0 评论 -
struct device浅析
struct device结构体(2.6.23) 一、定义:linux/include/linux/device.hstruct device { struct klist klist_children; struct klist_node knode_parent; /* node in sibling list */ s转载 2010-03-28 11:23:00 · 16855 阅读 · 1 评论 -
内核中的数据类型
第 11 章 内核中的数据类型 下一页 11.4. 其他移植性问题除了数据类型, 当编写一个驱动时有几个其他的软件问题要记住, 如果你想在 Linux 平台间可移植.一个通常的规则是怀疑显式的常量值. 常常通过使用预处理宏, 代码已被参数化. 这一节列出了最重要的可移植性问题. 无论何时你遇到已被参数化的值, 你可以在头文件中转载 2010-04-12 09:16:00 · 668 阅读 · 0 评论 -
转载 linux 2.6进程与线程
linux 2.6进程与线程 1 > 线程和进程的差别线程机制支持并发程序设计技术,在多处理器上能真正保证并行处理。而在linux实现线程很特别,linux把所有的线程都当作线程实现。linux下线程看起来就像普通进程(只是该进程和其他进程共享资源,如地址空间)。上述机制与Microso转载 2010-04-15 13:47:00 · 860 阅读 · 0 评论 -
linux socket编程示例
比较经典的linux socket编程示例,通俗易懂,深入浅出原创 2013-10-05 14:02:11 · 1084 阅读 · 2 评论