自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 资源 (4)
  • 收藏
  • 关注

原创 计算机的启动-从设计一个主板开始

<br />计算机是怎么启动的呢?这是一个问题。操作系统是怎么操作硬件的呢?这是又是一个问题。编址是怎么回事,这当然也是一个问题。我们通过设计一个简单的主板来理解这一切。<br />首先我们看一下编址,所谓的编址有一种方式就是将所有主板上“可以被访问的”设备全部编址到一个空间中,这样的设备包括内存,pci设备等所有设备。本文还是以最简单的方式举例,我们设想地址总线只有3位,也就是cpu只能处理3位的地址,那么我们怎么设计一个主板呢?不失一般性,以最简单的场景为例,我们的板子上除了一个内存外只有一个设备叫

2011-03-19 20:13:00 4677 1

原创 串口和并口-硬件机制和软件策略

<br />记得世纪之初的第四年,我刚上大学,记得老师讲串口比并口简单,但是并口一次可以发送8位的数据,当时我就觉得并口比串口好,因为它速度更快,可是后来,随着时间的流逝,我几乎发现并口失踪了,没有人再使用它了,难道一次可以传输8位的线缆没有一次仅可以传输1位的线缆好吗?<br />     后来参加工作,我逐渐明白了这个问题,并口虽然单次传输速度很快,然而一旦1位出错,8位的数据就全部重新传输,另一方面,也不利于单位控制,比如有的时候不需要传输8位的数据,只需要传输1位的控制位即可,另外最重要的,8位

2011-03-13 18:12:00 3787 1

原创 安装linux和windows双系统

<br />很多人一提到安装linux和windows双系统就会想到单独将磁盘划一个分区给linux,如果一块磁盘上已经安装了windows,并且所有分区都有数据,那就麻烦了,即使有了单独的分区,还需要安装grub,然后在grub中选择启动linux还是启动windows。<br />     其实没有这么麻烦,完全可以将linux安装在windows的分区上。将linux和windows“安装”在同一个分区上。在linux中只需要加载ntfs即可,对于linux而言,文件系统到底是ext2还是ext3

2011-03-13 17:25:00 8738

原创 BIOS的自检原理和其重要性

<br />主板上电后整个主板和其上的芯片/总线控制器就构成了一幅地图,该地图表示某某设备在哪个地方放着,然后BIOS自检就开始了。需要注意的是,万事开头难,bios是怎么开始运行的呢?它的指令代码如何开始执行的呢?这无须我们关心,是标准强制的,比如bios占据地址总线上发出地址a到b这个区间,然后主板地图建立好(电压稳定)之后,cpu从地址a到b之中的某个特定的位置c开始执行,这个过程十分简单,cpu将从c取指令,将地址c发到地址总线,北桥根据标准将之路由到bios芯片,然后bios芯片将指令通过数据总线

2011-03-13 17:18:00 9626 3

原创 x86架构下的物理内存-通过linux概述

其它体系结构我没有深入研究过,然而对于x86而言,我们很多人都是很了解的。其内存可以支持4G(不考虑PAE),因为地址总线为32位,也就是说32条1位的线缆可以选择4G的地址,因此我们想当然的认为我们买了两条2G的内存插入以后,我们的系统就可以有4G的内存可用了,我们的系统内存在满载运行,然而果真如此吗?答案是否定的!     因为所谓的地址总线32位是指从cpu引脚出来的总线是32位,是针对于cpu而言的,具体这些总线最终能全部连接在主板的ram上吗?会不会还会连接到其它的设备上呢?这要看主板怎么设计

2011-03-12 13:30:00 8110 2

原创 十一步让你理解linux的内存映射

<br />零:32位操作系统只有4G的虚拟地址空间,linux将最上的1G用于内核虚拟地址。<br />一:linux将物理内存完全一一映射到内核空间,这样很方便管理内存,任何页面的虚拟地址减去一个0xc0000000的偏移就可以得到物理地址。<br />二:内核还需要动态管理一些内存用于vmalloc或者设备临时映射等,因此不能将1G的虚拟空间完全一一映射物理内存,因此权衡了一个896M的大小,0xc0000000到0xc0000000+896M的虚拟地址空间一一映射物理内存,从0xc00000

2011-03-12 13:27:00 6545 2

原创 自制AMD CS5536关机代码和嵌入式

AMDCS5536是一款很流行的嵌入式处理器,在基于它的架构上,可以做成各种小器具,然后如果操作系统是linux,且内核低于2.6.18的话,据我所知,它不能实现软关机,也就是说调用shutdown之后机器无法关闭,怎么办呢?最近我搞到一块AMD CS5536的板子,想自己做点东西,可无奈发现它在linux下无法关机,按电源也必须4秒,索性只好将开关做成纯电气的而不是电子的,也就是说按下开关直接切断电源,然而这决不是长久之计,最重要的是要实现软关机,即使实现不了也要实现按下电源立马关闭,也就是说不用再等

2011-03-04 22:10:00 5458 1

原创 linux的64位操作系统对32位程序的兼容-全面分析

<br />1.结构体ioctl_trans:<br />struct ioctl_trans {<br />    unsigned long cmd;<br />    ioctl_trans_handler_t handler;<br />    struct ioctl_trans *next;<br />};<br />该结构体提供了一个粘合层,用户可以动态注册一个ioctl_trans以便其提供64位和32位的粘合:<br />extern int register_

2011-03-03 21:26:00 10925 1

原创 linux的64位操作系统对32位程序的兼容-一个问题开始

<br />最近在调试一个关于OpenVPN的程序,由于是远程支持的因此一些很奇怪的现象根本不好找切入点,比如OpenVPN客户端连接服务器正常,虚拟IP地址也已经分配了,tap设备已经打开并没有抱错,然而打开的tap设备不是tap0而是" ",也就是什么都没有,连个空格都不是,这是怎么回事呢?<br />     为了问题简化,将引起问题的代码从OpenVPN中切出来,得到一个纯粹打开tap设备的代码:<br />int main(int argc, char *argv[])<br />{<

2011-03-03 21:22:00 9598

一个iptables的stateless NAT模块实现

如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题。不要从概念上分析,事实上,static双向NAT是完全对称的,一对一的 ,也只有在BOX两边的网络在拓扑级别是完全对等的情形下,这种NAT或许才是有用的,Cisco设备经常处在这样的位置,比如一个很大的stub节点的出口位置,比如两个domain的中间位置... 我将名字取为STATIC-2-WAY-NAT,比较长也比较怪,完全不符合UNIX的小写短名传统,我的想法是:这样可以少写很多的帮助信息,因为名字就是自解释的。

2014-12-27

模块化的nf-HiPAC

原版的nf-hipac需要为内核打patch,且只支持较低版本的内核,构建起来相对比较麻烦。 模块化后的nf-hipac可以直接作为内核可加载模块编译,且适配了高版本的Linux内核。为了移植工作简化,去掉了和iptables模块的联动支持!

2014-11-21

配置文件还有一些other

代码和配置iptables配置文件,还有一些别的东西

2010-04-16

关于linux内核以及其他个人体会的文集

本文集是我用将近两年的时间写成的,大多数文章是关于linux内核的,另外还有一些我自己对计算机的理解,还有一些历史,音乐方面的东西。适合于对linux内核思想感兴趣的阅读,文章偏重于对于思想的理解。

2009-09-07

空空如也

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

TA关注的人

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