2009年6月8日星期一

倡议书之后

I don't know my future and what do and how to do?
This's shit!

No,more illegal.这是《战争之王》里面的,我感觉这个世界有时候真的是这样的。很无奈,里面主角的弟弟的思想很好,但是最后呢?很惨!国际刑警呢?更是无可奈何,世界就是这样的。我有什么办法改变这个世界呢?像好的方面呢?如果正义不行动,那么邪恶就获胜了!

这次倡议,我花费了大量的时间,但是连一个宿舍的兄弟也不支持我,影响力及其的小,要改变我们的陋习真的太难了,如果是给五百万,那么,喔喔,说笑话了,那么会有人打破脑袋去行动的。其实,这个结果,是我可以预料的,但是,这影响力也太小了,连自己一个宿舍的也没有办法影响,我还那里敢期望影响一个学校的学生的整体行为呢。
当然,我还记得《上海滩》里面许文强,当年是爱国的热心青年,可是最后呢?得到了什么?我过去常说的一句话,“心一变好,就会犯错”
许文强,也是这样,没有了一切,没有。。。一切是过眼云烟,但是我们又能如何呢?甚至想过一个平常而简单的生活也不行,这就是这个世界。要么不敢坏事,要么干最坏的!否则你会很惨的!这个世界唯有好事情最难干,效果最微,有时候我怀疑人性是不是坏的,因为人不为己天诛地灭,任何生物都是为了生存而在相互竞争着!
但是,我不会干坏事情的,这是唯一不会干的事情!
这次倡议说明了什么,说明了,我们的素质深受周围的小环境的影响,很多人做的不是很好,也就为什么很多人只是一个普普通通的一个人,没有任何,他们也同样在这个世界上会悄无声息的来,悄无声息的走。我想这样,我想我也不会是这样的。这次倡议虽然没有达到我要的结果但是这个过程才是我真正的要的,这也许就是我吧!但是我在这个过程中真的投入了,但是没有几个人理解,没有几个人真正的支持,因为那样会影响他们的“方便”,要改变他们的“习惯”这真的不简单!我也认识到我的那些优秀的想法是可行的,而且是正确的,但是加上配合就会更加的完美了。有梦想就可以实现的,真的,这是这次我得到的最重要的事情了。
环境,素质,整体的行为,我一个人的力量是没有办法改变的。也只好那样了,只是希望会好吧!没有什么,对我来说,只是和平时一样,我还是我!

倡议书之后

I don't know my future and what do and how to do?
This's shit!

No,more illegal.这是《战争之王》里面的,我感觉这个世界有时候真的是这样的。很无奈,里面主角的弟弟的思想很好,但是最后呢?很惨!国际刑警呢?更是无可奈何,世界就是这样的。我有什么办法改变这个世界呢?像好的方面呢?

这次倡议,我花费了大量的时间,但是连一个宿舍的兄弟也不支持我,影响力及其的小,要改变我们的陋习真的太难了,如果是给五百万,那么,喔喔,说笑话了,那么会有人打破脑袋去行动的。其实,这个结果,是我可以预料的,但是,这影响力也太小了,连自己一个宿舍的也没有办法影响,我还那里敢期望影响一个学校的学生的整体行为呢。
当然,我还记得《上海滩》里面许文强,当年是爱国的热心青年,可是最后呢?得到了什么?我过去常说的一句话,“心一变好,就会犯错”
许文强,也是这样,没有了一切,没有。。。一切是过眼云烟,但是我们又能如何呢?甚至想过一个平常而简单的生活也不行,这就是这个世界。要么不敢坏事,要么干最坏的!否则你会很惨的!这个世界唯有好事情最难干,效果最微,有时候我怀疑人性是不是坏的,因为人不为己天诛地灭,任何生物都是为了生存而在相互竞争着!
但是,我不会干坏事情的,这是唯一不会干的事情!
这次倡议说明了什么,说明了,我们的素质深受周围的小环境的影响,很多人做的不是很好,也就为什么很多人只是一个普普通通的一个人,没有任何,他们也同样在这个世界上会悄无声息的来,悄无声息的走。我想这样,我想我也不会是这样的。这次倡议虽然没有达到我要的结果但是这个过程才是我真正的要的,这也许就是我吧!但是我在这个过程中真的投入了,但是没有几个人理解,没有几个人真正的支持,因为那样会影响他们的“方便”,要改变他们的“习惯”这真的不简单!我也认识到我的那些优秀的想法是可行的,而且是正确的,但是加上配合就会更加的完美了。有梦想就可以实现的,真的,这是这次我得到的最重要的事情了。
环境,素质,整体的行为,我一个人的力量是没有办法改变的。也只好那样了,只是希望会好吧!没有什么,对我来说,只是和平时一样,我还是我!

2009年6月5日星期五

svn

关于使用svn
以前使用过svn但是一直没有很好的掌握,现在又用它管理自己的代码,就好好的学习一下了,不能向过去那样一知半解了,要把基本的操作学习会。
把自己的心得分享,基本操作而已,只要好好的看看文档你就会学的更好。
你先在网上建立自己仓库,当然在本地建立也可以。
我是在这里建立的http://code.google.com/intl/zh-CN/
当然,项目是在http://code.google.com/p/gosoco/ 但是代码是在/svn目录下,也就是说在前面那个url(链接地址)的后面添加/svn就是你代码和其他一些的存放目录了。我原来一直以为是在https://gosoco.googlecode.com/svn/trunk/这个目录下,其实你可以在/svn目录下建立很多其他的目录,那样就同样是可以,我只是为了练习才建立的其他目录。
建立目录,用术语就是导入目录
svn import -m "Add a Directories" 本地文件名 https://myccode.googlecode.com/svn/在远程新建立的目录名(不用你在那里建立,只要在这里写就可以了)
当然,你首先要导出你的所有的和在本机上建立副本,那样就可以很容易对仓库操作了。
svn checkout 存放代码的仓库 项目名 --username 用户名
注意:存放代码的仓库 是 你上面建立的那个url 而且google 一般会告诉你如何导出,但是它默认的路径是url/svn/trunk 但是你想在/svn下面建立一些目录,那最好还是用url/svn 目录就可以了。
如果你遇到,不是副本之类的问题,多数是你导入和导出存在问题,好好看看你的目录。

添加文件,你已经在本地编写了很多文件,用下面的命令添加可以了
svn add 文件名

删除文件,命令svn del 文件名

你已经做了修改,好就开始改变版本吧!
svn ci -m "添加一些本要的说明"

你误操作,就可以用svn update
更新之后,用命令修改就OK了。

其他操作请看svn help吧!
很多命令只有在有网络的时候才可以用哦!

倡议书

倡议书

提倡大家在就完餐之后把自己的餐具放到收集的地方

夏日炎炎,当我们学习完之后,就餐时,端着我们的“美食”但是苦于没有座位而来回走动,当我们好不容易找到时,发现满桌子的“杯盘狼藉”你又是什么感觉呢?草草收拾,眼不看四周,低头就吃,吃的可爽?
我们的环境是由我们自己建造的,那些”杯盘狼藉“中是否有你的一份呢?你是否人云亦云呢?发现自己对食欲越来越没有要求,难道你能够容忍这种环境而不亦乐乎的品味“美食”吗?
清洁工办事情的效率再高也不可能把我们随手放下的餐具瞬间收拾好吧!
我不是要个性,也不是什么高素质,但是我想收拾自己的餐具是理所当然的事情,举手之劳而已,为什么那么多人做不到呢?
不要说环境培养你成为那样的,我们谁影响了谁,这可是我们大家集体的行为。
我们大家集体好,才会真的好!
亲爱的朋友们,你不想有一个干净的环境吗?给别人笑脸就是给自己笑脸!给别人一个干净的就餐环境同样也是给了自己。
也许你忙于什么比赛,全国的,全省的,全院的,但是请你也同样参与这生活中心灵的比赛,这里没有什么奖品,但是我们会得到更美好的环境,更舒心的就餐环境。而且不需要你准备很多,也不需要你付出很多,只是做好自己,力所能及的事情而已。首先,那样不会浪费你任何的时间,其次,那样给别人一个好的环境,最重要的是自己也会愉悦和享受别人为自己提供的好环境。
我想你也知道用塑料袋带饭不是最好的选择,只是你不想在那样的环境就餐,如果有一个整洁的环境你也许就会更加有胃口了。
我们集体或者多个人吃饭的时候更是有很多餐具在一起,愉快的就完餐,请每个人都随手端一个就会为很多人提供了一个干净的环境。
如果,你看了此文改变了你的一些行动,那就请你把你的好习惯保持下去,因为真的会有很多人这样做得,同时请你告诉你周围的人,让他们同样行动起来。你的一点小小的改变就会产生你可以料想到的好效果的。请用你知道的方式告诉更多的人,比如:网络。
网络相册会记录我们的改变,我们的集体的力量和美好的环境。
上传最真实的我们的就餐环境的照片,网站是如下,当然还会建立很多这样的网络相册,
http://picasaweb.google.com/XiyouCanteen/
用户xiyoucanteen密码xiyou2009 (请不要随意改动密码)
让事实证明我们可以,我们真的需要一个良好的环境就餐,我们也一定会有一个好的环境就餐,照片会不断的更新,朋友们把你看到的好的不好的上传到那里把,感谢你的分享。


写的不是很好,请那些文采好的同学,朋友帮忙修改,改好,请发到xiyoucanteen@gmail.com



不久,应该会有大变,也许我会有大行动!



给我更好的意见!谢谢!

2009年5月30日星期六

自己动手写操作系统1

自己动手写操作系统
看到这本书的时候是我大二上学期,几乎很多看不懂,秘密糊糊的看了些,没有真正的自己动手,感觉自己的能力要提高才可以,其实不然,可以我过去是多么的幼稚和没有及其强烈的求知欲和好奇心。但是,现在也一点也不晚,我会认真的读这本书同时我也会实践里面的内容,而不是简单的读书,更重要的书中的思想和精神?真的是一本不错的好书。
好,让我们开始第一章
纸上得来终觉浅,绝知此事要躬行。——陆游
用到什么学什么。
只要用心,就没有学不会的东西。
Intel Architecture Software Developer Manual

software: NASM汇编编译器 虚拟机

用NASM编译一下
nasm boot.asm -o boot.img
简单说明一下,我是根据自己平台对书中进行了一些改动,那样我才可以在我的电脑上完成相应的任务,而且我暂时是不会用windowns的,所以有很多将不一样。

当计算机电源被打开时,它会先进行加电自检(POST),然后寻找启动盘,如果是选择从软盘启动,计算机就会检查软盘的0面0磁道1扇区,如果发现它以0xAA55结束,则BIOS认为它是一个引导扇区,也就是我们说的Boot Sector。一个正确的Boot Sector除了以0xAA55结束之外,还应该包含一段小于512B的执行码。一旦BIOS发现了Boot Sector,就会将这512B的内容转载到内存的0000:7c00处,然后跳转到0000:7c00处将控制权彻底交给这段代码。到此为止电脑就不再由BIOS控制了而是变成由操作系统的一部分来控制了。

可以用ndisamw -o 0x7c00 boot.img >> disboot.asm
反汇编查看刚才生成的二进制文件
而真正用的是[root@localhost 1]# ndisasm -o 0x7c00 boot.img >> disboot.asm
其disboot.asm文件中用
00007C09 E9FDFF jmp word 0x7c09
first
这本书,我现在看了真的比较符合现在的学生,更加注重的是感性认识,但是我们感性的认识了还是要上升到理性的认识哦!

magic

关于魔术,我以前也有点喜欢,但是从上次,同学生日聚会,那次亲身体验了近景魔术,感觉真的比较神奇。尽管自己也知道那是手法或者是道具,都是假的,但是我看不出来如何的破绽。现在看了很多教学视频知道了一些基本的手法,当然只是学的一招半式,不敢拿出去卖弄,完全自娱自乐。昨天晚上看了《致命魔术》,那些是职业魔术师,表演大魔术,当然还有危险的魔术,他们玩的也太疯狂了,其实是竞争太激烈了。最后,把自己的家人都赔进去了,甚至连自己也搭了进去,那些真的是太不可思议了,也许在其他的领域里也会有发生这类事件的。当然,我玩魔术不会玩的像他们那么的好,自然也不会像他们那样为了竞争而不择手段,但是也许当我们为了生存有时候不得不那样干,我会给别人更多的关心来化解彼此的矛盾,也许那样付出很多最后什么也得不到,甚至会得到更多的报复和变本加厉的索取。所以,现在魔界有自己规则,那样对每一个人都是有益的。永远,不要太自负了!

记录一些小技巧,其实魔界里面真正的高手会用复杂的方式记录自己魔术技巧的,为了保存自己的技术更防止别人的偷看。而我呢?无所谓了,那些技巧网上也多的是呢?不是什么秘密。

开扇练习了,大概俩周了,还是不是那么的熟练有时开不好。

玩硬币,感觉手还是很生硬,不是很灵活,别人估计可以看的很清楚那是为什么。
用右手把硬币放在左手,合并左手,同时用右手的中指取走硬币,感觉硬币还在你的左手其实已经在右手了。这个技巧很实用!
把硬币可以在自己的手缝自己任意的翻转,也可以藏在任意俩根手指之间。
手心藏硬币。

扑克,变脸:
1.面对观众,把左手中的牌的最后一张准备配合右手同时伸出去,把牌放到右手而后拿上来放在整副牌的上面就OK了,要快,而且要在放上来还在装一会就好了。
2.把牌拉起,同时用握牌的那个手的拇指卡住一张牌,另一个手拉起牌,然后迅速放下就OK了牌已经改变了。
很多时候是需要用小拇指卡牌的,在后面就可以看见魔术的WHY了,只是障眼法而已,一切要快更要会用语言吸引观众。(视频里面告诉,这些小魔术可以泡小MM哦),当然魔术可以提升自己的个人魅力的!
大拇指,要拨牌。可以把多张牌当作一张使唤哦,效果不错,最好是用中指那牌效果更好。
差不多可以学切牌了,其实很好玩。

皮筋:
把十字枷锁,把皮筋拿出来,用一个手指压住皮筋而后想办法把手指转出来就OK了
用俩个皮筋,做翻山,就是把最后一根皮筋放在最上面,而后把交叉住的掩饰起来就OK了

剪绳
看似中间剪断其实是剪断了一个头而已,而后还把断的那里用手握住而后还可以利用再次剪断,感觉还是从中间剪断。
利用吸管和绳子表演,其实吸管已经被剪破了,而后把绳子伸进吸管,对折吸管,拉绳子(奥秘就在这里),剪断吸管,不要拿开哦,拉出绳子(完好无损)。

2009年5月22日星期五

wireless

无线局域网的组建
基础实验
一.实验目的
学习接入无线网络和使用无线网卡及其无线路由器
二.实验原理
局域网的组建原理
无线网卡的配置和无线路由的管理
接入最近的无线路由器
三.实验步骤
1.查找无线网卡,没有则可用外接的无线网卡
2.配置无线网卡,(最好是知道你附近的无线路由的IP地址)然后手动添加静态的IP
不知道则可以用动态的IP,可以从路由哪里获得,但是相对慢一些。
3.找到你要接入的无线的路由,使用电脑中已经安装的软件进行连接,当然你要进行一些简单的设置,选择您的名字(就是你在别人的无线网络中显示的名字),进行必要的配置,设置为基础类型,激活,然后就好了。刷新,看看无线网络中有多少用户和无线的路由,选择一个接入吧!
4.点对点的接入,从您的主机和您想接入的主机进行连接,其实很简单(可惜我没有抓图)点击连接就可以,或者是激活。
5.查看你是否已经建立了连接,在DOS命令行中输入ping 对方的IP或者是你接入的路由IP
如果通了,那么就已经可以进行通讯了,相当于一个局域网了。
6.进入到无线路由里面查看和进行必要的设置,在浏览器里面输入路由的IP进行登录。
进入了登录界面,输入用户名和密码,如果正确就进入了管理界面了,可以对它进行设置了,想要登录外网,当然要对它进行设置了,当然是老师已经设置好了!我们只是看看它设如何设置的,还有VLAN和WLAN的设置还有最大的通信量等等!
四.实验心得
简单的无线网络的配置及其使用就是这些,但是那些是刚刚进入无线网络的大门,所以还是要好好的学习的和查看更多的资料。感谢老师提供的设备和对我细心的讲解,当我对网络设置有疑问的时候。现在,还是没有想清楚为什么,别人可以ping的通我,但是我ping不通它,(防火墙也是关闭的,也许哪里有设置,我对Windowns不是很熟悉,我用的是LINUX系统,但是也不影响对无线网络的了解和应用)

