使用gdb和虚拟机调试内核

调试内核很麻烦,即使是有了虚拟机的帮助。在这里记下一些关键的东西,以备忘 。 # 编译内核后, 用新内核启动系统失败,报错 “unable to mount fs ….” 之类. 需要用 update-initramfs 生成initram。 # 对于grub2,我增加了一个自定义的grub开机启动项用来调试内核,如下: #!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the ’exec tail’ line above. echo “Add Debugging entry” cat « EOF menuentry “Debian debug 3.7.4”{ set root=(hd0,1) linux /boot/vmlinuz-3.7.4 root=/dev/vda1 ro quiet kgdboc=ttyS0,115200 kgdbwait initrd /boot/initrd.img-3.7.4 } EOF ...

January 28, 2013 · 1 min · kamus

Okular是linux下最好用的pdf阅读工具

我记得对于大多数Gnome桌面环境,Evince是默认的pdf阅读软件。今天不知道怎么回事,发现evince没有了。当时我不记得evince这个名字了,就apt-cache search pdf 随便装上了xpdf-viewer。太他妈难用了啊~~就卸载了,然后google: The Best PDF Viewer on Linux。找到了Okular,也是免费软件,装上一用。不错哈哈哈.贴一张网络上的图片: 另外今天才知道, Adobe也有出linux下的pdf阅读软件。

January 4, 2013 · 1 min · kamus

显示Gnome3任务栏

Gnome3桌面较之Gnome2有了非常大的区别~ 第一眼看上去有惊艳的感觉~多用了一点时间,发现没有任务栏真是相当的不方便啊。我觉得最方便的还是Win7的方式。 那怎么把Gnome3消失的任务栏找回来呢?通过安装一个安装包搞定。 我用的是Debian 6.06 Wheazy zausiu@accolade:~$ cat /etc/debian_version 6.0.6 对于Debian家族的ubuntu应该也是适用的。 # apt-get install tint2 $ tint2 & 于是久违的gnome任务又回来了~ Gnome的任务栏又回来了

January 3, 2013 · 1 min · kamus

Let the Universal Access Preferences Taskbar Icon Disappear让统一访问首选项在任务栏上消失

我用的是Debian Wheezy Stable系统。今天不知道怎么搞得,把任务栏上面弄出个 配置Universal Access Preferences的图标。右链点击也没有让我选择退出的选项。 搜索了一下,知道用 gnome-keyboard-properties 把这个该死的图标去掉。 alt+F2 输入 gnome-keyboard-properties 选中Accessibility ,取消 Accessibility features can be toggled with keyboard shortcuts. 这几天调linux内核源代码,好困难好困难。

January 2, 2013 · 1 min · kamus

Linux内核Makefiles教程(二)

接第一篇 **3.3.**可加载模块目标 obj-m (Loadable module goals – obj-m) obj-m指定将被构建为可加载内核模块的对象文件(object file)。 一个模块可以从一个源文件构建或者从多个源文件构建。如果模块仅仅从一个源文件构建,kbuild makefile仅仅把对象文件加到obj-m。如下: #drivers/isdn/i4l/Makefile obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o _在这个例子中,__$(CONFIG_ISDN_PPP_BSDCOMP)_被求值为__m. If a kernel module is built from several source files, you specify that you want to build a module in the same way as above. 如果一个内核模块需要从多个源文件构建,你也是按照刚才提到的那一行指定。不过,除此之外,还要额外地指定,你的内核模块需要哪些对象文件。所以还需要设置<模块名>-objs变量。如下: #drivers/isdn/i4l/Makefile obj-$(CONFIG_ISDN) += isdn.o isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o 在这个例子中,模块名是 isdn 。Kbuild将编译isdn-objs列出的所有对象文件,然后运行$(LD) –r把这些对象文件链接成一个文件isdn.o。 Kbuild用-objs后缀或者-y后缀识别构成复合对象文件(composite objects)的对象文件。这样,Makefile就可以使用CONFIG_* 符号来确定一个对象文件是不是一个复合对象文件的一部分。如下: #fs/ext2/Makefile obj-$(CONFIG_EXT2_FS) += ext2.o ext2-y := balloc.o bitmap.o ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o ...

