自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (3)
  • 收藏
  • 关注

原创 kernel-2.6.38内核驱动globalmem--添加中断机制和udev机制

//这个驱动网上有例子,但是很多机制在新的内核里面已经过时了,所以我重写了一下,尽量使用了一些最近内核里面的机制。//创建设备节点,使用的udev机制;//注册中断向量的时候使用了新的接口函数,包括了ISR的接口的改变。#include #include #inc

2011-07-27 15:57:39 1127

原创 Java语言学习笔记

Java 语言笔记Java SE:Java标准版,用于桌面级应用和数据库开发;Java EE:Java企业版,用于企业级开发;Java ME:Java手持版,用于嵌入式和移动式开发。 Chapt 11)      Java区分大小写;2)      Java编译程序时有扩展名,运

2011-07-08 16:58:44 1464

转载 最全的android模拟器使用--ADB命令的介绍和解析

本文转至:http://www.eoeandroid.com/thread-23281-1-1.htmlAndroid模拟器ndroid SDK自带一个移动设备模拟器 — 它是一个可以运行在你电脑上的虚拟设备. Android模 拟器可以让你不需使用物理设备即

2011-07-04 18:01:10 10059 1

转载 android.mk写法及分析--目前为止最全的

(1)Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件。由于一般情况下Android.mk和需要编译的源文件在同一目录下,所以定义成如下形式:LOCAL_PATH:=$(call my-dir)上面的语句的意思是将LOCAL_PATH变量定义成本文件所在目录路径。(2)Android.mk中可以定义多个编译模块,每个编译模块都是以include $(

2011-06-29 11:03:00 2143

转载 android.mk文件分析

 一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。例如,你不需要在你的Android.mk中 列出头文件和依赖文件。NDK编译系统将会为你自动处理这

2011-06-23 10:26:00 1122

转载 ubuntu环境源码编译android

我是在windows下使用虚拟机跑ubuntu的,虚拟机的使用具体参照Ubuntu下的文章一、 获取 Android 源代码Git 是 Linux Torvalds ( Linux 之父)为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制软件,它不同于 Subversion 、 CVS 这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓库( Reposito

2011-06-21 16:25:00 883

原创 Android平台源码下载以及编译--ubuntu 11.04

1.  下载android平台的源码树 a)     安装repo Repo是在android背景下支持能更好的支持git的一个工具,实际上repo是一个python的脚本。 按照以下步骤安装,初始化,配置repo: 1)      Mkdir ~/bin 2)      PATH=$PATH:~/bin 3)      Curl https://

2011-06-17 16:04:00 2525

原创 Linux编译链接问题----静态库和动态库

<br /><br />1.      Linux静态库和动态库的命名规则:<br />静态函数库:静态库的名字一般是libxxx.a,利用静态库编译生成的文件比较大,因为整个静态库所有的数据都会被整合进目标代码中。<br />a)      优点:编译后,可执行文件不需要外部支持;<br />b)      缺点:生成的可执行程序大;静态库改变了,就需要重新编译可执行程序。<br /> <br />动态函数库:动态库的名字一般是libxxx.so,相对于静态库,动态函数库在编译的时候并没有被编

2011-05-10 18:15:00 8719 1

原创 Linux-2.6-32的内核栈和用户空间栈关系

<br /> <br />1.进程的堆栈<br />内核在创建进程的时候,在创建task_struct的同事,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。<br /> <br />2.进程用户栈和内核栈的切换<br />当进程因为中断或者系统调用而陷入内核态之行时,进程所使用的堆栈也要从用户栈

2011-05-10 09:30:00 2127

转载 Linux-2.6 内核软中断(softirq)执行分析

