自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (3)
  • 收藏
  • 关注

转载 .h头文件 .lib库文件 .dll动态库文件之间的关系

.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。.h .lib .dll三者的关系是:H文件作用是:声明函数接口DLL文件作用是: 函数可执行

2017-11-21 00:08:23 231

转载 ucOS_II移植:Stm32启动代码分析

用的编译工具是keil,在用keil建立stm32工程时,一般会产生一个启动文件,STM32F10x.s,在st提供的库函数里,用cortexm3_macro.s和stm32f10x_vector.s来代替这个文件。不过内容都大同小异。我在csdn上搜到了一个在stm32上移植好的ucos,打算在这个代码的基础上,添加注释,先学别人的,然后再自己移植。我获得的这份例程,使用了startup

2017-11-15 01:57:58 683

转载 快速排序法详解

快速排序法(QuickSort)是一种非常快的对比排序方法。它也Divide-And-Conquer思想的实现之一。自从其产生以来,快速排序理论得到了极大的改进,然而在实际中却十分难以编程出正确健壮的代码。本文将对快速排序算法的基本理论和编程实践方面做作一个全面的讲解。在本文讲解中,将忽略很多细枝末节,试图给读者形成一个非常具体的快速排序形象。1.快速排序---基本理论因为该算法是Divi

2017-11-15 01:50:14 197

转载 可忽略的小概率

数学家波莱尔(Emile Borel)认为个人可忽略的概率是 10^-6地球上可忽略的概率是 10^-15宇宙中可忽略的概率是 10^-50也就是说,对个人来说如果一个事件发生的概率是百万分之一,那么可以认为它是不会发生的。因为经验上这种概率小到对个人可以忽略不计。 外出不带伞被雨淋的概率大约是百分之一,这种倒霉事儿经常发生。出门遭遇交通事故的概率大

2017-11-13 18:55:37 2495

转载 表扬好还是批评好?

心理学家做过这样的实验。将受验者分为三组,让他们做简单的工作。工作完成后,对第一组的人,无论工作做得如何,都予以表扬;对第二组的人,不管工作做得怎样,都上去一顿批评;对第三组的人既不表扬也不批评。第二天,又分配给各组类似的工作,对完成的工作做出同样的反应。结果发现,被批评的组第二天的工作成绩进步最多,其次是被表扬的组,最后是什么都不说的组。这样的实验持续几天以后,有趣的现象发生了。被表扬的组的成绩

2017-11-13 18:53:21 698

转载 GCC如何编译内嵌汇编代码

内核代码绝大部分使用C 语言编写,只有一小部分使用汇编语言编写,例如与特定体系结构相关的代码和对性能影响很大的代码。GCC提供了内嵌汇编的功能,可以在C代码中直接内嵌汇编语言语句,大大方便了程序设计。 简单的内嵌汇编很容易理解 例: __asm__ __volatile__("hlt"); “__asm__”表示后面的代码为内嵌汇编,“asm”是“__a

2017-11-12 02:14:30 2591

转载 《Linux内核设计与实现》读书笔记(二十)- 补丁, 开发和社区

linux最吸引我的地方之一就是它拥有一个高手云集的社区, 还有就是如果能=为linux内核中贡献代码, 一定是一件令人自豪的事情.下面主要总结一些和贡献代码相关的主要内容.加入社区编码风格提交补丁总结 1. 加入社区如果想为linux贡献代码, 那么加入linux社区是必须的, 加入了社区, 不仅可以及时内核的最新消息, 而且可以及时和社区内有经验的内核开发者交流经验.

2017-11-12 02:06:27 387

转载 《Linux内核设计与实现》读书笔记(十九)- 可移植性

linux内核的移植性非常好, 目前的内核也支持非常多的体系结构(有20多个).但是刚开始时, linux也只支持 intel i386 架构, 从 v1.2版开始支持 Digital Alpha, Intel x86, MIPS和SPARC(虽然支持的还不是很完善).从 v2.0版本开始加入了对 Motorala 68K和PowerPC的官方支持, v2.2版本开始新增了 ARMS, I

2017-11-12 02:05:39 374

转载 《Linux内核设计与实现》读书笔记(十八)- 内核调试

内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态。也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态。 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来捕获并显示。而内核是直接和硬件交互的,内核出错之后整个系统就无法正常运行了,所以要想熟练的进行内核调试,首先要熟悉内核已经给我们提供的工具,然后实实在在的去做一些内核功能的开发,在开

2017-11-12 02:04:48 369

转载 《Linux内核设计与实现》读书笔记(十七)- 设备与模块

本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs。主要内容:设备类型内核模块内核对象sysfs总结 1. 设备类型linux中主要由3种类型的设备,分别是:设备类型代表设备特点访问方式块设备硬盘,光盘随机访问设备中的内容一般都是把设备挂载

