自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

山庄来客的专栏

Android, Linux Kernel Research Notes

  • 博客(224)
  • 资源 (1)
  • 收藏
  • 关注

原创 事件处理

事件是由系统或Qt本身产生的,以应对不断发生的情况。事件可以是鼠标事件、键盘事件或窗口显示等。在Qt中,各种Widget已经封装了对各种事件的响应代码,对外的形式是各种信号。当使用Widget时,我们只需关注信号就可以了,而当自己实现一个Widget时,则需要自己实现一些事件响应代码。在Qt中,一个事件对象继承自QEvent。Qt处理多达几百种事件,每种事件都用一个枚举类型来表示,如鼠标按

2011-12-08 22:24:26 2037

原创 保存和恢复应用程序状态

<!--@page {margin:0.79in}p {margin-bottom:0.08in}a:link {}-->在实际应用中,常常需要应用程序能保存程序的状态以及用户的设置,如应用程序显示的大小、位置、背景颜色或用户设置参数等信息,以便下次运行程序时,能保持上次关闭的状态。Qt提供的QSettings类能很方便地实现保存程序设置的需求。当创

2011-12-08 22:03:33 5757

原创 信号与槽

<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->信号与槽机制是Qt编程的基础。它使得应用程序开发人员可以将对象绑定到一起而对象之间不需要相互了解。槽几乎与普通的C++成员函数相同。它们可以是虚函数。它们可以被重载。它们可以是公有的,可以是保护类型的,也可以是私有类型的,它们可以像其他类成员函数一样调用。

2011-12-08 21:59:03 902

原创 freeglut中提供的几种立体几何对象绘制的android移植

