- 博客(32)
- 收藏
- 关注
原创 Linux系统启动过程详解
<br />1)BIOS自检<br />2)启动Grub/Lilo<br />3)加载内核<br />4)执行init进程<br />5)通过/etc/inittab文件进行初始化<br />6)登陆Linux<br /><br />1)BIOS自检<br /> a)POST(Power On Self Test),对硬件进行检测<br /> 计算机在通电后首先由BIOS进行自检,即所谓的POST(Power On Self Test),对硬件进行检测<br /> 依据BIOS内设置的引导顺序从硬盘、
2011-01-07 10:46:00 913
转载 Linux内核中的 likely() 与 unlikely()
<br /><br />内核中的 likely() 与 unlikely()<br />在 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别? <br />首先要明确:<br /> if(likely(value)) 等价于 if(value)<br /> if(unlikely(value)) 也等价于 if(value)<br />也就是说 likely() 和 unlikely() 从阅
2011-01-06 10:57:00 896
转载 __read_mostly变量
<br /><br />__read_mostly原语将定义为存放在.data.read_mostly段中<br /> include/asm/cache.h<br />#define __read_mostly __attribute__((__section__(".data.read_mostly")))<br /><br /> 由此可见,我们可以将经常需要被读取的数据定义为 __read_mostly类型, 这样Linux内核被加载时,该数据将自动被存放到Cache中,以提高整个系统的执行效
2011-01-06 10:55:00 1667
原创 Android内核源码阅读---ashmem.c
<br />ashmem的意思就是Anonymous Shared Memory,即匿名共享内存。Android系统主要包括五个部分,分别是Linux 内核、本地库、Dalvik 虚拟机、应用程序框架和应用程序。对于其中的Linux内核部分,最初Android是基于2.6.25的,而且Android内核基本是同Linux内核同步更新的,Android在Linux内核的基础上做了一些修改和功能上的添加。目前最新的开源版本是Android2.3,它是基于Linux-2.6.35的,它于2010年12月7日公布。
2010-12-27 18:27:00 3220
原创 Linux内核源代码阅读---filesystem.c
<br /> <br />该文件位于源码中的fs/中:<br /> 在Linux中是使用mount和umount指令来安装和卸载(或者说是挂载和卸载)文件系统的,一旦改变文件系统,那么在文件系统中的一些接口和处理函数也会发生相应的改变。在使用诸如open、read等系统调用的时候,内核是先调用VFS的通用系统调用,然后再找到当前文件系统的种类,然后具体的调用该文件系统的对应的函数来实现具体的功能,而下面的这个文件就是完成安装和卸载文件系统的功能。<br /> 在最新内核版本(2.6.36
2010-12-15 17:16:00 4596
原创 Ubuntu 中把最大化最小化关闭按钮移动到右侧的方法
<br />Ubuntu 10.04之后,就把最大化最小化关闭按钮弄到了左侧,用着很不习惯。前段时间在隐忍了好久之后,决定还是把它换回到最熟悉的模式中,就上网查了一些方法,在此记录一下:<br /> <br />首先,呼唤出运行窗口,按下 Alt+F2 ,然后输入 gconf-editor ,应该就是gnome configuration edit - or 吧。。。<br />然后,在左边的目录中,找到 apps->metacity->general。<br />最后,在右侧可以找到一个 button
2010-12-10 11:38:00 5175 1
原创 Ubuntu 中恢复面板的方法
<br />误删面板,这是本人经常干的事,网上有挺多的解决办法的,不过还是记录一下,方便查找:<br />首先,由于面板被删除,所以要用Alt+F2来打开运行,然后输入 gnome-terminal ,打开终端。<br />然后,在终端中输入如下命令:<br />gconftool --recursive-unset /apps/panel<br />rm -rf ~/.gconf/apps/panel<br />pkill gnome-panel<br />最后,面板就恢复在桌面上了,不过这个面
2010-12-08 18:45:00 1359
原创 Ubuntu 10.04 中 grub2.0 的修复
<br />刚才把grub弄坏了,无意的,其实是不知道怎么弄的,导致的结果就是引导不了系统,进入不了系统了,然后就体验了一把修复grub的过程,记录下来,以免以后再次手贱。<br /> <br />因为我使用的是ubuntu 10.04,所以是使用的gurb2.0,下面都是针对grub2.0来修复的。<br /> <br />首先,拿一个ubuntu的安装光盘或者U盘,我用的是U盘,启动进入安装画面后,选择不安装进行体验。<br />然后,打开终端,键入如下命令:<br />
2010-12-08 18:19:00 1483
转载 当今比较流行的分布式文件系统
因为最近正在“研究”分布式文件系统,所以搜集了这方面的许多资料,不知是哪位比较有名气的人说过:当今社会,对于程序员或者搞IT的人来说,一定要看看分布式方面的东西(不是原话,但是大概就这个意思)。看了一段时间了,感触颇深,感觉它一定是未来发展的趋势。下面这篇就是我搜到的一篇博客,总体上介绍了一些比较流行的分布式文件系统。特此标明出处:http://hi.baidu.com/jrckkyy/blog/item/5476b87b31a785fb0bd187c7.html这位同志的博客中有许多关于分布式
2010-11-30 22:20:00 5750
原创 数据结构中的各种查找---总结篇
<br /> <br />一、基本概念:<br />1、 列表:待搜索的数据集合。<br />2、 关键字:要查找的那个数据。<br />3、 查找:一种算法过程。<br />二、基于线性表的查找:<br />1、 顺序查找:<br />(1)思想:逐个比较,直到找到或者查找失败。<br />(2)时间复杂度:T(n) = O(n)。<br />(3)空间复杂度:S(n) = O(n)。<br />(4)程序:<br />Int SeqSearch(RecordList l, KeyType key
2010-11-23 09:08:00 3114
原创 数据结构中的各种排序---总结篇
一个月没有写文章,原因是一直在忙碌着,但是其实是有收获的,下面就是我这前半个月最大的收获:对于数据结构中排序算法的总结,在我找工作的道路上帮助了我好多。如有错误,欢迎指正!一、基本概念:1、 排序:按照一定的关键字,将一个序列排列成想要得到的一个新的序列。2、 内部排序和外部排序:整个排序过程完全在内存中进行,叫做内部排序。数据量较大需要借助外部存储设备才能完成,叫做外部排序。3、 主关键字和此关键字:4、 排序的稳定性:对于相同的元素来说,在排序之前和之后的书讯是一样的,那么这种排序就
2010-10-29 17:43:00 58879 2
原创 Linux嵌入式驱动初体验(七)--- LED驱动之字符设备篇
Linux中的设备可以分为三类:字符设备、块设备、网络设备,对于上一篇文章中的驱动编写的方法,是基于platform结构的,下面我们把它改变成字符设备的驱动编写模式,原理和方法基本是一样的,只是换了一个外壳而已。 首先还是看一下依照字符设备驱动编写所设计的数据结构:static struct file_operations led_fops = { .owner = THIS_MODULE, .open = led_open, .release = led_releas
2010-09-26 21:58:00 1697
原创 Linux嵌入式驱动初体验(六)--- LED驱动测试程序
<br /> 通过上一篇文章,我们已经写好了一个LED驱动,但是如果光运行这个驱动程序(其实它是一个模块程序,不能称之为运行),LED灯是不会亮的,驱动程序的作用其实就相当于编写了一些库函数一样,当驱动程序通过编译,然后以模块的形式加载到内核之后,这些函数就是可以用的了,然后通过调用这些函数来实现设备的使用。原理就是这么个原理,下面就根据上一篇文章得到的那些函数,来写一个能够让LED闪烁的,称之为测试程序的代码。<br /> 其实代码并不长,重点在于编写的模式和思路。对于一个设备来说,L
2010-09-25 21:31:00 3160 1
原创 Linux嵌入式驱动初体验(五)--- LED驱动解析
<br /> 在编写驱动程序的时候,入门的应用应该就是LED的驱动了,它的地位就像是Hello World之于C语言。其实LED灯是一种原子设备(我记得我们一个硬件老师说了这么一个名字,如果我说错了,就怨我没记住吧),意思就是只有0和1两种结果,就是只有亮和不亮两种结果,要是非和我抬杠说有半亮不亮的状态,那我也没话说了。所以对于一个原子设备来说,它的驱动还是比较容易弄懂的,而且对于一个简单的LED驱动来说,可以不用考虑一个最让人头疼的部分,就是---中断,所以还是比较好上手的。<br />
2010-09-13 21:06:00 3252 1
原创 Linux嵌入式驱动初体验(四)--- 驱动结构分析
<br /> 在Linux系统上编写驱动程序,说简单也简单,说难也难。难在于对算法的编写和设备的控制方面,是比较让人头疼的;说它简单是因为在Linux下已经有一套驱动开发的模式,编写的时候只需要按照这个模式写就可以了,而这个模式就是它事先定义好的一些结构体,在驱动编写的时候,只要对这些结构体根据设备的需求进行适当的填充,就实现了驱动的编写。<br /> 首先在Linux下,视一切事物皆为文件,它同样把驱动设备也看成是文件,对于简单的文件操作,无非就是open/close/read/wri
2010-09-13 10:05:00 1719
原创 Linux嵌入式驱动初体验(三)--- 模块接触
对于驱动的开发,说的简单些,就是一个模块编程,然后编译成内核模块,加载到内核中运行。下面就先介绍一个简单的模块程序,然后再慢慢引出我们需要关注的重点:#include #include static int __init hello_init(void){ printk(KERN_ALERT"/nHello Kernel World/n"); return 0;}static void __exit hello_exit(void){
2010-09-10 18:21:00 1306
原创 Linux嵌入式驱动初体验(二)--- 内核装载
<br /> 对于有操作系统的嵌入式开发来说,在开发板上肯定要有一个可以运行的操作系统,就拿3250上的Linux移植来说,首先要做的就是编译内核源码,下面就说一下整个内核移植的过程吧。<br /> 首先要有内核源代码,但是要知道,这个源代码不是电脑上用的那个源码,而是经过裁剪修改过的,适合3250CPU使用的Linux内核,在3250光盘里提供的内核源码是 linux-2.6.27.8 的,把源码包 linux-2.6.27.8-smartarm3250_V1.00.tar.bz2 复
2010-09-09 16:17:00 1938
原创 Linux嵌入式驱动初体验(一)--- 准备工作
<br /> 开发嵌入式驱动,其实不止是驱动程序,应用程序也是如此,都需要有个准备工作,下面我就以SmartArm3250和Linux系统作为依据,说一下需要准备什么,其实也不是给别人说教什么,只是自己记录一下,如果有能帮别人的地方,也算是我助人为乐了。<br /> 首先,既然是嵌入式,就是以嵌入的方式把一个开发出来的东西放到一个载体上去运行,这个载体也就是开发板。对于Arm来说,它上面的资源是很小的,3250这块开发板的Nand Flash是256MB,根本放不下什么开发环境的,而且在
2010-09-08 22:12:00 2172 4
原创 yes or no
<br /> 首先附上一段代码,猜猜它的运行结果是什么:<br />#include <stdio.h>#define SIZE(a) ( (sizeof(a)) / (sizeof(a[0])) )int main(void){ int a[5]; int b = -1; if(SIZE(a) > b) printf("yes/n"); else printf("no/n");
2010-09-08 17:11:00 1014
原创 Ubuntu下nfs服务器的搭建
nfs的全称是Network File-System,可以通过它实现不同机器不同系统之间的文件共享。目前我正在用SmartArm3250,现在编好程序后,是通过nfs把可执行文件传输到开发板中,让其在开发板里运行的。 现在以这个模式来说明nfs的建立,主机是安装有Ubuntu10.04的PC机,目标板是安装有裁剪后的Linux的SmartArm3250。安装nfs服务是在主机上进行配置,在目标板上进行操作使用的。具体的步骤如下: 一、在主机上安装必要的软件,使用命令 : 1、
2010-09-06 10:04:00 2840 2
原创 变量声明启示(二)
之所以上一篇文章叫XXX(一),原因是还有一篇叫XXX(二),而且还可能会有XXX(三)。恩,废话不多说,只此两句。按照上一篇文章的分析,写在前面的变量一定是先进入栈的,那么事实果真如此吗?其实不是的,下面用一些程序来验证一下。 首先说明一下,栈是一个先进后出的数据结构,而在内存中栈底处于高地址,栈顶处于低地址,数据存入栈时,是给该数据分配足够的空间,然后高位放在低地址,低位放在高地址,也就是说,一个数据处于高地址,那么就说明它是先入栈的,比低的地址是后入栈的。 好了,首先看
2010-09-03 10:26:00 646 1
原创 变量声明启示(一)
<br /> 昨天闲来无事,在Linux下编了一个小程序,没有什么算法,但是出现了一个大问题,仔细检查,发现问题所在,然后通过测试就牵出了一个以前没有怎么注意到的东西,特此留念,警示一下自己。<br /> 首先给出一段简单的不能再简单的源代码:<br />#include <stdio.h>int main(void){ int a = 1234; char b[4]; printf("a = %d(第一次)/n", a);
2010-09-02 11:57:00 749
原创 Linux学习------分析list.h 之 宏定义部分
在系统的头文件中,有很多函数是用宏定义的方式定义的,在list.h中,对双向链表进行遍历的函数都是通过这种方式定义的,其中有许多很巧妙的地方,也是很有意思的,短小精干。下面接着上一篇文章的内容继续分析一下list.h。 首先是下面这个宏定义:#define list_entry(ptr, type, member) / container_of(ptr, type, member) 大致一看,就知道这个宏是调用container_of的,我们再看一下它是如何定义的:#define
2010-08-31 17:55:00 3032
原创 Linux学习------分析list.h 之 函数部分
在Linux中,最常见也是最经典的数据结构就是其中的双向链表,而对双向链表的各种操作都存储在list.h头文件中,最近仔细看了一下这个头文件,把我对它的理解记录下来,算是一个学习笔记吧。我看的是2.6.35.4版本的内核源代码,list.h在include/linux下存放,相对于一些其他的内核原文件来说,list.h算是比较小的了,而且只有700多行,主要是因为这个文件算是一个纯C文件,就是它是单纯的用C语言来对双向链表进行操作,看起来也比较容易。 在list.h中,定义了如下一个数
2010-08-31 09:57:00 3391 2
转载 【转】内核分析工具----Kernel地图
前段时间一直在开fudan_abc的博客,其中一篇体会很深,学到的也很深,我觉得这篇blog对于我们的内核学习是很有帮助的,就转载过来,一定有用!先copy过来,再把地址拿来,他的博客里很多都是经典,虽然都看了一遍,但是体会不是很深,因为还没有实践过。言归正题,题目叫kernnel地图,能够帮助我们分析kernnel的组成,原文如下:Makefile不是Make Love从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉。毕业的时候,人家跟我说Makefile我完全不知,但
2010-08-25 22:05:00 1253
转载 【转】嵌入式系统中看门狗概述。。。
<br /> 一直以来对于嵌入式中的watch dog(看门狗)都比较陌生,一直都不知道它到底是做什么的,单从名字上看也不知其所以然,然后就在网上找到了一篇blog,就是再说看门狗的作用和概述,原文如下:<br /> <br /> 1、概述:<br /> WATCHDOG对于没有底层开发经验的开发人员来说,可能比较陌生,但是它在系统起到非常重要的作用,相当于系统警察,当系统发生严重错误(如程序进入死循环等)不能 恢复的时候,WATCHDOG能够让系统重启。WATCHDOG的应用主要是
2010-08-25 15:40:00 1214
原创 Ubuntu中minicom的安装和使用
想要对嵌入式开发板进行开发和操作,都需要进行文件传输或者是控制,这时基本都是需要通过串口线或者是网线进行连接的,在Windows下是使用超级终端通过串口对开发板进行操作的,而在Linux下,最后最常见的串口调试工具就是minicom。minicom的安装过程还是比较简单的,对于操作过程也就是一个熟悉的过程,在其中的操作都是字符界面下的,只要知道熟悉,就能熟练运用了。安装过程: 一、minicom的安装。在终端中输入 sudo apt-get install minicom 安装。
2010-08-24 18:26:00 4223 2
原创 ubuntu 10.04下的tftp服务器搭建
现在在研究SmartArm3250开发板,其中搭建Liunx平台时需要使用tftp传输Linux内核和文件系统到开发板,所以需要在电脑的Linux下先搭建一个tftp服务,通过看书和上网找资料,发现一些问题和需要注意的地方,而且很多东西是不适合ubuntu的,所以总结一下,实现说明,下面的操作在ubuntu10.04上是运行无误的,在其他操作系统上就不敢保证了。 一、安装tftp所需的软件。首先需要安装tftp-hpa,tftpd-hpa,前者是客户端,后者是服务程序,有些网站上说是安
2010-08-24 17:11:00 4493 16
原创 SmartArm3250下的Linux系统安装
目前正在研究SmartArm3250的Linux驱动方面,所以首先就要在开发板上安装(也可以称为下载)Linux系统,按照书上的步骤,遇到一些小问题,通过多次试验和总结,现在可以熟练的安装Linux系统了,总结一下,其中包含个人的见解和自己找到的资料。 首先,介绍一下安装Linux的大致步骤。开发板就像一个裸机一样,什么都没有(当然有硬件),首先要安装一个类似于电脑中BIOS一样的东西,还有一个引导操作系统的东西,然后就是装入内核镜像,不是.iso文件哦,是编译内核生成的一个东东,最后
2010-08-22 13:05:00 2890 3
原创 通过Windows Live Writer发表blog
只是试验一下。。。不知道方便不方便,如果想试一试的话,参考如下网址:http://blog.csdn.net/blogdevteam/archive/2009/09/04/4519285.aspx
2010-08-21 16:44:00 458
原创 Linux下的bomb。。。
前几天在网上搜索资料,无意间发现一个比较有趣的帖子,题目叫做在Linux如何使CPU使用率达到100%。乍一看觉得发这个帖子的人很无聊,所以我就抱着好奇心去看了看,不敢说受益匪浅,但也了解到了一些自己以前不知道的东西。 可能大家的第一反应和我差不多,都是弄一个一直运行的程序,也就是死循环,然后就妄想可以累死CPU了,但是通过看帖子下面人的留言和自己的试验(Linux下),发现光写一个死循环是远远不够的,因为现在的计算机都是多核运作,一个死循环程序可能只会跑死一个核,在Linux下编写的
2010-08-21 12:30:00 1311
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人