2017-11-12 02:03:48 343

转载 《Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写

主要内容:缓存简介页高速缓存页回写 1. 缓存简介在编程中,缓存是很常见也很有效的一种提高程序性能的机制。linux内核也不例外,为了提高I/O性能,也引入了缓存机制,即将一部分磁盘上的数据缓存到内存中。 1.1 原理之所以通过缓存能提高I/O性能是基于以下2个重要的原理:CPU访问内存的速度远远大于访问磁盘的速度(访问速度差距不是一般的大,差好几个数量

2017-11-11 19:40:58 190

转载 《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)

进程地址空间也就是每个进程所使用的内存,内核对进程地址空间的管理,也就是对用户态程序的内存管理。主要内容:地址空间(mm_struct)虚拟内存区域(VMA)地址空间和页表 1. 地址空间(mm_struct)地址空间就是每个进程所能访问的内存地址范围。这个地址范围不是真实的,是虚拟地址的范围,有时甚至会超过实际物理内存的大小。 现代的操作系统中进程都是在保护模

2017-11-11 19:39:29 139

转载 《Linux内核设计与实现》读书笔记(十四)- 块I/O层

主要内容:块设备简介内核访问块设备的方法内核I/O调度程序 1. 块设备简介I/O设备主要有2类:字符设备:只能顺序读写设备中的内容,比如 串口设备,键盘块设备:能够随机读写设备中的内容,比如 硬盘,U盘字符设备由于只能顺序访问,所以应用场景也不多,这篇文章主要讨论块设备。块设备是随机访问的,所以块设备在不同的应用场景中存在很大的优化空间。 块设备中最重

2017-11-11 19:38:32 183

转载 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统

虚拟文件系统(VFS)是linux内核和具体I/O设备之间的封装的一层共通访问接口,通过这层接口,linux内核可以以同一的方式访问各种I/O设备。虚拟文件系统本身是linux内核的一部分,是纯软件的东西,并不需要任何硬件的支持。 主要内容:虚拟文件系统的作用虚拟文件系统的4个主要对象文件系统相关的数据结构进程相关的数据结构小结  1. 虚拟文件系统的作用虚拟文

2017-11-11 19:37:23 204

转载 《Linux内核设计与实现》读书笔记(十二)- 内存管理

内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决)。所有内核的内存管理必须要简洁而且高效。主要内容:内存的管理单元获取内存的方法获取高端内存内核内存的分配方式总结 1. 内存的管理单元内存最基本的管理单元是页,同时按照内存地址的大小,大致分为3个区。 1.1 页页的大小与体系结构有关,在 x86

2017-11-11 19:36:18 187

转载 《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理

系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要。 主要内容:系统时间定时器定时器相关概念定时器执行流程实现程序延迟的方法定时器和延迟的例子 1. 系统时间系统中管理的时间有2种:实际时间和定时器。1.1  实际时间实际时间就是现实中钟表上显示的时间,其实内核中并不常用这个

2017-11-11 19:35:18 244

转载 《Linux内核设计与实现》读书笔记(十)- 内核同步方法

内核中提供了多种方法来防止竞争条件,理解了这些方法的使用场景有助于我们在编写内核代码时选用合适的同步方法,从而即可保证代码中临界区的安全,同时也让性能的损失降到最低。主要内容:原子操作自旋锁读写自旋锁信号量读写信号量互斥体完成变量大内核锁顺序锁禁止抢占顺序和屏障总结 1. 原子操作原子操作是由编译器来保证的,保证一个线程对数据的操作不会被其他线程打断。原子操作有2类

2017-11-11 19:34:08 135

转载 《Linux内核设计与实现》读书笔记(九)- 内核同步介绍

存在共享资源(共享一个文件,一块内存等等)的时候,为了防止并发访问时共享资源的数据不一致,引入了同步机制。主要内容:同步的概念同步的方法-加锁死锁锁的粒度 1. 同步的概念了解同步之前,先了解另外2个概念:临界区   - 也称为临界段,就是访问和操作共享数据的代码段。竞争条件 - 2个或2个以上线程在临界区里同时执行的时候,就构成了竞争条件。 所谓同步,其实

2017-11-11 19:32:57 158

转载 《Linux内核设计与实现》读书笔记(八)- 中断下半部的处理

在前一章也提到过,之所以中断会分成上下两部分,是由于中断对时限的要求非常高,需要尽快的响应硬件。主要内容:中断下半部处理实现中断下半部的机制总结中断下半部的实现中断实现示例 1. 中断下半部处理那么对于一个中断,如何划分上下两部分呢?哪些处理放在上半部,哪些处理放在下半部?这里有一些经验可供借鉴:如果一个任务对时间十分敏感,将其放在上半部如果一个任务和硬件有关,