抓包实验
一.实验目的
抓获无线网络中的数据,分析网络的中的数据报。
学习使用一些相应的软件来完成实验
网络协议开发分析,局域网监控,网络故障排除,企业应用,如流量分析。
二.实验原理
无线网络的技术规范,频率,编码方式,信道
每个BSS包含一个AP,BSSID一般为AP的MAC地址,多个BSS可以通过DS(Distribution System) 组成ESS(Extended Service Set),并使用ESSID来标识,ESSID一般为32个字符,当用作接入网时,多采用基础设施网络,此时DS一般为有线网络(例如以太网)
802.11帧结构 及其:管理帧的subtype 控制帧的subtype 数据帧的subtype
TCP/IP的三次握手
原理区分为:旁听模式、旁路模式、网关模式、网桥模式4种
三.实验步骤
1.安装omnipeek软件(安装老师讲解的进行安装,过程有点慢)之后,最好是自己查看帮助文件和利用网络进行搜索相关的资料进行实验。
学会了基本的使用就开始真正的实验,进行抓包,而后进行分析,抓到的每一个协议和报文进行分析和理解。
2.当然要进行这样的实验,基本实验还是要进行的!就是配置无线网络,(步骤是按照基本实验进行就可以了)
3.抓获你想要的进行分析和研究(在老师的指导下,我学会了抓取别人在网上进行的帐号与登录密码)分析TCP/IP的三次握手之后就可以看到你要的了,而且是明文,(看来以后上网还是要小心一点)。
4.在抓取之后,最好停止不断的抓取,这样便有分析。
四.实验心得
以后进行网络通讯时要时刻防范,现在准备学点关于真正网络安全的知识,尽管我们也上网络安全这门课但是只是原理,没有实际的,所以要进行自我学习和进行实战才可以,不攻击别人,但是也不让别人攻击自己!分析网络中的报文和协议,真正的理会网络是如何进行通讯和连接的。

路由器桥接实验
一.实验目的
把俩个或者多个路由器进行桥接。
二.实验原理
桥接(WDS):用无线信号把两个网络连接起来,不能再为无线客户端提供无线接入。
三.实验步骤
  两台TP-Link无线路由器
路由一:进入无线路由设置界面
1、进入网络,ip地址:192.168.1.1;子网掩码:255.255.255.0(其实上面已经设置好了)
2、进入设置向导,设置上网方式(可不设置,已设置好)
3、进入无线设置,频段设置为6(其他的也行,但两路由设置相同)重点:开启bridge功能,输入路由二的mac地址,开启安全设置 默认的就行了。
4、启用DHCP功能,开始ip:192.168.1.100;结束ip:192.168.1.199(这个可以根据个人设置,只要符合TCP/IP协议)。
5、以上步骤边设置边保存
路由二:进入无线路由二的设置界面
1、进入网络,设置ip地址:192.168.2.1;子网掩码:255.255.255.0
2、进入设置向导,选择自动,获取ip(动态ip)
3、进入无线设置,频段设置为6,开启无线功能;开启ssid广播;开启bridge,输入路由一的mac地址,开启安全设置(两个路由要一模一样)
4、启用DHCP功能,设置与路由一的一样 最后用一根网线把路由二的lan1与的网络接口相连,这时候就可以无线共享了
以上是设置全过程。(是参考网上的进行设置的,如有类同纯属巧合。)
四.实验心得
思考有没有更好的办法进行呢?
覆盖(WDS+AP):用无线信号把两个网络连接起来或增大无线客户端的接入范围,且可以为无线客户端提供无线接入。这样看来似乎覆盖更加好一点!
以后有条件自己也搭建一个小型的无线局域网,现在我们宿舍用的是有线应该很多人用的是有线,但是随着笔记本PC和LAPTOP的广泛使用还有无线网络技术更加的成熟,无线的应用将会更加的普及,所以现在还是有必要学好的!

破解实验
一.实验目的
破解客户端 wep
二.实验原理
BT2、BT3 下破解客户端 wep
三.实验步骤
BACKTRACK3_VMWare 映像文件的安装。把镜像安装到VM虚拟机里面,(过程也可以参考老师给的文件里面的backtrack3基础篇pdf),
老师告诉我的方法是用手动破解,具体参看了使用backtrack3使用全解_WEP破解PDF里面的设置。
1.查看当前的网卡用ifconfig -a
2.在USB接口已经插上了无线网卡,所以用ifconfig -a rausb0 up
使用如 Kismet、Airosnort 等工具来扫描当前无线网络的 AP, 找到了一个,可以看到,是有 WEP 加密的,记下它的 MAC 和频道,就是 channel。
(*其实下面是我摘写的,并没有真正的实验,实验室的电脑太慢了)
3. 然后,我们需要将网卡激活成 monitor 模式,才可以进行后续的破解,命令如下:
airmon‐ng start rausb0 6,这里这个 6 就是刚才我们发现的 AP 的频道,可以不输入,但输入会提高精确度。 然后输入下列命令开始抓包
airodump‐ng ‐w ciw.cap ‐‐channel 6 rausb0
这里 ciw.cap 就是我设置的抓包文件名,cap 文件名自已任意设置。
4.里为了加快 IVs 的获取,可以进行 ArpRequest 注入式攻击,这个很重要,实际入侵都会用到,可以有效提高抓包数量及破解速度,命令如下:
aireplay‐ng ‐3 ‐b AP's MAC ‐h Client's MAC ‐x 1024 rausb0
5.然后,就可以同步开启 aircrack‐ng 来进行同步破解了,命令如下:
aircrack‐ng ‐x ‐f 2 ciw.cap 这里‐x 是暴力破解模式,‐f 指的是复杂度为 2,后面是我
即时保存的那个抓包文件
四.实验心得
实验没有完成,而且我的电脑有点问题,没有办法进行无线网的实验,我是个Linux爱好者,所以对这个实验比较感兴趣,所以就把一些实验中的一些简单步骤记录了,真的希望以后有机会再做这个实验,感觉比较有意思!
感谢老师告诉我们很多的知识,还有有用的文档。
--
西邮: gaowei
Welcome my new blog:
http://gaowei.yo2.cn/


回复

转发

2009年5月14日星期四

vim 要不断学习

关于vim,我只是懂一点,尽管使用了很长的一段时间,当然也知道它有很强大的功能,但>是一直没有使用,没有用处,但是最近认识到如果学习了更加强大的功能的话,应该可以提
高我工作的效率,“磨刀不误砍材工”。值得学习vim更多的功能,从何学起呢?当然是从帮>助文件开始了。
进入vim之后:help里面有很多的.txt想看这些文件请继续:help 您要的文件名
如果要退后则按ctrl shift o
今天主要学:help usr_08.txt是关于分屏显示的
如果你进入一个文件那么想分屏而且打开同一个文件,那么就用:split
如果你想在这个窗口打开另一个文件那么用:split 文件名,打开一个新的窗口用:new
在编辑到这里由于一些错误的操作导致把这文件关闭了,而我还没有保存,还好vim为我保>存了,.vim.swp用vim -r .vim.swp就恢复了这个文件。
上面的分屏是上下分的,那左右分呢,用:vsplit 而打开一个新的用:vertical new
在vim里面末行里面也可以用Tab键补全,只是它从a~Z自动补全,而且可以变化
退出所有窗口:qall,保存所有窗口:wall
在一个窗口打开几个文件用vim -o one.txt two.txt three.txt
比较俩个文件用vimdiff main.c~ main.c当然这俩个文件在同一窗口。

2009年5月12日星期二

/etc下的一些文件

adjtime - correct the time to synchronize the system clock
# Aliases in this file will NOT be expanded in the header from
# Mail, but WILL be visible over networks or from /bin/mail.
# 对一些用户和服务使用者 设置为root
# /etc/anacrontab: configuration file for anacron
ant是一个基于JAVA的自动化脚本引擎,脚本格式为XML。除了做JAVA编译相关任务外,ANT还可以通过插件实现很多应用的调用。
声卡配置文件/etc/asound.conf
显卡模块fb.modes

smbclient - ftp-like client to access SMB/CIFS resources on servers

终端一些设置可以在/etc/bashrc文件进行设置

在其他的shell中语法规则也有所不同,请注意
csh配置文件/etc/csh*

Fedora下的一些文件系统/etc/filesystems

在文件/etc/gnokiirc # Set port to the physical port used to connect to your phone.# 真的可以吗

Gpm ( 通用鼠标守护进程 ) 是为控制台下运行的程序提供鼠标支持的服务器。它不仅提供了通用的剪切和粘贴支持,它的库文件还被许多程序( 如 links ) 用来在程序里实现鼠标。它对桌面电脑很有用,尤其是使用 (B)LFS 的安装指导时 - 在两个控制台之间拷贝和粘贴总比手动输入容易

/etc/inittab是对启动时候的一些设置是比较重要的一个文件。

logrotate is designed to ease administration of systems that gener-
ate large numbers of log files. It allows automatic rotation, com-
pression, removal, and mailing of log files. Each log file may be
handled daily, weekly, monthly, or when it grows too large.

ltrace.conf 里面有关于C语言的类型简单说明还有一些.h文件下的函数

minicom - friendly serial communication program

/etc/mtab 是硬盘的信息

/etc/my.cnf 是一些mysql的设置

原来在/etc/Muttrc文件中也有mutt的配置

/etc/named.conf是一个链接文件,在配置DNS用到
named.conf -> /var/named/chroot/etc/named.conf

今天早上刚听我们老师讲了ODBC
/etc/odbcinst.ini 是对数据库和嵌入式相关Included in the unixODBC package
里面是对MySQL和PostgreSQL的一些设置

关于一些密码的设置在/etc/passwd

一些关于颜色的设置/etc/pinforc还有和keybinndings

/etc/profile这个文件还是比较重要的
# System wide environment and startup programs, for login setup
# # Functions and aliases go in /etc/bashrc
#

/etc/protocols一些协议和端口号
/etc/services 这里有更多

/etc/rc是关于一些服务的一些设置
rc -> rc.d/rc
系统启动时候的一些设置/etc/rc.sysinit

DNS的设置/etc/resolv.b 但是还有resolv.conf和resolv.conf.bak其实起作用的是resolv.conf
/etc/rsyslog.conf 日志# Log all kernel messages to the console.

/etc/rwtab不知道为什么对一些文件进行说明

/etc/shells这里有shell的种类

/etc/sudoers是可以使得普通用户有超级用户权限

/etc/vimrc是对vim的一些设置还有virc也可

/etc/wgetrc是对wget的一些设置

/etc/yum.conf是对yum的一些

2009年5月3日星期日

修身,齐家,治国,平天下

这是我的一个生活中的老师告诉我的!
五一的时候,我祝福他!他又给了一些关于修身的名句!很感谢元老师!
修身子的每一天,
早上起来添点盐,
旋转行走守涌泉。
修身太极随意玩,
气沉丹田歌委婉,
俩手空松肩肘沉,
太极推手显奇功!
笔落曾经惊风雨,
而今诗成泣鬼神。
百亩荒漠变绿洲,
鸟语花香鱼戏水!
冬练三九抗严寒,
赤日炎炎战黄沙。
手植十万绿生灵,
现已成为栋梁才。
学文习武明是非,
修真养性乐无边。

linux 模块编译

一个简单的模块
#define MODULE
#include <linux/module.h>
int init_module(void)
{
printk("<1> Hello World!\n");
return 0;
}
void cleanup_module(void)
{
printk(" <1>Goodbye!\n");
}
开始的时候用gcc -c hello.c
hello.c:2:26: 错误:linux/module.h:没有那个文件或目录
之后编写了一个Makefile文件
obj-m := hello.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD ?= $(shell pwd)
defalult:
make -C ${KERNELDIR} M=${PWD} modules
install:
insmod hello.ko
uninstall:
rmmod hello.ko
clear:
make -C ${KERNELDIR} M=${PWD} clean
之后,用make就可以编译成功了!
加载模块#insmod hello.ko
卸载模块#rmmod hello
查看#tail /var/log/messages当然也可以用dmesg查看!
May 3 22:23:26 localhost kernel: Hello World!
May 3 22:24:11 localhost kernel: <1>Goodbye!
如何不编写Makefile文件也可以编译成功呢?思考中!
lsmod命令
调用lsmod程序将显示当前系统中正在使用的模块信息。实际上这个程序的功能就是读取/proc文件系统中的文件/proc/modules中的信息,其命令格式为:#lsmod
ksyms命令
ksyms这个程序用来显示内核符号和模块符号表的信息。与lsmod相似,它的功能是读取/proc文件系统中的另一个文件/proc/kallsyms

2009年4月30日星期四

movie

中国电影 VS 美国电影
看电影这么多年了,对中国电影还是比较喜欢的,尽管它还不是很完善,里面有很多不能仔细推敲的方面,好好推敲一下就知道有很多问题。但是,大家是为了娱乐嘛!电影是讲述故事的一种手法,用镜头表现现实生活的!中国的导演的水平也是差别很多,表现的手法各异,要表达深层次的内容也就有很多区别!最近很多电影喜欢“露”,不管是那一类型的,真是有点失望,尽管我们的思想是开放了那些也没有什么,但是也不应该什么也那样吧!《高考1977》里面竟然也那样,也必要放那个片段吗?没有看出其实要表达的含义,我想我们上了大学的人都是知道我们的高中也并不是那么轻松,尤其是我们从农村出来的就更加知道了!很多导演也许是不知道现状,和当时环境和人们的思想,而只是表达了他某一方面的内容。当然,有好的地方就已经很难得了,也算是不错了!《南京!南京》里面有些是真实的历史,可有些呢?似乎值得思考!当然很多时候电影在中国是受到一些限制的,拍出来也不让你放,《色戒》等等了。那样也就不能真实的表现真实的事实了!不敢表现,比如是把领导人写的不是很好!敢吗?估计是不敢的!但是美国的电影就不同的了,敢!而且,有时候可以把社会的黑暗展现出来,但是更多的是科幻和搞笑的,一眼就可以看出来就是娱乐了!当然,那样就不会对里面的内容限制了!《赤壁》,感觉演义的太假,我多多少少也算是喜欢《三国演义》的,看了很多史书,里面的很多是不符合事实,很不符合逻辑,但是感觉它还是想展现中国古代的战场,而不是为了娱乐,那就是为了票房了,当然不论哪个国家拍摄电影也多数为了此吧!这也就是中国电影里面的一个不好之处,也许也正是我们中国人的喜好而已!有时自己喜欢还说不喜欢,明明没有吃饭还说自己不饿,口是心非!想娱乐就娱乐吗?为什么还想演义一下历史呢?不觉得可笑吗?成龙的电影是不错的,动作,功夫,这些是中国的文化,把它真正的发扬一下同样是可以取得好的效果。周星驰的电影,搞笑那就搞笑吧!他一出现我就知道里面几乎都是假的但是还是很喜欢看,而不去推敲里面情节是否可信,因为是娱乐嘛!为的就是高兴!《功夫》里面的特技也不少了,效果也不错!可见中国的电影的科技技术也在不断的提升!希望中国的电影也拍也好!走出国门,同样可以取得不错的票房。《叶问》里面的视觉不是很好的,但是思想不错,《英雄》《十面埋伏》这种视觉享受可以但是好像内涵不高,至少很多人无法体会。像《卧虎藏龙》视觉也好,内容也不错,内涵也可以看的懂!诗歌,搞笑结合的《高兴》,是像外国学习的一部电影,那样娱乐节目还是不错的!
美国的电影,有很多是为了娱乐,不仅是从视觉的享受而且同样可以是思想上的享受。可以把一些真实的想法表现出来,我看过的《战争之王》里面就可以把买卖武器写出来,而且坏人也没有得到相应的报应,因为世界有时候就是这样的!而且敢说领导人是买卖武器的最大的厂商。《星球大战》里面就有很多新的思想,很多新的科技,特技当然也要很多了!《美国派》把美国的大学演义的很开放,而且里面的也很多是为了娱乐。《X战警》里面有很多的动作比较好,甚至可以和我们中国的动作片可比了!《功夫熊猫》用其他国家的文化,用自己的思想表现出来,会起到很多意想不到效果。《死亡飞车》把美国里的一些黑暗表现出来,人家有时候是很好的但偏偏要把不好夸大,而我们是把美丽夸大,遮蔽丑陋!很多电影是用高科技的工具进行进一步的美化的!有些是3D的电影,可以见得人家的科技比我们要先进多少呢?好好努力把其他的科技进步同样是可以促进电影的发展!
好了!上面是我的一点拙见!你有更好的观点不要忘记告诉我哦!

2009年4月22日星期三

申请gsoc总结

今年,我再次申请gsoc,结果是一样的!没有被接受!
我知道我要继续的努力,现在,总结一下!
1.我的编写代码的经验还不是很丰富,甚至很差,要在接下来的时间里努力!对系统的理解只是皮毛,没有深入的理解,更没有真正的思考和动手实际,接下来就是要便学习边动手。一切知识用于实际才是重要的。
2.我的英语真的要不断的提高,而且是应该下一番苦功才可以有大的改进,尤其是沟通能力和表达能力。也应该练习口语!
3.我申请gsoc目的其实就是对自己一个更好的认识,和那些高手对比自己的缺点,进而提高自己的方方面面。
对比申请:
已经得到申请的Alen Stojanov如此写的
Title: Writing /proc and /dev File Systems
Abstract: MINIX 3 does not yet have a /proc file system that provides information about processes. In this project, I will implement a new file-system server that populates the /proc directory with per-process information. Second, MINIX 3 currently allocates all device nodes statically on the root device. I will implement a new /dev file-system server that provides an interface for the drivers to dynamically register their devices and modify the system to use it.
而我呢?写的是自己而不是项目,1.说明自己的目的不明确 2.可见自己没有全身心投入将要完成的项目 3.我的表达的确有问题,所以要提高!
对项目申请至少应该写成这样
下面是google发给我的
Dear wei,
Thank you for applying to Google Summer of Code 2009. The proposal(s) you submitted were not selected for the program this year. We annually receive many more proposals than we are able to accept, and we would like to encourage you to apply again next year.
With best regards,
The Google Summer of Code Program Administration Team
看看这个,我就应该去实践去了,不断的提高自己!大学生涯不到一年了!

