自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(194)
  • 收藏
  • 关注

转载 彻底搞定C语言指针详解-完整版-时候初学者-必备

http://blog.chinaunix.net/uid-22889411-id-59688.html1.语言中变量的实质要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧!先来理解理解内存空间吧!请看下图:内存地址→  6      7   8      9   10      11      12       13

2016-03-29 16:17:56 622

转载 嵌入式Linux之我行——S3C2440上MMC/SD卡驱动实例开发讲解(一)

http://blog.ednchina.com/mcuandme/1787530/Message.aspx http://blog.chinaunix.net/u3/101649/showart_2232724.html嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处

2016-03-29 14:12:34 1906

转载 关于linux mmc/sd驱动程序架构

关于linux mmc/sd驱动程序架构今天花了时间简单看了mmc/sd部门内容和代码,我觉得形式上,这个部分和i2c非常相似系统也是分成core层,host层(对应i2c的adapter),设备层如果这样讲,那么core层主要功能应该是提供host注册,总线注册,设备注册的几个方法以及所谓sdio总线接口的算法了。host层已经是注册一个platform设备,其中应该提供主要sd

2016-03-29 13:42:00 1349

原创 linux内核串口控制器注册以及收发

我们看到Linux dev目录下面ttyS系列的串口设备的终端,现在用一个uart 控制器的程序来分析下怎么实现的首先是定义了uart driverstatic struct uart_driver XX_uart_driver = {.owner = THIS_MODULE,.driver_name = XX_UART_DEV_NAME, //名字,实际是uart.d

2016-03-29 11:19:34 1614

转载 __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程 )

先看下简单的初始代码:注意其编译运行后的结果。root@xuanfei-desktop:~/cpropram/2# cat global.h //头文件#ifndef CLOBAL_H        #define GLOBAL_H        #include         int funca(void);        int funcb(void);#en

2016-03-28 19:09:37 361

转载 可变参数(...)学习笔记

http://topic.csdn.net/t/20041124/09/3582660.html原文链接 最近应CSDN的邀请,C/C++值班室的几位兄弟为C++电子杂志写了一些文章,现将我的稿件预先刊发在论坛上,请兄弟们批评指正。也欢迎大家为CSDN c/c++电子杂志专刊投稿。杂志详情请见http://emag.csdn.net/                      

2016-03-28 19:08:23 536

转载 数组与指针---都是"退化"惹的祸

个人的浅显认识, 欢迎批评指正.1. 什么是数组类型?下面是C99中原话:An array type describes a contiguously allocated nonempty set of objects with aparticular member object type, called the element type.36) Array types a

2016-03-28 19:06:41 417

转载 数组名和数组名取地址的区别

from:http://blog.csdn.net/daniel_ice/article/details/6857019以下代码会打印出什么样的日志呢?[cpp] view plaincopy#include     int a[2] = {1,2};  int main(){         

2016-03-28 19:05:40 291

转载 嵌入式Linux编译器gcc使用

from: http://blog.csdn.net/jyjmc/article/details/5278130At first, GCC is used for GNU C Compiler. At present,it supports JAVA Ada C++ and so on. GCC编译流程分为:1.Pre-Processing(预处理)

2016-03-28 19:03:57 506

转载 大尾端小尾端

from:big endian:大尾端,也称大端(高位)优先存储。   little endian:小尾端,也称小端(低位)优先存储。    如下00000000 00000000 00000000 00000001的存储          大尾端: 00000000 00000000 00000000 00000001

2016-03-28 19:02:59 667

转载 C语言的标准

from: http://blog.csdn.net/gogor/article/details/45626601.ANSI/ISO C     ANSI C是C语言的标准,任何C语言的编译器都在ANSI C的基础上扩充。1990年,国际化标准组织ISO(Intrernational StandardOrganization)接受了ANSI C(C89)为ISO

2016-03-28 19:01:46 396

转载 linux的内建函数

