自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (56)
  • 收藏
  • 关注

原创 ARM Linux系统调用的原理

ARM Linux系统调用的原理操作系统为在用户态运行的进程与硬件设备进行交互提供了一组接口。在应用程序和硬件之间设置一个额外层具有很多优点。首先,这使得编程更加容易,把用户从学习硬件设备的低级编程特性中解放出来。其次,这极大地提高了系统的安全性,因为内核在试图满足某个请求之前在接口级就可以检查这种请求的正确性。最后,更重要的是这些接口使得程序具有可移植性,因为只要内核所提供的一组接口相同,那

2012-05-28 17:46:05 6719 1

转载 高效学习Linux驱动开发

前一篇我们谈到了如何高效学习Linux内核,现在我们开始另外一个话题,就是如何高效学习linux驱动开发。至于为什么会选择这样一个topic,主要是基于这样两个原因:第一个原因是:目前几乎所有的驱动开发方面的参考书,内容结构都是先介绍介绍什么是linux驱动,它分为哪些种类,然后是各种类型设备的驱动程序的内容细节。大都是只注重各种驱动本身的细节,而没有站在一个全局整体的角度讲解一下驱动开发的方

2012-05-22 11:11:26 2349

原创 linux设备模型详解

Linux 2.6内核的一个重要特色是提供了统一的内核设备模型。随着技术的不断进步,系统的拓扑结构越来越复杂,对智能电源管理、热插拔以及plug and play的支持要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,2.6内核开发了全新的设备模型。1. Sysfs文件系统Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并

2012-05-22 11:10:30 1468

原创 Linux 环境下的内核态与用户态

Linux使用了Ring3级别运行用户态,Ring0作为内核态,没有使用Ring1和Ring2。Ring3状态不能访问Ring0的地址空间,包括代码和数据。Linux进程的4GB地址空间,3G-4G部分大家是共享的,是内核态的地址空间,这里存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。用户运行一个程序,该程序所创建的进程开始是运行在用户态的,如果要执行文件操作

2012-05-22 10:21:49 1214

原创 进程的用户栈和内核栈

进程是程序的一次执行过程。用剧本和演出来类比,程序相当于剧本,而进程则相当于剧本的一次演出,舞台、灯光则相当于进程的运行环境。进程的堆栈每个进程都有自己的堆栈,内核在创建一个新的进程时,在创建进程控制块task_struct的同时,也为进程创建自己堆栈。一个进程 有2个堆栈,用户堆栈和系统堆栈;用户堆栈的空间指向用户地址空间,内核堆栈的空间指向内核地址空间。当进程在

2012-05-22 10:07:38 1432

原创 枚举类型

枚举为你在程序中定义的整型,枚举的定义以关键词enum开头,可能紧跟着一个标识符,且包含一系列可能的类型值,并且每一个均具有名子:  enum [identifier] {enumerator-list};下面的例子定义枚举类型enum color:  enum color {black, red, green, yellow, blue, white = 7, gray};

2012-05-21 15:43:31 1409

原创 优化程序-- -函数指针数组及驱动表程序解读

先需要了解函数指针数组的使用,依旧通过最简单最容易理解的例子来讲解。  首先看下面这个函数指针数组的使用实例。 1. #include 2. #include 3. 4. 5. int Sum(int a, int b) 6. { 7. return a + b; 8. } 9.

2012-05-21 15:08:45 1280

原创 typedef用法详解

也许新手用这个关键字不多,但它却是一个很有用的关键字,可以使代码模块化程度更好(即与其它代码的关联较少),在C++中还是实现Traits技术的基础,也是模板编程的基本语法之一。若说变量定义是为变量命名,而typedef(或称为类型定义)就是为类型命名。既然都是命名,那就会有很多类似的地方。而变量定义我想大家都会使用,因此类型定义也必然会使用。类型定义的语法可以归结为一句话:只要在变

2012-05-21 15:04:08 3132

原创 Linux虚拟文件系统(安装根文件系统)

安装根文件系统是系统初始化的关键部分。Linux内核允许根文件系统放在很多不同的地方,比如硬盘分区、软盘、通过NFS共享的远程文件系统以及保存在ramdisk中。内核要在变量ROOT_DEV中寻找包含根文件系统的磁盘主设备号。当编译内核时,或者像最初的启动装入程序传递一个合适的“root”选项时,根文件系统可以被指定为/dev目录下的一个设备文件。安装根文件系统分为两个阶段:1,内核安装特

2012-05-19 18:20:59 2187

