自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (14)
  • 收藏
  • 关注

原创 Linux 调度算法简述

今天在网上看到一些讲linux调度算法和策略的文章,好多都是错误,想当年我也被这种文章误导过很多次。特意针对linux 调度简单梳理一下,确保大家能够分辨是非。linux 的进程调度按照大的区分,有两类,1.RT的线程 2.普通线程, 一个线程是RT线程还是普通线程,内核都有接口设置的,RT线程采取的策略是SCHED_FIFO 和SCHED_RR两种调度算法,这两种调度算法只有一个区别,就是SCHED_RR对同优先级的线程会时间轮转,而SHCED_FIFO则不会,直到优先级高的主动休眠或者放弃.

2020-07-05 15:40:39 876

原创 Linux 内存管理四

Page cache 理解,Page cache 实际是一块内存,linux 读取一个文件,会先看看page cache 是否命中,如果没有命中,先把文件读到page cache ,再从page cache 读文件。如果是写的,也是先写入page cache区域,linux应用程序的write 已经返回,什么时候真正写入磁盘,这是linux内存磁盘替换算法的事情。 Linux 读写文件有两种...

2020-02-02 18:55:23 191

原创 Linux 内存管理三

本节主要涉及下面这些概念,搞清楚我们在linux下面写一个应用程序究竟耗费了多少内存,也是我们查内核泄漏的指标。VSS- Virtual Set SizeRSS- Resident Set SizePSS- Proportional Set SizeUSS- Unique Set Size在linux 里面大量的存在内存共享的概念,比如我们的libc 库,加入我们有100个程序...

2020-02-01 18:18:52 299

原创 linux 内存管理 二

疫情憋在家,继续写下笔记,Buddy 算法把空闲页面管理起来,一个已经被占用的页面,其他人肯定不能申请到的,这些页面都是4k 8k 16k .... ,无论是在内核还是在应用,有时候都要申请很小的内存。比如说我们在内核中需要申请16Bytes,Buddy 还是申请4K的内存,这样就很乱费,所以在内核里面会进行内存的二次管理,在Buddy中申请的内存进行切割,内核中这种机制叫做slab。Slab...

2020-01-31 18:09:25 188

原创 QNX-编译环境

因为工作需要开始接触QNX实时操作系统,第一步先了编译环境,这样才能随意改过BSP,驱动和应用程序。刚开始接触,基于QNX IDE 进行分析,QNX在images下面有一个住Make file 文件,其中描述了最终产出的目标文件,也就是IPL 与 (startup+OS).而整个QNX系统中有多个makefile,都是主Makefile递归循环调用的。首先主makefile分析RO...

2020-01-31 10:44:33 2573 1

原创 Linux 内存管理一

疫情在家,整理下以前的学习笔记, 作为linux 三个最重要的部分之一(进程,io,内存),内存管理是非常重要的,是深入理解linux各个部分的基础,linux的内存管理与其他rtos的内存管理不一样,他是一个“富” os,也就是支持很多的应用同时跑,还需要支持应用之间的内存隔离。Linux 内存不仅仅用于内存,比如作为硬盘的补充,硬盘本身也可以作为内存来使用。硬件原理和分页管理...

2020-01-31 10:12:36 449

原创 Linux 内核调试

肺炎疫情憋在家里,总结一下很久之前的学习笔记,先说说系统开发工程都需要的内核调试方面。主要是结合以前的项目调试经验和笔记,欢迎大家补充,还记得以前从0 开始写一个bootloader,把一个linux 系统在三星s3c2410上跑起来,基本就是使用printk 来调试的。上面这一段就是一个典型的IC 原厂的工程师在最开始把linux移植到芯片上的bootargs,是bootloade...

2020-01-31 10:05:32 1184

原创 linux驱动开发-阻塞的字符设备

