Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

Linux内核--网络栈实现分析

Linux内核--网络栈实现分析

本文分析基于内核Linux Kernel 1.2.13以后的系列博文将深入分析Linux内核的网络栈实现原理,这里看到曹桂平博士的分析后,也决定选择Linux内核1.2.13版本进行分析。原因如下:1.功能和网络栈层次已经非常清晰2.该版本与其后续版本的衔接性较好3.复杂度相对新的内核版本较小,复杂度低,更容易把握网络内核的实质4.该内核版本比较系统资料可以查询下面开始零基础分析Linux内核网络部分的初始化过程。经过系统加电后执行的bootsect.S,...
Linux0.11内核--启动引导代码分析bootsect.s

Linux0.11内核--启动引导代码分析bootsect.s

Linux内核中的系统启动引导代码位于/boot目录下但是,由于。Linus当时是在MINIX系统上开发Linux的,最初MINIX系统上还没有移植gas程序,因此Linus就使用了MINIX系统上的as86。bootsect需要是16位的实模式程序。目前gas汇编器也支持16位的编译。所以现在也可以直接用as编译器直接编译。下面是用at&t格式改写的bootsect.s代码.code16 #rewritewithAT&Tsyntaxbyf...
Linux0.11内核--启动引导代码分析setup.s

Linux0.11内核--启动引导代码分析setup.s

setup的整体作用:首先利用BIOS中断读取机器的数据,将其保存在地址0x9000:0x0000处,覆盖了原来bootsect.s代码所在的位置,由于bootsetc模块的代码运行完毕,已经没有其他的用处了,所以可以将其覆盖掉。然后关闭中断,setup将system模块整体移动至内存起始处,原来位于0x1000:0x0000,由于movsb和movsw指令的功能是移动一个字节或者一个字,源地址由寄存器ds:si指定,目的地址由es:di指定。指令cld指...
Linux0.11内核--idt(中断描述符表的初始化)head.s分析

Linux0.11内核--idt(中断描述符表的初始化)head.s分析

