linux

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2012年4月9日

摘要: 自动转换遵循以下规则:1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。a.若两种类型的字节数不同,转换成字节数高的类型b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。4)char型和short型参与运算时,必须先转换成int型。5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边 阅读全文
posted @ 2012-04-09 12:04 h13 阅读(9684) 评论(0) 推荐(3) 编辑

2012年3月29日

摘要: BusyBox已带有一个简化板的udev - mdev,通过简单的mdev -s,就能自动装配/dev目录下的设备文件:# ls /devconsolenullptmxptsshm# mdev -s && ls /devapm_bios ptypd tty24 tty56console ptype tty25 tty57fb0 ptypf tty26 tty58full ram0 tty27 tty59kmem ram1 tty28 tty6kmsg ram2 tty29... 阅读全文
posted @ 2012-03-29 20:34 h13 阅读(5939) 评论(0) 推荐(0) 编辑

2012年3月27日

摘要: 创建autoRunSVN.bat文件,内容是: sc create MySVNServer binpath= "\"C:\Program FilesSubversion\svnserve\svnserve\" --service -r H:\homerepos" displayname= "SVNService" depend= Tcpip start= auto pause 注意之处: (1)sc是windows自带的服务配置程序,MySVNServer 是服务的名称,似乎没什么用。 (2)参数binPath表示svnserve可执 阅读全文
posted @ 2012-03-27 17:35 h13 阅读(7165) 评论(1) 推荐(1) 编辑

2012年3月13日

摘要: 系统初始化时kernel_init在内核态创建和运行应用程序以完成系统初始化. 内核刚刚启动时,只有内核态的代码,后来在init过程中,在内核态运行了一些初始化系统的程序,才产生了工作在用户空间的进程。/* This is a non __init function. Force it to be noinline otherwise gcc 736 * makes it inline to init() and it becomes part of init.text section 737 */ 738static noinline int init_post(void) 739{ 740 阅读全文
posted @ 2012-03-13 23:46 h13 阅读(8658) 评论(1) 推荐(1) 编辑

2012年3月9日

摘要: open和fopen的区别:1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件“缓冲区”的大小随机器 而定。fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, fre 阅读全文
posted @ 2012-03-09 21:57 h13 阅读(779) 评论(0) 推荐(0) 编辑

摘要: linux设置默认网关:route add default gw 192.168.3.1 eth0 阅读全文
posted @ 2012-03-09 17:54 h13 阅读(766) 评论(0) 推荐(0) 编辑

2012年3月3日

摘要: unsigned long hash_long(unsigned long val, unsigned int bits) { unsigned long hash=val *0x9e370001UL; return hash>>(32-bits); } 0x9e370001=2 654 404 609=2^31+2^29-2^25+2^22-2^19-2^16+1. 是接近黄金比例的2^32的一个素数。(也称为 “魔数常量”)也许你会想常量0x9e370001(=2654 404 609)究竟是怎么得出来的。这种散列函数是基于表索引乘于一个适当的大数,于是结果溢出,就把留在32位 阅读全文
posted @ 2012-03-03 16:07 h13 阅读(1309) 评论(0) 推荐(0) 编辑

摘要: hlist哈希链表是内核中常用的一个数据结构,由于它不同于普通的链表,所以这里对hlist哈希链表进行一下分析,希望对大家有所帮助。在include/Linux/list.h中有list链表与hlist哈希链表结构的定义,下面都列出它们的定义,可以对比一下:struct list_head {struct list_head *next, *prev;};struct hlist_head {struct hlist_node *first;};struct hlist_node {struct hlist_node *next, **pprev;};双头(next,prev)的双链表对于Ha 阅读全文
posted @ 2012-03-03 15:25 h13 阅读(3712) 评论(0) 推荐(0) 编辑

2012年2月28日

摘要: 本文详细的介绍了Linux内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,使用要求以及一些典型示例一、引言在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(semaphore)、读写信号量(rw_semaphore)、spinlock、BKL(Big Kernel Lock)、rwlock、brlo 阅读全文
posted @ 2012-02-28 09:27 h13 阅读(713) 评论(0) 推荐(0) 编辑

2012年2月22日

摘要: 所有的__init函数在区段.initcall.init中还保存了一份函数指针,在初始化时内核会通过这些函数指针调用这些__init函数指针,并在整个初始化完成后,释放整个init区段(包括.init.text,.initcall.init等)。 注意,这些函数在内核初始化过程中的调用顺序只和这里的函数指针的顺序有关,和1)中所述的这些函数本身在.init.text区段中的顺序无关。在2.4内核中,这些函数指针的顺序也是和链接的顺序有关的,是不确定的。在2.6内核中,initcall.init区段又分成7个子区段,分别是.initcall1.init .initcall2.init .i... 阅读全文
posted @ 2012-02-22 16:45 h13 阅读(1092) 评论(0) 推荐(0) 编辑