阻塞和非阻塞是设备I/O访问的两种方式。我们访问一个命名管道时如果管道中没有内容,则会阻塞,等待数据进入管道。那么我们如何来编写一个带阻塞功能的字符设备呢?linux 的等待队列能很好的实现无数据阻塞。(#include )定义一个等待队列有两种方式。1.先定义,在初始化。init_waitqueue_head()函数会将自旋锁初始化为未锁,等待队列初始化为空的双向循环链表。

2018-02-02 17:11:26 239

原创 lcd fb参数如何计算

Linux内核的amba lcd控制器使用clcd_panel结构体表示一个LCD屏的硬件参数:/* include/linux/fb.h */struct fb_videomode {     const char *name;     /* optional */     u32 refresh;          /* optional */     u32

2018-02-01 14:31:18 273

原创 C++快速入门-默认参数

默认参数是C语言中没有的概念,其实也是足够简单啦,但是有一点要注意,如果一个函数有多个参数,其中某一个使用默认参数,那么这个默认参数之后的参数全部要使用默认参数。比如示例中,b=2 ,那么c一定要设置默认参数,其实也很好理解,因为只有这样才能区分各个参数和赋值的对应关系。真的很简单。#include void func(int a , int b = 2, int c

2016-05-26 22:03:57 560

原创 C++快速入门-标准输入输出

C语言有标准输入输出,C++同样有。标准输入输出是标准库提供的一套API。cin >> num ;就是输入一个整数,而cout 是不是非常简单简单示例代码:#include using namespace std;int main(void){ int num; cin >> num; cout << "sdfsdf" << "num = " << nu

2016-05-26 21:56:31 715

原创 C++快速入门-命名空间

命名空间是c++中的一个非常基本的概念,其实在其他很多语言中也有类似的概念,有点类似比较高级版本的C语言中的头文件作用域。最常见的命名空间引用语句时 using namespace std; 这句的意思是在本语句之后可以引用std命名空间中的接口,std值标准库中的命名空间。命名空间的主要作用是解决同名冲突。设计者可以根据需要指定有名字的空间域,把一些全局对象放在不同的命名空间中,从而与其

2016-05-26 21:51:19 610

原创 C++快速入门-简单概要

经常听到一些熟悉C语言的朋友谈到如何快速入门C++,很多人觉得C++很难,感觉入门需要花很大的精力,其实并非这样,C++是一门面向对象的语言,只要把思维方式从C的面向过程转变到C++的面向对象编程,就能够很快速的学习C++,面向对象更加符合日常的世界的构造方式,当我们有想不明白C++某些概念和实现的时候,联想一些我们周围生活的世界,也许就能理解了。废话少说,先罗列C++的最重要的两个基

2016-05-12 03:14:02 3171

转载 linux设备驱动-ioremap

void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)void *ioremap(unsigned long phys_addr, unsigned long size)入口: phys_addr:要映射的起始的IO地址;size:要映射的空间的大小;flags:要映射的I

2014-06-23 15:14:49 2245

原创 linux设备驱动开发-异步通知机制

设备驱动中异步通知编程还是比较简单的,主要就是一些数据结构,和两个函数:数据结构:fasync_struct结构体函数:1)处理FASYNC标志变更的函数int fasync_helper(int fd, struct file *filp, int mode ,struct fasync_struct **fa);        2) 释放信号用的函数void kill_fasync

2014-06-23 14:54:34 734

转载 linux设备驱动开发-高级字符设备操作poll

在用户程序中,select()和poll()也是与设备阻塞与非阻塞访问息息相关的,使用非阻塞I/O的应用程序通常会使用select和poll系统调用查询是否可对设备进行无阻塞的访问。select系统调用最终会引发设备驱动中的poll函数被执行。一、select()系统调用:用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。1.select()原型:本文

2014-06-23 14:02:06 583

原创 linux设备驱动开发-设备阻塞访问的简单实现

当我们读取一个空的命名管道文件是,会阻塞等待,知道有新数据写入管道中。

2014-06-23 10:46:35 490

转载 linux驱动开发-用户open操作在整个系统中的流程

2014-06-23 10:09:30 524

