自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (2)
  • 收藏
  • 关注

转载 linux文件系统如何进行文件存取

乍一看,这个题目好像有点小儿科。写文件嘛echo hello > /tmp/foo读文件嘛cat /tmp/foo对于普通文件的存取,的确可以使用上面的方法。但是在linux操作系统上,一 切都是文件。除了普通文件,还包括:目录,符号链接,IPC Endpoints(如pipe,unix socket)和设备文件(块设备,字符设备)。当然,本文的重点不在

2015-08-04 16:28:03 623

转载 tasklet原理

tasklet是Linux内核中“可延迟执行”机制、或“中断下半部”的一种。基于软中断实现,但比软中断灵活,tasklet有的地方翻译作“任务蕾”,大部分书籍没找到合适的词汇去翻译它。本篇博客主要介绍tasklet的设计原理、使用方法。本篇博客耗时8小时。一、tasklet解决什么问题?先看下tasklet在一些书籍上的介绍:tasklet是I/O驱动程序中实现

2015-07-09 08:36:39 3427

转载 STL系列之六 set与hash_set

set和hash_set是STL中比较重要的容器,有必要对其进行深入了解。在STL中,set是以红黑树(RB-tree)作为底层数据结构的,hash_set是以Hash table(哈希表)作为底层数据结构的。set可以在时间复杂度为O(logN)情况下插入、删除和查找数据。hash_set操作的时间复杂度则比较复杂,这取决于哈希函数和哈希表的负载情况。下面列出set和hash_set的常用函数:

2015-07-06 15:14:58 365

转载 Linux命令

http://itlab.idcquan.com/linux/special/linuxcom/Index.html

2015-06-26 13:59:56 245

转载 i2c驱动

今天我们来一起学习,arm裸机中对I2C设备学习。包括GPIO,IIC控制器学习。一、总体架构图二、I2C操作的一般步骤2.1  查看s5pv210开发板的I2C相关的硬件原理图开发板上IIC实际连接电路,AT24C02为EEPROM,大小为2k位,256字节核心板对应的原理图2.2  设置GPIO寄存器为I2C功能

2015-06-11 13:55:45 414

转载 一些C语言题

[预处理器(Preprocessor)] 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 *365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算

2015-06-09 14:03:39 531

转载 I2C

2  I2C子系统2.1 LinuxI2C子系统架构在内核中已经提供I2C子系统,所以在做I2C驱动之前,就必须要熟悉该子系统。2.2 三大组成部分1、I2C核心(i2c-core)I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(algorithm)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。

2015-06-09 13:14:19 311

转载 ARM MMU工作原理剖析

一、MMU的产生      许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成

2015-05-18 23:19:45 272

转载 source insight 的一些快捷键

Jump ToDefinition           跳到定义出(也就是声明)     : Ctrl+=, Ctrl+L Click (select), Ctrl+Double L ClickGoBack                 后退    : Alt+,, Thumb 1 ClickGoForward              向前    : Alt+., Thumb

2015-05-13 08:35:54 360

转载 内核中的static inline

GCC的static inline定义很容易理解:你可以把它认为是一个static的函数,加上了inline的属性。这个函数大部分表现和普通的static函数一样,只 不过在调用这种函数的时候,gcc会在其调用处将其汇编码展开编译而不为这个函数生成独立的汇编码。除了以下几种情况外: *函数的地址被使用的时候。如通过函数指针对函数进行了间接调用。这种情况下就不得不为static inline函数

2015-05-13 08:32:58 455

转载 白话经典算法系列之三 希尔排序的实现

希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很

2015-05-08 14:11:24 354

转载 linux下的内核测试工具——perf使用简介

摘要:Perf是Linux kernel自带的系统性能优化工具。Perf的优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature。pef可以用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能。本文来源:http://blog.csdn.net/trochiluses/article/details/10

2015-05-04 14:18:47 1138

转载 自旋锁spin_lock和raw_spin_lock