转自: http://blog.sina.com.cn/s/blog_4b8ad9530100cl2v.html内建函数是与语言相关的(或者更准确地说是编译器相关吧),作用应该是跟关键字一样,无需申明,编译器就知道它是什么东西。同样,无需#include任何头文件,只要语法符合,编译器就知道去哪儿链接相关代码!另外,如果显式申明的函数与内建函数同名,内建函数将会

2016-03-28 18:59:16 489

转载 伙伴系统的概述 (一)

伙伴系统的概述        Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生。Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题,在这里我们先讨论外部碎片问题。避免外部碎片的方法有两种:一种是之前介绍过的利用非连续内存的分配;另外一种则是用一种有效的方法来监视内存,保证在内核只要申请一小块内存的情况下,不会从大块的连续空

2016-03-28 17:31:14 325

转载 Linux操作系统多线程信号总结

linux 多线程信号编程总结linux 多线程信号总结(一)1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难以获知。2 signal函数BSD/Linux的实现并不在信号处理函数调用时,恢复信号的处理为默认,而是在信号处理时阻塞此信号,直到信号处理函数返回。其他

2016-03-28 17:17:44 328

转载 多线程---自旋锁、互斥锁区别

何谓自旋锁?它是为为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环

2016-03-28 17:16:46 417

转载 Linux操作系统多线程信号总结

linux 多线程信号编程总结linux 多线程信号总结(一)1. 在多线程环境下,产生的信号是传递给整个进程的,一般而言,所有线程都有机会收到这个信号,进程在收到信号的的线程上下文执行信号处理函数,具体是哪个线程执行的难以获知。2 signal函数BSD/Linux的实现并不在信号处理函数调用时,恢复信号的处理为默认,而是在信号处理时阻塞此信号,直到信号处理函数返回。其他

2016-03-28 17:14:47 449

转载 Linux设备驱动之——I2C总线