2009年4月20日星期一

ubuntu安装好之后

我用的是FC8的系统,但是最近朋友安装了ubuntu所以就写了下面的一些,希望对他有用!
当然,ubuntu安装好之后也许你要解决的问题(针对我们学校)
网络问题:(上网问题)
第一法:
Dr.COM for linux 源代码!不需要wine+网通插件的恶心组合了~
请在这里找http://www.xiyoubbs.com/吧!
第二法:
请看这篇文章http://www.xiyoulinux.cn/blog/?p=105
1。安装wine,如果你可以通过代理上网的话,那么可以通过apt-get 或者yum之类的命令安装,如果没法上网的话,可以通过源码安装。源码安装方法:
用tar命令解压,然后make,之后make install
这里不做任何解释,如果那里不明白,最好现google下。
2。下载网通的那个恶心的插件
3。用wine运行刚刚下载的插件 wine drcomclient1.exe,注意语言请选择english
4。下载这个包,解压后,把其中的4个dll文件拷贝到drcomclient的安装路径,默认为 ~/.wine/drive_c/…… 下载
到此,网通的恶心插件已经装好了,接下来就是运行了。
每次开机后,先要进入drcomclient的安装目录,也就是 ~/.wine/drive_c/…. 然后wine ishare_user.exe 。接下来你就可以自己设立拨号(linux一般都带有图形界面的),然后上网冲浪了。
如果你感觉这样比较麻烦,那么你可以自己写个脚本,至于这个脚本怎么来写,就留给你们来完成了。

中文支持问题:
download language-pack-gnome-zh and language-pack-gnome-zh-base
在刚安装好的英文环境下,虽然也能显示中文,但效果相当丑陋。解决方法是在/etc/fonts/目录下建立一个language- selector.conf的符号链接,指向中文的字体配置文/usr/share/language- selector/fontconfig/zh_CN。如下:
sudo ln -sf /usr/share/language-selector/fontconfig/zh_CN /etc/fonts/language-selector.conf

我们是搞计算机的,难免要解决C编译器问题,不要急,先把下面的源问题解决了再说!
在终端里面输入:sudo apt-get install gcc g++ libgcc1 libg++ make gdb
sudo apt-get install build-essential
安装gtk
sudo apt-get install gnome-core-devel
sudo apt-get install libglib2.0-doc libgtk2.0-doc
sudo apt-get install devhelp
sudo apt-get install glade-gnome glade-common glade-doc
突然看到有这么一个QQ就顺便记录了cycloneQQ,自由的发展软件,管哦我们是什么专业呢?自由的玩Linux管你是否是天才还是蠢才呢?
想自己作linux系统自己玩的朋友这个网站一定知道http://www.linuxfromscratch.org/

更新和安装软件以前请设置好你的“源”配置文件,这个文件的位置是:[/etc/apt/sources.list]下面是一些网通的 源地址,请更新吧!
顺便测试一下了
选择testing版本最快的ftp源:sudo netselect-apt testing -f
选择stable版本最快的http源:sudo netselect-apt stable
PS:non-free要自己编辑source.list加上
http://Ubuntu.csie.ntu.edu.tw/ubuntu/
#成都市 电子科技大学更新服务器(教育网,推荐校园网和网通用户使用)187k/s~787k/s
deb http://ubuntu.uestc.edu.cn/ubuntu/ hardy main multiverse restricted universe
deb http://ubuntu.uestc.edu.cn/ubuntu/ hardy-backports main multiverse restricted universe
deb http://ubuntu.uestc.edu.cn/ubuntu/ hardy-proposed main multiverse restricted universe
deb http://ubuntu.uestc.edu.cn/ubuntu/ hardy-security main multiverse restricted universe
deb http://ubuntu.uestc.edu.cn/ubuntu/ hardy-updates main multiverse restricted universe
deb-src http://ubuntu.uestc.edu.cn/ubuntu/ hardy main multiverse restricted universe
deb-src http://ubuntu.uestc.edu.cn/ubuntu/ hardy-backports main multiverse restricted universe
deb-src http://ubuntu.uestc.edu.cn/ubuntu/ hardy-proposed main multiverse restricted universe
deb-src http://ubuntu.uestc.edu.cn/ubuntu/ hardy-security main multiverse restricted universe
deb-src http://ubuntu.uestc.edu.cn/ubuntu/ hardy-updates main multiverse restricted universe

#网易163更新服务器:182k/s~262k/s
deb http://mirrors.163.com/ubuntu/ hardy main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ hardy-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ hardy-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ hardy-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ hardy-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ hardy main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ hardy-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ hardy-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ hardy-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ hardy-backports main restricted universe multiverse

#中国科学技术大学更新服务器(教育网,推荐校园网和网通用户使用):122kb/s~235k/s
deb http://debian.ustc.edu.cn/ubuntu/ hardy main multiverse restricted universe
deb http://debian.ustc.edu.cn/ubuntu/ hardy-backports main multiverse restricted universe
deb http://debian.ustc.edu.cn/ubuntu/ hardy-proposed main multiverse restricted universe
deb http://debian.ustc.edu.cn/ubuntu/ hardy-security main multiverse restricted universe
deb http://debian.ustc.edu.cn/ubuntu/ hardy-updates main multiverse restricted universe
deb-src http://debian.ustc.edu.cn/ubuntu/ hardy main multiverse restricted universe
deb-src http://debian.ustc.edu.cn/ubuntu/ hardy-backports main multiverse restricted universe
deb-src http://debian.ustc.edu.cn/ubuntu/ hardy-proposed main multiverse restricted universe
deb-src http://debian.ustc.edu.cn/ubuntu/ hardy-security main multiverse restricted universe
deb-src http://debian.ustc.edu.cn/ubuntu/ hardy-updates main multiverse restricted universe
基本就这是这些了,你就享受ubuntu给你带来的便利吧!有apt-get软件很好安装了!比我们的FC好多了!简单就是美!

2009年4月17日星期五

Our linux lab!

一直,没有对我实验所学进行总结,即使当时想到了很多不错的注意但是我很快就忘记了。所以现在想把它进行一个总结。
关于启动:POST -> BIOS=>Bootloader{LILO; GRUB} -> 加载OS内核 -> 执行
查看文件系统类型:ls /lib/modules/2.6.23.1-42.fc8/kernel/fs/
过去对修改组和一些属性感觉没有用到多少和没有理会到其中的作用,有一次,我因为把系统文件的grub配置文件给mv了而后又重新写了一个,导致系统无法正常启动了。才认识到其中的重要性。 chown是可以改变文件或者目录的所有者和所属的用户组,chgrp只能改变指定文件或者目录所属的用户组。所以一般不要胡乱mv系统文件哦!
关于用户方面: 输入user然后tab的,就可以看到很多关于user的操作了。
[root@localhost ~]# user
useradd userformat userinfo usermod usernetctl users
userdel userhelper userisdnctl usermount userpasswd
大概就这么点吧!
很多人没有明白write和mesg,这是我一点想法:
mesg是用于设定是否允许其他用户write命令给自己发送消息。
[root@localhost ~]# write gaowei pts/5
您应该先看有那些用户在,并且他们在哪个终端,这样从可以正确的write给他们消息。
而且write是发送消息给登录这个主机的用户而不是所有网络的人,很多人很天真,有时我也是。尽可能的去避免吧!多想一想这些究竟是用在什么地方,如何用,它们的原来有是什么呢?
一般mkdir与参数-p结合的使用。
给命令起别名alias 别名='要代表的命令' 如果想取消则unalias 别名
查看系统运行了多长时间uptime
用last查看登录日志。
当然vi里面的一些简单的操作是用熟悉掌握的,但是有些比较好用的命令,我们有时候也很懒,所以就不常用就会忘记的。
vi的文件存取操作:
:n,mw 文件名 将第n行至第m行的内容写入指定的文件
:n,mw>>文件名 将第n行至第m行的内容以追加方式添加到指定文件的末尾
:r 文件名 将读取指定的文件内容,并插到当前光标所在的行的下面
:.= 显示当前光标所在行的行号
:n,ms/str1/str2/opt 从第n列搜寻到第m列,当m=$时为最后一行,搜索str1字串用str2替换,opt选项若为g则自动全部替换,为c表示确认后替换。
yy 将当前行复制到缓冲区
yw 将当前单词复制到缓冲区
y1 将光标处的一个字符复制到缓冲区
p 将缓冲区的信息粘贴到光标的后面
:行号1 ,行号2 copy 行号3 将行号1到行号2的内容复制到行号3所在行的后面。
:行号1 ,行号2 move 行号3 将行号1到行号2的文本内容移动到行号3所在行的后面。
/pattern: 从光标开始处向文件尾搜索pattern
?pattern: 从光标开始处向文件首搜索pattern
n: 在同一方向重复上一次搜索命令
N: 在反方向上重复上一次搜索命令
:s/p1/p2/g: 将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g: 将文件中所有p1均用p2替换
用Alt加m也可以到命令模式
在命令模式下用:help options或者:help pattern可以看到一些关于set的设置方法
关于文件系统的命令,我就基本没有使用。mkfs*
用chsh -l查看用哪些shell的类型,也可以more /etc/shells
一些有用的用户信息:
/etc/passed 用户信息
/etc/shadow 一些密码信息等
/etc/group 一些组信息
当我们把用户的信息改变之后这些信息是会改变的,但是具体如何改变的我当时没有看明白。
当创建了新的用户,对于没有指定的属性,其默认设置位于/etc/default/useradd文件中。
改变用户名用:usermod命令,要锁定用户则加-L解锁-U

Linux系统的初始化包括内核部分和init程序俩部分,内核部分主要完成对系统硬件的检测和初始化工作,init程序部分则主要完成对系统的各项配置。
1。主机加电并进行硬件自检后,读取并加载硬盘MBR中的启动引导器,供用户选择要启动的系统。
2。用户选择启动Linux操作系统后,启动引导器从/boot分区读取并加载Linux内核程序(vmlinuz-2.4.20-8和initrd-2.4.20-8.img),然后由内核程序负责初始化系统硬件和设备驱动程序。
3。之后内核将启动执行init程序,以启动系统的init进程。
4。在不同的运行级别,根据系统的设置启动相应的服务程序。
5。在启动过程的最后,运行Shell程序,并显示登录信息。
init负责在系统启动时运行一系列程序和脚本文件,它将根据/etc/inittab配置文件的要求执行相应的启动程序,并进入指定的系统运行级别。
用telinit q让虚拟终端生效

Linux的服务分为独立运行的服务和受xineted服务管理的服务俩类。
所有的服务器启动脚本都放在/etc/rc.d/init.d目录中。每一种服务都有自己的脚本,而且里面,您也可以看到如何使用这些脚本,所以学一点Shell是有必要的。
在/etc/rc.d/rc.local文件,放入该文件中的脚本或命令,在其他初始化脚本执行完后,将自动被执行。
ntsysv是一个管理服务的实用程序。
查看服务chkconfig --list 服务名
调动启动 at 或者 crontab命令。
kill是使用进程号来结束进程,而killall是用进程名来结束进程如有同名的则全部kill
hostname会临时改变主机名。要想真的该则在/etc/sysconfig/network里面进行修改。
模块配置文件在/etc/modules.conf里面。
查看网卡的配置文件在/etc/sysconfig/network-scripts/ifcfg-eth0
记住,一般要进行备份而后进行修改。
/etc/resolv.conf配置文件用于配置DNS客户。
/etc/nsswitch.conf配置文件,指定名称解析顺序。
网络调试命令ping route netstat traceroute nslookup

几个查看硬件信息的命令:
ethtool kudzu dmesg dmidecode lspci

2009年4月13日星期一

Playing differe OS

过去也玩过很多系统,但是一般是在自己的电脑里面的虚拟机,很少登录到其他主机上玩。偶尔而已。
今天,在unix-center发现有很多机器可以玩,不错。
您只要注册了就可以登录玩了,有很多的系统。
这个是
-bash-3.00$ uname -a
SunOS x4100 5.10 Generic_118855-33 i86pc i386 i86pc
-bash-3.00$
第二个是
-bash-2.05b$ uname -a
FreeBSD freebsd.unix-center.net 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 08:43:30 UTC 2007 root@portnoy.cse.buffalo.edu:/usr/obj/usr/src/sys/SMP amd64
-bash-2.05b$ 比较喜欢FreeBSD系统。
还是不错的!以后更是随时可以玩这些系统了!

2009年4月12日星期日

Recently, I learn C.

最近,学习的C语言做一个总结。
在不同系统里,数据类型是不同的。
在BSD中,有 char short int u_char u_short u_int
在POSIX系统里,有int8_t int16_t int32_t u_int8_t u_int16_t u_int32_t
在C语言里面,有 char short int unsigned char unsigned short unsigned int
1byte
2byte 4byte 1byte 2byte 4byte

在这个头文件中#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong); 将主机的字节顺序变换为计算机网络字节顺序,
其数据类型为long
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);将计算机网络字节顺序变换为主机的字节顺序,
其数据类型为long
uint16_t ntohs(uint16_t netshort);

在 #include
<string.h>
int memcmp(const void *s, const void *c, size_t n);
用于将一个从地址s和地址c开始的n个字节的区域,一个一个地分别进行比较!
void *memcpy(void *restrict, const void *restrict, size_t);
把一个从后一个地址开始的n个自己的区域,拷贝到前一个开始的区域中。
void *memmove(void *, const void *, size_t);
void *memset(void *, int, size_t);
使用值n来设置一个从地址s开始的c个字节的区域。

刚刚看完边疆的blog,里面提到了
curses.h我就顺便写一下了。
关于编译的时候要
gcc curses.c -lncurses
这是一个对屏幕操作的库函数
curses.h,用起来还是可以的!不错!

为了能够在应用程序中改变套接字的设置,可以执行setsockopt系统调用。
发送缓冲区的设定
setsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *)&size, sizeof(size));
接收缓冲区的设定
setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&size, sizeof(size));
使用这些函数的时候必须要有sys/types.h和sys/socket.h头文件。
值得注意!
/tmp/cc2Mk4cn.o: In function `main':
p*s.c:(.text+0x69): warning: the `gets' function is dangerous and should not be used.

2009年4月11日星期六

耐得住寂寞,好好学!

有时,我真的多事,有时,我真的不该多嘴,但是我的出发点是好的!没有办法!
谁也有迷失自己的时候,想一想自己的理想,再看看现实,我的梦想不能这样下去。
耐得住寂寞,好好学!
有那么多的事情要干,有那么好玩的系统,把我自己所学的知识运用起来。不去,管我不该管的,也无法管。他们爱怎么说就怎么说,一笑而了之,因为还有更加重要的事情等着我去探索。
我的视野也跟随着网络而开阔,知道很多,理解了很多,和很多人交流,学习那些NB的人。高手的思维,高手的气度,高手的习惯。
现在是奋斗和拼搏的时刻,我那里敢怠慢呢?
还记得,我一个在高几千米的华山上,在没有人走的地方一个走,真可谓是万丈深渊就在脚下,我没有怕,我一个人,啊!生死,就在一刹那。我没有孤独,风在笑,雨在飘,有树,有草!有黑夜为我作伴。
要成为高手,我现在这样下去是不行的,这样连一个普通的也不如,就成了那种高不成低不就的了!担忧自己,还不如努力向前呢?行动胜过一切!
Let's go! I will try my best to achieve my dream. Good luck!

2009年4月7日星期二

不知春夏秋冬

最近,老是呆在宿舍里面,完成一些要完成的!由于我们宿舍比较冷,所以就不知道春夏秋冬了。
前几天,我还是冬天的衣服,昨天,晚上出去KTV了,才换上了夏天的衣服,这才感觉到夏天已经来临了。疯狂歌唱了一把!年轻人就应该有活力。
极度空乏中,NetFPGA的源代码的分析也就是那样了。我请教过斯坦福大学里面的教授,等到了一些指点,还有老师的一些要求,基本感觉已经完成了。需要下载那些流程图的朋友。我将会在文末提供一个下载地址。有些不是很完善,请谅解!