2012年2月21日

摘要: Linux内部的时钟处理机制全面剖析在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等。所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操作系统的运作方式。本文分析了 Linux 2.6.25 内核的时钟处理机制,首先介绍了在计算机系统中的一些硬件计时器,然后重点介绍了 Linux 操作系统中的硬件时钟和软件时钟的处理过程以及软件时钟的应用。最后对全文进行了总结。◆1、计算机系统中的计时器在计算机系统中存在着许多硬件计时器,例如 Real Timer Clock ( RTC )、Time Stamp Counter ( TSC ) 和 阅读全文
posted @ 2012-02-21 17:35 h13 阅读(5154) 评论(0) 推荐(1) 编辑

2012年2月20日

摘要: 转自:http://blog.yaabou.com/?p=82__user表示是一个用户空间的指针,所以kernel不可能直接使用。#ifdef __CHECKER__# define __user __attribute__((noderef, address_space(1)))# define __kernel /* default address space */#else# define __user# define __kernel#endifnoderef告诉编译器,不应该解除该指针的引用,因为在当前地址空间中它是没有意义的。这里的CHECKER表示是否使用了Sprase(就是一 阅读全文
posted @ 2012-02-20 15:57 h13 阅读(570) 评论(0) 推荐(0) 编辑

2012年2月17日

摘要: 2月 3日, Linux内核开发者 Greg Kroah-Hartman将 Android的驱动程序从 Linux内核“状态树”(“ staging tree”)上除去,从此, Android与 Linux开发主流将分道扬镳。原因是,“ noone seemed to be working on it”,难怪 Linux内核开发团队决定不要它了。呜呼!后果如何?今后,在开源的路上,谷歌 Android 的硬件驱动从何而来?谷歌喜欢开源,是喜欢它自己所喜欢的那种开源,而不是 Linux 的开发主流。谷歌气大财粗,自己去单干吧!国内开源界,不要跟在谷歌屁股后面瞎吹了。说到底, Linux 是草根事 阅读全文
posted @ 2012-02-17 21:24 h13 阅读(5672) 评论(0) 推荐(0) 编辑

摘要: From linux kernel monkey log | 李莘译,转载请注明 ifanr 译文链接。2.6.33 版内核移除了Andirod的代码。很多人不断地问我发生了什么,对于Android下一步要怎么办。这里是我对整件事情的澄清:首先,我很喜欢Android平台。直到上周,我还每天使用我的开发手机G1。它工作良好,作为用户我很满意。另外,从技术角度我也很喜欢他。令人惊奇的是,Google仅仅使用Linux内核构建了一个可移植的和健壮的手机平台,而并没有使用”传统”Linux的任何其他东西。更加难能可贵的是,你可以 在Android系统之上安装一个”真正”的Linux镜像,两者都能正常 阅读全文
posted @ 2012-02-17 21:22 h13 阅读(780) 评论(0) 推荐(0) 编辑

摘要: 来源:http://xmxohy.blog.163.com/blog/static/53469584201082734630713/先理解cache的作用CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中(hit)”,此时CPU直接从Cache中调用该内容;否则,就 称为“ 不命中”,CPU只好去内存中调用所需的子程序或指令了。CPU不但可以直接从Cache中读出内容,也可以直接往其中写入内容。由于Cache的存取速 率相当快,使得CPU的利用率大大提高,进而使整个系统的性能得以提升。Cache的一致性就是直Cache中的数据,与对应的内存中的数据是一致的。DM 阅读全文
posted @ 2012-02-17 15:44 h13 阅读(8606) 评论(0) 推荐(0) 编辑

