- 博客(9)
- 资源 (4)
- 收藏
- 关注
原创 计算机的启动-从设计一个主板开始
<br />计算机是怎么启动的呢?这是一个问题。操作系统是怎么操作硬件的呢?这是又是一个问题。编址是怎么回事,这当然也是一个问题。我们通过设计一个简单的主板来理解这一切。<br />首先我们看一下编址,所谓的编址有一种方式就是将所有主板上“可以被访问的”设备全部编址到一个空间中,这样的设备包括内存,pci设备等所有设备。本文还是以最简单的方式举例,我们设想地址总线只有3位,也就是cpu只能处理3位的地址,那么我们怎么设计一个主板呢?不失一般性,以最简单的场景为例,我们的板子上除了一个内存外只有一个设备叫
2011-03-19 20:13:00 4698 1
原创 串口和并口-硬件机制和软件策略
<br />记得世纪之初的第四年,我刚上大学,记得老师讲串口比并口简单,但是并口一次可以发送8位的数据,当时我就觉得并口比串口好,因为它速度更快,可是后来,随着时间的流逝,我几乎发现并口失踪了,没有人再使用它了,难道一次可以传输8位的线缆没有一次仅可以传输1位的线缆好吗?<br /> 后来参加工作,我逐渐明白了这个问题,并口虽然单次传输速度很快,然而一旦1位出错,8位的数据就全部重新传输,另一方面,也不利于单位控制,比如有的时候不需要传输8位的数据,只需要传输1位的控制位即可,另外最重要的,8位
2011-03-13 18:12:00 3821 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 8759
原创 BIOS的自检原理和其重要性
<br />主板上电后整个主板和其上的芯片/总线控制器就构成了一幅地图,该地图表示某某设备在哪个地方放着,然后BIOS自检就开始了。需要注意的是,万事开头难,bios是怎么开始运行的呢?它的指令代码如何开始执行的呢?这无须我们关心,是标准强制的,比如bios占据地址总线上发出地址a到b这个区间,然后主板地图建立好(电压稳定)之后,cpu从地址a到b之中的某个特定的位置c开始执行,这个过程十分简单,cpu将从c取指令,将地址c发到地址总线,北桥根据标准将之路由到bios芯片,然后bios芯片将指令通过数据总线
2011-03-13 17:18:00 9806 3
原创 x86架构下的物理内存-通过linux概述
其它体系结构我没有深入研究过,然而对于x86而言,我们很多人都是很了解的。其内存可以支持4G(不考虑PAE),因为地址总线为32位,也就是说32条1位的线缆可以选择4G的地址,因此我们想当然的认为我们买了两条2G的内存插入以后,我们的系统就可以有4G的内存可用了,我们的系统内存在满载运行,然而果真如此吗?答案是否定的! 因为所谓的地址总线32位是指从cpu引脚出来的总线是32位,是针对于cpu而言的,具体这些总线最终能全部连接在主板的ram上吗?会不会还会连接到其它的设备上呢?这要看主板怎么设计
2011-03-12 13:30:00 8133 2
原创 十一步让你理解linux的内存映射
<br />零:32位操作系统只有4G的虚拟地址空间,linux将最上的1G用于内核虚拟地址。<br />一:linux将物理内存完全一一映射到内核空间,这样很方便管理内存,任何页面的虚拟地址减去一个0xc0000000的偏移就可以得到物理地址。<br />二:内核还需要动态管理一些内存用于vmalloc或者设备临时映射等,因此不能将1G的虚拟空间完全一一映射物理内存,因此权衡了一个896M的大小,0xc0000000到0xc0000000+896M的虚拟地址空间一一映射物理内存,从0xc00000
2011-03-12 13:27:00 6564 2
原创 自制AMD CS5536关机代码和嵌入式
AMDCS5536是一款很流行的嵌入式处理器,在基于它的架构上,可以做成各种小器具,然后如果操作系统是linux,且内核低于2.6.18的话,据我所知,它不能实现软关机,也就是说调用shutdown之后机器无法关闭,怎么办呢?最近我搞到一块AMD CS5536的板子,想自己做点东西,可无奈发现它在linux下无法关机,按电源也必须4秒,索性只好将开关做成纯电气的而不是电子的,也就是说按下开关直接切断电源,然而这决不是长久之计,最重要的是要实现软关机,即使实现不了也要实现按下电源立马关闭,也就是说不用再等
2011-03-04 22:10:00 5553 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 11089 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 9637
一个iptables的stateless NAT模块实现
2014-12-27
模块化的nf-HiPAC
2014-11-21
关于linux内核以及其他个人体会的文集
2009-09-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人