我是用GNU的软件global阅读的NetFPGA源代码
关于global介绍在http://www.gnu.org/software/global/
我使用的global的过程http://gaoweige.blogspot.com/2009/03/global.html
用dia这个软件绘制的这些流程图。
关于dia的使用http://projects.gnome.org/dia/
在http://projects.gnome.org/dia/这里下载。dia很小,而且很好用,有Linux下的也有windows下的版本。
尽管,我画的流程图不是很完善,但是基本可以理解NetFPGA里面一些流程。
关于流程图说明:
我打算把每一个文件夹下的.c文件流程图绘制了(除了kernel文件夹),起了相同的名字和在相同的目录下。
由于一些原因,目前只是完成了大多数,tools/send_pkts.c和/download/下面的,都没有完成!但是,我有空还是会去完善的!谢谢!
关于read和doc说明
read是对原文件中readme进行的一些说明(似乎不是很好,请谅解)
doc是对原文件中的目录和目录下的文件及其里面的主要的函数进行了一定的说明。
当然,里面有很多不足之处,请多多指出,谢谢!
如有任何问题,请发邮件给我,my email: 2008gaowei@gmail.com
谢谢!
download NetFPGA dia流程图

2009年4月4日星期六

Life

生活,就是这样,我们根本不知道生活的下一刻要发生什么。我曾经对生命进行很多次的思考,得出该珍惜的我们就要珍惜,有时一去不返啊!所以我长期锻炼身体,但是由于最近有点忙就没有锻炼了,但是接下来我依然会锻炼的,也许方式有点变化。
看了《未知死亡》
从中应该可以体会到一点,就是要有强壮的身体,快乐的人生。
我们的一切有时在一个未知的时候将要离开我们,珍惜现在的一切。我当然是深有体会的。
自己身无分文啊!当然要努力开创一番事业!
GSOC The student application period for Google Summer of Code 2009 closed
today at 19:00 UTC, so about 7.5 hours ago.
但是,接下来,我应该好好学习英语,再次证明自己经过了一年的能力还是没有从根本上提高,所以必须,一定要学好!真正的面向国际!当然,C语言仍然要好好的学,记得要多编写,并且把它分享,Free Software 和 Open Source.
这几天,要完成的就是王老师要做的那个了,尽自己最大的努力完成,全天工作!
当然,我申请的那个项目还是要继续的,即使我没有被录取,应该是我不抱有任何的幻想,我这次的目的也只是参与,参与了自己真正感兴趣的,自己想编写一个可以用的系统。继续参与!!!!!!
好了!Let's go!

2009年4月1日星期三

节日是别人的,快乐是自己的

今天,是愚人节,也不知道是什么时候知道有这么一个节日。
还记得初中时候,我们的天真和浪漫,和一切开玩笑。但是现在呢?什么也不玩了,真的“老了”吗
应该拼搏的时候,是现在,应该从心里体验快乐了的也是此刻。
也许,节日不是我们的,但是我们还是要有自己的快乐的!
今天,要完善,我的申请,我还有去编写那里的WIKI还有,就是想一下,安装MINIX的图形界面,看它是如何启动的,对比和其他的系统。
愚人节的,似乎,没有什么了。没有一点的娱乐了,难道我们还娱乐的少吗?
听着音乐,写一点感触!之后还要继续忙碌的生活,忙碌的人生!好!
对了,现在的记忆不如原来,但是今天突然感觉到自己可以干好任何一件事情,尽管我不会什么事情都做。自信成就你的人生。我可以把”破烂的“的英语学好,每天听,就不信听不懂,天天说就不信还不会说,不要害怕发错,一切都没有什么,人生就这么几天,有时一晃,我们就过去了二十几年了!真的快阿!
我可以把C语言学的更加的好,可以编写自己想要的软件,可以看的懂复杂的code,可以学习更加高深的知识,来不断的完善自己!
因为,我想我只要坚持就可以完成,而且可以向那些优秀的人一样,因为我就是一个优秀的人!
也许,我有点好高骛远,也许我有点不切实际,也许......。看这朋友们,忙碌自己的事情,很有成就感,但是我呢?也不知道是学English还是学真正有用的知识呢?不论如何就是这么俩天了。我一定写好它,完善它,了解其实要完成的项目。从中提升自己的English和C编程,和真正的实战经验。脚踏实地吧!高伟。啊!gaowei!
完善自己!自信人生一百年。
May God bless and keep you always, may your wishes all come true.
May you always do for others and let others do for you.
May you build a ladder to the stars and climb on every rung, and may you stay forever young.
May you stay forever young.
Yo, yo, yo, may your hands always be busy, may your feet always be swift...
and may you have a strong foundation when the winds of changes shift.
And may your heart always be joyful, may your song always be sung(sing it)...
...and may you stay forever young. May you stay forever young.
Every generation...
Yeah.
...refresher the world.
Cool.

2009年3月31日星期二

My a small Shell.

/* You can see here */
/* a simple shell */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <string.h>
#include <errno.h>

#define SHELL_NAME "sh1"
#define PROMPT_ENVIRONMENT_VARIABLE "PROMPT"

char *prompt;

int main(int argc,char **argv)
{
char cmd[80];
int statval;

/*Dtermine prompt value.*/
if((prompt=getenv(PROMPT_ENVIRONMENT_VARIABLE))==NULL)
prompt=SHELL_NAME":";

/*Process commands until exit,or death by signal.*/
while(1) {
/*Prompt and read a command.*/
printf(prompt);
gets(cmd);

/*Process built-in commands.*/
if(strcasecmp(cmd,"exit")==0)
break;

/*Process non-built-in commands.*/
if(fork()==0) {
execlp(cmd,cmd,NULL);
fprintf(stderr,"%s:Exec%sfailed:%s\n",argv[0],cmd,strerror(errno));
exit(1);
}
wait(&statval);
if(WIFEXITED(statval)) {
if(WEXITSTATUS(statval)) {
fprintf(stderr,"%s:child exited with status %d.\n",argv[0],WEXITSTATUS(statval));
}
}
else {
fprintf(stderr,"%s:child died unexpectedly.\n",argv[0]);
}
}

}

My friend help me modify it, as follows:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <string.h>
#include <errno.h>

#define SHELL_NAME "sh1"
#define SHELL_GETS(var) printf(prompt); gets(var)
#define SHELL_CMD(str) strcasecmp(cmd, str) == 0

char *prompt;

int main(int argc,char **argv)
{
char cmd[80];
int statval;

if(!(prompt = getenv("PROMPT")))
prompt = SHELL_NAME ": ";

while(1) {
SHELL_GETS(cmd);

if (SHELL_CMD("exit"))
break;

if (fork() == 0) {
execlp(cmd, cmd, NULL);
fprintf(stderr, "%s:Exec %sfailed:%s\n", argv[0], cmd, strerror(errno));
exit(1);
}

wait(&statval);

if (WIFEXITED(statval)) {
if (WEXITSTATUS(statval)) {
fprintf(stderr, "%s:child exited with status %d.\n", argv[0], WEXITSTATUS(statval));
}
}
else {
fprintf(stderr, "%s:child died unexpectedly.\n", argv[0]);
}
}

}

2009年3月30日星期一

My application

My name: gaowei
My email: xiyou.gaowei@gmail.com
My IRC nickname: weiwei
My Phone number: 13772035412
My Web page: http://gaoweige.blogspot.com/ 
My group club website: http://www.xiyoulinux.cn/

  I am a junior student in the Computer Network Department at Xi'an Institute of Post and Telecommunications in China.

  I have been using open source software on my computer for three years, and I like it because it helps me complete my work and studies every day.It helps me to learn much about software and computer devices.I can modify them to satisfy my needs.When I learned about operating systems, I wanted to program a small operating system.At the moment,I read a lot of library books and searched a sea of information on the internet. I know the Linux0.01 architecture and how to implement and compile it into my computer. In addition, I not only have some experience with Linux0.11 and Linux2.6.26, but I am also learning Linux2.6.28.So I have a great interest in the kernels of operating system. Of course, I skimmed over the codes of Minix and Free BSD. 

  I know that Minix is an excellent OS and is a new open-source OS designed to be highly reliable, flexible, secure, and what's more,is intended as a teaching tool. I programmed a simple shell and a small File System and wanted to use fewer lines of executable code to implement an OS. So I want to apply to take part in a program concerning the OS project. Then I can only utilise my knowledge, but also share my ideas and skills.

2009年3月28日星期六

install MINIX

Runnig Minix 3 on QEmu

You can download a Minix 3 ISO from the Download page, and set QEmu to install a machine from that ISO.
These instructions are to get MINIX 3 running under qemu 0.10-0-1 under Ubuntu Linux, but it should generally apply to other qemu installations under linux as well. First, use your package manager or other means to install qemu on your host operating system. Under Ubuntu you can use aptitude to install qemu as follows.

[root@localhost VMWARE]# qemu-img create minix.img 2G
Formating 'minix.img', fmt=raw, size=2097152 kB
[root@localhost VMWARE]# qemu -localtime -net user -net nic -m 128 -cdrom minix3_1_3a_ide_r2964.iso -hda minix.img -boot d
Could not open '/dev/kqemu' - QEMU acceleration layer not activated
[root@localhost VMWARE]#qemu -localtime -net user -net nic -m 256 -cdrom minix3_1_3a_ide_r2964.iso -hda minix.img -boot -c

Note:Don't move your *img to other place. If you do it,then it will error and don't boot in qemu for minix.

2009年3月25日星期三

GSOC我之所见

去年,大家(我们xiyoulinux兴趣小组)有很人想参加,但是只有我一个人坚持到最后,因为都是英文,都是高手,几乎没有我们表现的,也真说明了一点,我们的能力还是有待提高。那次之后,我对开源有了新的认识,也经常去一些社区看看!但是,还是没有真正的参与进去,今年,我想真正的参与进去,而不是为了什么名利,这次活动的主要动机也是让更多的人了解开源,参与开源。
昨天,磊子,告诉现在公司里面要的是可以干活的人,你那些参与人家认证吗?那也根本不能说明你的能力。对,很对,所以就更应该借助这个机会来提高自己的水平。要知道,开源里面是如何的沟通,如何的运作,如何吸引别人的,代码是如何高效的写出,是如何的管理代码,我们是要学这些。要选择一个自己喜欢的,哪怕自己现在没有能力,当然,我是不知望我可以被录取,我知道我的水平,我只是想参与开源,当然,即使没有GSOC我也应该参与开源项目的。这真是,磊子,说的经验,可以拿的出手的东西。一定要做,实践,专注。
对自己的要求,1.每天至少看一个小时;2.不要参与太多,一个就好了!3.重在参与,不断提高自己;4.一定要有可以拿出手的东西,来证明自己的实力!
好了!一点感悟!

2009年3月23日星期一

网页制作工具


我基本就不会写网页,但是这周,突然想写一个,所以找到如下的工具

Amaya是 一个具有浏览功能 的WEB开发工具,是由万维网协会(W3C)成员开发的一个网络浏览器,同时也可以作为对W3C成果的测试工具。Amaya包括了一个HTML编辑器和浏 览器,用户可以免费到W3C的网站下载它,在linux和windows下都有对应的版本。Amaya起初只支持HTML和CSS的编缉,现在已经添加了 对XML、XHTML、MathML、SVG等的支持。Amaya is intended to be a comprehensive client environment for testing and evaluating new proposals for Web standards and formats. A large part of the intended features of Amaya are implemented in this release, but some of them are not complete yet. Amaya is designed as an application on top of the Thot editing tool kit.
Bluefish,正如其项目主页上描述的那样,是一个功能强大的编缉程。你可以用它来设计网站,编写脚本和程序代码。Bluefish支持很多程序语言和标记语言,它最突出的特点在于编缉动态的交互式网站。Bluefish has many features, this list will give you an overview of the most important or outstanding features.
Quanta Plus 原 名叫Quanta,是一个WEB的集成开发环境(IDE),可以用于HTML、XHTML、CSS、XML、PHP和其它基于XML的语言或者是脚本语言 的开发。Quanta Plus是一个KDE的软件,包含于Kdewebdev软件包里。Quanta有可见即所得的设计模式和代码编缉模式两种开发模式。它的特点有:代码标签 提示功能,脚本语言的变量自动完成,项目管理,实时预览, PHP调试器,Quanta Plus is a highly stable and feature rich web development environment. The vision with Quanta has always been to start with the best architectural foundations, design for efficient and natural use and enable maximal user extensibility. We recognize that we don't have the resources to do everything we would like to so our target is to make it easy for you to help make this the best community based desktop application anywhere. Pretty much everything in Quanta is designed so you can extend it. Even the way it handles XML DTDs is based on XML files you can edit. You can even import DTDs, write scripts to manage editor contents, visually create dialogs for your scripts and assign script actions to nearly any file operation in a project. You can even look at and communicate with a wide range of what happens inside Quanta using DCOP.

KompoZer是一个基于Nvu的所见即所得的HTML编缉器。KompoZer是Sourceforge上的一个项目,它主要由社区修护。下面是从网络上摘录的关于KompoZer功能的介绍
支持所见即所得(WYSIWYG),在我们在制作网页时,更加的直观化,编辑网页就如同打字一样容易。内建一个FTP Client,让我们可以很轻易的把编辑好的文件发布到服务器上。登录FTP Server后,还支持在线实时更改页面。可靠的HTML原始码,让由Nvu所创建出来的网页,可以在当前多数的浏览器上正常运作。制作网页时,可以使用所见即所得模式或HTML原始码编辑模式。Tab功能:可以让我们很迅速的在多个页签间切换,并且编辑这些网页。支持表单、表格、layer以及网页模版。

还有SCREEM is a web development environment. It's purpose is to increase productivity when constructing a site, by providing quick access to commonly used features. While it is written for use with the GNOME desktop environment in mind it does not specifically require you to be running it, just have the libraries installed.

2009年3月19日星期四

网络&生活

有网络真的太好了!
现在,网络上有太多的机遇给你,所以,我们要马不停蹄的学习,而后运用我的知识,不要什么也想参与,什么也想学好,可能吗?估计,以我的能力是不可能实现的,现在就想少睡觉,多看看世界,多动手实践,好不至于以后输给自己啊!机会会越来越多,但是我们必须要有扎实的基本工,过人之处,不要盲目的羡慕别人。自己也要很多的优点,赢自己才是真正的赢!

网络中很多人帮助我,真的不错。

今天,感受了一下企业培训,企业培训主要是教你干什么,如何干,而学校教你这个可以干什么,是什么原理,而不教你具体的干,也要你锻炼的机会很少。所以再以后的学习过程中,应该把这二者结合起来,那样就无敌了!感觉,社会对专科和本科有明显的区别,名牌和不名牌也是,四级过的没有过的。很多事情当你真正的经历了从会更加深刻的体会到!其实,我有时在开导别人,其实,也在安慰自己,有时候自己,也何尝不是有很多忧愁的时候,只是不表现吧了!今天,上口语课,别人都可以用流利的英语对话,而我呢?就是讲不出来,当时,我就想我毕业了将如何呢?口语不好,对于那些好公司应该就会把我拒绝门外了。上课时候,我想要不,我毕业了去打工,而后,去做销售,然后转型,做生意,但是我这种性格真的适合搞推销嘛。我在很多方面已经尝试过了,编程,似乎真的不是很适合我,以后应该会改变我的道路。就不多说了!

关于ChatZila的使用,过去一般在网页里面和别人用IRC聊天,但是感觉很不好,最好采用了ChatZila感觉还比较好用。用法,简单介绍,在*client*里面输入/server 您要登录的频道,然后/join
#您要去的组就可以了,还是比较好用。其实,很多事情当我们熟练操作之后感觉一切不过如此的简单.

现在每天用这个聊天,而QQ就很少用了。啊哈!

奋发吧!不要唠叨了!

2009年3月16日星期一

auto

进入你要的原代码
1.#autoscan
它会生成autoscan.log configure.scan 这俩个文件
2.#mv configure.scan configure.in
3.在项目下面创建Makefile.am在它的子目录下面也建立Makefile.am
4.在项目下面创建NEWS,README,ChangeLog,AUTHORS
5.将/usr/share/automake-1.X/目录下的depcomp和complie文件拷贝到本目录下
6.#aclocal 运行之后就会多出autom4te.cache 这个文件
7.#autoconf 运行之后就会多出configure这个文件
8.运行#automake -a之后会出现下面的
configure.in: no proper invocation of AM_INIT_AUTOMAKE was found.
configure.in: You should verify that configure.in invokes AM_INIT_AUTOMAKE,
configure.in: that aclocal.m4 is present in the top-level directory,
configure.in: and that aclocal.m4 was recently regenerated (using aclocal).
解决的办法在configure.in文件中添加AM_INIT_AUTOMAKE宏,用autoheador解决剩下的问题,还不行再次运行aclocal然后就可以用automake -a了。
9.运行./configure
这样也许还是没有Makefile文件
有的时候连我们自己也不知道为什么会是这样的,然后我就把autoheader和autoconf还有automake -a再次运行了一遍,没有任何的问题了。这里是成功的。
问题又来了,make之后
[gaowei@localhost xhttpy]$ make
cd . && /bin/sh /home/gaowei/cuinx/linux/xhttpy/missing --run autoheader
rm -f stamp-h1
touch config.h.in
cd . && /bin/sh ./config.status config.h
config.status: creating config.h
config.status: config.h is unchanged
make all-am
make[1]: Entering directory `/home/gaowei/cuinx/linux/xhttpy'
gcc -g -O2 -o xiyouhttpd
gcc: 没有输入文件
make[1]: *** [xiyouhttpd] 错误 1
make[1]: Leaving directory `/home/gaowei/cuinx/linux/xhttpy'
make: *** [all] 错误 2
[gaowei@localhost xhttpy]$ ls
等等解决中!
多看书,多实践!
这本书不错http://sources.redhat.com/autobook/autobook/autobook_toc.html#SEC_Contents
准备一天浏览完!下一篇就是这本的内容了!似乎有点难度,就不发表了!
上次,还学到了这么一个命令strip - Discard symbols from object files.今天再次回顾到!

