自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mr.Right

错误中成长,改错中进步。不要总是看低别人看高自己,更不要看高别人看低自己。

  • 博客(32)
  • 收藏
  • 关注

原创 Linux C/C++ 编程练手 --- 大数相加和大数相乘

大数相乘和大数相加的linux c++实现

2013-10-08 16:49:56 2971

原创 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 890

转载 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 884

转载 __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 1652

原创 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 3199

原创 Linux内核源代码阅读---filesystem.c

<br /> <br />该文件位于源码中的fs/中:<br />      在Linux中是使用mount和umount指令来安装和卸载(或者说是挂载和卸载)文件系统的,一旦改变文件系统,那么在文件系统中的一些接口和处理函数也会发生相应的改变。在使用诸如open、read等系统调用的时候,内核是先调用VFS的通用系统调用,然后再找到当前文件系统的种类,然后具体的调用该文件系统的对应的函数来实现具体的功能,而下面的这个文件就是完成安装和卸载文件系统的功能。<br />      在最新内核版本(2.6.36

2010-12-15 17:16:00 4553

原创 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 5153 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 1332

原创 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 1469

转载 当今比较流行的分布式文件系统

      因为最近正在“研究”分布式文件系统,所以搜集了这方面的许多资料,不知是哪位比较有名气的人说过:当今社会,对于程序员或者搞IT的人来说,一定要看看分布式方面的东西(不是原话,但是大概就这个意思)。看了一段时间了,感触颇深,感觉它一定是未来发展的趋势。下面这篇就是我搜到的一篇博客,总体上介绍了一些比较流行的分布式文件系统。特此标明出处:http://hi.baidu.com/jrckkyy/blog/item/5476b87b31a785fb0bd187c7.html这位同志的博客中有许多关于分布式

2010-11-30 22:20:00 5737

原创 数据结构中的各种查找---总结篇

<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 3066

原创 数据结构中的各种排序---总结篇

      一个月没有写文章,原因是一直在忙碌着,但是其实是有收获的,下面就是我这前半个月最大的收获:对于数据结构中排序算法的总结,在我找工作的道路上帮助了我好多。如有错误,欢迎指正!一、基本概念:1、  排序:按照一定的关键字,将一个序列排列成想要得到的一个新的序列。2、  内部排序和外部排序:整个排序过程完全在内存中进行,叫做内部排序。数据量较大需要借助外部存储设备才能完成,叫做外部排序。3、  主关键字和此关键字:4、  排序的稳定性:对于相同的元素来说,在排序之前和之后的书讯是一样的,那么这种排序就

2010-10-29 17:43:00 58734 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 1683

原创 Linux嵌入式驱动初体验(六)--- LED驱动测试程序

<br />      通过上一篇文章,我们已经写好了一个LED驱动,但是如果光运行这个驱动程序(其实它是一个模块程序,不能称之为运行),LED灯是不会亮的,驱动程序的作用其实就相当于编写了一些库函数一样,当驱动程序通过编译,然后以模块的形式加载到内核之后,这些函数就是可以用的了,然后通过调用这些函数来实现设备的使用。原理就是这么个原理,下面就根据上一篇文章得到的那些函数,来写一个能够让LED闪烁的,称之为测试程序的代码。<br />      其实代码并不长,重点在于编写的模式和思路。对于一个设备来说,L

2010-09-25 21:31:00 3139 1

原创 Linux嵌入式驱动初体验(五)--- LED驱动解析

<br />      在编写驱动程序的时候,入门的应用应该就是LED的驱动了,它的地位就像是Hello World之于C语言。其实LED灯是一种原子设备(我记得我们一个硬件老师说了这么一个名字,如果我说错了,就怨我没记住吧),意思就是只有0和1两种结果,就是只有亮和不亮两种结果,要是非和我抬杠说有半亮不亮的状态,那我也没话说了。所以对于一个原子设备来说,它的驱动还是比较容易弄懂的,而且对于一个简单的LED驱动来说,可以不用考虑一个最让人头疼的部分,就是---中断,所以还是比较好上手的。<br />    

2010-09-13 21:06:00 3236 1

原创 Linux嵌入式驱动初体验(四)--- 驱动结构分析

<br />      在Linux系统上编写驱动程序,说简单也简单,说难也难。难在于对算法的编写和设备的控制方面,是比较让人头疼的;说它简单是因为在Linux下已经有一套驱动开发的模式,编写的时候只需要按照这个模式写就可以了,而这个模式就是它事先定义好的一些结构体,在驱动编写的时候,只要对这些结构体根据设备的需求进行适当的填充,就实现了驱动的编写。<br />      首先在Linux下,视一切事物皆为文件,它同样把驱动设备也看成是文件,对于简单的文件操作,无非就是open/close/read/wri

2010-09-13 10:05:00 1704

原创 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 1295

原创 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 1920

原创 Linux嵌入式驱动初体验(一)--- 准备工作

<br />      开发嵌入式驱动,其实不止是驱动程序,应用程序也是如此,都需要有个准备工作,下面我就以SmartArm3250和Linux系统作为依据,说一下需要准备什么,其实也不是给别人说教什么,只是自己记录一下,如果有能帮别人的地方,也算是我助人为乐了。<br />      首先,既然是嵌入式,就是以嵌入的方式把一个开发出来的东西放到一个载体上去运行,这个载体也就是开发板。对于Arm来说,它上面的资源是很小的,3250这块开发板的Nand Flash是256MB,根本放不下什么开发环境的,而且在

2010-09-08 22:12:00 2149 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 991

原创 Ubuntu下nfs服务器的搭建

      nfs的全称是Network File-System,可以通过它实现不同机器不同系统之间的文件共享。目前我正在用SmartArm3250,现在编好程序后,是通过nfs把可执行文件传输到开发板中,让其在开发板里运行的。      现在以这个模式来说明nfs的建立,主机是安装有Ubuntu10.04的PC机,目标板是安装有裁剪后的Linux的SmartArm3250。安装nfs服务是在主机上进行配置,在目标板上进行操作使用的。具体的步骤如下:      一、在主机上安装必要的软件,使用命令 : 1、

2010-09-06 10:04:00 2811 2

原创 变量声明启示(二)

      之所以上一篇文章叫XXX(一),原因是还有一篇叫XXX(二),而且还可能会有XXX(三)。恩,废话不多说,只此两句。按照上一篇文章的分析,写在前面的变量一定是先进入栈的,那么事实果真如此吗?其实不是的,下面用一些程序来验证一下。      首先说明一下,栈是一个先进后出的数据结构,而在内存中栈底处于高地址,栈顶处于低地址,数据存入栈时,是给该数据分配足够的空间,然后高位放在低地址,低位放在高地址,也就是说,一个数据处于高地址,那么就说明它是先入栈的,比低的地址是后入栈的。      好了,首先看

2010-09-03 10:26:00 636 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 733

原创 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 3013

原创 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 3377 2

转载 【转】内核分析工具----Kernel地图

      前段时间一直在开fudan_abc的博客,其中一篇体会很深,学到的也很深,我觉得这篇blog对于我们的内核学习是很有帮助的,就转载过来,一定有用!先copy过来,再把地址拿来,他的博客里很多都是经典,虽然都看了一遍,但是体会不是很深,因为还没有实践过。言归正题,题目叫kernnel地图,能够帮助我们分析kernnel的组成,原文如下:Makefile不是Make Love从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉。毕业的时候,人家跟我说Makefile我完全不知,但

2010-08-25 22:05:00 1231

转载 【转】嵌入式系统中看门狗概述。。。

<br />      一直以来对于嵌入式中的watch dog(看门狗)都比较陌生,一直都不知道它到底是做什么的,单从名字上看也不知其所以然,然后就在网上找到了一篇blog,就是再说看门狗的作用和概述,原文如下:<br /> <br /> 1、概述:<br />      WATCHDOG对于没有底层开发经验的开发人员来说,可能比较陌生,但是它在系统起到非常重要的作用,相当于系统警察,当系统发生严重错误(如程序进入死循环等)不能 恢复的时候,WATCHDOG能够让系统重启。WATCHDOG的应用主要是

2010-08-25 15:40:00 1193

原创 Ubuntu中minicom的安装和使用

      想要对嵌入式开发板进行开发和操作,都需要进行文件传输或者是控制,这时基本都是需要通过串口线或者是网线进行连接的,在Windows下是使用超级终端通过串口对开发板进行操作的,而在Linux下,最后最常见的串口调试工具就是minicom。minicom的安装过程还是比较简单的,对于操作过程也就是一个熟悉的过程,在其中的操作都是字符界面下的,只要知道熟悉,就能熟练运用了。安装过程:      一、minicom的安装。在终端中输入 sudo apt-get install minicom 安装。   

2010-08-24 18:26:00 4181 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 4450 16

原创 SmartArm3250下的Linux系统安装

      目前正在研究SmartArm3250的Linux驱动方面,所以首先就要在开发板上安装(也可以称为下载)Linux系统,按照书上的步骤,遇到一些小问题,通过多次试验和总结,现在可以熟练的安装Linux系统了,总结一下,其中包含个人的见解和自己找到的资料。      首先,介绍一下安装Linux的大致步骤。开发板就像一个裸机一样,什么都没有(当然有硬件),首先要安装一个类似于电脑中BIOS一样的东西,还有一个引导操作系统的东西,然后就是装入内核镜像,不是.iso文件哦,是编译内核生成的一个东东,最后

2010-08-22 13:05:00 2854 3

原创 通过Windows Live Writer发表blog

只是试验一下。。。不知道方便不方便,如果想试一试的话,参考如下网址:http://blog.csdn.net/blogdevteam/archive/2009/09/04/4519285.aspx

2010-08-21 16:44:00 445

原创 Linux下的bomb。。。

      前几天在网上搜索资料,无意间发现一个比较有趣的帖子,题目叫做在Linux如何使CPU使用率达到100%。乍一看觉得发这个帖子的人很无聊,所以我就抱着好奇心去看了看,不敢说受益匪浅,但也了解到了一些自己以前不知道的东西。      可能大家的第一反应和我差不多,都是弄一个一直运行的程序,也就是死循环,然后就妄想可以累死CPU了,但是通过看帖子下面人的留言和自己的试验(Linux下),发现光写一个死循环是远远不够的,因为现在的计算机都是多核运作,一个死循环程序可能只会跑死一个核,在Linux下编写的

2010-08-21 12:30:00 1289

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除