摘要: 1、安装git android的linux内核可以从http://android.git.kernel.org/下载,但下载需要使用git,windows版的git可以从http://code.google.com/p/msysgit/下载,有完全安装版和便携版(portable)两个版本可供选择,不常用git的话选portable版就可以了。 下载portable版的git后,解压缩,然后运行git-bash,会出现一个console窗口。2、android的kernel有多个部分,可根据需要运行以下命令下载需要的内容。 在git的console窗口中执行以下命令即可下载内核: $ git 阅读全文
posted @ 2012-02-17 10:00 h13 阅读(6671) 评论(0) 推荐(0) 编辑

2012年2月16日

摘要: 摘自:http://hi.baidu.com/embedexpert/blog/item/03d2ef15126b2964ca80c4dc.html sun-java5-jdk在ubuntu 9.10的source里已经去掉了,如果安装则提示如下:root@mike-desktop:/home/mike/ti_android#sudo apt-get install sun-java5-jdk正在读取软件包列表...完成正在分析软件包的依赖关系树正在读取状态信息...完成E:无法找到软件包sun-java5-jdk成都明诚科技的解决办法是:1、sudo gedit /etc/apt/sourc 阅读全文
posted @ 2012-02-16 21:30 h13 阅读(1853) 评论(0) 推荐(0) 编辑

2012年2月3日

摘要: 转:http://www.cnblogs.com/shenhaocn/archive/2011/03/10/1980310.html1. 硬件特性:【Flash的硬件实现机制】Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的入硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了, 阅读全文
posted @ 2012-02-03 09:27 h13 阅读(6261) 评论(0) 推荐(1) 编辑

2012年1月10日

摘要: 转自:http://blog.csdn.net/linweig/article/details/5085487Linux 就是通常所说的单内核(monolithic kernel),即操作系统的大部分功能都被称为内核,并在特权模式下运行。它与微型内核不同,后者只把基本的功能(进程间通信 [IPC]、调度、基本的输入/输出 [I/O] 和内存管理)当作内核运行,而把其他功能(驱动程序、网络堆栈和文件系统)排除在特权空间之外。因此,您可能认为 Linux 是一个完全静态的内核,但事实恰恰相反。通过 Linux 内核模块(LKM)可以在运行时动态地更改 Linux。可动态更改是指可以将新的功能加载到 阅读全文
posted @ 2012-01-10 09:26 h13 阅读(1993) 评论(0) 推荐(0) 编辑

2012年1月1日

摘要: 深入理解linux内核与驱动 阅读全文
posted @ 2012-01-01 14:55 h13 阅读(393) 评论(0) 推荐(0) 编辑

2011年12月27日

摘要: mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。 下面是一个小例子:class ClxTest{ public: void Output() const;};void ClxTest... 阅读全文
posted @ 2011-12-27 12:03 h13 阅读(386) 评论(0) 推荐(0) 编辑

2011年12月8日

摘要: 转自:http://lamp.linux.gov.cn/Linux/optimize_guide.html前言网上关于编译优化的文章很多,但大多零零散散,不成体系,本文试图给出一个完整和清晰的优化思路,同时提供在实践中如何进行优化的详尽参考。但是,在介绍所有优化知识之前首先引用LFS-Book中的一句忠告:“使用编译器优化得到的小幅度性能提升,与它带来的风险相比微不足道”。你还要进行优化吗?%@&#=^%~*# ...OK, crazy guy! Let's Go!!在继续之前,作者还是奉劝各位:如果追求极致的优化,那么它将是一件既耗时又麻烦的事情,你会陷入无止尽的测试、测试、 阅读全文
posted @ 2011-12-08 13:17 h13 阅读(3971) 评论(0) 推荐(0) 编辑

2011年12月3日

摘要: 转自:http://blog.csdn.net/linweig/内核编译完成后会生成zImage内核镜像文件。关于bootloader加载zImage到内核,并且跳转到zImage开始地址运行zImage的过程,相信大家都很容易理解。但对于zImage是如何解压的过程,就不是那么好理解了。本文将结合部分关键代码,讲解zImage的解压过程。先看看zImage的组成吧。在内核编译完成后会在arch/arm/boot/下生成zImage。在arch/armboot/Makefile中:$(obj)/zImage: $(obj)/compressed/vmlinux FORCE$(call if_c 阅读全文
posted @ 2011-12-03 09:42 h13 阅读(581) 评论(0) 推荐(0) 编辑

2011年11月21日

摘要: 我们创建文件的默认权限是怎么来的?如何改变这个默认权限呢?umask是什么?当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。如何计算umask值?umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文 阅读全文
posted @ 2011-11-21 13:05 h13 阅读(370) 评论(0) 推荐(0) 编辑