目录(?)[-]I2C子系统i2c-dev总线驱动2  I2C子系统2.1 LinuxI2C子系统架构在内核中已经提供I2C子系统,所以在做I2C驱动之前,就必须要熟悉该子系统。2.2 三大组成部分1、I2C核心(i2c-core)I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(algorit

2016-03-28 16:39:53 537

转载 Linux SPI总线和设备驱动架构之一:系统概述

目录(?)[-]硬件结构工作时序软件架构SPI控制器驱动程序SPI通用接口封装层SPI协议驱动程序SPI通用设备驱动程序SPI是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器、传感器、存储设备,SPI设备分为主设备和从设备两种,用于通信和控制的四根线分别是:

2016-03-28 16:37:53 455

转载 read 系统调用剖析

目录(?)[-]Read 系统调用在用户空间中的处理过程Read 系统调用在核心空间中的处理过程Read 系统调用在核心空间中处理的层次模型图1 read 系统调用在核心空间中的处理层次相关的内核数据结构数据结构之间的关系图2 数据结构关系图前提条件准备清单1 sys_open 函数代码图3 file 对象和当前进程描述符之间的关系虚拟文件系统层

2016-03-28 16:21:02 479

转载 file结构中的private_data

这个是Linux下连接VFS文件系统框架和不同文件/文件系统底层实现之间的一个核心数据结构,虽然它只是一个指针,但是一个指针可以解决所有问题。我们回想一下用户态线程的创建结构,函数的入口同样是一个void*指针,而千言万语汇成一根指针,诗可以兴、可以观、可以群、可以怨,可以解决所有问题。因为file是VFS框架的一个基本概念,它要支持文件操作结构,例如open/read/write/relea

2016-03-28 16:13:21 1256

转载 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联

学习Linux设备驱动开发的过程中自然会遇到字符设备驱动、平台设备驱动、设备驱动模型和sysfs等相关概念和技术。对于初学者来说会非常困惑,甚至对Linux有一定基础的工程师而言,能够较好理解这些相关技术也相对不错了。要深刻理解其中的原理需要非常熟悉设备驱动相关的框架和模型代码。网络上有关这些技术的文章不少,但多是对其中的某一点进行阐述,很难找到对这些技术进行比较和关联的分析。对于开发者而言,能够

2016-03-28 16:00:28 540

转载 Linux下面一个简单的虚拟platform驱动

/*  * Yao.GUET * http://blog.csdn.net/Yao_GUET * Linux下面一个简单的虚拟platform驱动 */在Linux之中,约定如果设备不属于任何的总线,则可以把它注册为虚拟的platform设备。下面就简单来学习一下一个简单的platform设备是怎么创建出来的。一般注册platform驱动的步骤是

2016-03-28 15:59:33 353

转载 linux /sys目录下各个子目录的具体说明

/sys下的子目录内容 # ls /sys/block     class     firmware  kernel    powerbus       devices   fs        module-----------------------------------------------------------------------------

2016-03-28 15:58:14 930

转载 /dev、/sys/devices 和 /sys/dev 之间区别

/dev,设备文件存储目录,应用程序通过对这些文件的读写和控制,可以访问实际的设备;/sys/devices 目录,按照设备挂接的总线类型,组织成层次结构,保存了系统所有的设备;是文件系统管理设备的最重要的目录结构;这是内核设备按总线类型分层放置的目录结构, devices 中的所有设备都是连接于某种总线之下,在这里的每一种具体总线之下可以找到每一个具体设备的符号链接,它也是构

2016-03-28 15:57:16 649

转载 深入探索 Kdump,第 1 部分:带你走进 Kdump 的世界

目录(?)[-]Kdump 的基本概念什么是 kexec什么是 kdump如何使用 kdump如何访问捕获内存kdump 的优势Kdump 实现流程图 1 RHEL62 执行流程图 2 sles11 执行流程配置 kdump安装软件包和实用程序参数相关设置启动 kdump 服务测试配置是否有效载入转储捕获内核后记Kdump

2016-03-28 15:56:21 732

转载 linux内核线程死锁或死循环(soft lockup)之后如何让系统宕机重启

在开发内核模块或驱动时,如果处理失误,导致内核线程中出现死锁或者死循环,你会发现,除了重启之外,你没有任何可以做的。这时你的输入不起任何作用,终端(不是指远程的ssh工具)只会在那重复的输出类似“BUG: soft lockup - CPU#0 stuck for 67s! [fclustertool:2043]”,更无奈的是你重启之后导致系统挂起的堆栈信息也看不到,你所能做的就是一遍遍的加调试信

2016-03-28 15:49:18 3296

转载 vmlinux,vmlinuz,uImage,zImage,bzImage之间的异同

转自:http://www.cnblogs.com/hnrainll/category/283519.html linux内核镜像格式一、Linux内核镜像格式     Linux内核有多种格式的镜像,包括vmlinux、Image、zImage、bzImage、uImage、xipImage、bootpImage等.(1)kernel镜像格式:vmlinux   

2016-03-28 15:44:09 572

转载 Linux系统脚本分析之rc.sysinit

#!/bin/bash## /etc/rc.d/rc.sysinit - run once at boot time#  # # Rerun ourselves through initlog                                                // 通过 /sbin/initlog 命令重新运行自己if [ -z "$IN_I

2016-03-28 15:42:58 638

转载 详解/etc/inittab文件

当内核初始化后,就会启动第一个进程 init,init进程会进行一系列的系统初始化工作,init是根据什么来进行初始化的?init 会读取/etc/inittab文件(针对CentOS 5 系列),执行里面的内容来进行初始化工作,这个文件是一定的格式。获取inittab文件的帮助,输入 man inittab 命令过滤掉空白行和以#号开始的行,内容如下:[root@s

2016-03-28 15:41:23 456

转载 高端内存

目录(?)[-]一 什么是高端内存二内核如何管理高端内存三 永久映射区permanet kernel mappings注:本文提及的物理地址空间可以理解为就是物理内存,但是在某些情况下,把他们理解为物理内存是不对的。本文讨论的环境是NON-PAE的i386平台,内核版本2.6.31-14一. 什么是高端内存linux中内核使用3G-4G的线性地址空间,也就是说总

2016-03-28 15:39:11 1194

转载 高端内存——永久映射区(permanet kernel mappings)

闲着无聊,把一些东西写下来给大家分享下吧,有什么不对的,欢迎质疑注:本文提及的物理地址空间可以理解为就是物理内存,但是在某些情况下,把他们理解为物理内存是不对的。本文讨论的环境是NON-PAE的i386平台,内核版本2.6.31-14一. 什么是高端内存linux中内核使用3G-4G的线性地址空间,也就是说总共只有1G的地址空间可以用来映射物理地址空间。但是,如果内存大于1G的

2016-03-28 15:37:43 1256

转载 内存分配——深入浅出

一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具体的物理页面,它对应我们机器上的物理内存。这里要提到一个很重要的概念,内存的延迟分配。Linux内核在用户申请内存的时候,只是给它分配

2016-03-28 15:36:37 596

转载 linux的物理内存与线性地址空间布局--2

Linux内存线性地址空间大小为4GB,分为2个部分:用户空间部分(通常是3G)和内核空间部分(通常是1G)。在此我们主要关注内核地址空间部分。 内核通过内核页全局目录来管理所有的物理内存,由于线形地址前3G空间为用户使用,内核页全局目录前768项(刚好3G)除0、1两项外全部为0,后256项(1G)用来管理所有的物理内存。内核页全局目录在编译时静态地定义为swapper_pg_d

2016-03-28 15:34:32 583

转载 linux的物理内存与线性地址空间布局--1

[-]n 物理存储空间布局n 虚拟存储空间布局在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB的物理内存根据不同需求映射到整个4GB的虚拟存储空间中。n

2016-03-28 15:33:22 473

转载 linux内存寻址解析

目录(?)[-]硬件中的分段Linux中的分段硬件中的分页Linux中的分页Linux中物理页面的映射页面的映射总结1.内存地址1.逻辑地址:每一个逻辑地址都有一个段和偏移量组成。2.线性地址:也叫虚拟地址,是一个32位无符号整数,可以用来表示高达4GB的地址,值得范围从0x00000000到0xffffffff。3.物理地址:用于内存芯片级

2016-03-28 15:31:01 764

转载 Linux内核访问外设I/O资源的方式

Linux内核访问外设I/O资源的方式Author: DongasDate: 08-08-02我们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射到内核空间中来,然后才能在内核空间中访问它。Linux内核访问外设I/O内存资源的方式有两种:动态映射(ioremap)和静态映射(map_desc)。

2016-03-28 15:26:54 429

转载 ioremap函数原理

void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) 入口: phys_addr:要映射的起始的IO地址; size:要映射的空间的大小; flags:要映射的IO空间的和权限有关的标志; 功能: 将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问; 

2016-03-28 15:09:34 1021

转载 linux地址转换

地址转换上图揭示了进程空间、内核空间与物理地址之间的转换关系。在linux中,物理地址用page结构 表示,物理内存在初始化时已经生成了page结构管理,其他地址空间则需要生成page再进行管理(ioremap)。物理地址可以被映射到内核空间或进程空间,也可以从内核空间或进程用户空间解除物理地址(page)。所有转换中,只有mmap可以在进程中使用,其他都是内核函数

2016-03-28 15:03:23 426

转载 进程组,会话,控制终端

from:  http://chongsoft.blogchina.com/chongsoft/6275856.html阐述如下几个概念 1) 进程组 2) 会话 3) 控制终端 前面的概念来源于前人,我只是站在前人的肩膀上结合内核中的实现加深概念理解。 1.概念: a)进程组 Shell 上的一条

2016-03-28 14:59:37 383

转载 在内核窥视用户态

在内核窥视用户态首先,环境:VMware Server上运行的ubuntu10.4,arch为x86_64。先看下面这个程序:#include #include #include int dataA;char bufA[1000];int main(){        int d

2016-03-28 14:56:56 280

空空如也

空空如也

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

TA关注的人

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