Linux 新内核中主次设备号范围

作者:李强,华清远见嵌入式学院讲师。      设备驱动中,设备号设一个很重要的概念和变量。不论是主设备号,还是次设备号,在设备驱动中都占据了很重要的地位。那么他在Kernel中是如何操作的?这个数据结构都是通过那些函数可以很容易的在我们写Linux设备驱动模块时被我们所使用呢? ...

2015-01-28 15:58:02

阅读数:803

评论数:0

Linux内核源码分析--内存管理(二、函数实现技巧)

仔细的分析了一下各个内存管理函数的实现,发现里面涉及到了几个技巧,如果知道了这几个技巧,那么阅读内存管理源码将会事半功倍(主要是这几个技巧在几个函数中都出现过),当然也会选择性的分析几个比较重要的函数实现; 1、向上取整:以一个页面为了例,如果地址是1,那么向上取整就是4096;如果...

2015-01-23 17:33:24

阅读数:2107

评论数:0

Linux内核源码分析--内存管理(一、分页机制)

最开始的地方是在head汇编中,如果看boot中那三个汇编的应该记得(那三个汇编还是比较重要的)。首先是分页机制,在CR0的第31位(PG位)置1表示开启分页机制,顺便也介绍下其他几个控制寄存器:CR1保留,没用;CR2 用来记录页面异常时线性地址(不懂没关系,后面会介绍);CR3 当前CPU使用...

2015-01-22 16:30:52

阅读数:3436

评论数:4

Linux内核源码分析--系统时间初始化(kernel_mktime()函数)

从boot文件中的几个汇编程序执行后跳转到init文件中的main.c程序开始继续执行,该main.c函数式为系统运行的环境进行初始化的。首先来看系统时间的初始化(因为系统时间的初始化开始程序就在init文件中),其中主要还是由kernel中的mktime.c程序中的kernel_mktime函数...

2015-01-19 23:14:24

阅读数:2100

评论数:0

BCD码转换成二进制和ASCII码