head.s被编译成system模块的最前面部分,故而称为头部。这段程序处于地址的绝对0处,首先是加载各个数据段寄存器,重新设置中断描述符表 idt,共 256 项,并使各个表项均指向一个只报错误的哑中断程序。然后重新设置全局描述符表 gdt。接着使用物理地址 0 与 1M 开始处的内容相比较的方法,检测 A20 地址线是否已真的开启(如果没有开启,则在访问高于 1Mb 物理内存地址时 CPU 实际只会访问(IP MOD,如果检测下来发现没有开启,则进入死...
Linux0.11内核--32位保护模式GDT(全局描述符表)

Linux0.11内核--32位保护模式GDT(全局描述符表)

在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table)。为什么要有GDT?我们首先考虑一下在Real Mode下的编程模型:在Real Mode下,我们对一个内存地址的访问是通过Segment:Offset的方式来进行的,其中Segment是一个段的Base Address,一个Segment的最大长度是64 KB,这是16-bit系统所能表示的最大长度。而Offset则是相对于此Segm...
Linux0.11内核--A20地址线

Linux0.11内核--A20地址线

1981 年 8 月,IBM 公司最初推出的个人计算机 IBM PC 使用的 CPU 是 Intel 8088。在该微机中地址线只有 20 根(A0 – A19)。在当时内存 RAM 只有几百 KB 或不到 1MB 时,20 根地址线已足够用来寻址这些内存。其所能寻址的最高地址是 0xffff:0xffff,也即 0x10ffef。对于超出 0x100000(1MB)的寻址地址将默认地环绕到 0x0ffef。当 IBM 公司于 1985 年引入 AT 机时...
Android一键锁屏程序实例

Android一键锁屏程序实例

据笔者了解,所有的Android手机都用电源键来手动锁屏。笔者使用手机时,一天之内手动锁屏的次数绝对不少于30次。如果都用电源键来进行的话,那么电源键的使用寿命一定不会长久。虽然现在有很多的桌面软件都集成了一键锁屏,但是要安装这些软件就必须安装它们的其他组件,这点让人很不爽,因为他们会定期自动更新,或者在后台运行一些我不想要的东西。所以我决定自己写一个锁屏程序。经过在android开发文档里面的查找,我发现从android 2.2开始,API里面就包含了一...
Android 实现大图的滚动显示

Android 实现大图的滚动显示

问题:我有一张比较大的图片,比如长宽都是屏幕的两倍大小,我想实现的功能是首先将图片居中显示,由于图片太大显然只能显示一部分,然后可以通过拖动,实现图片的平滑滚动(既看不出来滚动刷新痕迹)。就像google地图一样,如果用mapView这个控件,那么可以在屏幕上拖动整个地图,但是由于地图信息量太大,如果一次拖动过快,那么屏幕会暂时显示出一些刷新痕迹(灰白的格子)。想使用mapView来加载已有图片,但是没有成功,后来也使用了Srollview控件,和最常用的...
OK6410、Linux2.6.36内核移植,DM9000 驱动移植

OK6410、Linux2.6.36内核移植,DM9000 驱动移植

还是先来吐槽:本来我是在上一个星期的周末已经把 Linux2.6.34.11 的驱动已经成功的移植到, OK6410 的开发板上的,并且能够启动主机上的NFS 根文件系统, 可是我在周一的时候,开始学习LCD 的驱动程序, 在修改内核文件的时候,有几处错误修改,将原来自己做的2.6.34.11 的内核源码 搞的乱七八糟的,在这里还是自己在修改内核的时候没有提注重注释, 并且没有记录下来自己的操作步骤,以至于我没办法,恢复2.6.34 的内核, 所以也就只能...
移植U-Boot.1.2.0到友善之臂SBC2440V4(S3C2440AL)

移植U-Boot.1.2.0到友善之臂SBC2440V4(S3C2440AL)

首先,U-Boot1.2.0还没有支持s3c2440,这次移植是用2410的文件稍作修改而成的。其实2440和2410的区别主要是2440的主频更高,增加了摄像头接口和AC‘97音频接口;寄存器方面,除了新增模块的寄存器外,移植所要注意的是NAND FlASH控制器的寄存器有较大的变化、芯片的时钟频率控制寄存器(芯片PLL的寄存器)有一定的变化。其他寄存器基本是兼容的。U-Boot源代码下载地址 http://www.linuxidc.com/Linux/...
U-boot移植记录

U-boot移植记录

今天完成了通用Uboot 移植于ARM开发板的修改 和 移植工作。我的操作环境是VMware 虚拟机 Ubuntu 10.10。ARM11开发板OK6410。 与其说是自己完成的,还不如说我是借鉴,照搬,套用,挪动...........等等等........呵呵!网上这类帖子挺多的,可以借鉴http://www.linuxidc.com/Linux/2012-04/59295.htm,等等优秀好文。我这里就仅仅总结一下自己的学习过程,以便帮助后来者,并方便...
ARM Linux驱动

ARM Linux驱动

就自己在学习驱动过程中的一些错误和解决办法的记录:我的操作环境是虚拟机 Ubuntu 10.10 。 测试内核 2.6.28 和 2.6.34今天就只写菜鸟最简单的:如何在make menuconfig 后能添加自己的驱动模块。网上Linux驱动学习的帖子都太多了,但是写给菜鸟的很少。而我自己在写完成make menuconfig时也入到了不少的错误。现在将自己的错误记录如下,只为帮助后来者。1、修改顶层Makefile时出现的错误在设置cpu类型,修改交...
iPhone-使用TextField及键盘(useing TextField for inputs、using the keyboard)

iPhone-使用TextField及键盘(useing TextField for inputs、using the keyboard)

创建项目,名字为KeyBoard,我用的是xcode4.2!在MainStoryboard.storyboard文件里拖四个label和四个TextField,如下界面:填满内容:点击完成Done键盘会消失!!首先我先说说四个TextField的属性分别对应如下:name:age:keyboard改成Numbers and Punctuationpassword:把Secure属性勾上email:keyBoard发成E-mail Address接下来是在K...
C语言写螺旋队列并分析

C语言写螺旋队列并分析

C语言写螺旋队列21 22 .... 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13 看清以上数字排列的规律,设 1 点的坐标是 (0,0),x 方向向右为正,y 方向向下为正。例如,7 的坐标为 (-1,-1),2 的坐标为 (0,1),3 的坐标为 (1,1)。编程实现输入任意一点坐标 (x,y),输出所对应的数字。[Finland 某著名通信设备公司 2005 年面试题] 规律是什么?规律真的一看...
Mini6410基于Linux2.6.36内核制作initramfs文件系统

Mini6410基于Linux2.6.36内核制作initramfs文件系统

根文件系统一般包括:1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp;2)基本程序运行所需的库函数,如:libc/uC-libc;3)基本的系统配置文件,如:rc,inittab等脚本文件;4)必要的设备支持文件,如:/dev/hd*,/dev/tty,/dev/fdO;5)基本的应用程序,如:sh,ls,cp,mv等。 根文件系统的制作就是生成包含上述各种文件的文件系统的过程,可通过...
Tiny6410基于SDBOOT通过NFS启动根文件系统

Tiny6410基于SDBOOT通过NFS启动根文件系统

当 NFS 服务设置好并启动后,我们就可以把 NFS 作为根文件系统来启动开发板了。通过使用 NFS 作为根文件系统,开发板的“硬盘”就可以变得很大,因为您使用的是主机的硬盘,这是使用 Linux 作为开发经常使用的方法。设置开发板为 SDBOOT 启动,注意需要进入菜单模式(见 2“刷机指南”),连接好电源,串口线,网线;打开串口终端,输入以下命令(不需要加引号):console=ttySAC0 root=/dev/nfs nfsroot=192.168...
<< 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 >>