linux

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

2011年7月25日

摘要: http://armboard.taobao.com/ 已经有一些的文章介绍Android内核了,本系列篇将从Linux内核的角度来分析Android的内核,希望给初学者提够有用的信息。本章将简单的介绍Android内核的全貌,起到一个抛砖引玉的作用。从下一篇开始将详细介绍每一个Android内核驱动程序及其作用。 Android内核是基于Linux 2.6内核的(目前最新开发版本是2.6.31),它是一个增强内核版本,除了修改部分Bug外,它提供了用于支持Android平台的设备驱动,其核心驱动主要包括: Android Binder,基于OpenBinder框架的一个驱动,用于提供An.. 阅读全文
posted @ 2011-07-25 20:50 h13 阅读(9840) 评论(0) 推荐(1) 编辑

2011年7月14日

摘要: 如果你只需要修改某一个模块的内容,但是却每次都要执行make, 最后等待很长时间。使用模块编译,那只需要在你所在的模块的目录或者其子目录,执行mm,便可以编译出一个单独的apk,这样岂不快哉!具体步骤: 1)打开~/.baserc文件,加入source ~/I850/build/envsetup.sh. 加入你自己该文件所在的路径,这样就免去了每次启动新的终端执行mm命令之前,需要引用此文件。 2)完成步骤1之后,就可以在你的模块里面随意执行mm了,要想使用其他快速命令,可以查看envsetup.sh文件,比如cgrep,jgrep,resgrep在不同类型的文件里面进行相应的查询... 阅读全文
posted @ 2011-07-14 20:27 h13 阅读(781) 评论(0) 推荐(0) 编辑

2011年7月13日