BCD码转换成二进制和ASCII码;用BCD码表示:十位上的十进制数为 2 == BCD码表示为 0010;个位上的十进制数9 === BCD码表示为 1001;所以总的来说 十进制数 29 用BCD码表示为:0010 1001;转换过程:把BCD码 0010(十进制数为十位上的 2)右移4位(其...

2015-01-17 16:32:10

阅读数:9362

评论数:0

C程序代码中内嵌as汇编(四、宏函数)

先来回忆下C语言中宏是怎么定义的,最基本的是定义常量:#define MAX_LEN 1024  这是最简单的常数宏定义,其中宏名按规定是要大写的,宏名在预编译时会由后面的值替代掉(预编译四大步骤:1、用宏名后面的值替换宏名;2、加载包含的头文件内容;3、判断逻辑假,并且去掉逻辑假代码;4、删除注...

2015-01-16 15:15:36

阅读数:1315

评论数:0

Linux上电初始化--BOSI启动和boot环境设置

BIOS: 上电启动时,最开始由硬件控制进入BIOS,BIOS代码一般存放在0xfe000~0xfffff最后几kb中;  启动中cs:eip == 0xffff:0x00000 === 0xffff0 这是最开始启动的(BIOS执行的第一条指令) 下面是BIOS程序执行的内容: 1、在0x000...

2015-01-15 18:08:08

阅读数:1157

评论数:0

C程序代码中内嵌as汇编(三、跳转)

在内联汇编中使用跳转语句是非常常见的,比如:比较两个数,返回较大数时,就会用到跳转;先看下汇编和运行结果,然后再一步步分析下:                                运行结果:                               代码分析: #include ...

2015-01-14 18:16:34

阅读数:1633

评论数:0

C程序代码中内嵌as汇编(二、占位符)

本篇blog只给几个例题来进行快速学习内嵌as汇编。         第一、输入参数中包含输出参数 #include int main(void) { char string1[]={"this is yzh test code!"}; int l...

2015-01-14 16:59:54

阅读数:1201

评论数:0

C程序代码中内嵌as汇编(一、基础知识)

汇编代码是最接近机器码,所以也是执行效率最高的,在操作系统中有将近10%的关键性代码是由汇编编写的,而还有部分代码是由C代码嵌入汇编构成的。C代码中嵌入汇编可以提高程序的执行效率,同时这种程序还既有高级语言的特性,可以灵活的和其他模块进行配合工作; c程序内嵌as汇编有比较多的规则...

2015-01-14 14:51:06

阅读数:1194

评论数:0

as汇编基础程序设计--函数设计及函数堆栈传参问题

其实上面的重点是 .type print_fun, @function ,这是定义函数的方式,后面一般接着是函数入口地址标识符; 函数传参问题: 在as汇编和C语言中函数调用时传参的标准是使用堆栈来操作的,而有些其他汇编(如:ARM汇编)是通过ax,bx等,当参数超过4个参数时用堆...

2015-01-14 10:57:20

阅读数:1339

评论数:0

as汇编基础程序设计--基础知识点

1、数据类型,as汇编和C语言类似,也有数据类型之分。数据类型为了区分数据存放所需要的空间(也就是字节数),浮点型操作没怎么了解,浮点型操作时对数据类型应该有特殊的限制。 .section .data output: .ascii "xxxxx%d\n" (后面...

2015-01-14 10:29:04

阅读数:844

评论数:0

as汇编基础程序设计--gdb调试汇编

开始命令:gdb test; 设置断点:break *_start + 1(cpu运行到 _start+1 的地址上会停止,break可以简写b) 开始运行:run (会运行到第一个断点位置上,一般和断点一起使用) 单步调试:step (会一行一...

2015-01-10 17:08:50

阅读数:1327

评论数:0

as汇编基础程序设计--调用C库和内存访问

as汇编中的内存访问:movl (%ebx), eax(把ebx寄存器指向的地址上的值传送给eax);movl 4(%ebx), eax(把ebx指向的地址的位置往上偏移4字节的地址上的值传送给eax中);movl -4(%ebx),eax(把ebx执行的地址位置往下偏移4个字节的地址上的值传送给...

2015-01-09 16:13:16

阅读数:1165

评论数:0

AT&T风格的基础汇编程序--Hello word

为了看懂Linux内核源代码,所以不得不重新学习下汇编语言。汇编语言大体可以分为两个风格,官方的intel风格和unix系列的AT&T风格。Intel风格汇编是比较常见的,一般大学时会学习点基础的(至少我大学时学过点基本指令),这一类代表性的有NASM汇编、as86等(我熟悉的就只有NAS...

2015-01-08 17:10:30

阅读数:1202

评论数:0

x86架构下的系统段描述符格式

如果还记得前面的GDT全局描述符表的话,那么一定不会忘记段描述符中有个s字段,若为0,则表示这个描述符是系统段,若为1,则是普通的段描述符;普通的段为ds,es,ss,cs等等,系统的段则有GDT,调用门,TSS,LDT等等。现在来看看几个系统段描述符格式;         -----------...

2015-01-04 21:58:47

阅读数:1807

评论数:0

x86架构中特权级

特权级,可以分为三种;第一、描述符中的特权级DPL,表示这个段的特权;第二、选择子的RPL表示请求方的特权级;第三、当前特权级,表示正在执行的代码段所具有的特权;下面有关特权级知识的总结:         第一、对于数据段来说,特权级DPL表示了可以访问该数据的最低特权。若数据段的DPL为1,那么...

2015-01-04 17:45:22

阅读数:1220

评论数:0

x86架构保护模式下界限问题

在保护模式下有很多界限问题,下面集中来看下:         若段界限是0xFFFFF,粒度是4KB,那么实际界限值是多少?若粒度G=0,那么段界限就是实际的界限值;但粒度为4KB,那么界限值就是:(描述符段界限 + 1)× 4KB - 1;为什么会这样?因为段界限是段长度减去1,若粒度G=0,那...

2015-01-04 17:13:39

阅读数:1061

评论数:1

x86架构中的保护模式

在x86架构中所谓保护模式其实就是段的存储方式能够达到一种保护机制。也正因为有了保护模式(段的存储方式)所以才会有特权模式,以及后面的多任务之说;         在实模式下段的存储很简单,就是代表一个段基地址;如:ds(ds=0x7c00),那么数据段的基地址就是0x7c00;再比如:ds:ax...

2015-01-04 09:38:28

阅读数:2193

评论数:1

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