I want to be a complete engineer - technical genius and sensitive humanist all in one!
Friday, November 7, 2008
Thursday, November 6, 2008
工作
兴趣是兴趣,是让你爽,那是你倒贴钱的。
所以呢,工作和兴趣一样,那是别人付钱让你爽,哪来的好事?
不排除又拿钱又爽的事情,有这样的事?有,但那是小概率事件。
公司和客户就是嫖客,我们是妓女!你没有选择,要不就回家种地!
最精简的房产内幕
刚刚才搞明白, 原来中国不存在个人破产保护制度, 于是, 当房子成为负资产, 你断供, 流程就是这样的:
-> 银行起诉你,但你还是没钱
-> 银行以很低(低于市场价格)的价格把你的房子拍卖出去, 据说黑幕不小
-> 你欠银行60万,房子拍卖了20万(天知道拍给哪个亲戚了),剩下的40万你依然要还, 否则:
-> 从今以后,你的任何国内银行的账户, 只要上面有一毛钱, 都会被划走。
怪不得中国没有次贷危机呢, 原来是嫁祸给业主了。 老美爽啊,一旦房子成为负资产, 拍屁股走人, 银行爱咋地咋地。
Monday, November 3, 2008
常用的APT命令参数
特简单记录于此,以备不时之需
apt-cache search package 搜索包
apt-cache show package 获取包的相关信息,如说明、大小、版本等
apt-get install package 安装包
apt-get install package - - reinstall 重新安装包
apt-get -f install 修复安装"-f = ——fix-missing"
apt-get remove package 删除包
apt-get remove package - - purge 删除包,包括删除配置文件等
apt-get update 更新源
apt-get upgrade 更新已安装的包
apt-get dist-upgrade 升级系统
apt-get dselect-upgrade 使用 dselect 升级
apt-cache depends package 了解使用依赖
apt-cache rdepends package 是查看该包被哪些包依赖
sudo apt-get build-dep package 安装相关的编译环境
apt-get source package 下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理无用的包
sudo apt-get check 检查是否有损坏的依赖
apt-get update——在修改/etc/apt/sources.list或者/etc/apt/preferences之後运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的。
apt-get install packagename——安装一个新软件包(参见下文的aptitude)
apt-get remove packagename——卸载一个已安装的软件包(保留配置文件)
apt-get –purge remove packagename——卸载一个已安装的软件包(删除配置文件)
dpkg –force-all –purge packagename 有些软件很难卸载,而且还阻止了别的软件的应用,就可以用这个,不过有点冒险。
apt-get autoclean apt会把已装或已卸的软件都备份在硬盘上,所以如果需要空间的话,可以让这个命令来删除你已经删掉的软件
apt-get clean 这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的。
apt-get upgrade——更新所有已安装的软件包
apt-get dist-upgrade——将系统升级到新版本
apt-cache search string——在软件包列表中搜索字符串
dpkg -l package-name-pattern——列出所有与模式相匹配的软件包。如果您不知道软件包的全名,您可以使用“*package-name-pattern*”。
aptitude——详细查看已安装或可用的软件包。与apt-get类似,aptitude可以通过命令行方式调用,但仅限于某些命令——最常见的有安装和卸载命令。由于aptitude比apt-get了解更多信息,可以说它更适合用来进行安装和卸载。
apt-cache showpkg pkgs——显示软件包信息。
apt-cache dumpavail——打印可用软件包列表。
apt-cache show pkgs——显示软件包记录,类似于dpkg –print-avail。
apt-cache pkgnames——打印软件包列表中所有软件包的名称。
dpkg -S file——这个文件属于哪个已安装软件包。
dpkg -L package——列出软件包中的所有文件。
apt-file search filename——查找包含特定文件的软件包(不一定是已安装的),这些文件的文件名中含有指定的字符串。apt-file是一个独立的软件包。您必须 先使用apt-get install来安装它,然後运行apt-file update。如果apt-file search filename输出的内容太多,您可以尝试使用apt-file search filename | grep -w filename(只显示指定字符串作为完整的单词出现在其中的那些文件名)或者类似方法,例如:apt-file search filename | grep /bin/(只显示位于诸如/bin或/usr/bin这些文件夹中的文件,如果您要查找的是某个特定的执行文件的话,这样做是有帮助的)。
apt-get autoclean——定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式,您可以释放大量的磁盘空间。如果您的需求十分迫切,可 以使用apt-get clean以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。大多数情况下您不会再用到这些.debs文件,因此如果您为磁盘空间不足 而感到焦头烂额,这个办法也许值得一试。
Monday, October 27, 2008
关于kernel里面的asmlinkage
The asmlinkage tag is one other thing that we should observe aboutthis simple function. This is a #define for some gcc magic that tellsthe compiler that the function should not expect to find any of itsarguments in registers (a common optimization), but only on theCPU’s stack. Recall our earlier assertion that system_call consumesits first argument, the system call number, and allows up to four morearguments that are passed along to the real system call. system_callachieves this feat simply by leaving its other arguments (which werepassed to it in registers) on the stack. All system calls are markedwith the asmlinkage tag, so they all look to the stack for arguments.Of course, in sys_ni_syscall’s case, this doesn’t make any difference,because sys_ni_syscall doesn’t take any arguments, but it’s an issuefor most other system calls. And, because you’ll be seeingasmlinkage in front of many other functions, I thought you shouldknow what it was about.
在kernel2.6.26 include/linux/linkage.h里面定义如下:
#ifndef asmlinkage_protect
# define asmlinkage_protect(n, ret, args...) do { } while (0)
#endif
CPP_ASMLINKAGE的定义为:
#ifdef __cplusplus
#define CPP_ASMLINKAGE extern “C”
#else
#define CPP_ASMLINKAGE
#endif
而在include/asm-i386/linkage.h里则有更明确的定义:
#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
__attribute__是GCC的C语言扩展语法。regparm(0)表示不从寄存器中传递参数。
另外,如果是__attribute__((regparm(3))),那么调用函数的时候参数不是通过栈传递,而是直接放到寄存器里,被调用函数直接从寄存器取参数。通俗而言,asmlinkage是声明在函数之前,表示该函数可以被汇编代码调用。 加上"asmlinkage" 后,C function 就会由 stack 取参数,而不是从 register 取参数。asmlinkage大都用在系统调用中,系统调用需要在entry.s文件中用汇编语言调用,所以必须要保证它符合C语言的参数传递规则,才能用汇编语言正确调用它。
Sunday, October 26, 2008
Ubuntu中软件安装与卸载的相关命令
安装软件
命令: apt-get install softname1 softname2 softname3……
卸载软件
命令: apt-get remove softname1 softname2 softname3……
卸载并清除配置
命令: apt-get remove --purge softname1
更新软件信息数据库
命令: apt-get update
进行系统升级
命令: apt-get upgrade
搜索软件包
命令: apt-cache search softname1 softname2 softname3……
Deb软件包相关安装与卸载
安装deb软件包
命令: dpkg -i xxx.deb
删除软件包
命令: dpkg -r xxx.deb
连同配置文件一起删除
命令: dpkg -r --purge xxx.deb
查看软件包信息
命令: dpkg -info xxx.deb
查看文件拷贝详情
命令: dpkg -L xxx.deb
查看系统中已安装软件包信息
命令: dpkg -l
重新配置软件包
命令: dpkg-reconfigure xxx
按照安装软件包的方式为:
1、通过deb包安装的情况:
安装.deb包:
sudo dpkg -i package_file.deb
卸载.deb包:
sudo dpkg -r package_name
2、通过apt-get安装的情况:
安装命令:
sudo apt-get install package_name
卸载命令:
sudo apt-get remove package_name
Friday, October 24, 2008
Debian/Ubuntu Linux开发者参考
如果你想要升级你的Debian/Ubuntu Linux内核,或者你希望为内核开发新的模块,或者您要为某个硬件写新的驱动程序……这一切都涉及到Debian/Ubuntu Linux内核编程。
作为一个内核编程者,有那么几个软件是你必须要有的,看作是你进行内核编程的几件法宝吧,下面我一一列举出来:
1、gcc
大名鼎鼎的gcc我想没有人不知道的吧?它是任何编程者必然要先安装的一个武器了。不过一般如果你是安装的Debian系统,应该已经默认安装了的。要是Ubuntu你就安装一下吧,安装方法嘛,就是输入:
|
2、make
如果你实实在在地写过有用的程序,你一定输入过make clean、make、make install等命令的,make是一个源代码维护工具,它能自动检测出需要重新编译的源文件并根据你设定的编译规则去重新编译程序。这里也不多说,如果 不了解的朋友就google一下吧。不过一般如果你是安装的Debian系统,应该已经默认安装了的。要是Ubuntu你就安装一下吧,安装方法一样,输 入:
|
3、kernel-source
从这个包的名称上已经知道了,这是内核源码包。你可以apt-cache search kernel-source搜索到内核源代码包,并用uname -r命令查看到当前系统内核版本,然后用apt-get install kernel-source-xxxx来安装和你内核版本一致的内核源代码包。
但我并不建议你这样做,因为大多数发行版的Linux的内核源代码包并不是和你从 kernel.org上下载来的完全一致,应该是经过发行者们修改优化过的包,虽然发行版的制作者们花了心血在上面,但对我们编程者来说这并不是件好事, 因为大多发行版的源代码包缺少某些必要的头文件和某些有用的脚本程序,这会导致我们在编写内核模块时遇到麻烦,比如编译时可能会报错说某个头文件找不到, 又可能报错说某个脚本程序不存在啦。
如果你直接去kernel.org上下载一个新的内核来编译升级你的内核,并在此基础上进行内核编程可能会省事一些,至少我后面讲到的这些包你都可以不用安装了,把KERNEL_DIR变量设置为你内核源代码包的位置就够了。
在这里还是以Debian 3.1、内核2.6.8-2-386为基础来教大家准备内核编程环境吧。那么你依次用这几个命令来安装kernel-source包吧。
|
apt-get install kernel-source-xxxx
注:如果你不想重新编译内核,内核源代码包kernel-source是完全可以不下载来的。
4、kernel-headers
这是内核源代码头文件包,不管你是要进行内核模块开发还是进行驱动程序开发,这个包都是必须 要安装的。因为作为一个内核模块编写者,通常会调用内核里的一些东西,比如内核头文件,内核数据结构申明等。它里面包含了一些关键的内核头文件。否则在编 译内核时会报类似下面的错误:
|
输入如下命令来安装吧:
|
注:在Ubuntu下,好象这个包的前面都加上了linux-,从而变成了linux-kernel-headers。
如果之前没有安装过kernel-kbuild包,安装此包的过程中会安装kernel-kbuild包,这个包在下面介绍。
5、kernel-kbuild
这个包是用来编译内核模块的,下载安装这个包后会发现在/usr/src目录下多了一个kernel-kbuild-xxxx开头的目录,下面只有scripts一个目录,显然这是用来编译内核模块的一些脚本程序。安装方法一样:
|
注:你也会发现,在上面安装kernel-headers包后,/usr/src/kernel-headers-xxxx目录下有个scripts目录,其实是到/usr/src/kernel-kbuild-xxxx目录下的scripts的一个链接。
6、build-essential
这个包包含一个在建立deb包过程中起关键作用的包的信息列表,如果你不想建立deb包你就不需要安装此表,如果需要生成deb包就最好安装一下这个包吧。安装方法:
|
7、kernel-package
如果你想把内核镜像做成一个deb包来用,那么必须用安装这个包了。也就是说只有安装了这个软件包你才能有make-kpkg命令可用。安装方法一样了:
|
8、initrd-tools
如果你想制作启动过程的initrd镜像,则这个包是必不可少的。安装了这个包之后才有mkinitrd命令可用的。安装方法:
|