摘要: __attribute__详解GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。__attribute__语法格式为:__attribute__ ((attribute-list))其位置约束为:放于声明的尾部“;”之前。函数属性(Function Attri 阅读全文
posted @ 2011-07-13 08:55 h13 阅读(653) 评论(0) 推荐(0) 编辑

2011年7月6日

摘要: 只有 pthreads 使用属性和取消功能。本章中介绍的 API 仅适用于 POSIX 线程。除此之外,Solaris 线程和 pthreads 的功能大致是相同的。有关相似和不同之处的更多信息,请参见第 8 章,Solaris 线程编程。属性对象通过设置属性,可以指定一种不同于缺省行为的行为。使用 pthread_create(3C) 创建线程时,或初始化同步变量时,可以指定属性对象。缺省值通常就足够了。属性对象是不透明的,而且不能通过赋值直接进行修改。系统提供了一组函数,用于初始化、配置和销毁每种对象类型。初始化和配置属性后,属性便具有进程范围的作用域。使用属性时最好的方法即是在程序执行早 阅读全文
posted @ 2011-07-06 10:09 h13 阅读(3462) 评论(0) 推荐(0) 编辑

摘要: 对消息队列的操作无非有下面三种类型:1、 打开或创建消息队列消息队列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,只需提供该消息队列的键值即可;注:消息队列描述字是由在系统范围内唯一的键值生成的,而键值可以看作对应系统内的一条路经。2、 读写操作消息读写操作非常简单,对开发人员来说,每个消息都类似如下的数据结构:struct msgbuf{long mtype;char mtext[1];};mtype成员代表消息类型,从消息队列中读取消息的一个重要依据就是消息的类型;mtext是消息内容,当然长度不一定为1。因此,对于发送消息来说,首先预置一个m 阅读全文
posted @ 2011-07-06 09:24 h13 阅读(968) 评论(0) 推荐(0) 编辑

2011年6月28日

摘要: 最近研究ubuntu,用apt-get命令安装一些软件包时,总报错:E:could not get lock /var/lib/dpkg/lock -open等出现这个问题的原因可能是有另外一个程序正在运行,导致资源被锁不可用。而导致资源被锁的原因,可能是上次安装时没正常完成,而导致出现此状况。解决方法:输入以下命令sudo rm /var/cache/apt/archives/locksudo rm /var/lib/dpkg/lock之后再安装想装的包,即可解决。 阅读全文
posted @ 2011-06-28 15:11 h13 阅读(12988) 评论(0) 推荐(1) 编辑

2011年6月27日

摘要: 对于Linux我也是一位新人,弄Linux也就半年左右吧,同时作为Android队伍中的一个新人。由于我最近每天使用的是CentOS 5.5,所以选择CentOS5.5作为我的开发环境。我以前一直在LinuxSir潜水,第一次发贴,我还是细致的把我作的写下来。同时作为我的学习笔记我会把我的学习成果发上来的。作为新人,如果有什么不对的地方,还望各位不吝赐教,多多关照~目录1、环境搭建 1.1、JDK安装 1.2、Eclipse安装 1.3、ADT安装 1.4、Android SDK安装1.5、Android NDK安装内容1.1、JDK安装没选用CentOS自带的Java环境,下载Oracle最 阅读全文
posted @ 2011-06-27 14:57 h13 阅读(22476) 评论(1) 推荐(1) 编辑

2011年6月8日

摘要: 一、音视频同步问题概述: 音视频同步问题是可视对讲中的重点需要解决的问题之一,也是一直以来被模拟门禁产品厂商攻击的一个弱点,因为模拟可视对讲产品都采用专线传输,不存在这个问题。解决同步问题的方法有很多种,其中时间戳是最成熟最完美也是最复杂的解决办法,可以解决任何多媒体领域的音视频同步问题;其原理是选择一个参考时间,在生成数据流时依据参考时间上的时间给每个数据块都打上时间戳;在播放时,读取数据块上的时间戳,同时参考当前时钟上的时间来安排播放,让快于这个参考时间的包等待,丢弃慢于这个参考时间的包。 在基于时间戳的同步机制中,仅仅对不同步的数据进行处理是不完备的,还需要反馈机制,如基于Window. 阅读全文
posted @ 2011-06-08 14:33 h13 阅读(3105) 评论(0) 推荐(0) 编辑

2011年6月3日

摘要: 我们编程时常常想统计一下自己写过多少行代码了,这时候该怎么办呢?虽然Vim等编辑器中有代码行数显示,但是不能一个个打开然后加起来吧?这个时候需要用到wc这个工具,呵呵,别看名字不怎么样,功能可是很强大的哦。用法:当前目录下:wc -l *.c *.h当前目录及子目录:find . -name *.c |xargs wc -lfind . -name *.cpp | xargs wc -lfind . -name *.h |xargs wc -l 阅读全文
posted @ 2011-06-03 14:49 h13 阅读(1781) 评论(2) 推荐(0) 编辑

2011年5月11日

摘要: 在unix系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FILENO,标准出错用STDERR_FILENO.他们的区别:stdin等是FILE *类型,属于标准I/O,在<stdio.h>。STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2,属于没有buffer的I/O,直接调用系统调用,在<unistd.h>。 下面一个例子是对STDOUT_FIFENO 和STDIN_FILENO的应用:#include 阅读全文
posted @ 2011-05-11 11:39 h13 阅读(20792) 评论(0) 推荐(1) 编辑

摘要: 1. 前言 2. 使用临时文件 3. 使用匿名管道 4. 使用popen 5. 小结 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作。比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令。但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果。例如,执行外部命令ping后,如果执行失败,我们希望得到ping的返回信息。2. 阅读全文
posted @ 2011-05-11 11:27 h13 阅读(12705) 评论(0) 推荐(0) 编辑

2011年4月29日

摘要: #include <stdio.h>#include <stdlib.h>void test(int* a,int* b){b = a;}int main(void){ int *a,*b=NULL; int c = 2; a = &c; //b = a; test(a,b); if(b) printf("aaaaaaaaaaaaa:%d\n",*b); else printf("bbbbbbbbbbbb\n");}为什么在函数test赋值之后b还是null?毛病出在函数test中。编译器总是要为函数的每个参数制作临时副本 阅读全文
posted @ 2011-04-29 14:56 h13 阅读(1859) 评论(0) 推荐(0) 编辑

2011年4月25日

摘要: 生成静态链接库/动态链接库的makefile如下:#CC:=arm-linux-gccCFLAGS := -I..LDFLAGS := -lpthread -lrtSRCS := $(wildcard *.c)ifdef ARCHlibclient := libclient-$(ARCH).aelselibclient := libclient.aendifall: $(libclient) libclient.so$(libclient): client.o net.o $(AR) -rcv $@ $^libclient.so: client.o net.o $(CC) -shared -o 阅读全文
posted @ 2011-04-25 11:08 h13 阅读(2201) 评论(0) 推荐(0) 编辑

摘要: 读取一个文件,类似IP=192.168.1.8NETMASK=255.255.255.0格式的文件,并对文件进行解析,得到其key和value,可以读取相应key的value值,也可以得到配置相应的value;typedef struct item_t { char *key; char *value;}ITEM;/* *去除字符串右端空格 */char *strtrimr(char *pstr){ int i; i = strlen(pstr) - 1; while (isspace(pstr[i]) && (i >= 0)) pstr[i--] = '\0&# 阅读全文
posted @ 2011-04-25 10:55 h13 阅读(17257) 评论(1) 推荐(2) 编辑

摘要: 同样以触摸屏的适配器tslib中的函数进行描述,如何从当前的环境变量中读取一个环境变量,并利进行文件的解析,下面先对几个程序看几个将要用到的函数:FILE * fopen(const char * path,const char * mode); 函数功能: 打开一个文件 函数原型:FILE * fopen(const char * path,const char * mode); 相关函数:open,fclose,fopen_s[1] ,_wfopen 所需库: <stdio.h> 返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代 阅读全文
posted @ 2011-04-25 10:43 h13 阅读(1195) 评论(0) 推荐(0) 编辑

摘要: 在应用程序中经常需要用到打印错误信息的函数,以便我们能更方便地调试。考虑到程序的可扩展性,将对该函数作如下的封装:static int stderrfn(const char *fmt, va_list ap){ return vfprintf(stderr, fmt, ap);}/* * Change this hook to point to your custom error handling function. */int (*ts_error_fn)(const char *fmt, va_list ap) = stderrfn;int ts_error(const char *fm 阅读全文
posted @ 2011-04-25 10:32 h13 阅读(448) 评论(0) 推荐(0) 编辑

摘要: linux下加载动态链接库的方法:以下以触摸屏为例:介绍是如何加载一下共享库的。首先让我们看看以下几个函数:dlopen() 功能:打开一个动态链接库 包含头文件: #include <dlfcn.h> 函数定义: void * dlopen( const char * pathname, int mode ); 函数描述: 在dlopen的()函数以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程。使用dlclose()来卸载打开的库。dlclose(handle); 功能:关闭一个动态链接库dlsym() 函数原型: void* dlsym(void* handle, 阅读全文
posted @ 2011-04-25 10:29 h13 阅读(4067) 评论(0) 推荐(0) 编辑

2011年4月21日

摘要: 12864是128*64点阵液晶模块的点阵数简称,业界约定俗成的简称。一、液晶显示模块概述12864A-1 汉字图形点阵液晶显示模块,可显示汉字及图形,内置 8192 个中文汉字(16X16 点阵,16*8=128,16*4=64,一行只能写 8 个汉字,4 行;、128 个字符(8X16 点阵)及 64X256 点阵显示 RAM(GDRAM))。主要技术参数和显示特性:电源:VDD 3.3V~+5V(内置升压电路,无需负压);显示内容:128 列× 64 行(128 表示点数)显示颜色:黄绿显示角度:6:00 钟直视LCD 类型:STN与 MCU 接口:8 位或 4 位并行/3 位 阅读全文
posted @ 2011-04-21 19:37 h13 阅读(2948) 评论(0) 推荐(0) 编辑

2011年4月20日

摘要: #/bin/sh i=0 chapter=$1 book_name=$2 while [ $i != $3 ] do echo "第 $i 正在下载第 $book_name 个文件..." wget http://www.qqshuwu.com/files/article/attachment/5/5759/$chapter/$book_name.gif i=`expr $i + 1` book_name=`expr $book_name + 1` chapter=`expr $chapter + 1` done 本文来自CSDN博客,转载请标明出处:http://blog 阅读全文
posted @ 2011-04-20 21:37 h13 阅读(1058) 评论(0) 推荐(0) 编辑

2011年4月19日

摘要: Kobjectskobject是一种数据结构,定义在 。 struct kobject { const char * k_name;/*kobject 的名字数组(sysfs 入口使用的名字)指针;如果名字数组大小小于KOBJ_NAME_LEN,它指向本数组的name,否则指向另外分配的一个名字数组空间 */ char name[KOBJ_NAME_LEN];/*kobject 的名字数组,若名字数组大小不小于KOBJ_NAME_LEN,只储存前KOBJ_NAME_LEN个字符*/ struct kref kref;/*kobject 的引用计数*/ struct list_head entr 阅读全文
posted @ 2011-04-19 23:35 h13 阅读(6763) 评论(0) 推荐(0) 编辑

2011年4月18日

摘要: 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 variable from user space. put_user -- Write a simple value into user space. copy_from_userNamecopy_from_user -- Copy a block of data from user space. Synopsisunsigned 阅读全文
posted @ 2011-04-18 00:19 h13 阅读(1884) 评论(1) 推荐(0) 编辑

摘要: 2.4内核中,模块自身通过 MOD_INC_USE_COUNT, MOD_DEC_USE_COUNT宏来管理自己被使用的计数。 2.6内核提供了更健壮、灵活的模块计数管理接口 try_module_get(&module), module_put(&module)取代2.4中的模块使用计数管理宏;模块的使用计数不必由自身管理,而且在管理模块使用计数时考虑到 SMP与PREEMPT机制的影响。 int try_module_get(struct module *module); 用于增加模块使用计数;若返回为0,表示调用失败,希望使用的模块没有被加载或正在被卸载中。 void m 阅读全文
posted @ 2011-04-18 00:05 h13 阅读(3513) 评论(0) 推荐(0) 编辑

2011年4月17日

摘要: 将创建字符设备的三种方法记录一下,以便以后参考.1. 使用早期的register_chardev()方法#include<linux/kernel.h>#include<linux/module.h>#include<linux/fs.h>#include<asm/uaccess.h>int init_module(void);void cleanup_module(void);static int device_open(struct inode*, struct file*);static int device_release(struct 阅读全文
posted @ 2011-04-17 23:46 h13 阅读(4120) 评论(0) 推荐(0) 编辑

2011年4月14日

摘要: 功能描述: 获取或者设置与某个套接字关联的选项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:#include #include int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sock. 阅读全文
posted @ 2011-04-14 16:23 h13 阅读(2927) 评论(0) 推荐(0) 编辑

摘要: 开发环境:ubuntu10.04 tq2440第一步sqlite在arm-linux下的编译1、下载sqlite2.8.17:请到http://www.sqlite.org/download.html,将下载的代码包解开,将生成sqlite目录,另外新建一个build目录,如sqlite-arm,再在此目录下建build目录,sqlite-arm应该是和sqlite-2.8.17目录平行的同级目录注:下载的是sqlite-2.8.17.tar.gz2、确认arm-linux-toolchains.tgz已经安装到你的linux系统.3、为了在arm-linux下能正常运行sqlite,我们需要 阅读全文
posted @ 2011-04-14 14:44 h13 阅读(2464) 评论(0) 推荐(0) 编辑

2011年4月13日

摘要: 1.中断处理的体系结构 我们知道编写设备驱动程序一定要用到中断处理函数,这在驱动程序的编写中,占据很重要的一部分。在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interrupt handler)或中断服务例程(interrupt service routine ,ISP).产生中断的每个设备都有一个相应的中断处理程序,中断处理程序通常不和特定的设备关联,而是和特定的中断关联的,也就是说,如果一个设备可以产生多种不同的中断,那么该就可以对应多个中断处理程序,相应的,该设备的驱动程序也就要准备多个这样的函数。在Linux内核中处理中断是分为上半部(top half),和 阅读全文
posted @ 2011-04-13 21:35 h13 阅读(5389) 评论(0) 推荐(0) 编辑

摘要: 异常,就是可以打断CPU正常运行流程的一些事情,比如外部中断、未定义指令、试图修改只读的数据、执行swi指令(Software Interrupt Instruction ,软件中断指令)等。当这些事情发生时,CPU暂停当前的程序,先处理异常事件,然后再继续执行被中断的程序。操作系统中经常通过异常来完成一些特定的功能。其中的中断也占有很大的一部分。例如下面的这几种情况:当CPU执行未定义的机器指令时将触发“未定义指令异常”,操作系统可以利用这个特点使用一些自定义的机器指令,它们在异常处理函数中实现。 当用户程序试图读写的数据或执行的指令不在内存中时,也会触发一个“数据访问中止异常”或“指令预. 阅读全文
posted @ 2011-04-13 21:32 h13 阅读(6134) 评论(0) 推荐(0) 编辑

2011年4月11日

摘要: 在Linux的用户空间,我们经常会调用系统调用,下面我们跟踪一下read系统调用,使用的Linux内核版本为Linux2.6.37。不同的Linux版本其中的实现略有不同。在一些应用中我们可以看到下面的一些定义:#define real_read(fd, buf, count ) (syscall(SYS_read, (fd), (buf), (count))) 其实真正调用的还是系统函数syscall(SYS_read),也就是sys_read()函数中,在Linux2.6.37中的利用几个宏定义实现。 Linux 系统调用(SCI,system call interface)的实现机制实. 阅读全文
posted @ 2011-04-11 23:17 h13 阅读(21771) 评论(2) 推荐(2) 编辑

摘要: 开发者的技术成长是个永恒的话题。《如何成为一个专家级的开发者》文中虽然界定了专家的概念和开发者成长为专家级的一般路径,但却忽视了一个问题:为什么只有少数人能成长为开发高手和专家级程序员?一般程序员与开发高手的差距在哪里? 事实上,我们一直在关注这一问题,并就此进行了数月的调查走访,受访的十几位技术专家对此问题的回答有些出乎我们的意料,也与众多入门级开发者所想象的“差距”大不相同。 入门者说 我们在一些具有1-2年开发经验的程序员就“你与开发高手的差距在哪里”的问题进行调查,得到的答案大致可以归纳为以下几种:项目经验。多数入门级程序员认为,大量的项目经验是提高自身技术水平的关键;高手们往往具有. 阅读全文
posted @ 2011-04-11 22:56 h13 阅读(322) 评论(0) 推荐(0) 编辑

摘要: skb_put() 增长数据区的长度来为memcpy准备空间. 许多的网络操作需要加入一些桢头, 这可以使用skb_push来将数据区向后推, 为头留出空间. 请参见下图: ---------------------------------------- | head | data | | ---------------------------------------- skb_put ----------------------------------------- | head | data | put_data | | ---------------------------------- 阅读全文
posted @ 2011-04-11 13:36 h13 阅读(5112) 评论(0) 推荐(0) 编辑