在freeglut_geometry.c中定义了几种常见图形的绘制,包括立方体, 球面, 圆锥体, 圆柱体, 圆环面, 十二面体, 八面体, 四面体, 二十面体, 菱形十二面体(斜十二面体)等几种立体几何对象的绘制。 移植后的Android Java代码如下所示: /** * fyjengine All Rights Reserved * * @author Yajun Fu

2011-11-11 09:16:00 7082 1

原创 OpenGL 反锯齿的一些措施

1.       使用颜色混合来消除一些锯齿, 主要针对点和线以及不相互重叠的多边形的反锯齿。反锯齿设置代码如下:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);glEnable(GL_BLEND);glEnable(GL_POINT_SMOOTH);glHint(GL_POINT_SMOOTH_HINT, GL_NICEST

2011-11-05 10:14:23 6442 1

原创 opengl模板测试实例

在opengl中, 可以开启模板测试功能,来限定某一部分是可画的,某一部分是不可画的。这可通过设置模板模式来控制哪部分是可画的, 有点类似在墙上喷字。 虽说剪刀测试也可以限定蓝屏的某一部分可画,但不适用于不规则的区域,不如模板测试灵活。下面提供一个Android模板测试的实例代码: public class MyRenderer implements Renderer { priv

2011-11-05 10:13:41 1440

原创 剪刀测试

剪刀测试可限制屏幕的某一部分更新,其他部分不更新。实例代码如下:public class MyRenderer implements Renderer { public MyRenderer(Context ctx) { } @Override public void onDrawFrame(GL10 gl) { // Clear blue windo

2011-11-05 10:12:50 952

原创 运动模糊

运动模糊效果是指物体移动时,会拖带一个尾巴。通过颜色混合,可以实现这种效果。实现原理就是每隔一小段位移以某种alpha值重复绘制物体, 通过与前面画的物体进行颜色混合来实现模糊的效果。混合因子选择如下: S因子:GL_SRC_ALPHAD因子:GL_ONE 实例代码如下: public class MyRenderer implements Renderer { p

2011-11-05 10:12:03 1215

原创 专题 11 IPC之管道

1.概述管道通信是多个进程之间进行的通信方式之一。无名管道用于父进程与子进程之间进行通信的场合,命名管道用于任何两个进程之间的通信场合。管道仅仅是将某个进程的输出和另一个进程的输入相连接的单向通信的办法。2.无名管道无名管道采用pipe()函数来创建,其函数原型为:#includeintpipe(int filedes[2]);其中的数组filedes是一个文件描述

2011-11-01 23:38:59 632

原创 内核同步机制——原子操作

内核为原子操作提供了两组接口。一组操作整数,一个组操作比特位。1.整数原子操作数据类型为:typedefstruct {volatileint counter;}atomic_t;为了保持内核在各个平台兼容,以前规定atomic_t的值不能超过24位(都是SPARC惹的祸),不过现在该规定已经不需要了。相关操作如下:voidatomic_set(

2011-11-01 23:31:48 875

原创 删除svn同步文件目录

有时, 我们通过svn下载源码到本地电脑上, 想打包存档, 但不想将.svn目录下的文件打包, 可以通过shell脚本将散放在各个目录中的.svn目录删除掉。shell脚本的源码如下: #!/bin/shfunc(){ curdir=$1 local path=$1 for file in `ls -a $c

2011-10-31 19:48:37 3621 1

原创 专题 10 时钟与信号

<!--#toc, .toc, .mw-warning {border:1px solid rgb(170,170,170); background-color:rgb(249,249,249); padding:5px; font-size:95%}#toc h2, .toc h2 {display:inline; border:medium none; pa

2011-10-30 17:16:44 763

原创 内核中的几种内存分配器

<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->内存管理是内核是最复杂同时也是最重要的一部分,其中就涉及到了多种内存分配器,如果内核初始化阶段使用的bootmem分配器,分配大块内存的伙伴系统,以及其分配较小块内存的slab、slub和slob分配器。1.bootmem分配器bootmem分

2011-10-30 17:05:58 2956

原创 proc文件系统编程

proc文件系统是一种虚拟的文件系统,它只存在于内存当中,一般用来在内核中输出一些信息到用户层,通常可以利用其来打印内核程序中的一些调试信息,具体的操作如下代码。 #include #include #include #include MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR("fuyajun1983cn@yahoo.com.cn

2011-10-14 20:55:32 1939

原创 内核中的通知链

通知链(Notifier Chains):通知链用于向请求通知的代码区发送状态变化消息。有几个内核中预定义的通知器:l  Die Notification: 当一个内核函数触发了一个由“opps”引起的陷阱或错误时。l  Net device notificati

2011-10-14 20:52:32 1557

原创 条件编译在内核中的使用(技巧1)

当需要根据编译时配置,以不同方式执行某一任务时,一种可能的方法是,使用两个不同的函数,每次调用时,根据某些预处理器条件来的选择正确的一个:void do_somehting(){…#ifdef CONFIG_WORK_HARDdo_work_fast();

2011-10-14 20:51:01 953

原创 采用JNI方法利用opengl es 1.x在android上绘图

我们可以在jni层上编写opengl代码, 进行3d 图形的绘制,下面这个例子就是在一个绘制四面体的例子, 实例的绘制代码是在jni层实现的, 采用c++语言编写。 1. 首先, 创建上层应用程序相关类, 组织好调用路径。     这里主要是创建活动类, 渲染类以及相关辅助类。主活动类代码如下:import android.app.Activity;import androi

2011-09-22 21:12:11 5728 13

原创 min3d 引擎学习笔记之一

min3d是一个小巧的android 3d UI引擎, 最近想对其进行深入源码分析, 在深入学习之前, 还是先学会怎么用它吧。min3d是基于opengl es 1.x的, 它封装了opengl 的一些基本的绘图操作以及绘图管理和渲染操作,形成了一个框架。核心类主要包括场景类

2011-09-22 19:49:47 4901 1

原创 Android日志系统分析之日志设备驱动程序代码阅读

<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->android日志系统中定义了设备驱动的实现代码位于kernel/common/drivers/staging/android/logger

2011-09-18 19:42:04 1936

原创 Android日志系统分析之开篇

<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->在android系统中, 提供了一个轻量级的日志系统。该日志系统基于在内核中实现的一个字符设备驱动logger(misc字符设备驱动)。通过该字

2011-09-18 19:36:37 2756

原创 3D立方体及光照

本代码主要实现了一个旋转立方体, 并添加了光照效果。 Qt 版:myglwidget.h#ifndef MYGLWIDGET_H#define MYGLWIDGET_H#include #include #include #include clas

2011-09-13 22:27:07 1872

原创 专题 9 线程

<!--@page {margin:0.79in}p {margin-bottom:0.08in}a:link {}-->线程的创建与中断函数原型:pthread_create(thread,attr,start

2011-08-28 17:23:50 718

原创 动态对话框的创建

<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->动态对话框是指在运行时由.ui文件创建的对话框。它不是用uic将.ui文件转化为c++代码,而是使用类QuiLoader在运行时将文件加载。

2011-08-28 16:52:20 786

原创 内核数据结构之链表

<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->内核中的许多数据结构都是通过链表来的维护的,Linux内核提供了链表的通用处理操作,供内核中其他数据结构使用。只需将链表结构嵌入到目标数据结

2011-08-28 16:47:08 605

原创 arch/x86/boot/header.S

/* * header.S * * Copyright (C) 1991, 1992 Linus Torvalds * * Based on bootsect.S and setup.S * modified by more people than can be co

2011-08-28 16:34:04 1836

原创 专题 8 进程控制

<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->进程的标识、命令行与环境变量/****************************/#includeintmai