July 7, 2012 · 1 min · kamus

Linux内核Makefiles教程(一)

 Linux内核Makefiles 本教程描述了了Linux内核的Makefile是如何工作的。 1. 概述 Linux内核的Makefile包括五个部分。 Makefile <td style="width:373px;"> <p> 最上层Makefile </p> </td> .config <td style="width:373px;"> <p> 内核配置文件。 </p> </td> arch/$(ARCH)/Makefile <td style="width:373px;"> <p> CPU架构相关Makefile </p> </td> scripts/Makefile.* <td style="width:373px;"> <p> 对于所有Kbuild&nbsp;Makefile的公共方法。. </p> </td> kbuild Makefiles <td style="width:373px;"> <p> 有将近500个kbuild&nbsp;Makefiles。 </p> </td> 最上层Makefile读取.config文件。.config文件是由内核配置过程生成的。 最上级的Makefile负责生成linux的内核映象文件vmlinux和其它所有的模块。最上级Makefile递归地进入内核代码树的各级子目录分别执行子目录下的Makefile。究竟要进入哪些子目录是由内核配置阶段决定的,即配置在.cncfig文件中。最上级Makefile提定了一个路径为arch/$(ARCH)/Makefile的子目录Makefile。这个Makefile中定义了与处理器架构紧密相关的信息。 每一个子目录下面都有一个kbuild Makefile,这里都定义了一些makefile命令和变量可以被更下级的Makefile继承。Kbuild Makefile使用来自.config配置的信息生成各种文件列表用来构建内建的或者模块化的目标文件。Scripts/Makefile.*包括了很多被其它Makefile使用定义和规则。 2. 谁使用内核Makefile 内核Makefile的使用者可以大致分为四种。 用户(Userse) 这类使用者仅仅敲入一些命令,如“make menuconfig”或者“make”。他们很少会阅读甚修改内核Makefile和源代码文件。 一般开发者(Normal Developers) 一般开发者一般编写一些设备驱动程序,文件系统,网络协议。他们需要维护他们编写的代码涉及的子系统的kbuild Makefiles。为了工作地更有效率,他们甚至还需要对整个内核的Makefile有全局的把握,包括对kbuild的公共接口的详尽了解。 处理器架构开发者(Arch Developers) 这部分开发者关心与某个处理器架构紧密相关的代码部分,比如PC上最广泛使用的x86,以及IA64,还有ARM,Sparc,PowerPC,Alpha,s390,MIPS。Linux支持几百种处理器架构。从内核2.6.24开始,i386和x86_64合并为x86。 KBuild的开发者(KBuild Developers) KBuild的开发者就是维护内核构建系统的开发者,他们需要知道内核Makefile的各个方面。 —— 本篇教程主要面向第二类开发者和第三类开发者。即一般开发者和处理器体系架构开发者。 3. kbuild文件 大多数内核Makefile文件是kbuild Makefile文件,它们使用不同于一般make文件的kbuild语法。下面会介绍kbuild makefile的语法。Kbuild文件一般被命名为Mafile,但是也可以使用Kbuild名字。如果已经存在一个Makefile文件了,那么就只好用Kbuild名字了。 ...

July 6, 2012 · 1 min · kamus

中山大学软件工程专业Java语言课作业

