- 博客(70)
- 资源 (6)
- 收藏
- 关注
转载 char 与 unsigned char的本质区别
char 与 unsigned char的本质区别在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,
2014-02-10 18:11:49 858
转载 Git branch的分析
1). Commit相当于是一个快照,可以理解为是一个指向tree对象(记录当前版本文件系统,文件系统可以用tree来描述)的指针。Commit message是对commit的一个概要描述,如果要引用commit,需要通过该commit的SHA1来引用。2). Branch其实是一个指向commit的指针。但是branch和commit并不是一一对应的关系,因为直到你切换branch之前
2013-10-07 11:06:28 1955
转载 Git 的origin和master分析
Git 的origin和master分析 http://lishicongli.blog.163.com/blog/static/1468259020132125247302/ 首先要明确一点,对git的操作是围绕3个大的步骤来展开的(其实几乎所有的SCM都是这样)1. 从git取数据(git clone)2. 改动代码3. 将改动传回git(
2013-10-07 10:55:19 77616 13
原创 浅谈linux2.4 内核中断下半部分(softirq机制)
linux2.4 内核中断下半部分(bottom half)理解(请结合linux2.4内核代码看):首先先说一下为什么要采用中断下半部分:中断服务函数大多需要在关中断的情况下去执行,但是有的中断服务函数执行需要较长的时间,如果系统长时间关中断就会让其他的中断得不到响应,所以把需要关中断执行的部分放到中断的上部分,而把对实时性要求不高,不需要关中断执行的操作放到中断下半部分中去。但是中
2012-10-10 23:23:48 844
原创 工作中的主观臆断
昨天遇到linux2.6下webs命令不能使用的情况,但是在另一个项目上是能用的,两个项目上的uboot、内核都是一样的,唯独文件系统是裁剪过的,于是首先定位是文件系统的问题。一点一点恢复文件系统后(主要是lib下面的东东),发现还是不行。这期间怀疑过应用的问题,但是应用的程序放到另一个项目上又是能用的,没办法,搞不定,最后老大出马了,首先他和我思路是一样的,把能用的文件系统一点一点的添加到裁剪的
2012-01-12 22:43:03 1412
原创 mkimage能用交叉编译编译后到板子上运行吗
有那位大侠用过把mkimage这个工具用交叉编译器编译出来,然后在目标板上运行制作ramdisk的吗?
2011-12-27 18:45:29 742 1
转载 从大端模式buf中提取想要的位数
<br />#define EXTRACT_32(_X) (((U32)*(_X+0) << 24) | ((U32)*(_X+1) << 16) | ((U32)*(_X+2) << 8) | ((U32)*(_X+3) << 0))<br />#define EXTRACT_32N(_X) ((*(_X+3) << 24) | (*(_X+2) << 16) | (*(_X+1) << 8) | (*(_X+0) << 0))<br />#define EXTRACT_24(_X
2011-04-05 16:11:00 746
原创 设置ip及dns过程中,形如"192.001.000.020"设置不成功,需转换为"192.1.0.20"
<br />//设置ip及dns过程中,形如"192.001.000.020"设置不成功,需转换为"192.1.0.20"<br />CSUDI_Error_Code CSUDITcpipStrToIp(const char * pStr, char * pIp)<br />{<br /> unsigned int TmpNum[4] = {0};<br /><br /> if (CSUDI_NULL == pStr || CSUDI_NULL == pIp)<br /> {<br /> re
2011-03-29 11:33:00 880
原创 在考虑大小端时拷贝数据
大端模式 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 小端模式 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。/* * Transform the message X which consis
2011-03-28 19:03:00 878
原创 二进制数字符串转化为二进制数
<br />如何将一个二进制形式的数字字符串(如“10101010”)转化成二进制的数据类型(以char型为例)?<br />答:想到移位的方法。<br />char s[] = "10101011"<br />char s8 = 0;<br />for(i = 0;i < 8; i++)<br />{<br /> if(s[i] == '1')<br /> {<br /> s8 |= (1 << i);<br /> }<br />}
2010-08-04 21:00:00 1593
原创 采用选择排序法对链表进行排序,注意交换操作中不是对链表里某一节点里的某一元素进行交换,而是对两节点指针的交换
/*结构体定义*/struct stu{ int StuID;// char name[10];// int sex;// int years;// struct stu *next; }; /**************************************************************** Function Name
2010-05-23 23:51:00 1512
转载 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 13723
原创 如何导出内核模块符号以及如何引用导出的符号
以下是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 3403 1
转载 浅析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 891
转载 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 967
转载 转载 C语言面试题总汇
C语言面试题总汇 4. static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基
2010-04-15 14:11:00 816
转载 转载 wait队列,及函数解析
wait队列,及函数解析 在内核里面,等待队列是有很多用处的,尤其是在中断处理、进程同步、定时等场合。有时候,一个进程可能要等待一些事件的发生,如磁盘操作结束、一些系统资源的释放等等。等待队列存放着是暂时资源未得到满足的进程。如果需求的资源得到满足,就会从等待队列移动到运行队列(linux没有就绪队列)。它通过一个双链表和把
2010-04-15 14:06:00 1143 1
转载 转帖 linux 公司面试题
linux 公司面试题 1. 在Linux系统中,以文件 方式访问设备 。2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统。3. Linux文件系统中每个文件用 i节点来标识。4. 全部磁盘块由四个部分组成,分别为引导块 、专用块、 i节点表块 和数据存储块。5. 链接分为:
2010-04-15 14:04:00 766
转载 转帖 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
转载 转载 linux 2.6内核进程管理
linux 2.6内核进程管理 linux每个进程对应一个task_struct类型结构。该结构包含进程相关的所有信息。linux进程通过list_head组织双向链表,每一个结点就是一个进程描述符。进程描述符里面包含了进程所有的信息:进程所打开的文件、进程的地址空间、挂起信号、进程状态和其他更多的信息。以下是进程描述符的部分定
2010-04-15 13:58:00 816
转载 转载 linux2.6内核进程调度
linux2.6内核进程调度 Linux2.4内核进程调度的缺陷: Linux2.4 内核的进程调度采用时间片轮转和优先级相结合的调度策略,但存在以下几个致命缺陷: 1>调度算法时间复杂度是 O(n)。2.4 内核每次调度都要进行一次循环,耗时与当前就绪进程数有关,因此达不到实时性的要求;时间片重算时必须给 task
2010-04-15 13:57:00 1258
转载 转载 linux 2.6线程创建源码分析
linux 2.6线程创建源码分析 上章讲到线程,现在对线程创建的代码流程分析下。来一步一步揭开她神秘的面纱 linux内核创建线程函数 kernel_thread(),最终会调用do_fork(). 前面谈到线程也是用task_struct结构表示它拥有的信息,只是是共享进程的资源。 根据clone_flags标志,来
2010-04-15 13:55:00 817
转载 转载 linux 2.6进程与线程
linux 2.6进程与线程 1 > 线程和进程的差别线程机制支持并发程序设计技术,在多处理器上能真正保证并行处理。而在linux实现线程很特别,linux把所有的线程都当作线程实现。linux下线程看起来就像普通进程(只是该进程和其他进程共享资源,如地址空间)。上述机制与Microso
2010-04-15 13:47:00 858
转载 转载-linux 2.6 进程总结
转载-linux 2.6 进程总结 进程、轻量级进程(LWP)、线程 进程:程序执行体,有生命期,用来分配资源的实体 线程:分配CPU的实体。 用户空间实现,一个线程阻塞,所有都阻塞。 内核实现,不会所用相关线程都阻塞。用LWP实现,用线程组表示这些线程逻辑上所属的进程。进程描
2010-04-15 13:43:00 646
转载 内核中的数据类型
第 11 章 内核中的数据类型 下一页 11.4. 其他移植性问题除了数据类型, 当编写一个驱动时有几个其他的软件问题要记住, 如果你想在 Linux 平台间可移植.一个通常的规则是怀疑显式的常量值. 常常通过使用预处理宏, 代码已被参数化. 这一节列出了最重要的可移植性问题. 无论何时你遇到已被参数化的值, 你可以在头文件中
2010-04-12 09:16:00 664
转载 关于LUN的概念
a、lun的概念 lun的全称是logical unit number,也就是逻辑单元号。我们知道scsi总线上可挂接的设备数量是有限的,一般为6个或者15个,我们可以用target ID(也有称为scsi id的)来描述这些设备,设备只要一加入系统,就有一个代号,我们在区别设备的时候,只要说几号几号就ok了。 而实际上我们需要用来描述的对象,是远远超过该数字的,于是我们引进了lun的
2010-04-06 19:03:00 667
翻译 内核中的 likely() 与 unlikely() 收藏
内核中的 likely() 与 unlikely() 收藏 在 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别? 首先要明确: if(likely(value)) 等价于 if(value) if(unlikely(value)) 也等价于 if(value)也就
2010-04-04 09:18:00 567
转载 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 16828 1
转载 双向循环链表详细讲解
双向循环链表tdhlshx@yahoo.com.cn, 2008-4-30内核中很多地方使用双向循环链表来维护一些信息,比如任务队列。双向循环链表定义于include/linux/list.h,只有两个成员next与prev分别指向后继与前趋结点。一般内嵌到别的结构体内使用。避免了每个需要双向循环链表的数据结构都自己维护指针并编写链表操作函数。struct list_head { struc
2010-03-28 09:31:00 1249
原创 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 2892
转载 堆栈与函数调用
[C++对象模型][5]堆栈与函数调用 一 C++程序内存分配1) 在栈上创建。在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,一般使用寄存器来存取,效率很高,但是分配的内存容量有限。 2) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何
2010-03-18 18:37:00 374
转载 需要一个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 2102
转载 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 446
转载 printk()函数的总结
printk()函数的总结我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况。对程序的调试起到了很重要的作用。(下文中的日志级别和控制台日志控制级别是一个意思)printk(日志级别 "消息文本");这里的日志级别通俗的说指的是对文本信息的一种输出范围上的指定。日志级别一共有8个级别,printk的日志级别定义如下(
2010-03-17 20:00:00 687 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 759
转载 C语言中使用extern修饰函数要注意(转)
用extern修饰函数是表示被修饰的函数定义在当前文件外,而该函数用extern声明类型后就可以被当前文件调用了。使用extern修饰某函数时,对该函数的调用是在连接阶段才被处理的。下面我们看一段代码。/*********************************************** * fun.c **************************************
2010-03-15 21:26:00 24290 1
转载 C/C++ static和可重入概念
staticC++中的static C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 一、面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例
2010-03-15 21:06:00 2720
原创 遍历操作列表的算法
该例子来源于《操作系统原理。技术与编程》一书的p214free_irq()该函数将已经使用完的IRQ线释放掉,以便其他设备使用,源代码如下:void free_irq(unsigned int irq, void *dev_id){ struct irqaction *action, **p;//遍历链表时要用的变量 unsigned long flags;
2010-03-15 13:24:00 590
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人