2011-08-22 00:23:58 895

原创 第一个OpenGL程序

OpenGL包含200多个函数,大致分为如下几类函数:图元函数(primitive function)指定要生成屏幕图像的图元。包括两种类型:可在二维、三维或四维空间进行定义的几何图元,如多边形;离散实体,如位图。属性函数(attribute function)负责控制图

2011-08-21 01:08:19 1617

原创 专题 7 设备文件编程

1.       设备文件操作UNIX对设备文件的操作相对简单,一般分为打开设备文件、设置设备文件、读写设备文件和关闭设备文件等几部分。代码示例如下:fd = open(devname, O_RDWR);//打开设备文件ioctl(fd, TCGETA, &oldtty);//备份设备文件设置ioctl(fd, TCSETA, &newtty);//设置设备文件设置…………

2011-06-29 21:43:00 749

原创 专题 6 目录文件编程

1.       对目录文件的操作包括创建、打开、定位和删除等内容, 其中(1)       获取工作目录的函数有getcwd和getwd等。(2)       设置工作目录的函数有chdir和fchdir等。(3)       创建目录文件的函数有mkdir等。(4)       删除目录文件的函数有rmdir等。(5)       目录文件定位的函数有seekdir、rew

2011-06-29 21:41:00 552

原创 专题5 低级文件编程

1.       文件的打开与创建1.1   函数原型#include int open(const char *filename, int oflag, …/*[mode_t mode*/];1.2   重要说明oflag:只能为如下三个值:O_RDONLY O_WRONLY O_RDWR读方式打开文件/etc/passwdint fno;if((fno = op

2011-06-29 21:39:00 1090

原创 Qt中使用C++的方式

先看一个普通的C++类的定义:#include using std::string;class MyClass{public:MyClass( const string& text );const string& text() const;void setText( const string& text );int getLengthOfTe

2011-06-29 21:33:00 8122

原创 Qt全局宏和变量