1.  临界区(Critical Section)我们知道,临界区是指某个代码区间,在该区间中需要访问某些共享的数据对象,又或者是总线,硬件寄存器等,通常这段代码区间的范围要控制在尽可能小的范围内。临界区内需要对这些数据对象和硬件对象的访问进行保护,保证在退出临界区前不会被临界区外的代码对这些对象进行修改。出现以下几种情形时,我们需要使用临界区进行保护:(1)  在可以抢占(p

2015-05-04 14:04:28 1602

转载 Linux输入子系统:输入设备编程指南 -- input-programming.txt

输入设备编程指南(Programming input drivers)~~~~~~~~~~~~~~~~~~~~~~~~~1. 新建一个输入设备驱动程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1.0 一个最简单的例子~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2015-05-04 11:47:52 252

原创 Linux驱动之按键读取心得

当一个进程睡眠, 它这样做以期望某些条件在以后会成真.任何睡眠的进程必须在它再次醒来时检查来确保它在等待的条件真正为真. 最常用的函数为:    wait_event_interruptible(queue, condition)其中queue 是要用的等待队列头. 注意它是"通过值"传递的. 条件是一个被这个宏在睡眠前后所求值的任意的布尔表达式; 直到条件求值为真值, 进程继续睡眠。

2015-05-02 23:37:43 451

转载 20个 Unix/Linux 命令技巧

删除一个大文件我在生产服务器上有一个很大的200GB的日志文件需要删除。我的rm和ls命令已经崩溃,我担心这是由于巨大的磁盘IO造成的,要删除这个大文件,输入:12345>/path/to/file.log# 或使用如下格式: > /path/to/file.log# 然

2015-04-23 09:17:00 231

转载 Pthread 多线程总结

1.     Thread由下面部分组成:a.     Thread IDb.     Stackc.     Policyd.     Signal maske.     Errnof.      Thread-Specific Data3 Thread Identification1.     pthread_t用于表示Thread ID,具体内容根据实现的不同

2015-04-22 09:11:17 400

转载 Linux时间子系统之五:低分辨率定时器的原理和实现

利用定时器,我们可以设定在未来的某一时刻,触发一个特定的事件。所谓低分辨率定时器,是指这种定时器的计时单位基于jiffies值的计数,也就是说,它的精度只有1/HZ,假如你的内核配置的HZ是1000,那意味着系统中的低分辨率定时器的精度就是1ms。早期的内核版本中,内核并不支持高精度定时器,理所当然只能使用这种低分辨率定时器,我们有时候把这种基于HZ的定时器机制成为时间轮:time wheel。虽

2015-04-17 11:05:18 255

转载 宏定义中的#,##

1、在一个预处理器宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组。(原文:When you put a # before an argument in a preprocessor macro, the preprocessor turns that argument into a character array. This,combined with the fact

2015-04-15 13:31:35 377

转载 linux内核线程、轻量级进程和用户进程

转载:http://www.cnitblog.com/tarius.wu/articles/2277.html转载:http://www.fansoo.com/blog/2011/kernel-threads-lightweight-processes-threads-and-linuxthreads-library-users/内核线程内核线程只运行在内核态,不受用户

2015-04-14 09:52:41 335

转载 mod_timer()

Namemod_timer — modify a timer's timeoutSynopsisint mod_timer(struct timer_list * timer, unsigned long expires); Argumentstimerthe timer to be modif

2015-04-08 16:16:58 685

转载 nam问题

1.将nam下configure 中ZLIB版本号改为 和  ns-allinone-2.33中zlib版本一样2.[code omitted because of length]: no event type or button # or keysym    while executing"bind Listbox {%W yview scroll [expr

2015-04-03 11:04:33 518

原创 linux下Ns2安装

1.下载ns-allinone-2.33.tar.gz2. 解压 进入ns-allinone-2.33目录3. 运行./install命令4.出现错误一、ld -shared-o libotcl.so otcl.ootcl.o: Infunction `OTclDispatch':/usr/ns-allinone-2.34/otcl-1.13/otcl.c:495:unde

2015-04-02 10:50:34 450

转载 软件开发过程中的C语言细节记录

1.在linux 2.6.38内核的driver/input/keyboard目录下的gpio_keys.c源码中的486行开始如下for (i = 0; i  pdata->nbuttons; i++) {        struct gpio_keys_button *button = &pdata->buttons[i];        struct gpio_but

2015-04-01 10:57:57 350

转载 U-Boot启动过程完全分析

1.1       U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:       (1)第一阶段的功能Ø  硬件设备初始化Ø  加载U-Boot第二阶段代码到RAM空间Ø  设置好栈Ø  跳转到第二阶段代码入口       (2)第二阶段的功能Ø  初始化本阶段使用的硬件设备Ø  检测系统内存映射Ø  将内核从Fla

2015-03-30 09:59:16 259

转载 Linux内核设计与实现(8)---中断和中断处理

之前写过中断相关的文章了,详细分析过ARM底层中断实现过程,这篇文章着重从操作系统设计层面理解中断系统。1.中断中断:是外围设备产生的异步事件,不同设备,中断号不同;比如在经典PC上,IRQ 0是时钟中断,IRQ 1是键盘中断;对于连接于PCI总线上的设备,中断还可以是动态分配的。异常:与中断不同,异常的产生必须考虑与处理器时钟同步,比如除零,缺页,软中断等,都是由处理器自身产生的同步

2015-03-26 09:30:43 295

转载 setup_irq与request_irq的区别

题记:   前两天在做i.mx28硬件定时器的驱动,参考了BSP里带的,使用TIMER0作为系统时钟的注册代码,发现其注册时钟中断的函数使用的是setup_irq,而非常用的request_irq,觉得有些奇怪,今天网上搜了一下,大概了解了一下原因。其实,request_irq最终调用的中断注册函数也是setup_irq,只是request_irq函数中还使用了kmalloc,而kmall

2015-03-26 09:19:19 540

原创 头文件相关函数

2.6.30.4的头文件的位置和2.6.25.8的不一样,除去内核源码下的include目录外,在arch/arm/mach-s3c2410/和arch/arm/plat-s3c24xx/目录下都有include目录的。#include 是在linux-xxx/include/linux下面寻找源文件。#include 是在linux-xxx/arch/arm/include/asm下面寻

2015-03-25 14:26:49 282

转载 内核初始化优化宏 ,初始化顺序, __init,__devexit等

内核使用了大量不同的宏来标记具有不同作用的函数和数据结构。如宏__init 、__devinit 等。这些宏在include/linux/init.h 头文件中定义。编译器通过这些宏可以把代码优化放到合适的内存位置,以减少内存占用和提高内核效率。下面是一些常用的宏:·   __init ,标记内核启动时使用的初始化代码,内核启动完成后不再需要。以此标记的代码位于.init.text

2015-03-17 15:50:36 215

转载 虚继承

虚基类 : 如果某个派生类的部分或全部直接基类是从另一个共同的基类派生而来,在这些基类中,从上一级基类继承来的成员就有相同的名称,则在这个派生类中访问这个共同的基类中的成员时,可能会产生二义性,此时,可定义虚基类。这就要求在其直接基类的定义中,使用关键字 virtual 将那个共同的基类定义为虚基类,其语法形式如下:        class  派生类名:   virtual 派生

2015-03-16 14:52:18 387

转载 linux中的睡眠

在linux的内核中,有很多睡眠相关的函数,比如sleep_on,当然也有wake_up,睡眠的意义就是不能再运行了,那么睡眠总要有个地方啊,我们睡眠都要有个床,按照人性化设计出来的linux内核也应该有个睡眠用的床,这是对的,但是,睡眠一定要在床上吗?非也! 就好像现代的白领们,习惯就很不好,总喜欢伏案而小憩,这样不但不解乏而且还不利于健康,不管怎么说也算是一个休息方式,另外闲着没啥事的时候

2015-01-27 09:59:49 368

转载 _wait_event 具体实现过程

#define __wait_event(wq, condition)         do {         DEFINE_WAIT(__wait);for (;;) {         prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE);         if (condition)         break;

2015-01-27 09:45:19 262

转载 linux等待队列wait_queue_head_t和wait_queue_t

等待队列在linux内核中有着举足轻重的作用,很多linux驱动都或多或少涉及到了等待队列。因此,对于linux内核及驱动开发者来说,掌握等待队列是必须课之一。 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。它有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待

2015-01-27 09:16:59 585

转载 软中断,tasklet和工作队列的区别与联系

为了让中断处理运行的快,同时要完成相应的全部工作。根据具体的内容将中断分为两个部分:上半部分(中断处理程序)和下半部分(推后处理程序)。上半部分需要立即执行,并且有严格的时间限制,这些工作是在所有中断被禁止的情况下完成的,剩余部分工作推迟到下半部分。下半部分的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。在Linux2.6的内核中存在三种不同形式的下半部实现机制:软中断,tas

2015-01-20 13:38:05 1835

转载 tasklet和工作队列

tasklet tasklet  vs  内核定时器 相同:始终在中断期间运行,始终会在调度他们的同一CPU上运行,而且都接收一个unsigned long参数 不同:不可以要求tasklet在某一给定的时间执行tasklet对中断处理例程来说尤其有用。中断处理例程必须尽可能快的管理硬件中断,而大部分数据管理则可以安全的延迟到其后的时间。实际上,

2015-01-20 13:32:20 367

转载 对Linux系统休眠的理解

今天看了一个关于中断例程为什么不能休眠的文章,引发了我的思考。其实这个问题在学习驱动的时候早就应该解决了,但是由于5年前学驱动的时候属于Linux初学者,能力有限,所以对这个问题就知其然,没有能力知其所以然。现在回头看这个问题的时候,感觉应该可以有一个较为清晰的认识了。首先必须意识到:休眠是一种进程的特殊状态(即task->state= TASK_UNINTERRUPTIBLE | TASK_

2015-01-09 09:37:44 247

转载 信号量、互斥体和自旋锁

一、信号量      信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。一般说来,为了获得共享资源,进程需要执行下列操作:    (1) 测试控制该资源的信号量。    (2) 若此信号量的值为正,则允许进行使用该资源。进程将信号量减1。    (3) 若此

2015-01-05 08:37:32 306

转载 嵌入式系统Linux内核开发工程师必须掌握的三十道题

先记录下:1)      Linux中主要有哪几种内核锁?2)      Linux中的用户模式和内核模式是什么含意?3)      怎样申请大块内核内存?4)      用户进程间通信主要哪几种方式?5)      通过伙伴系统申请内核内存的函数有哪些?6)      通过slab分配器申请内核内存的函数有?7)  

2014-12-12 15:43:20 325

转载 详述DRAM、SDRAM及DDR SDRAM的概念

DRAM (动态随机访问存储器)对设计人员特别具有吸引力,因为它提供了广泛的性能,用于各种计算机和嵌入式系统的存储系统设计中。本文概括阐述了DRAM 的概念,及介绍了SDRAM、DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM、LPDDR、GDDR。DRAMDRAM较其它内存类型的一个优势是它能够以IC(集成电路)上每个内

2014-12-03 09:15:55 1725

转载 SDRAM内存驱动 的学习

论坛里这样说的:片内RAM不需要驱动,直接上电可以执行代码!当代码要拷贝到片外SDRAM的时候,就要先初始化CPU内部的SDRAM控制器(也就是RAM驱动),由于片外的SDRAM可以兼容普通的SDRAM和高速DDR内存,每种型号的RAM延时,等待等周期各不同,为了匹配外部RAM时序获得更高性能,当然要初始化RAM控制器,也就是RAM驱动!SDRAM(Synchronous Dynami

2014-11-29 15:24:43 670

arm入门必看经典300问

提出并解答了ARM入门一些常见问题,汇编,操作系统,arm等知识

2014-11-23

arm入门必看300例

你所不知道的一些入门问题。涉及arm,汇编,操作系统

2014-11-23

空空如也

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

TA关注的人

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