过去式
存放旧的博客,开始新的博客的发布
我是Android开发者
专注android开发
展开
-
实战Linux设备驱动--万事开头难--HelloWorld
已经被玩坏了的Hello World在程序员的世界里,一般开始学习某种语言,或者某一套架构都会先写一个HelloWorld作为示例,OK,我们也不例外。 - helloworld.c代码解析 - Makefile - 编译运行 - 总结helloworld.c 1 #include <linux/init.h> 2 #include <linux/module.h> 3 #incl原创 2015-09-11 14:16:54 · 4636 阅读 · 1 评论 -
静态的声明一个指针变量
我是从Android的GPS模拟器代码中看到的,觉得很有意思,就记录下来了首先是结构体的定义:/* this is the state of our connection to the qemu_gpsd daemon */typedef struct { int init; int fd;原创 2012-10-22 09:17:35 · 5417 阅读 · 3 评论 -
分享一段自己写的Linux 驱动调试寄存器的代码
头文件://+++++add by Jay for proc sysfs debug#define DEBUG_ENABLE 1#ifdef DEBUG_ENABLE#include #include #include #include #include #define MAX_CHAR_LENGTH PAGE_SIZEstruct proc_dir_entry *procf原创 2012-10-10 09:53:02 · 5464 阅读 · 1 评论 -
SOCKET之 socketpair的使用
socketpair函数概要如下:#include #include int socketpair(int domain, int type, int protocol, int sv[2]);sys/types.h文件需要用来定义一些C宏常量。sys/socket.h文件必须包含进来定义socketpair函数原型。socketpair函数需要四个参数。他们是:套接口的域转载 2012-08-28 15:22:26 · 4573 阅读 · 0 评论 -
Linux 下C语言简单实现线程池
C语言简单实现线程池0 前言网上关于线程池的例子还是不少,简单明了的倒是比较少,看了网上的资料,打算借鉴网上的一些例子,自己实现以下。线程的概念就不多说,首先说一下多线程的好处:多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。那么为什么又需要线程池呢?我们知道应用程序创建一个对象,然后销毁对转载 2012-08-24 00:22:23 · 1495 阅读 · 1 评论 -
调用fork两次以避免僵死进程
如果一个进程fork一个子进程,但不要它等待子进程终止,也不希望子进程处于僵死状态直到父进程终止,实现这一要求的技巧是调用fork2次。下面是实例代码:#include #include #include int main(void){ pid_t pid; if((pid = fork()) < 0) { pri原创 2012-08-14 13:51:40 · 1471 阅读 · 0 评论 -
exit的状态
下面是一个实例,来演示不通的exit值#include #include #include void pt_exit(int status){ if(WIFEXITED(status)) printf("nomal termination, exit status = %d\n", WEXITSTATUS(status)); else if(WIFSIGNALED(s原创 2012-08-14 13:29:53 · 929 阅读 · 0 评论 -
vfork函数实例
一下是vfork函数的实例,跟之前的fork函数类似#include #include #include int glob = 6;int main(void){ int var; pid_t pid; var = 88; printf("before vfork\n"); if((pid原创 2012-08-14 09:41:47 · 1127 阅读 · 0 评论 -
fork函数实例
下面是一个fork函数的实例#include #include #include int glob = 6;char buf[] = "a write to stdout\n";int main(void){ int var; pid_t pid; var = 88; if(write(原创 2012-08-14 09:17:16 · 928 阅读 · 0 评论 -
自动变量的潜在问题
下面是一个错误的实例......#define DATAFILE "datafile"FILE *open_data(void){ FILE *fp; char databuf[BUFSIZE]; if((fp = fopen(DATAFILE, "r")) == NULL) retur原创 2012-08-14 08:32:46 · 815 阅读 · 2 评论 -
setjmp 和 longjmp函数的使用
setjmp和longjmp函数可以实现函数之间的跳跃(goto),下面是一个实例#include #include static void f1(int, int, int, int);static void f2(void);static jmp_buf jmpbuffer;static int globval;int main(void){ int原创 2012-08-13 16:58:55 · 932 阅读 · 0 评论 -
UNIX C 编程 ---- atexit函数的使用
#include static void my_exit1();static void my_exit2();int main(void){ if(atexit(my_exit2) != 0) printf("error: can't register my_exit2\n"); if(atexit(my_exit1) != 0) printf("error: can't原创 2012-08-13 15:46:20 · 1196 阅读 · 0 评论 -
android2.3-adb源码分析
android2.3-adb源码分析ADB是android debug bridge的缩写,负责计算机与Android设备的几乎所有通信和协作,可以认为是连接两者的桥梁。其完整源代码路径:system\core\adb1、首先查看其Android.mk文件,确认会生成哪此文件。可执行进程由两部分组成:LOCAL_MODULE := adb转载 2012-07-19 10:24:35 · 1064 阅读 · 0 评论 -
Writing a Simple USB Driver
Apr 01, 2004 By Greg Kroah-Hartman inSoftwareGive your Linux box a multicolored light you can see from across the room, and learn how to write a simple driver for the next piece of ha转载 2012-07-17 11:00:06 · 1288 阅读 · 0 评论 -
Android内核与主线linux内核的比较(Android对Linux内核的改动你知道多少?)
我们知道Android是一个开源系统,但是并不彻底,而且Android从多个方面对Linux内核进行了改动与增强,尽管一度和Linux基金会在内核方面闹得不愉快,但是最终也达成了和解。下面将对此进行详细介绍和分析。 1 、Goldfish Android模拟器通过运行一个Goldfish的虚拟CPU.Goldfish来运行arm926t指令集(arm926t属于armv5构架)转载 2012-07-15 22:51:29 · 1372 阅读 · 0 评论 -
Linux内核通知链notifier
Linux内核通知链notifier源地址:http://fangjian0518.blog.163.com/blog/static/5591965620118295401816/1.内核通知链表简介(引用网络资料) 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux转载 2012-07-01 22:12:27 · 1366 阅读 · 0 评论 -
Android 驱动和系统开发 1. 一个简单的例子(原创)
首先,边学习边记录点自己的代码,希望看了我写的代码觉得不怎么样的,多多提出来,让我也学习学习,我一定会虚心接受大家的指导。这里我们是来学习android 驱动和android系统框架的,这里我只针对于整个android设备驱动的一个流程,从上到下的调用,而且在这里我们去使用android源码环境,原因是我使用的电脑比较破,编译android会挂,而且android BSP太大了,git下来很麻原创 2012-07-03 15:38:01 · 9209 阅读 · 15 评论 -
Linux下Fork与Exec使用
转载自cnbloghttp://www.cnblogs.com/winnxm/archive/2010/01/21/1653706.htmlLinux下Fork与Exec使用注明: 虽然文字性的东西很多,但是如果你认真的读完,相信你一定有收获的。Trust me ! 一、引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的转载 2012-06-27 10:10:10 · 1332 阅读 · 0 评论 -
The Linux CDROM interface
The Linux CDROM interfacePaul Dwerryhouse, paul@dwerryhouse.com.au$Revision: 1.0 $ $Date: 2004/03/13 12:57:42 $This document details the CDROM programming interface that Linux provides. It was转载 2012-06-25 09:47:35 · 1079 阅读 · 0 评论 -
some tips
使用md5sum递归生成整个目录的sum生成:[cpp] view plaincopyprint?find ./ -type f -print0 | xargs -0 md5sum > ./my.md5 检查:[cpp] view plaincopyprint?md5sum -c my.md5 prot原创 2012-05-14 16:29:34 · 865 阅读 · 0 评论 -
多进程和多线程编程
1、多进程编程[cpp] view plaincopy#include #include #include int main() { pid_t child_pid; /* 创建一个子进程 */ child_pid = fork(); if(chil转载 2012-05-08 16:50:13 · 792 阅读 · 0 评论 -
Linux下的多线程编程
1 线程创建与取消1.1 线程创建1.1.1 线程与进程相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理转载 2012-05-08 16:49:41 · 783 阅读 · 0 评论 -
Linux下的多进程编程
什么是一个进程?当用户敲入命令执行一个程序的时候,对系统而言,它将启动一个进程。但和程序不同的是,在这个进程中,系统可能需要再启动一个或多个进程来完成独立的多个任务。多进程编程的主要内容包括进程控制和进程间通信。 1 Linux下进程的结构Linux下一个进程在内存里有三部分的数据,就是"代码段"、"堆栈段"和"数据段"。这三个部分也是构成一个完整的执行序列的必转载 2012-05-08 16:46:59 · 789 阅读 · 0 评论 -
Freescale mma845x三轴加速度传感器驱动分析
最近刚看完freescale mma8451的驱动,并且一直了驱动,自己也没怎么改代码,不过读了一下代码,还是有点体会的,下面我就来分析一下。首先看下代码结构,有兴趣的可以从一下方式获得代码,git@github.com:zhangjie201412/WorkSpace.git ,最好是先发mail给我,jay@jay:~/mygit$ tree.└── kernel ├原创 2012-05-02 12:00:33 · 5625 阅读 · 6 评论 -
MX25的SPI驱动
MX25的SPI驱动,和大多数平台的SPI驱动都有相似之处。这里有三个非常关键的文件:mxc_spi.c,spi.c,spidev.c,路径都在kernel/drivers/spi下。其中spi.c为驱动与驱动之间的调用接口,spidev.c为应用与驱动之间的调用接口,mxc_spi.c为驱动的最底层代码,直接操作SPI的相关寄存器。下面分别从驱动间调用SPI驱动和应用层调用SPI驱动两条路分析S转载 2012-04-21 23:22:24 · 1984 阅读 · 0 评论 -
修改Linux 开机logo 并且居中显示
默认开机LOGO会在液晶屏的左上脚显示一只小企鹅,分辨率为80*80,具体在kernel/drivers/video/logo下会有logo_linux_clut224.ppm这幅图像,程序会根据这幅图像生成logo_linux_clut224.c和logo_linux_clut224.o两个文件,最终将小企鹅显示在液晶屏上。 这里我们需要修改开机转载 2012-04-18 11:58:59 · 5881 阅读 · 0 评论 -
如何下载并编译Android4.0内核源码goldfish(图文)
关于如何下载Android4.0源码,请查看我的博客内另一篇文章(同样是图文教程):http://blog.csdn.net/flydream0/article/details/7036156如何编译Android4.0源码请看:http://blog.csdn.net/flydream0/article/details/7046612下面进入正题:转载 2012-04-13 08:28:56 · 961 阅读 · 0 评论 -
Android 设备上实现串口的移植
de项目需要,要实现在Android中实现串口的收发功能,有几种方法可以参考使用。1. 标准的Android HAL层思想,把串口的功能加入framework的API中(类似于android中sensor的实现) a. 确保驱动层中基于tty的串口驱动可以正常read、write、poll数据,当然了,也可以自己写一个字符驱动来实现串口的读写功能。 b. 在BSP的HAL层原创 2012-04-11 20:13:43 · 6786 阅读 · 11 评论 -
Linux 设备驱动 ====> 并发控制 --- 自旋锁
自旋锁的使用自旋锁(spin_lock)是一种典型的对临界资源进行互斥访问的手段,顾名思义,为了获得一个自旋锁,在某CPU上运行的代码需要先执行一个原子操作,该操作测试并设置某个内存变量,在该操作完成之前其他执行单元不可能访问到这个内存变量。如果测试结果表明锁已经空闲,则程序获得这个自旋锁并继续执行;如果测试表明锁仍被占用,程序将在一个小的循环内重复这个“测试并设置”操作,就是“自旋”的动原创 2012-03-28 09:09:35 · 1603 阅读 · 0 评论 -
Linux 设备驱动 ====> 并发控制 --- 原子操作
原子操作原子的操作指的就是在执行过程中不会被别的代码所中断的操作。在Linux中原子操作的方法有很多,有整型原子和位原子,他们在任何情况下操作都是原子的,这些原子操作的实现都是依赖CPU来实现的,因此这些函数都与CPU架构密切相关。整型原子我们arm架构的原子实现在kernel/arch/arm/include/asm/atomic.h1. 设置源自变量的值stat原创 2012-03-27 22:18:39 · 1477 阅读 · 1 评论 -
android车载终端开发--------can 总线移植
最近辞职了,去了新单位工作,好久没有更新这边的博客了,之前的公司是做android平板的,新公司是做车载终端的,正好有一个项目是尝试着做android车载终端。车载终端与平板电脑区别很大,大的框架还是android框架,这边我指的框架是指整体的代码框架和设计,不过要修改和移植的地方都很多,刚接手,我就从车载系统中最普遍的东西做起,can总线的移植,因为标准的android代码中是不支持can总原创 2012-03-25 14:37:52 · 10274 阅读 · 13 评论 -
grep 参数使用和实例
转自cublog:http://blog.chinaunix.net/uid-26738765-id-3130001.html一、grep 参数使用Gun grep 选项-b 在搜索到的行的前面打印该行所在的块号码。-c 只显示有多少行匹配 ,而不具体显示匹配的行-h 不显示文件名-i 在字符串比较的时候忽略大小写-l转载 2012-03-13 00:47:30 · 1066 阅读 · 1 评论 -
分享Ubuntu下一些很棒的软件(二)
2012-01-28 22:49 by wwang, 2118 visits, 收藏, 编辑Gloobus PreviewGloobus Preview是一个快速预览工具。通过这个工具,我们在文件管理器里只要按下空格键,就可以弹出预览窗口。Gloobus Preview支持png,jpeg,bmp,mp3,wav,avi,pdf,doc,ppt,odp等等常见的各种文件转载 2012-03-03 23:54:11 · 1408 阅读 · 0 评论 -
分享Ubuntu下一些很棒的软件(一)
分享一些我在Ubuntu下常用的软件。Goolge Chrome/Firefox/Thunderbird这些重量级的跨平台的软件虽然很强大,但大家应该都比较熟悉了,没有太多必要在这里介绍。本文涉及到的软件可能不是那么出名,但都非常出色。 截图工具Shutter本文的截图均是采用Shutter,自然要第一个介绍。Shutter的功能很全面,基本上常用的转载 2012-03-01 22:44:58 · 1285 阅读 · 1 评论 -
linux下vim配置
请修改 /etc/vimrc (建议先cp一份) 你看一下那些是对你有用的,你就修改一下: Java代码 [color=blue]set nocompatible " 关闭 vi 兼容模式 syntax on " 自动语法高亮 colorscheme molokai转载 2012-02-15 14:27:53 · 4465 阅读 · 3 评论 -
android study ------ HAL ---> light sensor
1. add a virtual driver and device in linux kernel.2. create file system in linux, include read and write file node.3. add hal code in android/hardware/libmodule...4. write an apk test......by t原创 2011-12-16 16:36:32 · 1939 阅读 · 0 评论 -
flush_workqueue
Nameflush_workqueue — ensure that any scheduled work has run to completion.Synopsisvoid fastcall flush_workqueue (struct workqueue_struct * wq);Arguments原创 2011-12-16 08:42:43 · 1320 阅读 · 0 评论 -
systemcall---系统调用
http://www.ibm.com/developerworks/cn/linux/l-system-calls/系统调用就是用户空间应用程序和内核提供的服务之间的一个接口。由于服务是在内核中提供的,因此无法执行直接调用;相反,您必须使用一个进程来跨越用户空间与内核之间的界限。在特定架构中实现此功能的方法会有所不同。因此,本文将着眼于最通用的架构 —— i386。在本文中,我原创 2011-12-15 17:41:14 · 1942 阅读 · 0 评论 -
sysinfo
/* * Sample kobject implementation * * Copyright (C) 2004-2007 Greg Kroah-Hartman * Copyright (C) 2007 Novell Inc. * * Released under the GPL version 2 only. * */#include #include原创 2011-12-14 18:58:28 · 858 阅读 · 0 评论 -
asmlinkage
什么是 "asmlinkage"?相信大家在看linux的source code的时候,都会注意到asmlinkage这个宏,它是用来做什么的呢?The asmlinkage tag is one other thing that we should observe about this simple function. This is a #define for some原创 2011-12-13 18:56:55 · 882 阅读 · 0 评论