原创 linux驱动开发-字符设备初级应用(管道)

本文主要是示例程序,描述一个简单的管道,废话少说,贴代码。

2014-06-19 10:30:40 672

原创 linux驱动开发-字符设备

终于到了设备(1)字符设备驱动介绍字符设备是指那些按字节流访问的设备,针对字符设备的驱动称为字符设备驱动。此类驱动适合于大多数简单的硬件设备。比如并口打印机,我们通过在/dev下建立一个设备文件(如/dev/printer)来访问它。用户应用程序用标准的open函数打开dev/printer,然后用write向文件中写入数据,用read从里面读数据。调用

2014-06-18 11:18:50 635

原创 linux驱动开发-VFS虚拟文件系统

在讲字符设备驱动钱,我觉得大家应该对VFS(虚拟文件系统)

2014-06-17 16:00:05 1338

原创 linux驱动开发-进程管理

学习实际的驱动编程/**************************** *  进程管理 ****************************/(1)进程的概念进程是linux最基本的抽象之一,进程是处于执行期的程序以及他所包含的资源的总称。进程包含的资源有:*一段可执行的程序代码(代码段)*存放全局变量的数据段*打开的文件*挂起的信号*

2014-06-17 15:42:39 519

转载 linux驱动开发-经典的系统调用BUG