<br />        今天无意中看了眼 2.6 内核的软中断实现,发现和以前我看到的大不相同(以前也是走马观花,不大仔细),能说改动非常大。连 softirq 的调用点都不相同了,以前是三个调用点,今天搜索了一下原始码,发目前多出了ksoftirqd 这个东西后,softirq 在系统中的调用点仅是在 ISR 返回时和使用了 local_bh_enable() 函数后被调用了。网卡部分的显示调用,我觉得应该不算是系统中的调用点。ksoftirqd 返回去调用 do_softirq() 函数应该也只能算

2011-05-05 09:56:00 2221

转载 grof的使用--性能检测工具

<br />gprof介绍<br />gprof是GNU profiler工具。可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。也可以显示“调用图”,包括函数的调用关系,每个函数调用花费了多少时间。还可以显示“注释的源代码”,是程序源代码的一个复本,标记有程序中每行代码的执行次数。<br /><br />为gprof编译程序<br />在编译或链接源程序的时候在编译器的命令行参数中加入“-pg”选项,编译时编译器会自动在目标代码中插入用于性能测试的代码片

2011-03-31 18:20:00 5966

转载 最复杂的函数----ioctl()

<br />本函数影响由fd参数引用的一个打开的文件。<br /> <br />#include<unistd.h><br />int ioctl( int fd, int request, .../* void *arg */ );<br />返回0:成功    -1:出错<br /> <br />第三个参数总是一个指针,但指针的类型依赖于request参数。<br /> <br />我们可以把和网络相关的请求划分为6类:<br />套接口操作<br />文件操作<br />接口操作<br />A

2011-01-05 11:06:00 3599

转载 使用异步 I/O 大大提高应用程序的性能

<br />转载的:<br />aio的确能够提高file磁盘的文件读写的性能.更加详细的blog在:<br />http://www.ibm.com/developerworks/cn/linux/l-async/<br /><br /><br />根据同步和异步,阻塞和非阻塞,可以分为四种linux上的I/O模型.<br />1)同步阻塞I/O<br /><br /><br />2)同步非阻塞I/O<br />3)异步阻塞I/O<br />4)异步非阻塞I/O<br /><br /><br />【同步I

2010-12-30 13:38:00 1170

原创 offsetof(s,m)宏解释

<br />offsetof(s,m):简单的讲就是假设s的地址为0,然后获得m相对于s的偏移地址,其中m是struct结构s的成员.<br /> <br />s为struct类型结构,m为struct中的结构成员.<br /> <br />/* offsetof example */#include <stdio.h>#include <stddef.h>struct mystruct { char singlechar; char arraymember[10]; char

2010-12-23 11:02:00 2669

原创 交叉编译openssl-1.0.0 for arm

下载source code:openssl-1.0.0.tar.gztar xvf openssl-1.0.0.tar.gzcd openssl-1.0.0./config --prefix=*** no-asm shared生成Makefile之后修改Makefile中的:CFLAG= -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -march=pentium -DL_ENDIAN -DTERMI

2010-12-22 18:09:00 5644

原创 检测异常并打印堆栈

<br />#include <iostream>#include <signal.h>#include <unistd.h>#include <stdlib.h>#include <execinfo.h>#include <stdio.h>using namespace std;static void print_stack(void){ void *array[10]; char **strings; int arrsize = backtrace (ar

2010-12-22 09:28:00 1562

原创 编译netcf-1.7的source code时遇到的错误的解法