摘要: Android 开机会出现3个画面:a. Linux 系统启动,出现Linux小企鹅画面(reboot);b. Android平台启动初始化,出现"A N D R I O D"文字字样画面;c. Android平台上层图形系统启动,出现含闪动的ANDROID字样的动画图片(start)。1/ 开机图片(Linux小企鹅)Linux Kernel引导启动后,加载该图片。/kernel/trunk/drivers/video/fbmem.c/kernel/trunk/drivers/video/fbmem.h/kernel/trunk/drivers/video/logo/lo 阅读全文
posted @ 2011-11-21 12:27 h13 阅读(1928) 评论(0) 推荐(1) 编辑

2011年11月15日

摘要: tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据.在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的那部分数据,并等待对端确认后再返回(接收端只要将数据收到接收缓存中,就会确认,并不一定要等待应用程序调用recv);在非阻塞模式下,send函数的过程仅仅是将数据拷贝到协议栈的缓存区而已,如果缓存区可用空 阅读全文
posted @ 2011-11-15 10:44 h13 阅读(1351) 评论(0) 推荐(0) 编辑

2011年11月14日

摘要: 计时器是所有操作系统的一个必要组成部分,您将发现多个计时器机制。我们将首先简要介绍一些 Linux 计时器模式,然后深入研究它们的运行方式。(Linux)时间的起源在 Linux 内核中,时间由一个名为 jiffies 的全局变量衡量,该变量标识系统启动以来经过的滴答数。在最低的级别上,计算滴答数的方式取决于正在运行的特定硬件平台;但是,滴答计数通常在一次中断期间仍然继续进行。滴答速率(jiffies 的最不重要的位)可以配置,但在最近针对 x86 的 2.6 内核中,一次滴答等于 4ms(250Hz)。jiffies 全局变量在内核中广泛使用,目的有几个,其中之一是提供用于计算一个计时器的超 阅读全文
posted @ 2011-11-14 16:25 h13 阅读(4646) 评论(0) 推荐(0) 编辑

2011年10月6日

摘要: 主要介绍linux 内核启动过程以及挂载android 根文件系统的过程,以及介绍android 源代码中文件系统部分的浅析。 主要源代码目录介绍Makefile (全局的Makefile)bionic (Bionic 含义为仿生,这里面是一些基础的库的源代码)bootable (引导加载器)build (build 目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)dalvik (JAVA 虚拟机)development (程序开发所需要的模板和工具) external (目标机器使用的一些库)frameworks (应用程... 阅读全文
posted @ 2011-10-06 14:02 h13 阅读(5204) 评论(0) 推荐(1) 编辑

2011年9月30日

摘要: 在开发Android应用程序时,少不了使用Log来监控和调试程序的执行。在上一篇文章Android日志系统驱动程序Logger源代码分析中,我们分析了驱动程序Logger的源代码,在前面的文章浅谈Android系统开发中Log的使用一文,我们也简单介绍在应用程序中使Log的方法,在这篇文章中,我们将详细介绍Android应用程序框架层和系统运行库存层日志系统的源代码,使得我们可以更好地理解Android的日志系统的实现。我们在Android应用程序,一般是调用应用程序框架层的Java接口(android.util.Log)来使用日志系统,这个Java接口通过JNI方法和系统运行库最终调用内核驱 阅读全文
posted @ 2011-09-30 16:58 h13 阅读(1741) 评论(0) 推荐(1) 编辑

摘要: 我们知道,在Android系统中,提供了一个轻量级的日志系统,这个日志系统是以驱动程序的形式实现在内核空间的,而在用户空间分别提供了Java接口和C/C++接口来使用这个日志系统,取决于你编写的是Android应用程序还是系统组件。在前面的文章浅谈Android系统开发中LOG的使用中,已经简要地介绍了在Android应用程序开发中Log的使用方法,在这一篇文章中,我们将更进一步地分析Logger驱动程序的源代码,使得我们对Android日志系统有一个深刻的认识。既然Android日志系统是以驱动程序的形式实现在内核空间的,我们就需要获取Android内核源代码来分析了,请参照前面在Ubunt 阅读全文
posted @ 2011-09-30 16:46 h13 阅读(1454) 评论(0) 推荐(0) 编辑