这是11年中山大学软件工程硕士研究生java必修课的大作业,授课老师是温武少~ 讨厌写java代码。代码写得不好~不过,需要的童鞋可以拿过去改改。 下载源代码!!! 下面是作业要求: 面向对象程序设计课程项目 基于JAVA银行管理系统设计(Case 2,3,4) 注意:如果发现全部或者部分copy程序,双方都将会被部分或者全部扣分。本课程是必修课,70分是通过线。 系统将依据3-tier架构设计银行管理系统。要求所有的项目用JAVA语言编程。设计的系统将是简化的银行管理系统。 项目二:银行管理系统Business Logic 设计 (中程检查:10月31日(40%);上交11月7日 (60%), 当堂运行+ftp上交) 所有的用户输入都是由命令行输入。项目必须提供设计文档、测试和运行报告。在线提交程序源程序。 1. 银行用户分类: 普通个人用户,个人贵宾用户(VIP),企业用户 对所有的用户必须支持以下功能:开户、存款、取款、查询、转账、改密码、销户等七项工作。所有对账户的操作都要产生日志。 所有的数据都要永久化(存到硬盘)。系统重新启动时要能恢复数据。 (1)开户:调研银行管理系统需要存储的账户信息。 开户时需要身份证号码,决定开的账户类型,存款的初始金额。银行生成用户的帐号,用户输入初始密码。系统给出开户的时间日志。 (2)存款: 存款时需要给银行提供自己的账号,密码以及要存款的金额;银行系统反馈用户帐户的余额以及存款的日志。 (3)取款: 取款时需要给银行提供自己的账号、密码以及要取的金额;系统判断是否有足够余额以供取款。取款后给出用户帐户的余额,产生取款日志。 (4)查询: 查询时用户需要给银行提供自己的身份证、账号和密码;银行方面给出用户帐户的余额以及查询的日志。用户还可以查询一段时间所有的操作(流水)。 (5)转帐:(对不同用户转账有限制,请看账户类型说明) 用户转帐时需要判断是否能够满足转账条件。如满足,需要给银行提供转出帐户的账号、身份证号码、密码和用户名称及转入帐户的帐号和用户名称,用户也需要提供转账金额。系统方面将产生转账日志、转出用户帐户的余额等信息。 (6)改密码: 用户到银行改密码时需要给银行提供身份证、帐号、以及密码,并且输入新的密码。系统方面将产生相关日志。 (7)销户: 用户到银行销户时需要给银行提供身份证、帐号以及密码,并且把帐户的余额全部取出。系统方面将产生相关日志。 不同类型用户的特别限制和权限: (1) 所有的用户可开两种账户—活期和定期。用户的活期和定期账号之间可以转账。 (2) 普通用户不能产生透支。 (3) VIP用户的初始存款额(包括活期和定期)要求大于100万, 每月平均日余额要求不低于10万。如果连续2个月月平均日余额要低于10万, 将收取每月1000元的管理费。VIP用户将能够透支最多 10万元。 但要求透支的款项在规定的时间(30天)内归还。如不归还,账户将被冻结。 (4) 转账只能在个人用户之间进行,或在企业用户之间进行。 (5) 普通用户只能接收转账转入,不能转钱到别人的账户。但普通用户可以在他自己的账号内转账。VIP和企业用户容许转入、转出。 (6) 企业用户容许多个账号操作人。 我们指定其中的一到两个人作为账户超级用户,可以要求增加账户操作人。不同账户操作人必须使用不同密码。  (7) 企业用户不容许透支。要求账面存款余额总数(包括所有的账户)不小于1万元。   2.   银行雇员分类: 前台操作员, 银行经理,银行业务总管、系统管理员。 他们各自的职责: 系统必须能存储所有的雇员信息(自己调研)。银行经理管理一个或多个前台操作员,同时他可以做所有的前台操作员操作。银行业务总管管理一个或多个银行经理,他可以做所有的银行前台操作员及银行经理的工作。 银行雇员操作: (1) 前台操作员:对账户所有的操作。雇员本身所作的操作的日报,月报,季度报和年报(包括数据和日志)。前台操作员向一个银行经理报告。 (2) 银行经理:作为前台操作员的所有操作,部门操作的日报,月报,季度报和年报(包括数据和日志, 及每个成员的报告)。银行经理必须较容易查到他部门人员总数及具体情况。银行经理向银行业务总管报告。  (3) 银行业务总管(包括个人账户和企业账户两类):作为前台操作员和部门经理的所有操作,整个银行相关业务操作的日报,月报,季度报和年报(包括数据和日志, 及每个成员的报告,每个部门的报告)。银行业务总管应较容易查到他所管人员总数及具体情况。 (4) 系统管理员:雇员管理。 产生整个银行的总报表和总日志(日报,月报,季度报和年报)。   3. (加分 20%) 银行系统网络接口   提供外面银行在线操作要求(必须提供通过网络提供各种操作需要的信息)。在线操作必须产生专用的日志。 项目三:银行管理系统后台数据库及接口设计(上交11月21日,当堂运行+ftp上交) 数据存储采用数据库(建议用MYSQL.把business logic 层修改以支持数据库。 项目四: 银行管理系统UI设计(开放设计,上交11月28日,当堂运行+ftp上交) 所用的用户输入和输出采用GUI。 说明: 项目总成绩计算:项目1: 20% 项目2: 50% 项目3: 15% 项目4: 15% 更多说明: 1.运行报告主要是指:系统所实现的所有功能的运行截图; 2.所谓“冻结”的意思是:只能查询余额,不能进行存款、取款的操作;不要求实现“解冻”,也就是这个账号一旦被冻结,这辈子就“冻”死了; ...

July 4, 2012 · 1 min · kamus

Barebox介绍

从裸机上电开始启动计算机的过程听起来是相当复杂的。在PC的世界里,BIOS统治这个领域已经几十年了。不过,哲学上讲任何世界都是从出生,到繁荣,再后到死亡的过程。BIOS的寿命也即将迎来终结。BIOS的掘墓者即是EFI。对于MAC用户来说,EFI的使用已经有好长一段时间了。而在嵌入式Linux的世界里,u-boot则在长时间里扮演着老大哥的角色。 U-boot,或者来自DENX的das U-boot提供了非常丰富的功能。如:网络,脚本,支持FLASH(这里的flash是存储方面的flash,而不是adobe的那个flash)。一般的嵌入式系统工程序师需要的工具,都提供好了。 还是那句话,对于万事万物,都是生生死死的过程啊。u-boot的功能越来越强大。催生了新的事物的诞生。它的名字就是:Barebox。 Barebox最开始被称之为:u-boot-v2,它是一个像u-boot一样野心勃勃的bootloader。不过Barebox更有Linux的味道一些。它的发展抛弃了u-boot而越来越像Linux。它有文件系统,有基本的shell,甚至还有与Linux近似的驱动模块。 Barebox的另一个创新即是,bootloader可以被构建成一个用户空间的应用程序。这样的好处是显而易近的,你可以更方便的开方和调试Barebox。 说了这么多,看看Barebox是个什么样子呢? uboot:/ uboot:/ ls . .. dev env 和Linux一样,dev目录夹下面放了系统的设备文件。比如,mem设备文件描述了计算机的内存。 再回到u-boot,它有一个特殊的命令:md。md命令可以查看内存的内容。对于Barebox,提供了同样的工具。不过这个工具是以一种POSIX的方式实现的:打开/dev/mem设备,lseek移动文件指针,read读出文件内容。这样的实现方式不仅仅提升了代码结构,它还使得md命令可以不需修改就应用到其它设备上,比如flash存诸器。 如果你想测试一下Barebox到底如何。你可以有两种方法。 第一:你可以下载Barebox的沙盒功能即把它构建成一个Linux的用户空间的应用。来自Barebox官方的解释是: Sandbox: If you develop features for Barebox, you can use the ‘sandbox’ target which compiles Barebox as a POSIX application in the Linux userspace: it can be started like a normal command and even has network access (tun/tap). Files from the local filesytem can be used to simulate devices. 如果你要为Barebox开发功能,你可以使用’沙盒’。这种方式把Barebox构建成一个Linux的用户空间程序。它像一般的命令一样,而且还有网络功能。来自文件系统的文件可以被用来模拟设备。 第二:不说你也知道,把Barebox安装到真真正正的硬件上吧!对于我,我就尝试过在PC机的一块旧式的主板上安装Barebox。 最后,Barebox的官方网站是: http://barebox.org/ ...

July 2, 2012 · 1 min · kamus

中山大学离散数学考试试题

《离散数学》期末试题(A卷) ykyi.net (考试形式:闭卷 考试时间:2小时) 《中山大学授予学士学位工作细则》第六条 考试作弊不授予学士学位 方向: 姓名: 学号: 出卷: 复核: 1. (10 points)  A, B and C are sets, prove or disprove the following statements. (1). if A – B = A – C, then B = C (2). if A ´ B = A ´ C, A ¹ Æ, then B = C 2. (10 points)  Write each of the following statements in terms of propositional variables, predicates, quantifiers and logical connectives. You can choose any propositional variables and predicates freely. (1). If I like the course or the teacher, I will attend the class. (statement and its negation) (2). For all students of our school, someone studies hard and has good score, someone studies hard and does not have good score. Note: The first question is expressed in propositional logic, the second is expressed in predicate logic. 3. (15 points) Let A={a,b,c,d,e}, a relation R on A is {(a,b), (b,b), (b,c), (b,d), (c,d), (d,d), (d,e), (e,d)}. (1) Give the digraph and matrix of relation R; (2) Compute R2, reflexive closure r(R) and symmetric closure s(R). 4. (15 points) Let SÎZ+ and A=S×S. Define the following relation R on A: (a,b) R (a′,b′) if and only if ab′=a′b (1) Show that R is an equivalent relation; (2) Let S={1,2,3,4,5,6,7,8,9}, compute the equivalent class [(2,4)]. 5. (10 points) Let function f(x, y)=( x+3y, 2x+y), (x, y)ÎR×R, prove that f is bijection. 6. (15 points) Let A={2, 4, 5, 6, 8, 10, 12, 20, 120}, R is the relation of divisibility on A. (1) Draw the Hasse diagram of the poset ; (2) Find all the minimal elements, the maximal elements, the least element and the greatest element of the poset  if they exist; (3) Let B = {2, 4, 6}, find the upper bound, the lower bound, the least upper bound and the greatest lower bound of B if they exist. 7. (15 points) Use the labeling algorithm (Ford-Fulkerson’s) to find a maximum flow for the following transport network in Fig. 1. Use of figures is required to show the variety of flows during the procedure. ...

June 29, 2012 · 1 min · kamus

什么是MediaWiki的Gadget(小部件)

 译自MediaWiki的官网,URL: http://www.mediawiki.org/wiki/Extension:Gadgets Gadget简介: MediaWiki,为用户提供了一种方法,使用户方便使用其它用户基于Javascript或者CSS创建的小部件Gadget.   Gadget是由Javascript或者CSS代码片断组成的,被放置在MediaWiki名字空间里(对于MediaWiki的名字空间的概念请参看其它文章)。每一个Gadget都在MediaWiki:Gadgets-definition中占用一行,用来定义这个gadget。定义包括这个Gadget的名字,和描述以及组成这个Gadget的Javascript和CSS代码。   因为Gadget被放置在MediaWiki名字空间里,只有系统管理员可以编辑Gadget。这很容易理解:只有充分被信任的用户才可以编辑被其它更多用户使用的Javascript代码。Javascript代码是把双刃剑,如果被用来做坏事,会很容易被用来实现劫持账号或者监视用户的功能。   下载Gadget: 从https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/Gadgets.git;a=tree 可以下载到Gadget,或者也可以用git工具clone一份gadget,如下: git clone https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Gadgets.git   如何安装: 把Gadget目录复制到你安装MediaWiki的扩展目录(Extensions Folder)。然后在localSetting.php文件中,接近文件末尾的地方加上一行: require_once( "$IP/extensions/Gadgets/Gadgets.php" );   使用Gadget: 可以使用的Gadget定义在MediaWiki:Gadgets-definion。只要有一个有效的Gadget在MediaWiki:Gadgets-define被定义,就能在每个用户的Special:Preference的Gadgets节选择是否启用这个Gadget(小部件)。在Special:Gadgets也能浏览Gadgets的列表,并有链接指向各自的系统消息(System Message),以方便编辑。   定义Gadget的格式: 在MediaWiki:Gadgets-definition中的每个Gadget的定义都以一个或者多个"*"开始,必须符合下面的格式定义。  * Gadget的名字 [ 选项(可以忽略) ] | 页名字  (* gadget_name [options (can be omitted)] | page names) 第一个域,Gadget的名字指的是gadget的内部名字。这隐含了一个系统消息的引用(System Message)。此例中,如果你定义了内部名为 my_gadget_name 这样一个gadget,则在MediaWiki:Gadget-my_gadget_name有一个使用wiki语法的关于这个gadget的简短描述。   注意,gadget的内部命令规则:必须以字母起头,后面可以接26个字母的大小写或者数字,以及连字符“-”,下划线“_”,冒号“:”,点号“.”。   选项的格式: [option1 | option2 | … optionN] 空格将被忽略。每一个选项可以包括一个选项名,或者选项名还能被赋值,这些值以逗号隔开。如: option = value1, value2, value3   举一些Gadget定义的例子:  * mygadget|mygadget.js|mygadget.css or  * mygadget[ResourceLoader]|mygadget.js|mygadget.css or * mygadget[rights=foo,bar]|mygadget.js|mygadget.css or * mygadget[ ResourceLoader | rights=foo, bar ] | mygadget.js | mygadget.css   选项的说明: 选项名 <td style="width:150px;"> <p> 参数 </p> </td> <td style="width:359px;"> <p> 描述 </p> </td> </tr> <tr> <td style="width:68px;"> <p> ResourceLoader </p> </td> <td style="width:150px;"> <p> None </p> </td> <td style="width:359px;"> <p> 注明Gadget与ResourceLoader兼容。 </p> </td> </tr> <tr> <td style="width:68px;"> <p> dependencies </p> </td> <td style="width:150px;"> <p> 用逗号分隔开的ResourceLoader模块名 </p> </td> <td style="width:359px;"> <p> 这里有<a href="http://www.mediawiki.org/wiki/ResourceLoader/Default_modules">默认依赖的模块列表</a>.如果当前的gadget没有与ResourceLoader兼容的资源,这个选项将失效。 </p> </td> </tr> <tr> <td style="width:68px;"> <p> rights </p> </td> <td style="width:150px;"> <p> 用逗号分隔开的权限名 </p> </td> <td style="width:359px;"> <p> 权限名列表在这里&nbsp;<a href="http://www.mediawiki.org/wiki/Manual:User_rights#List_of_permissions">privileges</a>. </p> </td> </tr> <tr> <td style="width:68px;"> <p> skins </p> </td> <td style="width:150px;"> <p> 用逗号分隔开的皮肤名 </p> </td> <td style="width:359px;"> <p> 皮肤名列表在这里&nbsp;<a href="http://www.mediawiki.org/wiki/Manual:Skins">skins</a>. </p> </td> </tr> <tr> <td style="width:68px;"> <p> default </p> </td> <td style="width:150px;"> <p> 无 </p> </td> <td style="width:359px;"> <p> 注明对每个用户,包括匿名用名默认启用的gadget。不过注册用户仍然可以在它们的使用偏好设定中禁用gadget. </p> </td> </tr> 你可以为你的gadget指定额外的依赖,如: ...

June 28, 2012 · 1 min · kamus