<br />/home/swliao/compile/include/netlink/object.h:58: warning: inline function ‘nl_o<br />/home/swliao/compile/include/netlink/object.h:58: warning: inline function ‘nl_o<br />  CC     dutil_linux.lo<br />make[3]: *** No rule to make target `-L/hom

2010-12-16 10:57:00 1105

原创 register.o: undefined reference to symbol 'gpg_strerror'编译错误的解法

<br />在编译libgrcypt的时候找不到gpg-error的接口...<br />解法:<br />修改Makefile:LDFLAGS=-L/库路径 <br />tests/Makefile也要做同样修改...<br /> <br />以前解过了的,今天又找了半天,记录下来...备忘...<br /> <br />在linux编译的过程中,很多问题都是由于configure的问题,所以在对linux的source code做编译的时候着重注意configure和生成的Makefile文件...据经

2010-12-15 16:00:00 4452

转载 Linux shell脚本编写基础

<br />这是网上看到的一篇很不错的介绍shell脚本编程的blog...转载过来了...如果不是很专业的写shell脚本的程序员,这些知识很够用...不用详细的去读那些很厚的脚本编程的书了...虽然我也有时候翻翻那个图灵的<<shell脚本编程指南>>----很不错的一本书..就是有点啰嗦...<br /> <br />原载blog有点错误,我已经改正过来了...放心阅读...<br /> <br />第1部分. Linux 脚本编写基础<br />1.1 语法基本介绍<br />1.1.1 开头<

2010-12-15 10:47:00 884

转载 alsa声音编程介绍

英文原文:http://www.linuxjournal.com/article/6735<br />period(周期):硬件中中断间的间隔时间。它表示输入延时。<br />声卡接口中有一个指针来指示声卡硬件缓存区中当前的读写位置。只要接口在运行,这个指针将循环地指向缓存区中的某个位置。<br />frame size = sizeof(one sample) * nChannels<br />alsa中配置的缓存(buffer)和周期(size)大小在runtime中是以帧(frames

2010-12-03 13:30:00 3835

转载 C++中的虚函数和纯虚函数用法

<br /> 1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。<br />   2. 虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)<br />只有声明而没有定义。 <br />   3. 虚函数和纯虚函数

2010-11-25 10:19:00 875

原创 linux内核同步方式--信号量

<br /><br />Linux的信号量是一种睡眠锁,这个不同于自旋锁.如果有一个任务试图获得一个已经被占用的信号量时,信号量会将其推进一个等待队列(具体可以参考进程的活动状态),然后让其睡眠,此时处理器能重获自由,而去执行其他代码.当持有信号量的进程将信号量释放后,处于等待队列中的那个进程会被唤醒,并获得该信号量.<br />所以和自旋锁的区别是:<br />1)信号量适用于锁会被长时间持有的情况<br />2)持有信号量锁的线程可以睡眠,而持有自旋锁的线程是不允许睡眠的<br />

2010-11-19 11:10:00 2017

原创 linux内核同步方式--自旋锁

<br />自旋锁:是linux内核中最常见的锁,自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图获得一个被持有的自旋锁,那么该线程会一直进行忙循环,旋转,等待锁重新可用.<br /><br />在任何时候,自旋锁都可以防止多于一个的执行线程同时进入临界区,一个被争用的自旋锁会导致请求他的线程在等待锁重新可用时自旋,所以自旋锁不应被长期持有.这也是自旋锁的初衷:在短期内进行轻量级加锁.<br />自旋锁的实现与体系结构密切相关,代码往往通过汇编实现.这些与体系结构相关的代码定义在<asm/s

2010-11-13 17:33:00 2538 1

原创 linux内核同步方式

<br />内核同步通常有三种:原子操作,自旋锁和信号量<br /><br />原子操作:保证指令以原子的方式执行,执行过程不会被打断.两个原子操作绝不可能并发的访问同一变量.<br />内核提供两种原子操作接口:<br />1)一组针对整数进行操作;<br />2)一组针对单独的位进行操作.<br />大多数体系结构本来就支持简单的原子操作,要么就为单步执行提供锁内存总线的指令.<br /><br />针对整数的原子操作只能对atomic_t类型的数据进行处理.<br />使用

2010-11-13 15:47:00 1282

原创 安装ubuntu 10.04到U盘

<br />我将ubuntu10.04安装到了一个8G的U盘,但是在系统启动的时候遇到个问题:<br />desktop方式启动的时候没有问题。<br /> <br />但是在字符模式启动的时候会卡在Checking battery state...这里不动了,然后按住alt+F1的话能够启动,现在这个问题已经解决了,好像是传给内核的参数,quiet和splash还有text不能同时存在,会有冲突,去掉后,问题解决。<br /> <br />如安装制作有问题的,有问题的留言给我。

2010-11-12 15:05:00 1449 2

转载 用10.04 alternate CD定制安装Ubuntu方法

<br />一.开机后按F2或Del进入CMOS,适当调整BIOS设置,至少要把光盘启动设为第一启动。<br />二.这一步很重要。进入安装界面时及时按Esc键,在安装界面下按F6键,选中Expert,按回车,此时Expert选项前有一叉号,再按Esc键回到安装界面,按回车继续。<br />三.按回车选择语言。<br />四.挂载光盘。<br />五.这一步很重要。在挂载光盘后不要选中装入预配置的Deb.....文件,移动光标直接进入它的的后一步即可。如果你按回车激活了装入预配置的Deb..

2010-11-12 14:17:00 2522

原创 实现linux的自动登录--命令行模式启动

<br />linux的登录主要是由两个文件在控制,/usr/sbin/getty来获得用户名,并进行检查用户名是否存在,然后将用户名传递给/usr/bin/login来获取用户输入密码和检查密码是否正确.<br />所以要实现linux的自动登录,就要改动这两个文件.<br />1.getty实现的主要功能是:<br />  1)打开指定的tty;<br />  2)提示用户登录(login:);<br />  3)获得登录用户名;<br />  4)把用户名传递给login命令<br

2010-11-05 10:54:00 16783

转载 linux下补丁的创建及使用原理

<br />首先介绍一下diff和patch。在这里不会把man在线文档上所有的选项都介绍一下,那样也没有必要。在99%的时间里,我们只会用到几个选项。所以必须学会这几个选项。<br /><br />1、diff<br /><br />--------------------<br /><br />NAME<br /><br />       diff - find differences between two files<br /><br />SYNOPSIS<br /><br />

2010-11-01 10:35:00 3720

转载 Linux操作系统多线程同步Mutex详细介绍

<br />看到的一篇对mutex写得不错的介绍:<br />1. 初始化:<br />在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化:<br />对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init.对于动态分配的互斥量, 在申请内存(malloc)之后, 通过pthread_mutex_init进行初始化, 并且在释放内存(free)前需要调用pthread

2010-10-30 09:46:00 1239

原创 关于extern "C"解释

<br />在代码中,头文件里面经常看到<br />#ifndef EXAMPLE_HEAD_INCLUDE<br />#define EXAMPLE_HEAD_INCLUDE<br /><br />#ifdef __cplusplus<br />extern "C" {<br />#endif<br /><br />//code body.<br /><br />#ifdef __cplusplus<br />}<br />#endif<br /><br />#en

2010-10-29 17:53:00 888

原创 strtol()函数解析

<br />strtol()函数的原型:<br />long int strtol ( const char * str, char ** endptr, int base );<br /><br />strtol()函数的reference:http://www.cplusplus.com/reference/clibrary/cstdlib/strtol/<br /><br />然后一篇很详细的介绍strtol()函数的blog...<br /><br /><br />long int strt

2010-10-29 13:33:00 1754

原创 pthread线程编程--POSIX的线程机制

<br />在linux下,线程和进程的概念和处理上,并没有象其他的操作系统一样的严格区分.线程在linux中,又会称为轻量级进程.而且和win系统很重要的区别是,在linux下面,新建的线程并不在原进程/线程中,而是通过clone()系统调用,生成了一个和原先的进程/线程完全一样的进程/线程,并在这个线程中执行线程的函数.<br /><br />POSIX线程编程主要涉及的是POSIX的线程接口和一些相关的线程通讯的机制.<br />下面会介绍相关的POSIX线程的接口,和线程通讯机制,以及一些相

2010-10-28 16:58:00 1820 2

原创 IP地址格式转换

<br />先来讲一个使用linux接口的将unsigned int型或者unsigned long等类型的数据转化成点分十进制的方法:<br />1.在/usr/include/arpa/inet.h文件中有inet_ntoa()函数的声明:<br />extern char *inet_ntoa(struct in_addr __in) __THROW;<br />__in:是struct in_addr的结构体变量.<br />那么这个结构体变量是个什么东西呢?我们来看看:<br />

2010-10-27 09:20:00 13099

转载 vim插件:ctags和taglist

<br />Vi大家都很熟悉,某些情况下它是我们在Linux下唯一可用的文本编辑器。其实我们平时所指的VI其实是VIM(ViImproved,VI增强版)。有人常常拿VIM和emacs比较,VIM尽管不象emacs那样有那么多的功能,但是比emacs更方便、好用。VIM简单易用,只要看看VIM自带的vitutor,大约只要20分钟就能掌握VIM的用法。对于Linux下的C/C++的程序员,使用VIM+Ctags的组合来写程序也许是最佳的选择。^_^ <br /><br />VI的使用方法这里就不罗嗦了,本文

2010-08-31 16:43:00 1342

转载 socket编写流程

<br />socket是一种在Linux或者Unix下非常流行的网络编程方式,这种方式简单有效,可以很灵活的完成各种复杂的协议控制,个人感觉比使用MFC下的网络相关类库要来的更舒服一些,因为所有一切都是自己可控的。<br />但是使用socket编程有一个非常不方便的地方在于,由于在Linux下没有一个像VC这样强大的调试平台,网络通信过程中的错误追踪就会显得稍微复杂一些。无奈,只能尝试在VC下是否可以使用标准的socket函数来完成网络通信,借助VC强大的调试工具来达到高效率的编码目的。<br />在网

2010-08-31 16:36:00 1017

转载 C++中Static作用和使用方法

<br />1、什么是static?<br />       static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。<br />    2、为什么要引入static?<br />       函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏

2010-08-05 14:13:00 914

转载 c++几个点

<br />1.默认构造函数<br />如果没有显示的为类声明构造函数,编译器将生成一个不接受任何参数。也不执行任何操作的默认构造函数。然而你可以创建自己的默认构造函数,它不接受任何参数,但根据需要对对象进行设置。<br />编译器提供的构造函数被称为默认构造函数,但按照惯例,任何不接受参数的构造函数都是默认构造函数。如果你创建了任何构造函数,编译器不会提供构造函数。因此,如果需要一个不接受任何参数的构造函数,切已经创建了其他构造函数,则必须自己添加默认构造函数。<br />默认构造函数不会为数据成员提供初

2010-07-07 12:39:00 752

转载 BSP简介

<br />BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS。

2010-06-18 11:28:00 1247

原创 SC命令

<br />作为一个命令很工具,SC.exe可以用来测试你自己的系统,你可以设置一个批处理文件来使用不同的参数调用 <br />SC.exe来控制服务。这个很有用,如果你想看看你的服务不断的启动和停止,我没有试过哦!让一个服务一下子 <br />打开,一下子关闭,听上去很不错的。如果你的服务进程里面有多个进程的话,你可以保持一个进程继续运行不 <br />让它走开,然后让另一个不断的打开在关闭,还可以寻找一下内存缺乏导致不完全清楚的证据。 <br />下面介绍SC,SC QC,and SC QUERY <b

2010-06-17 10:46:00 1678

原创 rpcbind:server localhost not responding,timeout...

mount -t nfs *.*.*.*:/somewhere /somewhere时提示:rpcbind:server localhost not responding,timeout...RPC:failed to contact local rpcbind server (error 5)的解决办法是:添加参数-o nolock mount -t nfs -o nol

2010-05-20 15:14:00 3943

经典的Python教程(PDF)

经典的python教程,对初学者的帮助很大,很容易明白,多的不说了...想学python的就下吧...

2009-03-18

加加中文输入法(最方便的中文输入法)

本人使用过的最喜欢的中文输入法..十分方便..能记忆词条..使用起来很顺手!

2008-12-18

空空如也

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

TA关注的人

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