自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (18)
  • 收藏
  • 关注

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

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

2015-01-28 15:58:02 1980

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

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

2015-01-23 17:33:24 3370 3

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

最开始的地方是在head汇编中,如果看boot中那三个汇编的应该记得(那三个汇编还是比较重要的)。首先是分页机制,在CR0的第31位(PG位)置1表示开启分页机制,顺便也介绍下其他几个控制寄存器:CR1保留,没用;CR2 用来记录页面异常时线性地址(不懂没关系,后面会介绍);CR3 当前CPU使用的页目录表的地址(有此可见系统中不仅仅只有一个页目录表,但是在某一时刻有效的页目录表只有一个);当然有关页面操作的前提是CR0的第31位必须打开,也就是必须是在分页机制开启的时候那几个控制寄存器才有效。

2015-01-22 16:30:52 5567 4

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

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

2015-01-19 23:14:24 3817

原创 BCD码转换成二进制和ASCII码

BCD码转换成二进制和ASCII码;用BCD码表示:十位上的十进制数为 2 == BCD码表示为 0010;个位上的十进制数9 === BCD码表示为 1001;所以总的来说 十进制数 29 用BCD码表示为:0010 1001;转换过程:把BCD码 0010(十进制数为十位上的 2)右移4位(其实表示当作一个个位数,或者说单纯的数值),然后乘以10 还原到十进制的权重(因为这个数本来表示的就是十进制数中的十位)。处理完十位上的数,接着处理个位上的数。因为BCD码的权重和二进制的前四位权重是一样(2^n,n

2015-01-17 16:32:10 34238 3

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

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

2015-01-16 15:15:36 2077

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

BIOS:上电启动时,最开始由硬件控制进入BIOS,BIOS代码一般存放在0xfe000~0xfffff最后几kb中; 启动中cs:eip == 0xffff:0x00000 === 0xffff0 这是最开始启动的(BIOS执行的第一条指令)下面是BIOS程序执行的内容:1、在0x00000处开始的1kb内存空间(0x00000~0x003fff)安装中断向量表(256个中断,c

2015-01-15 18:08:08 1952

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

在内联汇编中使用跳转语句是非常常见的,比如:比较两个数,返回较大数时,就会用到跳转;先看下汇编和运行结果,然后再一步步分析下:                              运行结果:                             代码分析: #include void fun(int a, int b) { printf("a=%d

2015-01-14 18:16:34 4681 1

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

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

2015-01-14 16:59:54 2118

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

汇编代码是最接近机器码,所以也是执行效率最高的,在操作系统中有将近10%的关键性代码是由汇编编写的,而还有部分代码是由C代码嵌入汇编构成的。C代码中嵌入汇编可以提高程序的执行效率,同时这种程序还既有高级语言的特性,可以灵活的和其他模块进行配合工作; c程序内嵌as汇编有比较多的规则,可以从最简单、最基本的开始学起直到后面学习现在通用的内嵌方式。

2015-01-14 14:51:06 1777

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

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

2015-01-14 10:57:20 1807

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

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

2015-01-14 10:29:04 1163

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

开始命令:gdb test; 设置断点:break *_start + 1(cpu运行到 _start+1 的地址上会停止,break可以简写b) 开始运行:run (会运行到第一个断点位置上,一般和断点一起使用) 单步调试:step (会一行一行执行代码,遇到函数会进入函数中执行,step可以简写s) 单步调试:next (和上面的命令类似但,但遇到函数不会进入,直接跳过函数,next可以简写n) 顺序执行:cont (当

2015-01-10 17:08:50 2647

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

as汇编中的内存访问:movl (%ebx), eax(把ebx寄存器指向的地址上的值传送给eax);movl 4(%ebx), eax(把ebx指向的地址的位置往上偏移4字节的地址上的值传送给eax中);movl -4(%ebx),eax(把ebx执行的地址位置往下偏移4个字节的地址上的值传送给eax);movl 4(%ebx, %ecx, 4), eax (把 ebx+4*ecx+4地址上的数据传送给eax);这样一解释,上面的movl $2, 4(%edi),movl (%edi, %ecx, 4),

2015-01-09 16:13:16 1453

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

为了看懂Linux内核源代码,所以不得不重新学习下汇编语言。汇编语言大体可以分为两个风格,官方的intel风格和unix系列的AT&T风格。Intel风格汇编是比较常见的,一般大学时会学习点基础的(至少我大学时学过点基本指令),这一类代表性的有NASM汇编、as86等(我熟悉的就只有NASM汇编,不过这一类汇编都大同小异)。而AT&T风格的汇编是比较少见的,一般只有做Linux开发的才会接触,尤其是做linux c语言开发的,有时候为了追踪代码,迫不得已编译成汇编来检查(如果在Linux下用C语言开发过的,

2015-01-08 17:10:30 2218

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

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

2015-01-04 21:58:47 2764

原创 x86架构中特权级

特权级,可以分为三种;第一、描述符中的特权级DPL,表示这个段的特权;第二、选择子的RPL表示请求方的特权级;第三、当前特权级,表示正在执行的代码段所具有的特权;下面有关特权级知识的总结:        第一、对于数据段来说,特权级DPL表示了可以访问该数据的最低特权。若数据段的DPL为1,那么只有特权级为0或1的程序才能访问他;        第二、特权指令,为了安全和效率有些指令是只能

2015-01-04 17:45:22 2877

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

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

2015-01-04 17:13:39 1772 1

原创 x86架构中的保护模式

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

2015-01-04 09:38:28 3339 1

Ubuntu下openssh-server安装

Ubuntu下openssh-server安装,里面有安装步骤

2017-07-11

bashdb-4.2-0.8

bashdb是一个类GDB的调试工具,使用GDB的同学使用bashdb基本无障碍, bashdb可以运行断点设置、变量查看等常见调试操作

2017-07-08

gcc-3.4.0.tar.gz

gcc-3.4.0.tar.gz

2016-10-10

Linux那些事儿.pdf

Linux那些事儿.pdf

2015-10-08

嵌入式Linux之我行系列

本书是根据相关的博客做的PDF格式的电子书,欢迎到原作者的博客去看看。 这个是目录: ·嵌入式Linux之我行——虚拟机中安装Linux ·嵌入式Linux之我行——虚拟机中实现Linux与Windows之间的文件传输 ·嵌入式Linux之我行——开发环境的建立与Eclipse的使用 ·嵌入式Linux之我行——配置内核时出现“ncurses-devel”错误 ·嵌入式Linux之我行——C+CGI+Ajax在S3C2440中的应用 ·嵌入式Linux之我行——嵌入式数据库sqlite在2440上的移植 ·嵌入式Linux之我行——嵌入式数据库sqlite在2440上的应用 ·嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之内核 ·嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之文件系统 ·嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之RTC时钟驱动 ·嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之DM9000E网卡驱动 ·嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之USB驱动 ·嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之MMC/SD卡驱动 ·嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之LCD驱动 ·嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之触摸屏驱动 ·嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之UDA1341声卡驱动 ·嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一) ·嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(二) ·嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(三) ·嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(四) ·嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(五) ·嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(六) ·嵌入式Linux之我行——s3c2440的IO静态映射的分析 ·嵌入式Linux之我行——内核访问外设I/O资源的方式 ·嵌入式Linux之我行——深入理解DM9000在mini2440上的驱动 ·嵌入式Linux之我行——LCD背光驱动在2440上的实例开发 ·嵌入式Linux之我行——LED驱动在2440上的实例开发 ·Linux内核常用的一些宏的收集 ·嵌入式Linux之我行——按键驱动在2440上的实例开发(带去抖动) ·嵌入式Linux之我行——ARM MMU工作原理剖析 ·嵌入式Linux之我行——设备文件系统剖析与使用 ·嵌入式Linux之我行——PWM在ARM Linux中的原理和蜂鸣器驱动实例开发 ·嵌入式Linux之我行——S3C2440上RTC时钟驱动开发实例讲解 ·嵌入式Linux之我行——S3C2440上看门狗(Watchdog)驱动开发实例讲解 ·嵌入式Linux之我行——S3C2440上ADC驱动实例开发讲解 ·嵌入式Linux之我行——S3C2440上触摸屏驱动实例开发讲解 ·嵌入式Linux之我行——S3C2440上LCD驱动(FrameBuffer)实例开发讲解(一) ·嵌入式Linux之我行——S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二) ·嵌入式Linux之我行——RamDisk块设备驱动实例开发讲解 ·嵌入式Linux之我行——S3C2440上MMC/SD卡驱动实例开发讲解(一) ·嵌入式Linux之我行——S3C2440上MMC/SD卡驱动实例开发讲解(二) ·嵌入式Linux之我行——内核通知链机制的原理及实现(转载) ·嵌入式Linux之我行——S3C2440上Flash驱动实例开发讲解(一)

2015-07-20

深入Linux设备驱动程序内核机制.pdf

深入Linux设备驱动程序内核机制.pdf 深入Linux设备驱动程序内核机制.pdf 深入Linux设备驱动程序内核机制.pdf

2015-06-29

PCI-E和FPGA

PCI-E和FPGA

2015-05-22

NVM-Express 1.2

NVM-Express-1_2-Gold-20141209.pdf

2015-05-21

Oracle VM VirtualBox 桥接模式驱动

Oracle VM VirtualBox桥接模式驱动;具体的使用请参考我的博客 http://blog.csdn.net/yuzhihui_no1?viewmode=contents中的《Linux下的网络配置命令》

2015-03-10

x86汇编从实模式到保护模式(pdf、相关代码、软件工具)

x86汇编从实模式到保护模式(pdf、相关代码、软件工具),注:没有14~17章,谁有麻烦给我份,谢谢!!

2014-12-11

软件开发电子书百宝箱

里面包含了所有软件开发所需要的电子书,有C语言、C++、Java、PHP、shell等等语言的开发电子书。也有windows下的各种开发电子书,更有unix/Linux编程开发,以及驱动 内核之类的(ldd3,深入理解linux内核等)电子书

2014-08-11

Linux设备驱动程序(中文版第三版含例题)

Linux设备驱动程序(中文版第三版)里面包含例题

2014-08-11

Linux设备驱动程序(每章一个文件)

Linux设备驱动程序。分章阅读,每一个pdf文件就是一章。

2014-08-11

空空如也

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

TA关注的人

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