原创 Linux虚拟文件系统之文件系统安装(sys_mount())

对于前面的根目录文件系统的安装中涉及到了mount系统调用的调用,这里我们考虑一个文件系统将被安装在一个已经安装文件系统之上的情形,即调用mount系统调用实现。mount系统调用被用来安装一个普通文件系统,他的服务例程为sys_mount()。 1. /*sys_mount系统调用*/ 2. /*dev_name为待安装设备的路径名; 3. dir_name为安装点

2012-05-19 18:17:11 2244

原创 Linux虚拟文件系统之文件系统卸载(sys_umount())

Linux中卸载文件系统由umount系统调用实现,入口函数为sys_umount()。较于文件系统的安装较为简单,下面是具体的实现。 1. /*sys_umont系统调用*/ 2. SYSCALL_DEFINE2(umount, char __user *, name, int, flags) 3. { 4. struct path path;

2012-05-19 18:13:44 2777

原创 Linux虚拟文件系统之文件打开(sys_open())

在文件读写之前,我们必须先打开文件。从应用程序的角度来看,这是通过标准库的open函数完成的,该函数返回一个文件描述符。内核中是由系统调用sys_open()函数完成。SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode){ long ret; if (force_o_largefile()

2012-05-19 18:06:18 2530

原创 Linux虚拟文件系统之文件读取(sys_read())

在文件成功打开之后,进程将使用内核提供的read和write系统调用,来读取或修改文件的数据。内核中文件读写操作的系统调用实现基本都一样,下面我们看看文件的读取。SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count){ struct file *file; ssize_t ret = -EB

2012-05-19 17:58:27 2599

原创 C语言文件操作函数大全

C语言文件操作函数大全11.fopen(打开文件) 相关函数 open,fclose 表头文件 #include 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件

2012-05-19 14:48:20 1017

转载 ARM处理器工作模式

1.1  ARM处理器工作模式ARM处理器共有7种工作模式,如表3-1所示:表3-1 ARM处理器工作模式处理器工作模式特权模式异常模式说明用户(user)模式  用户程序运行模式系统(system)模式该组模式下可以任意访问系统资源

2012-05-18 19:29:59 1123

原创 系统调用与软件中断SWI的实现

1  系统调用操作系统的主要功能是为应用程序的运行创建良好的环境,保障每个程序都可以最大化利用硬件资源,防止非法程序破坏其它应用程序执行环境,为了达到这个目的,操作系统会将硬件的操作权限交给内核来管理,用户程序不能随意使用硬件,使用硬件(对硬件寄存器进行读写)时要先向操作系统发出请求,操作系统内核帮助用户程序实现其操作,也就是说用户程序不会直接操作硬件,而是提供给用户程序一些具备预定功能的内核

2012-05-18 19:28:22 1360

原创 ARM处理器异常处理

1.1  ARM处理器异常处理所谓异常就是正常的用户程序被暂时中止,处理器就进入异常模式,例如响应一个来自外设的中断,或者当前程序非法访问内存地址都会进入相应异常模式。1.1.1  异常分类(1)复位异常当CPU刚上电时或按下reset重启键之后进入该异常,该异常在管理模式下处理。(2)一般/快速中断请求CPU和外部设备是分别独立的硬件执行单元,CPU对全部设备进行管理和资

2012-05-18 19:26:15 2412

转载 C语言关键字 - 铁布衫:const

铁布衫:const描述:相传C世界中出现了一件极品装备const,它能的出现,让天下所有的刺客,黑客都失业了,在它的保护下,所有的变量都可以完好无损。作用:const是constant的简写,表示海枯石栏,恒定不变,一旦相伴,永不“心”变。只要一个变量前面用const来修辞,就意味着该变量里的数据可以被访问,不能被修改。我们其实还可以给它起个更雅的名字叫:readonly。虽然理解起c

2012-05-18 19:01:25 1002

转载 C语言关键字 - 专一王子:volatile

专一王子:volatile描述:每个变量和他的名字一样很善变,有时候它善变是发自内心的,有时是外部因素决定的,只有volatile变量才会表里如一,因此获得了专一王子的美誉。作用:volatile字面意思是易挥发,易变化的意思,它修辞的变量表示该变量的值很容易由于外部因素发生改变,强烈请求编译器要老老实实的在每次对变量进行访问时去内存里读取。可能上面说的还不是很清楚,我们换个例子来说,你明

2012-05-18 17:52:16 1936

转载 C语言关键字 - auto和register

关键字概述很多朋友看到这儿可能会有疑问,往往其它讲C语言的书籍都是从HelloWorld,数据类型开始C语言学习的,为什么我们要从C语言的关键字开始呢?关于这点,我有两点需要说明:本章节面向的读者对象是有一定的C语言基础知识的朋友(至少应该学习过大学里的C语言程序设计等类似的课程) 本章节结合了作者多年嵌入式工作、研究、教学经验而作,由计算机底层硬件到上层软件设计融会贯通,中间有大量的

2012-05-18 17:46:29 4550

转载 C语言数组与指针详解

好多同学都说:“老师,我看到指针就晕!”,说实话,见过晕血的,见过晕车的,晕指针的到是第一次听说!       我们先来分析一下晕车的原理,再来对比一下为什么晕指针。       晕车,是因为耳朵里的一个器官对外界的振动太敏感,导致身体调节功能紊乱,系统不能正常工作,轻则,晕点,中则,吐点,重则,“重启”(倒地)。时间长了,知道自己晕车,于是,看到公交车,TAXI,火车,自行车,都晕!这样

2012-05-18 17:35:12 2262 5

原创 ARM--嵌入式系统启动例程

通常PC在开机之后,会进入带有PC机厂商信息的BIOS画面,并且会显示出当前PC机的硬件信息,比如:内存大小,CPU信息等,它其实是PC机启动之后运行的第一段程序,它主要完成一些基本硬件初始化操作和硬件检测工作,保证拥有操作系统正常运行的软硬件环境,随后会加载并且启动操作系统。该段小程序是烧制到主板上的BIOS存储硬件里的。由此可见计算机系统在启动过程中必须依赖软硬件,在嵌入式系统中同样需要软硬件

2012-05-18 09:48:02 2339 1

转载 代码的加载地址与运行地址

下面内容是技术讨论群里的读者的提问:问:程序下载到NOR中,在ADS中加载地址却是0x30000000,是SDRAM的地址,难道是调试器自动搬运的?答:一个地址是加载 地址一个是运行地址不一样的你下载到Nor里,是加载地址,ADS里ROBase设置的是运行地址问:奥加载地址是从0开始的吧答:Yes问:是谁将其复制到RAM中的啊?A

2012-05-18 09:32:30 1142

原创 Linux内核实践 之 ---- 序列文件

seq_file机制提供了标准的例程,使得顺序文件的处理好不费力。小的文件系统中的文件,通常用户层是从头到尾读取的,其内容可能是遍历一些数据项创建的。Seq_file机制容许用最小代价实现此类文件,无论名称如何,但顺序文件是可以进行定为操作的,但其实现不怎么高效。顺序访问,即逐个访问读取数据项,显然是首选的访问模式。某个方面具有优势,通常会在其他方面付出代价。       下面我们一步一步

2012-05-17 13:35:49 1815

原创 memchr 函数

原型:extern void *memchr(void *buf, char ch, unsigned count);用法:#include    功能:从buf所指内存区域的前count个字节查找字符ch。   说明:当第一次遇到字符ch时停止查找。如果成功,返回指向字符ch的指针;否则返回NULL。   举例:// memchr.c   #include

2012-05-10 16:22:09 4615

原创 内存分配函数

函数原型:extern void *calloc(int num_elems, int elem_size)参数说明:num_elems表示为分配内存的元素的个数,elem_size表示元素所占的字节数。        所在库名:#include   函数功能:为具有num_elems个长度为elem_size元素的数组分配内存。  返回说明:返回void *类型。

2012-05-10 16:03:03 1710

原创 memcpy,memccpy,memmove函数

函数原型:extern void *memcpy(void *dest, void *src, unsigned int count)参数说明:dest为目的字符串,src为源字符串,count为要拷贝的字节数。        所在库名:#include   函数功能:将字符串src中的前n个字节拷贝到dest中。(strcpy 只能拷贝字符串)  返回说明:src和d

2012-05-10 16:01:22 1205

原创 memcmp,memicmp函数

函数原型:extern int memcmp(void *str1, void *str2, unsigned int n)参数说明:str1和str2为指定作比较的字符串,比较两个字符串的前n个字节。        所在库名:#include   函数功能:比较字符串str1和str2在内存区域中的的前n个字节是否相同。  返回说明:当str1str12时,返回值>0

2012-05-10 16:00:32 8338

原创 memset用法详解

memset用法详解memest原型 (please type "man memset" in your shell) void *memset(void *s,  int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。常见的三种错误第一: 搞反了c 和 n的位置. 一定要记住 如果要把

2012-05-10 16:00:11 1006

原创 strset函数

函数原型:extern char *strset(char *str, char character)参数说明:str为源字符串,即将要被操作的字符串,character为一个字符。        所在库名:#include   函数功能:将字符串str中所有的字符都设置成为指定的字符character。  返回说明:返回所有字符都设置为character后的字符串的指

2012-05-10 15:59:01 3833

原创 strrev函数

函数原型:extern char *strrev(char *str)参数说明:str为源字符串,即待逆置的字符串。        所在库名:#include   函数功能:实现字符串str的逆置。  返回说明:返回逆置字符串的指针。其它说明:暂时无。实例:#include string.h>#include stdio.h>int main

2012-05-10 15:58:31 1956

原创 strpbrk函数

函数原型:extern char *strpbrk(char *str1, char *str2)参数说明:str1待比较的字符串,str2为指定被搜索的字符串。        所在库名:#include   函数功能:比较字符串str1和str2中是否有相同的字符,如果有,则返回该字符在str1中的位置的指针。  返回说明:返回指针,搜索到的字符在str1中的索引位置

2012-05-10 15:57:53 18285 5

原创 strlwr,strupr函数

函数原型:extern char *strlwr(char *str)                     extern char *strupr(char *s)参数说明:str为要转换的字符串。        所在库名:#include   函数功能:将字符串str中的大(小)写字母转换成为小(大)写字母,其它的不进行转换。  返回说明:返回转换后的字符串的

2012-05-10 15:52:27 9420

原创 strdup函数

函数原型:extern char *strdup(char *str)参数说明:str待复制的字符串。        所在库名:#include   函数功能:实现复制字符串str。  返回说明:返回复制的新字符串的指针,复制失败返回NULL。其它说明:暂时无。实例:#include string.h>#include stdio.h>int m

2012-05-10 15:51:14 6369 2

原创 strcspn函数

ohn,he like writing!";     int inttemp;    inttemp=strcspn(str1,str2);   //将str2中的每个字符均与str1中的匹配,如果这个字符在str1中出现过,则返回这个字符在str1中的索引值     printf("The first index of the character both in str1 a

2012-05-10 15:50:17 2532 1

原创 strlen函数

函数原型:extern int strlen(char *str)参数说明:str要被计算的字符串。        所在库名:#include   函数功能:计算字符串str的长度,但是不包含“/0”。  返回说明:返回字符串str的长度,是一个整型值。其它说明:暂时无。实例:#include string.h>#include stdio.h>

2012-05-10 15:48:25 1327

原创 strchr函数

函数原型:extern char *strchr(char *str,char character)参数说明:str为一个字符串的指针,character为一个待查找字符。        所在库名:#include   函数功能:从字符串str中寻找字符character第一次出现的位置。  返回说明:返回指向第一次出现字符character位置的指针,如果没找到则返回

2012-05-10 15:46:28 43488

原创 strcmp函数 strncmp函数 strcmpi,stricmp函数

函数原型:extern int strcmp(char *str1,char * str2)参数说明:str1为第一个要比较的字符串,str2为第二个要比较的字符串。        所在库名:#include   函数功能:比较字符串str1和str2。  返回说明:返回整数值:当str1str2时,返回值>0。这种比较是按照字符的字典序进行比较。其它说明:暂时无。

2012-05-10 15:42:01 12692

原创 strcpy,strncpy函数

函数原型:extern char *strcpy(char *dest,char *src)                     或者extern char *stpcpy(char *dest,char *src)参数说明:dest为一个目的字符串的指针,src为一个源字符串的指针。        所在库名:#include   函数功能:把src所指的以“/0”结束

2012-05-10 15:38:53 2865 1

原创 strcat函数 strncat函数

函数原型:extern char *strcat(char *dest,char *src)参数说明:dest为一个目的字符串的指针,即被连接的字符串(在前),src为一个源字符串的指针(在后)。        所在库名:#include   函数功能:把src所指字符串添加到dest结尾处实现字符串的连接,连接过程覆盖dest结尾处的'/0'。  返回说明:src和d

2012-05-10 15:37:04 14766

UNIX环境高级编程

UNIX环境高级编程

2012-01-31

android内核移植文档整理

android内核移植文档整理,我移植时参考过的文档,论文,资料,等待资料.学习andoid内核移植的好文章

2011-12-26

Uboot启动和移植

Uboot启动和移植

2011-12-25

uboot分析和笔记

uboot分析和笔记 详细的分析 uboot分析和笔记 详细的分析

2011-12-25

Android面试题

Android面试题

2011-12-25

android底层相关模块介绍

android底层相关模块介绍供14章 包括android驱动所有模块,学习的好资料啊

2011-12-25

Android核心分析

Android核心分析 Zygote Service - maxleng的专栏 Service深入分析 IPC框架分析 Binder,Service,Service manager

2011-12-25

Android编译系统

Android_build_systemAndroid_build_systemAndroid_build_system

2011-12-25

android编译大全_完全指南

android编译大全_完全指南

2011-12-25

Android的编译系统

Android的编译系统

2011-12-25

FPGA学习经验

FPGA学习经验共享FPGA学习经验共享FPGA学习经验共享FPGA学习经验共享

2011-12-25

matlab书籍整理

matlab书籍整理

2011-12-25

超声波测距资料打包

超声波测距资料

2011-12-25

嵌入式系统设计开发流程

嵌入式系统设计开发流程嵌入式系统设计开发流程嵌入式系统设计开发流程嵌入式系统设计开发流程

2011-12-25

ucos 2内核结构

ucos 2内核结构

2011-12-25

嵌入式操作系统介绍

嵌入式操作系统介绍

2011-12-25

任务管理 时间管理 内存管理

任务管理 时间管理 内存管理

2011-12-25

uCOSII移植

uCOSII移植

2011-12-25

C语言实现FFT

C语言实现FFT

2011-12-25

C2000与单片机对比分析

C2000与单片机对比分析

2011-12-25

基于DSP的FFT算法实现

基于DSP的FFT算法实现

2011-12-25

TMS320C2000 DSP硬件结构

TMS320C2000 DSP硬件结构

2011-12-25

TMS320C2000 DSP指令系统

TMS320C2000 DSP指令系统

2011-12-25

CCS的技术概述

CCS的技术概述

2011-12-25

做DSP最应该懂得157个问题

做DSP最应该懂得157个问题

2011-12-25

基于TMS320C240湿度传感器测试系统设计

基于TMS320C240湿度传感器测试系统设计

2011-12-25

Jabber(XMPP)服务协议的概述中文版

Jabber(XMPP)服务协议的概述中文版

2011-12-25

AVR实现MP3,歌曲放在U盘.

AVR实现MP3,歌曲放在U盘,原理图,代码都有,还有说明哦

2011-12-25

XMPP协议简介

XMPP协议简介

2011-12-25

佛山网通EPON的FTTH工程方案设计

如今,更多用户关注多样化、个性化的通信服务,宽带服务的需求已经上升到了一个新的台阶。随着IPTV视频组播、点播业务的全面展开,对接入网提出了更高的带宽需求。 现有宽带接入方式,如xDSL,已越来越不能满足用户高带宽、多业务接入的需求。随着光接入技术的发展,光纤到户的综合成本比以前有大幅度下降。目前进行FTTH技术和业务的试验条件已经具备。 本文主要讨论了佛山网通EPON的FTTH工程设计方案,对工程涉及的试验业务、网络结构、小区布线、带宽设计、IP地址规划、VLAN划分、设备特性、ODN设置等进行了详细的描述,并对该工程采用EPON的FTTH技术进行了详细的分析。本次试验工程为佛山进行大规模的FTTH商用奠定了基础。

2011-12-25

03_Android的Linux内核与驱动程序

03_Android的Linux内核与驱动程序

2011-12-25

BootLoader_与Linux_内核的参数传递

BootLoader_与Linux_内核的参数传递

2011-12-25

linux 内核启动过程以及挂载android 根文件系统的过程

linux 内核启动过程以及挂载android 根文件系统的过程

2011-12-25

Eclipse_OpenOCD_OpenJTAGv3嵌入式开发教程

Eclipse_OpenOCD_OpenJTAGv3嵌入式开发教程Linux

2011-12-25

超宽带无线通信技术 ppt

超宽带无线通信技术 超宽带无线通信技术

2022-09-11

ARM---Cortex-A8处理器

ARM---Cortex-A8处理器, PPT版本, 非常好的参考资料。 欢迎下载 Cortex-A8处理器 技术特点; Cortex-A8内部 功能及特点; Cortex-A8内核工作模式; Cortex-A8存储系统。

2022-09-11

opencl SVM例程

opencl SVM例程

2016-08-16

linux设备启动char_dev2

linux设备启动char_dev2

2012-01-31

linux设备启动char_dev1

linux设备启动char_dev

2012-01-31

linux字符设备驱动

linux字符设备驱动

2012-01-31

空空如也

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

TA关注的人

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