2017-11-11 19:31:57 177

转载 《Linux内核设计与实现》读书笔记(七)- 中断处理

中断处理一般不是纯软件来实现的,需要硬件的支持。通过对中断的学习有助于更深入的了解系统的一些底层原理,特别是驱动程序的开发。主要内容:什么是中断中断类型中断相关函数中断处理机制中断控制方法总结 1. 什么是中断为了提高CPU和外围硬件(硬盘,键盘,鼠标等等)之间协同工作的性能,引入了中断的机制。没有中断的话,CPU和外围设备之间协同工作可能只有轮询这个方法:CPU定期检

2017-11-11 19:30:09 165

转载 gcc内嵌汇编详解

有时候我们希望在C/C++代码中使用嵌入式汇编,因为C中没有对应的函数或语法可用。比如我最近在ARM上写FIR程序时,需要对最后的结果进行饱和处理,但gcc没有提供ssat这样的函数,于是不得不在C代码中嵌入汇编指令。 1. 入门在C中嵌入汇编的最大问题是如何将C语言变量与指令操作数相关联。当然,gcc都帮我们想好了。下面是是一个简单例子。asm(“fsinx %1, %0”:”=

2017-11-10 22:56:03 363

转载 《Linux内核设计与实现》读书笔记(六)- 内核数据结构

内核数据结构贯穿于整个内核代码中,这里介绍4个基本的内核数据结构。利用这4个基本的数据结构,可以在编写内核代码时节约大量时间。主要内容:链表队列映射红黑树 1. 链表链表是linux内核中最简单,同时也是应用最广泛的数据结构。内核中定义的是双向链表。 1.1 头文件简介内核中关于链表定义的代码位于: include/linux/list.hlist.

2017-11-10 19:40:43 221

转载 《Linux内核设计与实现》读书笔记(五)- 系统调用

主要内容:什么是系统调用Linux上的系统调用实现原理一个简单的系统调用的实现1. 什么是系统调用简单来说,系统调用就是用户程序和硬件设备之间的桥梁。用户程序在需要的时候,通过系统调用来使用硬件设备。系统调用的存在,有以下重要的意义:1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备,这样大大简化了用户程序的开发。    比如:用户程序通过write()系

2017-11-10 19:37:32 204

转载 《Linux内核设计与实现》读书笔记(四)- 进程的调度

主要内容:什么是调度调度实现原理Linux上调度实现的方法调度相关的系统调用1. 什么是调度现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程)。这个管理程序就是调度程序,它的功能说起来很简单:决定哪些进程运行,哪些进程等待决定每个进程运行多长时间此外,为了获得更好的用户体验,运行中的

2017-11-10 19:34:45 234

转载 《Linux内核设计与实现》读书笔记(三)- Linux的进程

进程是所有操作系统的核心概念,同样在linux上也不例外。主要内容:进程和线程进程的生命周期进程的创建进程的终止1. 进程和线程进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作(比如,创建,销毁等)都是有内核来实现的。Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的进程。所以下面只讨论进程,只有当线程与进程

2017-11-10 19:31:41 210

转载 《Linux内核设计与实现》读书笔记(二)- 内核开发的准备

在尝试内核开发之前,需要对内核有个整体的了解。主要内容:获取内核源码内核源码的结构编译内核的方法内核开发的特点 1. 获取内核源码内核是开源的,所有获取源码特别方便,参照以下的网址,可以通过git或者直接下载压缩好的源码包。http://www.kernel.org 2. 内核源码的结构 目录说明arch特定体系结构的

2017-11-10 19:30:46 202

转载 《Linux内核设计与实现》读书笔记(一)-内核简介

本篇简单介绍内核相关的基本概念。主要内容:单内核和微内核内核版本号 1. 单内核和微内核 原理优势劣势单内核整个内核都在一个大内核地址空间上运行。1. 简单。2. 高效:所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销。一个功能的崩溃会导致整个内核无

2017-11-10 19:29:49 200

转载 C/C++:程序的内存分配方式

转载自:http://ryansky.blog.51cto.com/187974/862861.内存分配方式内存分配方式有三种:[1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。[2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内

2017-11-09 13:30:02 572

转载 Linux嵌入式 -- Bootloader , Uboot

1. Bootloader作用PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成。BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交给引导程序。引导程序的主要任务是将内核从硬盘上读到内存中,然后跳转到内核的入口点去运行,即启动操作系统。简单地说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,

2017-11-08 10:31:36 429

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

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

2017-11-08 10:29:22 327

FPGA入门教程

非常详细的FPGA入门教程,很适合初学者。

2013-03-07

空空如也

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

TA关注的人

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