2009年3月15日星期日

Busy life

今天,早上起来上英语的口语课,感觉肚子就有点不舒服,现在还是有点不舒服呢?
上课的人比较少,那个老师也不是很好了!(感觉,汉语也不是很好,光听他发音的话你可能认为他不是个中国人呢?)所以,有些试听的人就一会走了,开始还有有个不错的女生坐到我旁边,但是她听了一节就不想听了走了,是西大的(西北大学)。后来就是11个人了,俩个男生其他是女生了!这次终于是我上的一个班里面女生多了,而且俩个是我们学校而且还认识。
别人的基础应该都比我的好,他们讲的我大部分听不懂,这真的是应该提高了,我想好了,再次减少我的睡眠时间然后提高自己的水平,谁让过去咱睡的多,没有好好的学呢?还有很多的东西要学习!今天讲了A~Z的发音,还有一些文化差异,还有就是夜生活和早上生活的比较,尽管我很想说但是我不知道自己该说什么,我真的不会用英语表达自己,别人说的我也听不懂,真的很丢人了!我一直这样丢人,但是我会改变的,我从来就没有放弃,哪怕我要比别人多倍的努力,我也要去学好它!
回来,又急急忙忙的赶去小组听CU(chinaunix)的讲座,第一个:讲了关于SELinux方面的,感觉他似乎有点紧张讲的一般了,其中涉及到DAC,MAC,RBAC,TE有空应该看看,然后讲了服务器的配置,操作不是很熟练(我想到了自己,尽管我也配置过一些但是比起他,我更是不精通阿!所以以后学习的时候一定要学好一定要熟练,哪怕是敲键盘也要快!)第二个:讲了LVS,我几乎就是密密糊糊的度过的,基本睡着了(现在我坐着绝对可以睡着),关于它的软件ipvsadm piranha, ldirectord..第三个:关于发行版的制作,我会的他没有叫我,我朋友答的我感觉有点问题,他还送了一本书,我最后回答了另一个问题,但是才送我一支笔,现实有时就是这样的。但是让我最关心的是我那个问题,什么呢?对于高手你不要讲皮毛的东西,那是小儿科,讲就要讲的高深,因为你面对的是高手,你就应该深。那个问题是,ubuntu是如何安装的,是如何启动的呢?我只是把表面的工作说了,他似乎感觉就很烦所以就直接给了我一支笔。原来是从内核角度,深层次的考虑!启动,对于一个计算机专业的人来说,具体是什么呢?从找到CPU的中断,到启动自身的bootloader然后加载内核,再到如何装载各种软件到硬盘。这是我今天记忆最深刻的了,比那些奖品要好的多了!第四个:关于网络排错,1.不要急,也不要激动,任何事情一定要问清楚什么情况,在行动,(我似乎犯过这样的毛病)2.要有思路,而且是明确的,解决问题还是这样的好!3.大胆,对自己的判断和分析大胆的实施,但是一定要想好退路和万一之后将如何?和几个公司里面的人聊聊,感觉Linux真的还是有前途的,但是要学好了!看来以后讲座还是少听才对!
好了,这就是我今天的一天了!

2009年3月14日星期六

一本书就这样看完了!

不求甚解!
设置一些X Window系统,配置文件在/etc/X11/xorg.conf文件中。
需转换桌面管理器,命令switchdesk
进入图形界面startx也可以在/etc/inittab中设置
vim 中如果读者取消了不想取消的操作,需要新执行命令,可按Ctrl+R或者:red
man -k 关键字
备份工具cpio
-o 复制出模式 -i复制入模式 -p:把文件从系统上的一个地方复制到另外一个地方
-a 复制文件之后把该文件的访问时间设置为源文件的访问时间
-B block: 把块的大小设置为5120字节,而不是默认的512字节。
-d: 在复制文件时创建需要的目录。 -t: 显示存档文件内容的表格。 -r: 允许使用cpio复制文件时,重新给文件命名。
备份root的文件。#find /root | cpio -o > /tmp/root_backup_1215.cpio
备份/root下所有的.tif文件 #find *.tif | cpio -o > /tmp/back.cpio
从cpio档案中恢复文件。 #cpio -i < back_tif.cpio
#find /root | cpio -o > /dev/st0
#cpio -i < /dev/st0
df 可看磁盘大小等
top 监视系统进程 top -n 10信息更新10次后退出top
free 查看内存 -b|k|-m分别以byte,KB,MB为单位显示内存使用情况
-s delay:显示每隔多少秒显示一次内存使用情况
-t:显示内存总和列 -o:不显示缓冲区调节列
quota显示磁盘使用情况和限制情况 #quota ayh显示用户gyh的磁盘使用情况
网络管理命令ifconfig ping netstat
查看计算机磁盘的分区情况 #fdisk -l
mount -t 文件格式 -o 选项 磁盘分区 挂载点目录名
#mount -t ntfs -o nls=utf8,umask=000 /dev/sda1 /mnt/winC
#mount -t vfat -o iocharset=utf8,umask=000 /dev/hda8 /mnt/winG
自动挂载,在文件/etc/fstab 加上 /dev/hda1 /mnt/winC ntfs umask=000,nls=utf8
/dev/sda5 /mnt/winG vfat umask=000, iocharset=utf8 0 0
#ln -s /mnt/winC/ ~root/Desktop/winC
桌面菜单/usr/share/applications 目录中建立一desktop文件可以用于添加程序。
uniq 命令显示文件中所有不重复的行。
比较文件内容的命令 comm diff
firefox里面的过滤器里面输入about:config可以看到一些配置
mousewheel.withnokey.sysnumlines改为false
mousewheel.withshiftkey.sysnumlines改为1
提速network.http.pipelining改为ture
network.http.proxy.pipelining改为ture
network.http.pipelining.maxrequests改大
提速:firefox的下载,在/usr/bin目录下建立axel.sh
#!/bin/sh
urxvt -e axel -v $1
并且在/usr/share/apps/konqueror/servicemenus/下新建一个文件,命名为axel_download.desktop,内容为
QUOTE:
[Desktop Entry]
Encoding=UTF-8
Actions=axelDownload;
Icon=ServiceTypes=kdedevice/*
[Desktop Action axelDownload]
Exec=axel.sh %U
Icon=kget
Name=Download with axel
Name[zh_CN]=用axel下载
vim也可以用ZZ保存退出
文件相关:w file 保存当前文件内容写到file文件中
:n1,n2w file 将从n1开始n2结束的行写到file文件中
:nw file 将第n行写到file文件中
:1,n2w file将从第1行起到光标当前位置的所有内容写到file文件中
:.,$w file 将从光标当前位置到文件结尾的所有内容写到file文件中
:r file 打开另一个文件file
:e file 建立file
:f file 把当前文件改名为file文件
搜索,替换,删除
:/str/ 搜索到有str的地方光标下移一行
:?str? 搜索到有str的地方光标上移一行
:/str/w file 将包含有str的行写到文件file中
:/str1/,/str2/w file 将从str1开始到str2结束的内容写入file文件中
:s/str1/str2 将第一个str1替换为str2
:s/str1/str2/g 将所有的str1替换为str2
:.,$s/str1/str2/g 将从当前位置到结尾的所有str1替换为str2
文本的复制,移动,删除
:n1,n2 co n3 将从n1到n2行之间的内容复制到第n3行下面
:n1,n2 m n3 将从n1到n2行之间的内容移动到第n3行下面
:d 删除当前行
:nd 删除从当前开始的n行
:n1,n2 d 删除n1行到n2行之间的内容
:.,$d 删除从当前行到结尾的所有内容
:/str1/,/str2/d 删除从str1开始到str2为止的所有内容
执行shell命令:!Cmd 运行shell命令Cmd
:n1,n2 w ! cmd
:r!Cmd
:set autoindent 缩进每一行,使之与前一行相同,通常用于程序的编写
:set noautoindent 取消缩进
:set number 在编辑文件时显示行号
:set nonumber 不显示行号
:set ruler 在屏幕底部显示光标所在的行,列位置
:set noruler 不显示光标所在的行,列位置
quota进行用户空间管理
设置别名alias l='ls -l'
GRUB是 GRand Unified Bootloader的缩写。
可以在/etc/grub.conf文件中内容进行设置,添加参数reDisableded和password可以使用户的系统在启动GRUB时就要求密码验证。为了安全,把这个文件的权限改为chmod 600 /etc/grub.conf而后再使得不可写chattr +i /etc/grub.conf如果要取消则把+变为-就可以了。
在/etc/logina.defs可以设置用户的密码的使用时间的长短和有效期。
在/etc/profile中在HISTSIZE=1000行增加tmout=600就是在这个时间内用户没有任何动作就注销这个帐户。同样也可以在别的用户的.bshrc中添加该值,修改注销时间。
通过添加一行命令到/etc/rc.d/rc.local可以在每次启动后运行,可以阻止用户的系统响应任何从外部或者内部的ping请求,如:echo 1>/proc/sys/net/ipv4/icmp_echo_ignore_all
/etc/services 文件制定了/usr/sbin/inetd将要监听的服务
[gaowei@localhost linux-2.6.28]$ grep -v "#" /etc/services显示没有被注释掉的服务
[gaowei@localhost linux-2.6.28]$ ps -eaf|wc -l
180 统计系统当前运行的服务的总数
Linux在启动时要检测脚本文件,这些脚本决定了init进程要启动哪些服务。默认系统是X为启动的,则文件在/etc/rc.d/rc5.d下。要在启动时禁止某个服务,只要把S替换成s就可以了。这三个服务漏洞比较多,S34yppasswddd(NIS服务器) S35ypser(NIS服务器) S60nfs(NFS服务器)
重要的日志文件有utmp,wtmp和lastlog
前俩个文件都是二进制文件,用户需要使用who,w,user,last和ac来查看这俩个文件包含的信息。用touch创建/var/log/pacct然后命令行里面#accton /var/log/pacct就可以启动进程统计了。
有空是应该好好学习iptable命令的。开启iptables用#service iptables start
*****配置各种服务器*****
webmin真的是个很强大的工具。rmp -iq webmin有rmp -qa|grep httpd有
在浏览器中输入http://127.0.0.1:10000就可以进入了
重装Windows系统Linux无法进入
1.进入救援模式,#chroot /mnt/sysimage
2. #grub-install /dev/hda
3. #exit
#sh NVIDIA-Linux-x86-1.0-9639-pkgl.run
可以使得系统自动连接到www.nvidia.com 网站检查驱动程序是否需要更新,如果需要,则会自动进行更新并且安装。
glxgears原来是测试显卡的,三个轮子在转动,不错!
还有这些可以测试[root@localhost ~]# glxinfo |grep rendering
direct rendering: Yes
[root@localhost ~]# glxinfo |grep direct
direct rendering: Yes
要使得系统的mp3可以播放,下载xmms-1.2.10.tar.gz
Linux系统对硬件设备对声卡的支持不好,可以自己下载ALSA(Advanced Linux Sound Architecture,Linux 高级声音体系)驱动程序。四个包alsa-driver-1.0.10.tar.tar also-lib-1.0.10.tar.tar alsa-utils-1.0.10.tar.tar alsa-oss-1.0.10.tar.tar
配置modprobe.conf
用tf可以设置分辨率,xvidtune可以进行微调。
rpm 进行强行安装--nodeps 覆盖原来的安装过的软件--replacefiles --force强制覆盖
tarball是以tar.gz压缩之后的源代码包。
优先下载i686的软件
ext2文件系统,就可能用debugfs命令找回并恢复失去的文件。
一旦文件卸载就运行fsck检查坏块badlocks命令
修复损坏的ext3文件系统。
[root@localhost ~]# e2fsck -fyv /dev/
e2fsck 1.40.2 (12-Jul-2007)
/dev/ is mounted.
WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.
Do you really want to continue (y/n)? yes
e2fsck: Is a directory while trying to open /dev/
The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193
[root@localhost ~]# e2fsck -fyv root
yum
1.更换yum仓库 2.使用代理 3.使用fastmirror插接yum -y install yum-fastestmirror
4.使用axelget插件,可以在http://wininlinux.googlepages.com下载。将文件http://winilinux.googlepages.com/axelget.conf放入/etc/yum/pluginconf.d/目录,将http://wininlinux.googlepages.com/axelget.py放入/usr/lib/yum-plugins/即可,按用户的需要修改axelget.conf文件中的值。
文泉驿字体
http://sourceforge.net/project/showfiles.php?group_id=57796
http://sourceforge.net/project/showfiles.php?group_id=33291
Xpdf是一个可以阅读pdf的软件

编译内核

[gaowei@localhost linux-2.6.28]$ ls
arch crypto fs Kbuild Makefile REPORTING-BUGS sound
block Documentation include kernel mm samples usr
COPYING drivers init lib net scripts virt
CREDITS firmware ipc MAINTAINERS README security
[gaowei@localhost linux-2.6.28]$ make mrproper
#这是删除一些一切留下来的.o文件!
接着设置编译选项。
[gaowei@localhost linux-2.6.28]$ make menuconfig将会弹出一个图形的!
这里便是要设置内核的一些功能了!
内核的设置应尽量采用下面的原则:
1.确定内核需要的功能,直接编译进内核。
2.可能在将来会用到的功能,直接编译进内核。
3.不知道要做什么,看HELP,看不懂则采用默认值或者变为模块
4.可以看到内核可选的项目真的很多,真的要好好看看!
选择好了这些你就应该,保存设置了,在15个选项下面有一个是Save Configuration to an Alternate File选项,然后为其命名一个喜欢的文件名,这个文件内容就是刚刚编译完成的数据,然后选择,再保存一次到系统中,接下来准备编译!
之后我的有警告
scripts/kconfig/mconf arch/x86/Kconfig
#
# using defaults found in /boot/config-2.6.23.1-42.fc8
#
/boot/config-2.6.23.1-42.fc8:1437:warning: symbol value 'm' invalid for FIXED_PHY
/boot/config-2.6.23.1-42.fc8:1665:warning: symbol value 'm' invalid for IWL4965
/boot/config-2.6.23.1-42.fc8:1756:warning: symbol value 'm' invalid for ISDN
*** End of Linux kernel configuration.
*** Execute 'make' to build the kernel or try 'make help'.
[gaowei@localhost linux-2.6.28]$ make clean
1.除掉原来的生成的*.o文件,这样就不会产生新旧版本的误差了。
[gaowei@localhost linux-2.6.28]$ make bzImage
2.制作出内核的文件。
[gaowei@localhost linux-2.6.28]$ make modules
3.制作出模块相关的文件。
4.如果,编译过程中发生问题,通常可能是挑选的项有问题,这样就需要重新挑选设定的内容make munuconfig,之后编译就可以成功了。执行"make bzImage"后,
我的错误是
WARNING: modpost: Found 1 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
GEN .version
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
KSYM .tmp_kallsyms1.S
AS .tmp_kallsyms1.o
LD .tmp_vmlinux2
.tmp_vmlinux2: final close failed: No space left on device
make: *** [.tmp_vmlinux2] 错误 1
这样就莫名其妙的好了!
[gaowei@localhost linux-2.6.28]$
Root device is (8, 9)
Setup is 12568 bytes (padded to 12800 bytes).
System is 2109 kB
CRC 47b80fb0
Kernel: arch/x86/boot/bzImage is ready (#1)
[gaowei@localhost linux-2.6.28]$ ll arch/i386/boot/bzImage
lrwxrwxrwx 1 gaowei gaowei 22 03-14 13:01 arch/i386/boot/bzImage -> ../../x86/boot/bzImage内核就已经编译好而且放在上面这个目录下了。
[gaowei@localhost linux-2.6.28]$
5.编译内核的模块部分
[gaowei@localhost linux-2.6.28]$ make modules_install
[gaowei@localhost linux-2.6.28]$ sudo make modules_install
口令:
cp: 无法 stat “/home/gaowei/linux/linux-2.6.28/modules.order”: 没有那个文件或目录
make: *** [_modinst_] 错误 1
[gaowei@localhost linux-2.6.28]$
接下来就是安装内核了!主要分为俩步:
1.将模块安装到/lib/modules/ 'uname -r',现在编译好的镜像还是在你的目录下,所以需要将内核放置在启动内核的默认目录/boot下。
把vmliuz-2.6.23.1复制到/boot/vmlinuz-2.6.23.1 然后把linux/System.map 发到/boot/System.map-2.6.23.1
我的设置如下
sudo cp arch/i386/boot/bzImage /boot/vmliuz-2.6.28
[gaowei@localhost linux-2.6.28]$ sudo cp System.map /boot/System.map-2.6.28
2.进行开机的设定。
修改grub配置文件,/boot/grub/grub.conf文件
添加如下:
title kernel 2.6.28
root (hd0,8)
kernel /boot/vmliuz-2.6.28 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
好了,等待重启而后再看结果!

昨天

昨天,已经成为过去,但是给了我们今天的很多启发!
昨天,我们的网络管理老师讲了一个故事,(我们那个女老师很爱讲故事,尽管有些故事很无聊)但是昨天那个故事,我感觉比较好!
一个老天使,一个小天使,一天来人间访问,第一天晚上他们到一户农民家里住,但是那家农民对他们很不好,让他们住在肮脏的地下室,第二天,老天使把他们家地下室的一个大洞补好了,他们就这样逛了一天,到了晚上到另一个农民家里住,这家的农民对他们很好,给他们做了很多的好吃的,让他们睡在暖和的床上,第三天,他们走的时候!小天使想不明白地问老天使:“太不公平了,你为什么要把他们家的奶牛给杀死呢?”他气愤的说道!
你们猜一猜why?
老天使说:“因为死神昨天晚上来了要他们的家的一个人的命,我用一头奶牛的命换了他的命“
”第一天晚上住的那个地下室里面的那个洞里面有一袋金子,所以我把它补好了!“
里面蕴含着一定的哲学!祸兮福之所倚,福兮祸之所潜!
很多的时候我们看似不好的也许是最好的呢?一切以平常心看待了!
昨天,还把这个故事讲给了一个小女孩听了!或许对她有帮助吧!
今天,http://lang-8.com/
We're sorry, but something went wrong.
We've been notified about this issue and we'll take a look at it shortly.
(If you're the administrator of this website, then please read the log file "production.log" to find out what went wrong.)

2009年3月10日星期二

Linux下的下载工具!

最近,学到几个下载工具!
axle
[gaowei@localhost tool]$ axel -h是个不是很好的工具!感觉没有mytget好用!
Usage: axel [options] url1 [url2] [url...]
Report bugs to lintux@lintux.cx
[gaowei@localhost tool]$
aria2

aria2
is a utility for downloading files. The supported protocols are HTTP(S), FTP, BitTorrent, Metalink. It can download a file from multiple sources/protocols and tries to utilize your maximum download bandwidth.
目前还没有用不知道好坏了!
Prozilla也是一个十分流行的命令行下载工具。
Curl软件也可以了!
顺便下载了一个网络抓包工具
http://www.ethereal.com/download.html
突然想编写一个网络下载工具了,其实过去也想过,但是一直感觉自己的实力不够,其实实力是在不断的实践中得到的,而不能仅仅靠幻想和一味追求完美而不敢前进!
还有就是写一个简单的操作系统,其实,我感觉有时候呆在实验室也不一定是好事,感觉多少有点限制,或许那样只是不适合我而已!感觉,我自己有点好高骛远,要脚踏实地的好好学,想干什么就一定要把它干好!和有就是有什么要说的一定大胆的说出来!

2009年3月9日星期一

多系统安装

太慢了啊!所以写下来这些
今天到实验室,从大概7点到现在,真是麻烦啊!实验室的网络也不是很快了。
下载了Cent OS4.4准备安装,下载了好几个小时,下好,我基本把硬盘安装忘记了,所以就很慢了,记得要把镜像文件放到你的/目录下面哦!否则一般很难找到!
xiyoulinux@xiyoulinux-desktop:~$ cp CentOS-4.4.ServerCD-i386.iso /
cp: 无法创建一般文件 “/CentOS-4.4.ServerCD-i386.iso”: Permission denied
xiyoulinux@xiyoulinux-desktop:~$ sudo cp CentOS-4.4.ServerCD-i386.iso /
[sudo] password for xiyoulinux:
终于好了,cp完了!
尽管是装好了,但是不能够进入ubuntu了,又搞了一个中午,没有想到的是,居然把俩个系统都给破坏了,哎!明天继续把它装,而且没有光驱,就只好等借一个了!
中间遇到过去很多没有遇到过的问题!
注意mv系统文件时候要看好他的属性哦!你把同样的名字的文件放在同样的目录下有时属性不同就会起到不同的作用,那样有时候会破坏性很大的!
见下面的图!



又花了一个中午,还是没有好!
不过学会一种grub的恢复方法,就是用Linux Live CD引导进去,而后
进入grub
输入find /boot/grub/stage1
(hd0,0)
setup (hd0)
reboot
好了!这样就可以恢复了!
scp 主机名@ip地址:/目录 你要下载的目录
有时候,你的系统会安装不上,所以可以在grub里面的kerenl /vmlinuz 的后面添加generic-ide这样 也许会帮你很大的忙呢?今天刚刚学到的!

2009年3月8日星期日

global

最近要阅读源代码所以就找了一些工具,当然要从简单的入手从更加容易学,而且也不用学那>么工具的相关的知识了。
发现这个比较简单(下面的只是讲一些简单的配置及用法)
1.
GNU GLOBAL 提供了几个命令,其中拿來产生网页的命令就是 htags 。要使用此命令,首先
移到你解压的原始代码的根目录(以linux-0.11原始代码为例):
[gaowei@localhost linux-0.11]$ ls
boot GPATH GSYMS HTML init lib mm
fs GRTAGS GTAGS include kernel Makefile tools
[gaowei@localhost linux-0.11]$ pwd
/home/gaowei/Doc/tool/linux-0.11
[gaowei@localhost linux-0.11]$
然后下命令:
$ htags -g -F -f
其中 -g 是代表先执行 gtags 命令,因为必须先执行完 gtags 产生必要的 tag 資料库, htags 才能藉此产生网页。 -F 是代表将书面分成若干等的框架(frame);而 -f 则是代表要有查>詢的功能,此参数加上去 htags 会自动帮你加入表单以及必要的 cgi 程式。最后记得到产生>的 HTML 目录中底下的 cgi-bin 子目录新增 .htaccess :
Options +ExecCGI
AddHandler cgi-script .cgi
好了,比较简单而且好用!
个人感觉这几个可以
[gaowei@localhost HTML]$ firefox mains.html 这个是主函数,也许有几个呢?
[gaowei@localhost HTML]$ firefox files.html 这里可以搜索,也可以直接到某个目录
[gaowei@localhost HTML]$ firefox index.html 是索引,很不错了!
[gaowei@localhost HTML]$ firefox defines.html 一些宏定义

多管闲事之反思!

我对自己一些事情总个总结吧!
今天,看到有人说我多管闲事,也许真的是,但是,我干了很多的事情,有些也不知道是不
是呢?常干的事情,比方说:
1。给那些乞丐一些钱,并且问问他们为什么会这样,每次都让我很感动也不断的激烈自己>要好好的学习,为了自己,为了我的理想!
2。帮助,看似要帮助的人,但是很多人不会相信世界上真的有好人存在,也很怀疑我们这>
样的热心帮助别人的人,但是我依然帮助,尽管他们怀疑我们不怀好意,但是这是我们乐意
干的!帮过送水工扛过水;帮过大一的新生搬过东西;帮助路途中的人把行李放到高的架子
上;似乎有很多就不一一说了!
3。关心过不认识,不知道姓名的人。大一时几乎每天给一个复读的学生发短信,原因只是>她不想学习了,她不想高考了,不想呆在家里了!几乎发了一年,也许你也会认为我不怀好
意(其实我也幻想过,但是真的没有想会有真的回报)最好她考上了上海交大再没有联系。
还有大学时候,把自己不要的东西送人,把自己的课本送人(也许是刚刚认识的),给过别
人试卷(没有见过,今天我也没有见过,也许见过只是我们谁也不认识谁,似乎有些搞笑是
不是呢?
4。放假,帮别人义务服务(3天多),没想到最后还得到30元(没有办法他非要给)。
5。每天叫宿舍的人早起,为了生活情况不好的同学想,只有要赚钱的好事我会想到他们。>经常说我们宿舍的不要打游戏了,好好学习,也许多余。
6。最近,想给一个需要书的人,她竟然不要,具体原因我知道,我也不想知道。
最近,关心一个伤心的人,让她高兴,让她好好学习!
最近,给人装过系统,请人吃过饭。
最近,帮人家宣传自己!
最近,给过去的“同事”送过家乡的特产!
也许是自己善良,也许是自己多管闲事,也许是其他什么?
总之要把握好适度,做最好的自己,听别人说。
好,要经常的反思自己,看有什么不对加以改正!
谢谢!可以指出我的错误的朋友!随时听取别人的建议!
有时候,自己也是这样认为的!

但是,似乎也没有更加好的办法了!

2009年3月3日星期二

Linux0.01分析笔记(4)

[gaowei@localhost ~]$ sh -e
sh-3.2$ exit
exit
[gaowei@localhost ~]$ man sh
-e参数指定“\"不用做转义字符。
当shell启动时,会读取默认的配置文件/profile。
[gaowei@localhost ~]$ \ls这样可以但是[gaowei@localhost ~]$ ls\ls 就bash: lsls: command not found
[gaowei@localhost ~]$ sh \ ls
sh: ls: 没有那个文件或目录
[gaowei@localhost ~]$ sh \
>
[gaowei@localhost ~]$ sh
sh-3.2$ \
>
[gaowei@localhost ~]$ "ls" kernel/
book C kang kernel linux-0.11 man-pages-3.10
当执行shell时,用户键入一个命令,shell首先除去所有的"\"字符之前的字符(如果没有使用-e参数)和所有的引号中的字符。然后,shell按照如下的规则处理"!"引起的shell命令历史代替:
!! 代表前一个执行的命令
! 代表前个执行的命令
! 代表字符串开始的命令
然后,shell会将输入的命令字符串切换成为令牌(token)字符串。在引导中的所有字符串成为一个令牌。空格是隔开各个令牌的分割符。
然后,shell使用如下的规则处理命令行的通配符:
包含通配符(当前设定为*)的令牌被假定成文件名,通配符被扩展成为匹配的文件名(*匹配任何字符)。
shell执行I/O重定向(I/O readirections):
'> word' 重定向标准输出(redirect stdout)
'>> word' 重定向标准输出,添加在指定的文件后
'>& amp;word' 重定向标准输出和标准错误输出(redirects stdout and stderr)
'< word' 重定向标准输入(redirects stdin)

shell处理的文件描述符一般有三个:文件句柄0(stdin,标准输入),文件句柄1(stdout,标准输出),文件句柄2(stderr,标准错误输出)。

dup()系统调用的功能是返回一个新的文件描述符,它指向传入参数文件描述符指向的文件流。dup()使用进程文件分配表中的第一个没有使用的文件句柄复制为新的文件句柄。dup()经常使用的一个功能就是完成标准I/O的重定向。使用dup()进行I/O重定向的代码片段如下:
int fd,pid;
fd = open(path,mode);
if((pid=fork())==0) {
close(0);/*Close stdin.*/
/* Make stdin come from fd.Dup() will reuse the lowest.
*number unused file descriptor,0 in this case.*/

