Linux进程内存空间分段

Linux的内存空间简单可以分为5个部分:

Text(代码区):存放可执行的指令操作,其只读不能写
Bss(静态区or全局区):存放未初始化的全局变量和静态变量
Data(数据区):存放初始化的全局变量和静态变量
Stack:存放临时变量,函数参数等
Heap:存放new/malloc等动态申请的变量,用户必须手动进行delete/free操作。

其中Stack和He[……]

继续阅读…

继续阅读

linux设备驱动总结(七): file_operations以及file,inode,cdev之间的关系

本节主要内容:
一、文件操作结构体file_operations
二、file,inode,cdev之间的关系
三、”以小博大” — container_of

一、文件操作结构体file_operations

继续上次没讲完的问题,文件操作结构体到底是什么东西,为什么我注册了设备之后什么现象都没有?可以验证文件操作结构体的内容。
file_operations是一个函数指针的[……]

继续阅读…

继续阅读

Linux设备驱动总结(六): 字符设备驱动–LED驱动(原始版本)

本节主要内容:
一.驱动的分类
二.设备号注册
三.设备文件
四.硬件操作和内存映射
五.用户和内核数据交互
六.出错处理

一.驱动的分类:

内核驱动大致分为三类:
1)字符设备:在本系列总结中主要是字符设备为开发方向。
2)块设备 :与硬盘相关的设备,主要是移植。
3)网络设备:与网络相关的设备,主要是移植。

上面的三种设备,我也只学习过字符设备,所以对后面的[……]

继续阅读…

继续阅读

linux设备驱动总结(五):自己动手写第一个驱动程序

系统:Ubuntu 12.04
开发板:SP5PV210开发板

一.初探linux内核模块
内核本身是很庞大的一个结构,需要的组件很多。编译内核时,用户 可以把所有的代码编译进内核,
但是这样会引起两个问题:
(1).内核过大;
(2).当需要添加或者删除内核时,需要重新再编译内核。
所以有了内核模块的概念, 模块并不编译到内核中,编译后存放在指定的目录,当需要使用时动态加载。[……]

继续阅读…

继续阅读