从我出去旅行到现在这段时间内,Linux内核似乎是漏洞频频啊,光我看到的安全漏洞就已经若干个了,有机会真想八一八这些安全漏洞。CVE-2010-3301是其中一个。这个漏洞的成因是,在64位的内核上执行32位的系统调用时,作为传递系统调用号的%rax高32位未被清零处理,而且在进行比较的时候直接使用的%eax,导致高32位被忽略:        cmpl $(IA32_NR_sys

2014-06-17 14:43:01 663

原创 linux驱动开发-系统调用

本文SWI(1)什么是系统调用系统调用是内核和应用程序间的接口,应用程序要访问硬件设备和其他操作系统资源,必须通过系统调用来完成。在linux中,系统调用是用户空间访问内核的唯一手段,除异常和中断外,他们是内核唯一的合法入口。系统调用的数量很少,在i386上只有大概300个左右。(2)c库和系统调用的关系应用程序员通过C库中的应用程序接口(API)而不是直接

2014-06-17 14:26:10 1216

原创 linux驱动开发-内核符号表

内核符号表公共内核符号表就是内核make以后生成的System.map文件,insmod用它来解释模块中未定义的符号。公共内核符号表中包含了所有的全局内核项(函数和变量)的地址,当模块被装入内核后,他所导出的任何符号都会变成内核符号表的一部分。可以通过/proc/kallsyms查看。内核中常常使用模块的层叠,如每个usb输入设备模块都层叠在usbcore和input模块上。

2014-06-17 13:40:43 2098

原创 linux驱动开发-模块参数

在我们使用模块的时候需要

2014-06-17 13:25:17 483

原创 linux驱动开发-模块多文件编译

多个文件的模块的编译,

2014-06-17 12:49:40 3689 1

原创 linux 驱动开发-模块的构建

1.模块的含义linux 是采用模块化的方式构建的,允许内核在运行时动态地向其中插入或从中删除代码,这些代码(包扩函数,数据,模块入口函数,模块出口函数)被一并组合在一个单独的二进制镜像,就是所谓的可装载内核模块。模块可以是基本的内核镜像尽可能小,同时可以方便地对新功能进行调试,还可以实现热插拔(后续会学习如何实现设备的热插拔功能,暂时无需深究),和内核的核心子系统不一样,模块文件需要

2014-06-17 12:25:53 720

原创 linux 驱动开发简单声明

linux 系统越来越广泛的应用,

2014-06-17 10:25:23 448

转载 FAT移植建议

最近做的spi flash,本打算弄个文件系统,由于之前用过了JFFS、YAFFS和TrueFFS,代码量都相当的大,这次想找款代码量不那么吓人的,学习一下,听说配置会相对复杂一些。选来选去,最终选定了FatFS,代码量足够的小,最新的R0.09版本只有1个.c文件(当然,还有一个底层的要自己写,option文件夹里的无视),老点版本就更小了。而且更新很频繁,用户量也够大,就选定它了。尽管最后由于

2014-02-28 11:12:01 1805

转载 FAT文件系统结构分析

FAT文件系统原理                          ——http://www.sjhf.net文本结构索引: 图片表格索引:表1 分区表参数表2 扩展分区表项的内容一、硬盘的物理结构图1 硬盘的物理结构表3 FAT32分区DBR的位置划分二、硬盘的逻辑结构图2

2014-02-28 10:56:03 7855 1

转载 6410时钟管理

6410时钟管理6410内部有着复杂的时钟管理机制,为支持ARM内部、内部总线、普通外设以及特殊外设时钟需求,6410有三种不同的晶振源接入管脚,分别是主时钟(一般为12MHz)、27MHz(用于MFC、TV、LCD等)以及48MHz(用于USB通讯)。6410时钟结构图:摘自《s3c6410 user’s manual REV 1.2》1.1            主时钟

2013-06-16 21:47:23 739

转载 s3c6410 Booting模式

s3c6410 Booting模式6410支持SROM、ONENAND、IROM等几种Booting模式,其中最常用的是IROM下的NAND Flash和SD/MMC两种启动模式,下面对几种Booting模式依次说明,重点学习IROM。6410 Booting模式配置,是通过XSELNAND、OM[4:0]、GPN[15:13]共同决定,如下图:摘自《s3c6410 use

2013-06-16 21:46:49 1071

转载 s3c6410_地址映射

分类: ARM_S3C6410 2012-05-29 22:19 1000人阅读 评论(1)收藏 举报c存储flashimageuser目录(?)[+]s3c6410地址映射1.1   寻址空间ARM处理器为32bit处理器,内部32bit地址总线理论寻址空间为4GB,对于6410来说,寻址空间的高2GB在内部为保留(reserved),低2GB(0

2013-06-16 21:45:54 1890

转载 DDR SDRAM config in s3c6410

本文系本站原创,欢迎转载! 转载请注明出处:http://blog.csdn.net/mr_raptor/article/details/6621741++++++++++++++++++++++++++++++++++++++++++ 1.       概述S3C6410内存控制器是采用的PL340内存控制芯片。AMBA APB3.0接口协议规定,可以通过编程将AXI从总线接

2013-06-12 21:54:23 2098

转载 rhel6 配置yum源

说明:在使用yum命令安装软件的时候,必须提前配置yum源,本文以挂载RHEl6的官方镜像至本地,创建本地yum源。在RHEl6中默认在/etc/yum.repos.d/目录下没有*.repo的文件,需要自己手动建立一个。1.挂载官方镜像至本地并实现开机自动挂载# mount /dev/dvd  /media# ls /media此时我们看到已经成功挂载官方镜像至/media下

2013-05-13 21:17:55 574

原创 linux 内存管理 x86

x86的地址:逻辑地址(机器指令中,段,偏移。程序中的符号生成的地址):线性地址(仅存在于包含内存管理单元,并且仅存在于cpu内部,起到过程映射)=虚拟地址,物理地址:线性地址经过页表查找后得到物理地址,分页机制没有启用,则线性地址等同于物理地址。目标文件反汇编,是分段管理,所以会出现相同的地址可执行文件:统一编址选择器(CS):实模式,段寄存器存储的真实段地址保护模式

2012-12-18 12:42:14 286

原创 GCC-C语言编辑器

1.通过选项定义宏gcc -D'TESTMACRO=“hello world”'  main.c -o main.exe 可以在编译的时候定义宏。2.获取系统头文件路径gcc -v main.c 3.生成依赖关系gcc -M main.c (包括系统头文件)   / gcc -MM main.c (不包括系统头文件)

2012-11-08 22:46:51 1780 1

转载 BootLoader与Linux内核的参数传递

在嵌入式系统中,BootLoader 是用来初始化硬件,加载内核,传递参数。因为嵌入式系统的硬件环境各不相同,所以嵌入式系统的BootLoader 也各不相同,其中比较通用的是U-Boot,它支持不同的体系结构,如ARM,PowerPC,X86,MIPS 等。本文着重介BootLoader与内核之间参数传递这一基本功能。本文的硬件平台是基于AT91RM9200 处理器系统,软件平台是Linux-2

2012-10-15 18:48:47 412

转载 一个游戏程序员的学习资料

想起写这篇文章是在看侯杰先生的《深入浅出MFC》时, 突然觉得自己在大学这几年关于游戏编程方面还算是有些心得,因此写出这篇小文,介绍我眼中的游戏程序 员的书单与源代码参考。一则是作为自己今后两年学习目标的备忘录,二来没准对别人也有点参考价值。我的原则是只写自己研究过或准备研究的资料,所以内容无 疑会带上强烈的个人喜好色彩, 比如对网络,数据库等重要方面完全没有涉及。因为自己主要对三维图形引擎,

2012-09-17 13:09:17 668

基于armv8 adb fastboot 工具 adb-ndk

adb fastboot 运行与arm 平台, 实际验证在android O/P 上正确运行。 用于在linux/android系统上运行adb工具,操作调试远程目标,比如TBOX, 和其他adb设备

2019-03-15

汽车完整基础知识大全

对汽车从整体上的基础知识做了一个科普,是的能较感性的认识到汽车究竟是怎么回事

2019-01-05

Can总线快速入门

非常清晰易懂的CAN总线快速入门培训资料,非常快速让基本了解CAN通信的特性。强烈推荐.

2019-01-05

Linux DRM how-to 例子

基本上DRM架构全部取代了传统的fb模式, Linux Graphic DRM subsystem 的测试历程,主要是基于libdrm库进行图形的操作,

2019-01-05

Git-Pro 学习笔记 -xmind 打开

提炼了各种Git 应用场景的命令和基础说明与分类,基本满足大型软件开发要求,我主要基于Android 系统开发,几百个git 仓库各种分支,合并。

2019-01-05

Html5 for qnx

QNX html5 框架和支持, 详细列出了实际中的知识点,非常具有参考

2018-02-01

Python 英文原版学习书籍

Python 英文原版学习书籍,有1000多页,相信全部看完会有很大的收获

2014-06-23

TinyXml 工作上使用的一个小例子

TinyXml 工作上使用的一个小例子,提炼了TinyXml 文件与自己的文件一起编译。能够快速帮你学会使用TinyXml 库

2014-06-23

my xml code

xml 使用的简单例子。非常适合初学者。需要有tinyXML库

2014-05-29

Qt5开发资料

Qt5 相关资料。介绍了与Qt4的区别及Qt5的一些特性,非常实用

2014-04-16

DDR naked for 6410

详细描述了裸板DDR的配置。非常适合初学者。 主要针对s3c6410

2013-06-12

smdk6410_u-boot

无需其他配置即可使用的u-boot(smdk6410)

2012-05-07

linux 模拟鼠标和按键输入

linux下的操作鼠标和键盘的操作,c语言编写,很值得参考的系统编程资料

2012-04-28

基于mt8888的批量拨号程序

拨号程序,c语言的void InitializeMT8888(void);void SetMT8888Mode(void);void DialTelephoneNumber(void);void ReadStatus(void);data  unsigned CHAR MTStatus;unsigned CHAR code TeleNumber[11]={1,3,1,3,1,1,1,1,1,1,1};void Delayms(unsigned int ms){    unsigned int i,j;    for(i=0;i<ms;i++)    for(j=0;j<113;j++);}void Delay50ms(unsigned CHAR ms){    unsigned int i;    unsigned CHAR j;    for(j=0;j<ms;j++)    for(i=0;i<9135;i++);}

2010-04-22

空空如也

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

TA关注的人

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