dup(fd);
close(fd); /*No longer needed.*/
execve(...); /*Run command,with input from fd..*/
} else {
/*Parent.Wait for child processes to exit.*/
while(wait(NULL)>0);
}
pipe()函数可以创建一个FIFO流(First In First Out stream,先进先出流)来完成进程间的通信。pipe()系统调用生成俩个文件句柄,一个可以向FIFO流中写入,一个可以从FIFO流中读取。可以通过在父进程中使用pipe()函数来创建管道,然后再生成fork()子进程,每一个生成的子进程中都有父进程调用pipe()函数生成的文件句柄的复制。在子进程中,>可以把父进程中通过pipe()生成的句柄使用dup()函数来重定向子进程的标准输入(stdin),标准输出(stdout)和标准错误输出,这样父进程就可以控制子进程的标准I/O了。
int i,pid,mypipe[2];/*Two fds,for pipe ends.*/
pipe(mypipe); /*Create pipe.*/
/*Create reader.*/
if((pid=fork())==0) {
close(0); /*Close stdin.*/
dup(pipe[0]); /*Stdin comes from pipe.*/
close(pipe[0]); /*No longer needed.*/
close(pipe[1]); /*Not needed.*/
execve(...); /*Run command,with input from pipe.*/
}
/*Create write.*/
if((pid=fork())==0) {
close(1); /*Close stout.*/
dup(pipe[1]); /*stdout goes to pipe.*/
close(pipe[1]); /*No longer needed.*/
close(pipe[0]); /*Not needed.*/
execve(...); /*Run command,with output to pipe.*/
}
/*Parent.*/
close(pipe[0]);
close(pipe[1]);
while(wait(NULL)>0); /*Wait for child processes to exit.*/
一个例子:
[gaowei@localhost 10SHELL编程技术和实例]$ gcc -o dup dup.c
[gaowei@localhost 10SHELL编程技术和实例]$ ls
10 a.out dup dup.c sh1.c sh2 sh2.c
[gaowei@localhost 10SHELL编程技术和实例]$ ./dup
This is to stdout
This is to stderr
[gaowei@localhost 10SHELL编程技术和实例]$ ls
10 a.out dup dup.c err out sh1.c sh2 sh2.c
[gaowei@localhost 10SHELL编程技术和实例]$ cat ./out
This is to stdout
[gaowei@localhost 10SHELL编程技术和实例]$ cat ./err
This is to stderr
[gaowei@localhost 10SHELL编程技术和实例]$ ls -a
. .. 10 .10.swp a.out dup dup.c err out sh1.c sh2 sh2.c
[gaowei@localhost 10SHELL编程技术和实例]$ ls
10 a.out dup dup.c err out sh1.c sh2 sh2.c
[gaowei@localhost 10SHELL编程技术和实例]$
一个成熟的shell应该支持管道操作总体结构如下:
(cmd1 | cmd2) /* cmd1的标准输出为cmd2的标准输入 */
pipe[fdarr]; /*定义管道 */
if((pid1 = fork()) == 0) {
close(1); /*关闭cmd1的stdout */
dup(fdarr[1]); /* 设置fdarr[1]为cmd1的stdout */
close(fdarr[0]);

aptr[0]="cmd1"; aptr[1]=NULL;
execve("cmd1",aptr,eptr);
}
if((pid2=fork()) ==0) {
close(0); /*关闭cmd2的stdin */
dup(fdarr[0]); /*设置fdarr[0]为cmd2的stdin */
close(fdarr[0]);
close(fdarr[1]);

aptr[0]="cmd2";aptr[1]=NULL;
execve("cmd2",aptr,eptr);
}
close(fdarr[0]);
close(fdarr[1]);
wait() for both pid1 and pid2;
shell程序的主程序组成如下:
#include "def.h"
main(void)
{
int i;
initcold();
for(;;) {
initwarm();
if(getline())
if(i=parse())
execute(i);
}
}

第十一章
分析Linux0.01中实现系统调用的俩个文件system_call.s和sys.c来展示Linux0.01的系统调用的实现方式。标准的C语言库函数,在不同的操作系统上有不同的内部实现。
应用程序可以通过一个固定的过程,从而调用内核提供的功能,在Intel体系结构的计算机中,这是通过执行中断0x80h实现的。
应用程序通常是一个进程,进程在调用内核时,跳转到内核代码中的位置一般标记为system_call(在Linux0.01中,system_call是汇编程序system_call.s中的一段代码的入口点的标记)。在system_call位置的代码将检查系统调用号,依据系统调用号告诉系统内核进程请求的系统服务是什么。然后,它再查找系统调用表sys_call_table[],找到希望调用的内核函数的地址,并调用此函数,最后将控制权返回应用程序。编写一个自己的函数,然后改变sys_call_table[]中的指针并指向该函数。
Linux用于实现系统调用异常的实际指令是:int $0x80
定义系统调用的预定义宏为: _syscallN(parameters)
在include/unistd.h中可以找到_syscallN(parameters)还有__NR_name的形式定义了66个常数,这些常数就是系统调用函数name的函数指针在系统的调用表中的偏移量。
系统调用表是一张表格,按照顺序定义了系统中所有的系统调用的入口函数地址。在Linux0.01中,系统调用表定义在include/linux/sys.h中,如下所示:
fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read,
sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link,
sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod,
sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount,
sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm,
sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access,
sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir,
sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid,
sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys,
sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit,
sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid,
sys_getpgrp,sys_setsid};
在数组sys_call_table[]中的每一个元素都是一个函数指针(在C语言中,函数名代表指向函数入口的指针),按系统调用号(即前面提到的_NR_name)排列了所有系统调用函数的指针,以供系统调用入口函数查找。从这张表可以看出,Linux给它所支持的系统调用函数取名叫sys_name。
系统调用入口函数定义在/linux/kernel/system_call.s文件中。是使用汇编语言书写的,包含了系统调用的主要处理程序,同时也包含了时钟中断处理程序,硬盘中断处理程序也包含在本文件中。
从system_call入口的汇编程序的主要功能是:
检查是否为合法的系统调用。
保存寄存器的当前值。
根据系统调用表_sys_call_table和EAX寄存器持有的系统调用号找出并转入系统调用响应函数。从该响应函数返回后,让EAX寄存器保存函数返回值,跳转至ret_from_sys_call,>当ret_from_sys_call结束后,将执行进程调度。
在执行位于用户程序中系统调用命令后面余下的指令之前,若INT 0x80h的返回值非负,则直接按类型type返回;否则,将INT 0x80h的返回值取绝对值,保留在errno变量中,返回-