1.  Qt 全局宏定义Qt版本号: QT_VERSION :  (major 检测版本号:QT_VERSION_CHECK(major, minor, patch)((major当使用命名空间时的一些宏定义:namespace QT_NAMESPACE {} //命名空间定义# define QT_PREPEND_NAMESPACE(name) ::QT_NAMESP

2011-06-29 21:29:00 6925

原创 内核错误码处理宏

Linux有时候在操作成功时需要返回指针,而在失败时则返回错误码。但是C语言每个函数只允许一个直接的返回值,因此,任何有关可能错误的信息都必须编码到指针中。虽然一般而言,指针可以指向内存中的任意位置,而Linux支持的每个体系结构的虚拟地址空间中都有一个从虚拟地址0到至少4K的区域,该区域中没有任何有意义的信息。因此内核可以重用该地址范围来的编码错误码。       ERR_PTR是一个辅助宏

2011-06-29 21:26:00 1222

原创 内核线程

内核线程可以用户两种方法实现:1. 古老的方法创建内核线程:ret = kernel_thread(mykthread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD); 内核线程方法的实现static DECLARE_WAIT_QUEUE_HEAD(myevent_waitqueue);rwlock_t

2011-06-29 21:23:00 686

原创 问题集锦(56-57)

<br />Problem 56 awk代码实例<br /> <br />awk '# factorial: return factorial of user-supplied number<br />BEGIN {<br /># prompt user; use printf, not print, to avoid the newline<br />printf("Enter number: ")<br />}<br /># check that user enters a number<br />$1

2011-05-01 22:53:00 518

原创 问题集锦(54-55)

<br />Problem 54 An example for understanding Linux initcall mechanism?<br />Ans:<br /> <br />1. 源码<br />#include <stdio.h><br /> <br /> /*定义函数指针*/<br />typedef int (*initcall_t)(void);<br />/*申明外部变量,在ld的脚本文件中定义*/<br />extern initcall_t __initcall_start, _

2011-05-01 22:39:00 563

原创 问题集锦(52-53)

<br />Problem 52 Linux内核启动过程简述?<br />Ans:<br /> <br />1. BIOS启动阶段<br />    CPU在上电初始化时,指令寄存器CS:EIP总是被初始化为固定值,这就是CPU复位后的第一条指令的地址。对于32位地址总线的系统来说,4GB的物理空间至少被划分为两个部分,一部分是内存的地址空间,另外一部分地址空间用于对BIOS芯片存储单元进行寻址。x86复位后工作在实模式下,该模式下CPU的寻址空间为1MB。CS:IP的复位值是FFFF:0000,物理地址为

2011-05-01 22:29:00 878

原创 问题集锦(48-51)

<br />Problem 48 怎样为Linux内核打补丁包以及制作自己的补丁包?<br />Ans:<br /> <br />例子:<br />打补丁<br />bash>  cd /usr/src/linux-X.Y.Z/<br />bash>  bzip2 –dc ../X.Y.Z-mm2.bz2 | patch –p1<br />或patch –p1 < ../patch-x.y.z<br /> <br />卸载一个以前打的补丁:<br />patch –R –p1 < ../patch-x.y.

2011-05-01 22:19:00 760

原创 问题集锦(46-47)

<br />Poblem 46 A Makefile template/<br />Ans:<br /> <br />两级目录结构:<br />如:一级目录test , 二级目录<br />第一级目录中的Makefile:<br />//一级目录中的子目录<br />SUBDIRS = $(wildcard chapter_*) exercises<br /><br /> <br />all:<br />    for dir in $(SUBDIRS); /<br />    do /<br />

2011-03-18 21:41:00 597

原创 专题 4 通用函数库之调试功能封装

目标<br />设计一个函数库,封装五个函数,实现日志输出与断言判断等功能函数原型及其实现<br />2.1   格式化日志输出函数:PrintLog PrintTraceLog<br />原型:int PrintLog(FILE *pfile, const char *pformat, …);<br />功能说明:按照字符串pformat的内容,控制后继参数的数量和格式,并在文件流中输出。<br />原型:int PrintTraceLog(char *pformat, …);<br />功能说明:调用P

2011-02-25 23:11:00 790

Beginning Visual C++ 2008(含源码)

Iror Horton的作品,涵盖了VC2008的常见知识。包含标准C++和托管的C++, MFC以及WFP,总页数1394, 英文版。

2010-01-11

空空如也

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

TA关注的人

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