第十二章
关于这一章我记录的比较少
尽管在Linux0.01中没有写网络的部分,但是现在是个网络的时代,这本书中也讲了关于网络的部分,而且我又是学习网络的,所以就在写一写了。
Linux是一个网络操作系统。
TCP/IP协议是一套数据通信协议,其名字是由这些协议中的俩个主要的协议组成的,即传输控制协议(Transmission Control Protocol,TCP)和网间协议(Internet Protocol,IP)。

Linux0.01分析笔记(3)

第七章
在Linux0.01内核中的include/linux/sched.h文件中,定义了进程的不同状态,
#define TASK_RUNNING 0 表示进程在"Ready List"中,这个进程除了CPU以外
,获得了所有的其他资源
#define TASK_INTERRUPTIBLE 1 进程在睡眠中,正在等待一个信号或者一个资源
#define TASK_UNINTERRUPTIBLE 2 进程等待一个资源,当前进程在“Wait Queue“
#define TASK_ZOMBIE 3 僵尸进程(没有父进程的子进程)
#define TASK_STOPPED 4 标识进程在被调试
进程控制表中的每一项都是一个task_struct结构,而task_struct结构中存储各种低级和高级的信息,包括从一些硬件设备的寄存器复制到进程的工作目录的链接点。
进程控制表既是一个数组,又是一个双向链表,同时又是一个树。其实现是一个包括多个指针的静态数组。此数组的长度NR_TASKS
#define NR_TASKS 64
#define HZ 100
数组中的结构则保存在系统预留的内存页中,定义如下:
#define FIRST_TASK task[0]
#define LAST_TASK task[NR_TASKS-1]
系统启动后,内核通常作为某一个进程的代表。一个指向task_struct的全局指针变量current用来记录正在运行的进程。变量current只能由kernel/sched.c中的进程调度改变。
内核线程在Linux2.0.0的核心中就可以被看到,例如在linux-2.0.1\linux\arch\alpha\kernel\entry.S中的代码。Linux系统使用系统调用fork()来创建一个进程,用exit()来结束一个进程。fork()和exit()的源程序保存在kernel/fork.c和kernel/exit.c中。fork()主要任务是初始化要创建进程的数据结构,其主要的步骤有:
(1)申请一个空闲的页面来保存task_struct。
(2)查找一个空的进程槽(find_empty_process())。
(3)为kernel_stack_page申请另一个空闲的内存页作为堆栈。
(4)将父进程的LDT表复制给子进程。
(5)复制父进程的内存映射信息。
(6)管理文件描述符和链接点。使用fork()创建一个进程后,程序的俩个复制都在运行。通常一个复制使用exec()调用系统的应用程序。
进程的调度(schedule()函数)
用户级线程(User-level threads) 是由与应用程序链接的线程库实现。核心不知道线程的
存在,也就不能独立调度这些线程了。
多任务系统可以划分为单处理器多任务系统和多处理器任务系统。
Linux0.01的核心进程源代码主要包括sched.c,fork.c,kill.c等。
sched.c是Linux的主要核心文件,它实现了Linux的进程调度功能,包括实现进程的各种状
态:睡眠(sleep_on),唤醒(wakeup),调度(schedule)等。
fork.c包含了实现系统调用fork()的辅助功能函数。
kill.c主要实现了系统调用kill(),kill()的作用主要是杀死一个进程。
system_call.s包含了系统的低级处理函数,主要都是一些汇编处理程序。

第八章
设备管理系统通常是设备驱动程序和操作系统的其余部分和应用程序的唯一接口。
设备管理系统需要实现如下的功能:
(1)隔离设备驱动程序和操作系统核心。
(2)隔离硬件和用户程序。
一般操作系统的设备管理程序具有如下特性:
(1)异步I/O(Asynchronous I/O)
(2)即插即用(Plug and Play)
在Unix下可以使用read()和write()来读和写设备,用ioctl()来对设备进行设置;而在Windows使用ReadFile()和WrintFile()来读和写设备,用DeviceIoControl()来对设备进行设置。
在Linux系统中俩种典型的情况:读RAMDISK和读IDE设备。
对于read请求,如果read一个RAMDISK,典型的过程如下:
(1)从RAMDISK内存空间复制内存到用户空间(user space)。
(2)结束调用,返回用户空间。
一个IDE驱动程序,典型的read处理过程如下:
(1)接受一个read请求,然后把这个请求放到I/O队列中。
(2)如果I/O队列为空,将这个读写磁盘扇区的请求发送到磁盘驱动器。
(3)将调用read系统调用的进程切换为SLEEP状态。
(4)当磁盘驱动器完成磁盘扇区读操作后,会发出一个中断。IDE驱动程序接收到这个中断后,把读出的数据从磁盘控制器传送到核心的buffer中,然后把数据复制到用户空间,接下来唤醒调用进程。
(5)当调用浚进程被唤醒时,系统的控制权回到用户空间的用户进程。
CPU的内部中断又可以叫异常,异常的主要作用是报告一些程序运行中的错误和处理缺页中断(page_fault)。这些异常都是通过set_trap_gate宏来设置的。set_trap_gate宏是定义在include/asm/system.h文件中的一个宏,被用来设置CPU的trap,起定义如下:
#define set_trap_gate(n,addr) \
_set_gate(&idt[n],15,0,addr)
在Linux0.01中,中断处理主要做了俩个部分的工作:
(1)trap.s将各个CPU的trap信息填入到idt中;
(2)asm.s处理当出现trap的时候后续的一系列处理。
在Linux0.01中处理的外部中断有时钟中断(0x20),串行通信口中断(0x23和0x24),硬盘中断(0x2e),键盘中断(0x21),这些中断具体的处理函数在文件rs_io.s,hd.c和keyboard.s中。
如果多个设备共享一个中断,那么每当一个设备产生一个中断时,CPU会执行所有的isr中断服务程序。具体的一个完整的中断产生和处理流程是:
(1)产生中断
(2)CPU应答
(3)查找idt中的对应向量
(4)在gdt中查找idt项的代码段
(5)对比当前的cpl和描述符的dpl看是否产生越级保护
(6)检查是否发生特权级的变化,如果是就保存ss和esp,否则不保存
(7)保存eflags,cs,eip和错误码
(8)将idt对应描述地址装入cs和eip中以便执行
(9)执行irp_interup
(10)执行do_irp
(11)循环执行isr
(12)中断返回。
trap.c处理了硬件中断和运行中可能产生的错误。
asm.s包含了处理低级硬件错误的代码,asm.s也使用TS位来处理协处理器错误。
ISR(Interrupt Service Routine,ISR),中断处理程序。
x86体系结构是一个中断驱动的系统,外部发生的事件总是通过中断服务程序来进行处理。
在x86体系结构中,中断处理程序的入口地址是保留在系统的IDT(Interrupt Descriptor Table,中断描述表)中的。
中断处理程序和普通程序的区别是:中断处理程序必须非常简单,而且需要处理CPU的状态
。ISR在结束时,都必须调用"Interrupt Return(IRET)",而普通应用程序在结束时调用的是"Return (RET)"或者"Far Return(RETF)"。
BIOS数据区提供了大量的硬件设备信息,通过读取BIOS的数据,可以方便地了解计算机的硬件设备情况。
在IMB AT和IBMPS/2键盘系统中,CPU并不直接和键盘进行通信,而是通过一个8042芯片或者其他与之兼容的芯片。键盘本身也有自己的芯片(Intel8084及其兼容芯片)。
console.c主要实现了控制台功能,包含con_init()和con_write()函数。
serial.c实现了rs232串口通信功能,主要函数是:rs_write(),rs_init()以及相关的中断功能。

第九章
Linux系统继承了Unix中"everything is a file"的思想,使用文件系统接口,从而可以控
制Linux系统中的所有设备。通过引入VFS(Virtual File System)的概念,可以使Linux文件系统的主要部分和具体的物理文件系统类型无关。
对硬盘进行访问的基础是对硬盘的磁盘扇区进行寻址。通常,对于硬盘的寻址使用CHS(Cylinder/Head/Sector)参数。CHS就是使用柱面数(Cylinders),磁头数(Heads),和扇区数(Sectors per track)来定位硬盘驱动器任何一个扇区的方法。
Cylinders表示硬盘每一面盘片上有几条磁道,最大为1024(用10个二进制位存储).
Heads表示硬盘总共有几个磁头,也就是有几面磁片,最大为256(用8个二进制位存储)。
Sectors per track表示每一条磁道上有几个扇区,最大为63(用6个二进制位存储)。
每一个扇区一般是512B所以磁盘最大容量为
256*1024*63*512/1048576=8064GB (1M=1048576B)
BIOS INT 13h调用是BIOS提供的磁盘基本输入输出中断调用,它可以完成磁盘(包括硬盘和软盘)的复位,读写,校验,定位,诊断,格式化等功能。它使用的就是CHS寻址方式,因此最大能访问8GB左右的硬盘。
典型的扇区存放形式:
扇区在磁道上连续存放;带磁盘内部Cache的现代磁盘。
Unix文件系统结构
Boot block |Super block |Inode table...........|Data block zone
引导块(Boot block)通常位于文件卷最开始的第一扇区,这512B是文件系统的引导代码,为根文件系统所特有,其他文件系统中这512B为空。
超级块(Sper block)紧跟引导块之后,用于描述文件系统的结构,如i节点长度,文件系统大小等信息。
i节点表(Inode table)存放在超级块之后,其长度由超级块中i节点长度字段决定,起作用是用来描述文件的属性,长度,属主,属组,数据块表等信息。
数据区(Data block zone)跟在i节点表后面,用于存放文件的数据。
在Unix系统中,一个普通的文件通常由俩部分组成:i节点+数据块
用fsck可以修正文件系统的不一致。
fsck - check and repair a Linux file system
日志文件系统(Log-Structured File System)的设计思想是跟踪文件系统的变化而不是文件系统的内容,所有对文件系统的更新都被记录在日志中。
Linux文件系统其实可以分为三个部分,第一部分叫VFS。这是Linux文件系统对外的接口,
任何要使用文件系统的程序都必须经由这层接口来使用它。另外俩部分属于文件系统的内部,其中一个是Cache,另一个就是真正最底层的文件系统,像Ext2,FAT之类的。
在文件系统里的每一个文件,系统都给它一个inode,只要inode不一样,就表示这俩个文件不相同,inode是由VFS定义的。
一个硬盘最多可以有8个分区(partition),其中4个是主分区(Primary partition),另4个则是扩展分区(extended partition)。除了分区,硬盘第一个扇区称为MBR(Master Boot Record,主启动录)。
文件系统的一些过程:
创建一个文件,其步骤如下:
(1)分配和初始化inode
(2)将inode和文件名的对应关系写入到文件目录表项中(通常在当前的工作目录)
(3)将上述数据写入磁盘。
修改一个磁盘文件,起步骤如下:
(1)将此文件的inode装载到内存中
(2)分配空闲的磁盘块(将这些磁盘块在freelist中标记为已经分配)
(3)修改这个文件的inode,指向这个新分配的磁盘块
(4)将用户的数据写入这个磁盘块
(5)将这个文件所有的修改都写入磁盘。
删除一个磁盘文件,其步骤如下:
(1)将此文件的inode装载到内存中。
(2)依据inode数据查找到将要删除的数据所在的磁盘块
(3)标记这个磁盘块为空闲
(4)将这个文件所有的修改都写入磁盘。
在系统启动时,只执行一次的函数sys_setup读取所有的IDE硬盘上的分区表。在kernel/hd.c源程序中包含对各种IDE接口的驱动代码。此外rw_hd()函数完成了从各种IDE设备上读取
和写入数据块的功能。
在Linux0.01的文件系统中hd.c()代码演示了从IDE设备上读取和写入数据块,而fs/block_dev.c中包含了对块设备文件系统的具体支持。
kernel/hd.c处理IDE中断和数据块写入,读出队列
fs/block_dev.c使用hd.c中提供的功能,例如:block_write()来向硬件驱动器中写入或者读出数据
fs/read_write.c中包含了sys_read(),sys_write(),and sys_lseek()的代码。
super.c文件中包含了Linux0.01的文件系统处理超级块表(super-block tables)的功能。
read_write.c文件包含了Linux0.01文件系统中对字符设备和块设备的读操作和写操作的实现过程。
open.c包含了Linux0.01中打开文件的操作过程。
inode.c包含了Linux0.01中对文件系统inode表的维护过程。
buffer.c实现了文件系统中的缓冲功能。
bitmap.c包含了处理文件系统中inode和文件系统中位图的功能。

Linux0.01分析笔记(2)

第四章
在过去写过了,所以就不在重复了!请看

第五章
格式化的作用是在磁盘上划分不同的区域来存储不同的数据。
磁盘经过格式化后主要包括的区域有:主引导记录区(只有硬盘有),引导记录区,文件分配表(FAT),目录区和数据区。
1988年,国际标准化组织(International Standards Organization,ISO)公布了CD-ROM文
件结构标准,这个标准被称之为ISO 9660。
CD-ROM盘上可以存放信息的区域称为卷空间(volume space).卷空间分成俩个区:从LSN0~LSN16称为系统区,它的具体内容没有规定;从LSN16开始到最后一个逻辑扇区称为数据区,它用来记录卷描述符(volume descriptors),文件目录,路径表,文件数据等内容。
可启动CD-ROM的工作原理:BIOS首先检查光盘的第17个扇区(sector 17),查找其中的代码,若发现其中的启动记录卷描述表(Boot Record Volume Descripter),就根据表中的地址继续查找启动目录(Booting Catalog),找到启动目录后,再根据其中描述的启动入口(Boot Entry)找到相应的启动磁盘镜像(Bootable Disk Image)或启动引导文件,找到启动磁盘镜像后,读取其中的数据,并执行相应的开机动作。相对于单重启动CD-ROM而言,多数启动CD-ROM的启动目录中包含多个启动入口,指向多个启动磁盘镜像。《Bootable CD-ROM Format Specification》
下面是在LA32架构的系统引导过程。
1.硬盘启动步骤
PC机启动过程是遵循一定顺序的,过程如下:
(1)机器加电
(2)BIOS加电自检(Power On Self Test - POST)。BIOS在内存中的起始地址为0FFFF:0000,
BIOS的加电自检就是从地址0FFFF:0000开始执行。BIOS加电自检的主要工作包括:CPU,内存及硬盘等关键设备的检测,即插即用设备的检测。完成这些检查后,将依据结果更新ESCD(Extended System Configuration Data,扩展系统配置数据).
(3)计算机将硬盘0柱面0磁头1扇区(主引导区MBR)中的512B读入内存0000:7C00处并跳到0000:7C00处执行;在读取过程中,计算机并不检查该扇区的内容是什么。
(4)检查(WORD)0000:7DEE是否等于0xAA55,若不等于则转去其他启动介质,如果没有其他启动介质则显示“No ROM BASIC“,然后死机。
(5)跳转到0000:7C00处执行MBR中的程序。
(6)MBR首先将自己复制到0000:0600处,然后继续执行。
(7)MBR在主分区表中搜索标志活动的分区,如果发现没有活动分区或有不止一个活动分区,则停止。
(8)将活动分区的第一个扇区读入内存地址0000:7C00处。
(9)检查(WORD)0000:7DFE是否等于0xAA55,若不等于则显示"Missing Operationing System"然后停止,或者尝试软盘启动。
(10)跳转到0000:7C00处继续执行特定系统的启动程序。
(11)启动系统。
而软盘启动而(1)(2)(3)(4)(5)同上(6)是启动系统。
硬盘主引导扇区基本结构
主引导扇区是硬盘的第一个扇区,它由主引导记录(MBR,Master Boot Record),硬盘分区表
(DPT,Disk Partiton Table)和引导扇区标识(Boot Record ID)三部分组成。
硬盘的一个扇区是512B。主引导记录占用主引导扇区的前446B(字节编号是0~0x1BD)存放系统主引导程序(它负责从活动分区中转载并运行操作系统引导程序)。
硬盘分区表占64B(字节编号0x1BE~0x1FD),记录了磁盘的基本分区信息。硬盘分区表分为4个分区项,每一项16B,分别记录了每个主分区的信息(一个硬盘因此最多可以有4个主分区)。
引导扇区标识占用俩个字节(字节序号是从0x1FE~0x1FF)。对于合法引导区,这个标识为0xAA55。这通常计算机判断引导扇区是否合法的标志。
主引导记录中包含了硬盘的一系列参数和一段引导程序。引导程序主要是用来在系统硬件自
检完后引导具有激活标志分区上的操作系统,它最后执行的指令是一条JMP指令,这条指令使计算机可以跳转执行操作系统本身的引导程序。
DOS命令fdisk /mbr可以修复这段程序。
在Linux系统中可以执行如下的命令来恢复MBR:
dd if=/dev/hda of=/boot/boot.NNNN bs=446 count=1 #备份MBR
dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1 #恢复MBR
硬盘主引导扇区的应用
1.清除硬盘引导功能
2.加密整个磁盘
3.加密单个硬盘分区
4.加入硬盘启动口令识别
5.先于DOS驻留内存程序
6.实现同一硬盘多个操作系统的选择启动
7.实现硬盘主引导扇区或DOS引导扇区的自我修复
Linux0.01的引导部分主要包括俩个源文件:boot.s和head.s。boot.s是计算机上电启动时,由BIOS执行的系统引导代码。head.s是Linux的32位引导代码,在其中将调用main(),最后完成操作系统的引导。
1.boot.s:BIOS引导代码
在计算机加电时,boot.s被BIOS的引导程序加载到地址0x7C00处,然后boot.s将自己移动>到地址0x90000处,然后跳转到地址0x90000处开始执行。然后,boot.s使用BIOS中断功能,加载系统核心到地址0x10000处。接下来,boot.s禁止所有中断,移动系统核心到地址0x0000处,切换处理器到保护模式,然后调用系统的开始程序。系统核心开始运行后,将重新设置保护模式,然后打开需要的中断。
2.head.s:Linux的32位引导代码
这段代码被加载到地址0x00000000处开始运行。地址0x00000000也是系统页表的地址,当系统完成引导后,这段地址将被系统页表重新覆盖使用。
gcc -c my_kernel.c
"-c"开关告诉GCC只是编译成为一个目标文件而不是链接。然后,可以使用如下的命令链接核心,并且设定核心转载的地址为0x100000:
ld my_kernel.o -o kernel.bin -oformat binary -Ttext 0x100000
用“-oformat binary"开关来运行ld告诉链接器输出文件是plain的,没有重定向,没有头信息,只是一个glat的二进制镜像。
“-Ttext 0x100000"告诉链接器用户想要的"text"(代码段)地址在0x100000的内存标记处。
引导代码必须遵循如下的规则:
(1)BIOS会把引导程序装载到固定地址07C00h。因此,引导程序的段地址和飘移地址是固定的。
(2)引导代码必须编译成为plain binary file类型。
(3)plain binary file的尺寸必须是512B(512B是一个扇区的大小)
(4)文件必须以0xAA55h标志结果。
"times 510-($-$$)db 0"代码是一句只有nasm能够理解的代码。
“二次转载”是指:由BIOS从磁盘上装入引导扇区(0头0磁道1扇区)到内存地址07C0:0000,>并跳转到该地址执行;再由从07C0:0000地址开始的引导代码把存放在其他扇区中的程序转
入内存,并跳转到该程序中执行。

第六章
连续分配存储管理方式分为:单一连续分配,固定分区分配和动态分区分配。
虚存提供的功能:扩大地址空间,内存保护,内存映射,公平分配内存,虚存共享。
Inter-Process Communication,IPC 进程间的通信机制
虚拟存储器基本特征是:虚拟扩充,部分装入,离散分配,多次对换。
虚存中的置换算法:先进先出算法(FIFO),最佳置换算法(OPT),最近最少使用置换算法(LRU),最近未使用置换算法(NUR)。
非连续存储管理机制中主要包括:页式管理,段式管理和段页式管理。
任何一个物理地址都可以映射为:段地址+段内偏移。
操作系统必须知道系统物理内存的容量,才能够有效地使用和管理这些物理内存。在CPU处于实模式时,CPU可以访问的物理内存最大只能达到1MB+64KB(在A20 Gate被打开的情况下,否则最大只能访问1MB)。因此,在实模式下通常无法直接通过内存访问来获取内存容量。
可以通过BIOS的15h中断从计算机的CMOS中读取计算机的物理内存的大小,并把这个数据保留在操作系统核心中。BIOS INT15h中断提供了三个子中断来获得系统的物理内存大小,分别是88和E801h和E820h。
malloc()函数作用是从一大块内存中分配出所需要的空间。在分配时需要注意,要留出一部分malloc()不能分配的内核空间(为了便于存储保护,内核地址空间和用户地址空间是相互隔开的)以备内核使用。
内核malloc()函数已经具备了存储分配功能,但是还不具备虚拟存储功能,通过缺页处理来实现虚拟存储管理。
可执行文件的头信息格式有许多标准,例如:coff,elf和pe格式等。
在malloc()函数实现中使用了首次适配方法来进行存储分配。当使用free()函数释放内存时,会对相邻的存储空间进行合并。
page.s是一段汇编语言程序,提供了Linux0.01中缺页异常处理功能。page.s仅仅提供了和
硬件存储管理器的接口功能,大部分功能代码在memory.c文件中。

Linux0.01分析笔记(1)

我是对我读的那本书作的笔记,以后会添加自己的分析。
第一章
我过去也看过这本书,但是很多没有理解,有很多忘记了,故今天又重新看,而且把笔记写下!
GUN的主要精神是软件源代码应该自由流通!
GUN是GUN‘s Not Unix的缩写,是由自由软件基金会(Free Software Foundation,FSF)的董事长Richard M.Stallman(RMS)于1984年发起的。GUN制定了GPL(The General Public License,GUN通用公共准许证)
自由软件的自由包括:使用的自由(可以不受任何限制来使用软件),研究的自由(可以研究软件运作方式并使其合适个人需要),散布的自由(可以自由地复制此软件散布给他人),改良的自由(可以自行改良软件并散布改良后的版本以使全体用户受益)。
1991年8月,一位来自芬兰赫尔辛基大学的年轻人Linus Benedict Torvalds,对外发布了一套全新的操作系统Linux
黑客是指计算机技术上的行家或热衷于解决问题,克服限制的人。黑客乐意解决和发现新问题,并乐意相互帮助。他们相信计算机中充满各种各样有趣的问题,并且这些问题一旦被自己解决,他们愿意让解决方法被所有人共享。他们感觉发现问题,解决问题,共享答案的过程是有趣的,并着迷地去做。他们将解决问题视为乐趣,相信技术应该是自由的,应该被所有人共享。黑客是对拥有高科技和崇高理念的孜孜不倦的计算机爱好者,工作者的尊称。

第二章
现代操作系统都具有:并发,共享,虚拟,异步的特性,同时还具有:存储器管理,处理器管理,设备管理,文件管理,用户接口。
Run_Time Library,RTL,运行时函数库。
Bochs是一个x86 PC的模拟器。
Wine/DOSEmu是先把把原有系统的应用软件通过他们把原操作系统API,那些软件,再经过模拟操作系统的API,成为模拟操作系统应用软件。
软件的美在于它的功能,在于它的内部结构。对用户来说,通过直观,简单的界面呈现出具有恰当特性的程序就是美。对于软件设计者来说,被简单,直观地分割,并具有最小内部耦合的软件结构就是美!

第三章
DJGPP是DOS下的自由源代码的保护模式C语言编译器。
还有RHIDE是DJGPP的图形界面。

学make和ld还有nasm

Dos下一个汇编程序
;---------------------------------------------------------------------
.model small
.stack 100h
.data
Welcome db 13,10,'Hell,world!',13,10,'$'

.code
start:
mov ax,@data
mov ds,ax
lea dx,welcome
mov ah,9
int 21h

; end the program
mov ah,4ch
int 21h
end start
;--------------------------------------------------------------------
用masm hello.asm
link hello.obj就可以了。
Linux下和它下面一样功能的程序
section .text
global main
main:
mov eax,4 ;4号调用
mov ebx,1 ;ebx送1表示stdout
mov ecx,msg ;字符串的首地址送入ecx
mov edx,14 ;字符串的长度送入edx
int 80h ;输出字串
mov eax,1 ;1号调用
int 80h ;结束
msg:
db"Hello World!",0ah,0dh
用下面的命令就可以了!
[gaowei@localhost nasm]$ nasm -f elf hello.asm
[gaowei@localhost nasm]$ ls
hello.asm hello.o
[gaowei@localhost nasm]$ gcc -o hello hello.o
[gaowei@localhost nasm]$ ls
hello hello.asm hello.o
[gaowei@localhost nasm]$ ./hello
Hello World!
为了辨别CPU的类型,需要使用CPUID汇编指令(CPUID是一个特殊的汇编指令,其机器0FHA2H。如果编译器不支持CPUID指令,可以直接输入CPUID的机器码)。该指令可以被以下CPU识别:Intel 486以上的CPU。Cyrix M1以上的CPU。AMD Am468以上的CPU。
1.判断CPU的厂商
通过CPUID汇编指令,返回CPU OEM字符串,从而判断CPU厂商,规则如下:
先让EAX=0,再调用CPUID。
Inel的CPU将返回:
EBX:756E6547H 'Genu'
EDX:49656E69H 'ineI'
ECX:6C65746EH 'ntel'
EBX,EDX,ECX连接起来是"GenuineIntel",含义为真正的Intel。
Cyrix的CPU将返回:
ENX:43797269H
EDX:78496E73H
ECX:74656164H
"CyrixInstead","Cyrix来代替"
AMD的CPU将返回:
EBX:41757468H
EDX:656E7469H
ECX:63414D44H
"AuthenticAMD",可信的AMD。
2.判断CPU类型
先让EAX=1,再调用CPUID,EAX的8~11位就表明CPU类型。例如:
3-368
4-468
5-Pentium
6-Pentium Pro Pentium II
2-Dual Processors
EDX的第0位:代表有无FPU。
EDX的第23位:CPU是否支持IA MMX,这点很重要,如果想用57条新增的指令,要先检查这一
位,否则Windows就会出现“该程序执行了非法指令,将被关闭”。
3.专门检测是否P6架构
先让EAX=1,再调用CPUID,如果AL=1,就是Pentium Pro或Pentium II。
4.专门检测AMD的CPU信息
先让EAX=80000001H,在调用CPUID,如果EAX=51H,就是AMD K5;如果EAX=66H,则是K6。
EDX第0位:是否有FPU。
EDX第23位:CPU是否支持MMX。
在PC中,彩色显示器的字符屏幕显存起始地址在0xB8000000处,单色显示器的视频缓冲区起
始地址在0xB8000000处。

2009年2月28日星期六

今年&GSOC

今年,似乎要比较忙,而且四级也要好好的学(主要是要学好英语,我还想学好口语但是目前还不知道要报那个班呢?)四级考了俩次没有过也够丢人的了!——一定要学好英语!
还有想和王老师学那个关于代码分享的事情,应该是有点难度的,可以提高自己的C语言水平吧!还是比较喜欢C语言的。我还想和我们小组的一个高手(莫楠)学关于web服务器方面的知识,那就更加的要努力了!
还有,(还有啊!那是!)把我过去和我们小组一起干的没有干好的我想再干,我不是一个半途而废的人,作就要把它作好,我慢但是我会坚持的!那些不能让他们成为垃圾啊!至少要他们成为可以用的软件为大家提供便利吧!
还有呢?就是GSOC了,昨天还和我去年的那个导师聊天,他问我参加今年的吗?我当然是肯定的答复了。既然想参加就要好好的准备了,不能向去年一样,没有很好的了解还有就是没有比别人更加的勤奋了,没有别人想的多没有和更多的交流。把去年的不足今年就要补上而且比去年更加的好!不断的提高自己。相信自己!
现在,不奋斗什么时候奋斗呢?

虚拟机


(1)我最早用的是vmware - Intel(TM) x86(TM)-compatible virtual machine
The vmware command starts an Intel or AMD X86-compatible or
x86-64-compatible virtual machine. Depending upon your hardware con-
figuration, you can run a number of virtual machines simultaneously.
具体可以看http://www.vmware.com/support
一个可以用的序列号N1HPX-6U248-D206Y-4Y8Z6

(2)由于我要学windows下的汇编语言,但是我没有装windows所以我要在Linux中完成这个
学习就用了dosbox - an x86/DOS emulator with sound/graphics
This manual page briefly documents dosbox, an x86/DOS emulator.
The optional file argument should be a DOS executable or a direc-
tory. If it is a dos executable (.com .exe .bat) the program will run automatically. If it is a directory, a DOS session will run with the directory mounted as C:\. For an introduction type INTRO inside dosbox.
要挂载用Usage MOUNT Drive-Letter Local-Directory比如说用mount c /home/gaowei意思
是把/home/gaowei 挂载到C盘了,你可以用dos的命令来看你挂载的目录了


(3)可以模拟windows下的软件的Linux下的软件是wine
Wine is a program which allows running Microsoft Windows programs
(including DOS, Windows 3.x and Win32 executables) on Unix. It
consists of a program loader which loads and executes a Microsoft Windows binary, and a library (called Winelib) that implements Window API calls using their Unix or X11 equivalents. The library may also be used for porting Win32 code into native Unix executables.
Wine is free software, released under the GNU LGPL; see the file LICENSE for the details.
http://www.winehq.org/

(4)有一段时间我用Sun xVM VirtualBox Graphical User Interface 2.0.6
2009年 02月 07日 星期六 21:18:17 CST
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.
Usage:
-startvm start a VM by specifying its UUID or name
-rmode sdl|image select different render mode (default is sdl) http://www.virtualbox.org

(5)最近,看了一本书,书中要用到bochs - Portable x86 Emulator.
Bochs is a portable Intel Architecture 32 (x86) emulator that runs
on most popular operating systems. Inside the emulator, it can run many operating systems including Linux and Microsoft(R) Win-dows(R).
http://bochs.sourceforge.net

我读Linux0.01

这是我过去写的,而且我还写了很多,以后将会把其他的发表!
今天,再次看Linux 0.0.1内核分析与操作系统设计——创造你自己的操作系统
感觉很不错的一本书,但是就是里面很多是在windows下完成的,但是我想那样也不会影响我对Linux的喜爱和坚持使用Linux而学习它,主要是学习她里面的思想。
把操作系统的原理学习清楚,把自己的想法添加进去,学习就要学会她!
她 主要写了关于GUN/Linux的历史,还有Bochs这个工具,当然你也可以学到GUN的很多的工具,如:GCC,MAKE,GDB,等!操作系统的设 计基础;Linux0.0.1内核简介;操作系统的引导;存储管理分析;进程管理和调度;磁盘文件系统;shell编程技术和实例;系统调用和C语言库的 实现;Linux网络实现分析。
一定要好好的学习!我相信我自己!

Linux0.0.1支持的硬件平台:
Intel 386以上CPU VGA/EGA显示器 标准IDE接口硬盘 支持芬兰键盘布局
如果希望修改为其他键盘布局,可以对kernel/keyboard.s文件进行修改。

Linux 充分地发挥了Intel80386芯片的功能。系统中的函数调用不使用消息传送机制而是直接函数调用;多线程的文件系统(虽然实现比较复杂但是性能更 好);精简的任务切换;中断是不隐藏的(中断处理的代码主要是汇编代码,设备驱动程序主要是中断例程,可参见kernel/hd.c);核心处理、文件系 统、存储管理没有严格地分离。
原则是:运行得更快
核心设计特点:所有的任务只有一个数据结构。在Linux 0.0.1的实现中,任务信息存放在不同的地方;既支持分页机制也支持分段机制的一个非常简单的存储管理机制;在Linux 0.0.1中的mm目录中memory.c和page.s

在Linux0.0.1 中,存储管理(memory management)是最简单的模块之一。在存储管理的模块中包含了一些函数的入口,这些函数是在kernel模块中实现的。系统的其他部分对存储管理 机制是透明的。一种避免多线程竞争资源的方法是一个进程运行时将所需要的资源全部获得,但是这样系统的资源利用效率较低,也可能带来一些不必要的等待。为 了提高文件系统的性能,Linux实现文件系统的访问时不锁定任何的数据结构(除非实际的读或者写物理设备)采用双检查分配(fs/buffer.c和 fs/inode.c都进行资源分配检查)来避免任何时候可能出现的条件竞争。一个进程陷入核心态时是不会被核心切换的。所有的核心功能,文件系统,存储 管理操作都是原子性的(atomic)。
硬件依赖性代码大多定义在文件"include/linux/config.h"中。
Linux0.0.1的核心源文件分布在几个子目录中,总共包含5900行左右的ANSI C源代码、2500行左右的C头文件代码和约1450行左右的Intel 80386汇编语言代码。
--------------------------------------------------------------------------------
boot 核心引导代码(kernel bootstrap code)
fs 文件系统(file system)
include 头文件(header files)
init Init进程,Linux系统中执行的第一个进程(init procss-the first process exec _uted by a UNIX system)
kernel 系统调用(system calls)
lib 库代码(library code)
mm 内存管理(memory management)
tools 内核引导文件的制作工具(program that splices three images together into a kernel image that can be booted from PC BIOS starup)

time