零碎

By , November 28, 2008 4:49 pm

最近比较累,想要休息一段时间了。订了星期一到三亚的机票,打算先晒几天太阳,等到公司局势明朗一点了再回来。

说起公司,挺让人郁闷的。听说我们公司在银行里的存款还有30亿美元左右,但是我们的市值只有20亿美元了。换句话说,我们这三万多名员工,都是公司的负资产,大概人均价值为负的3000美元多一点吧。裁员6000人的决定已经做出,过些日子我们这些负资产的绝对值还会往上涨一涨。同事们都开玩笑说大家一起凑够20亿美元把公司买下来算了,这样马上就可以净赚10亿美元。

两个星期前终于读完了《The Tao of Physics》。本来想写一点读后感的,但是一直都没有时间。最近在读《西厢记》,真真是好文章 — 说起来都脸红,咱都这么大了,四大名剧竟然一直都没有读过。以前有时间的时候不好好读书,现在想读书了总是觉得时间不够,少壮不努力啊老大徒伤悲。

经济危机的时候你在做什么?这些时间和一些朋友聊了聊,发现好多人都选择去读书 — 不一定是全职,也不一定是图个学位,就是要学点东西。

Linux文件系统学习笔记 (2)

By , November 26, 2008 9:28 am

明白了Linux内核的编译和部署过程之后,我们就可以进入文件系统的部分。在进入详细的技术层面之前,我们先简单地熟悉一下操作层面的一些技巧。

将下载到的samplefs.tar.gz解压缩到你的home目录:

cp samplefs.tar.gz ~
cd ~
gunzip samplefs.tar.gz
tar xvf samplefs.tar

编辑Linux内核源代码目录中的fs/Kconfig文件(sudo gedit fs/Kconfig),在if BLOCK语句后面加入下面这些内容:

config SAMPLEFS_FS
tristate “Sample filesystem (EXPERIMENTAL)”
help
Samplefs is a sample filesystem for learning how to build
a simple Linux filesystem

If unsure, say N.

config SAMPLEFS_DEBUG
bool “Additional debugging statements for samplefs”
depends on SAMPLEFS_FS
help
Enabling this option adds a few more debugging routines
to the samplefs code which slightly increases the size of
the samplefs module and can cause additional logging of debug
messages in some error paths, slowing performance. This
option can be turned off unless you are debugging
samplefs problems.  If unsure, say N.

然后运行如下命令:

sudo make menuconfig

用箭头键在菜单中移动,选择File Systems,在Sample filesystem (EXPERIMENTAL)选项前面按M,表示我们要将我们自己的文件系统作为独立编译加载的内核模块,然后存盘退出。

按照Steve的教程编译第一个文件系统模块:

sudo make M=~/samplefs/day1

编译完成后在~/samplefs/day1目录下多了一些文件,其中samplefs.ko就是我们需要的模块文件。我们可以用insmod来加载这个新模块:

sudo insmod ~/samplefs/day1/samplefs.ko

用下面这个命令来看看samplefs模块是否已经被加载:

sudo lsmod | grep fs

用下面这个命令在卸载samplefs模块:

sudo rmmod samplefs

顺便说一下,如果你的Linux内核是使用MODVERSIONS=1参数编译的,那么你在编译samplefs模块的时候需要加上同样的参数,也就是:

sudo make MODVEFRSIONS=1 M=~/samplefs/day1

Linux文件系统学习笔记 (1)

By , November 24, 2008 10:22 am

打算系统地学习以下Linux上的文件系统,最近可能会根据学习的进度写一些学习笔记。选用的平台是Ubuntu 8.10,参考教材是IBM公司Steve French的演讲稿Linux File Systems in 45 Minutes,同时也参考Veritas公司Tigran Aivazian撰写的Linux Kernel Internals。

准备过程:

0 下载并安装Ubuntu 8.10
1 下载Linux File Systems in 45 Minutes以及相关源代码
2 下载Linux Kernel Internals

Ubuntu 8.10安装完成之后,需要安装一些做Linux内核开发所需要的软件包:

sudo apt-get install build-essential bin86 kernel-package libqt3-headers libqt3-mt-dev wget libncurses5 libncurses5-dev

然后下载和安装Linux内核源代码:

sudo apt-get install linux-source

然后检查一下你的/usr/bin目录,应当有linux-source-[version number]和 linux-headers-[version number]这样的目录。譬如说我下载安装的内核是2.6.27-7版本的,在我的/usr/bin目录下我看到了三个子目录:linux-header-2.6.27-7,linux-header-2.6.27-7-generic和linux-source-2.6.27。

为了使make程序能够方便地使用同一个特定版本号的内核源代码和头文件,我们在这里需要做一个符号链接:

sudo ln -s linux-headers-2.6.27-7 linux-headers-2.6.27

这样我们做Linux内核开发的环境就准备好了,我们接下来开始编译Linux内核。

sudo cd /usr/src/linux-source-2.6.27
sudo cp /boot/config-$(uname -r) .config && yes “” | make oldconfig
sudo make menuconfig
sudo make-kpkg clean
sudo make-kpkg –initrd –append-to-version=-custom kernel_image kernel_headers

在上面这条命令中,可以将-custom替换成你所需要的标示符号,譬如-qyjohn-001。需要注意的是,必须保留第一个’-’符号,并且只能够使用小写字母,不能够使用空格。接下来就是漫长的内核编译过程,根据你所使用的计算机配置,你可能需要去喝一杯咖啡,或者是去睡一觉再回来看看。

编译完成之后,在你的/usr/src目录下应该有两个文件,类似于linux-headers-2.6.27.2-custom_2.6.27.2-custom-10.00.Custom_i386.deb和linux-image-2.6.27.2-custom_2.6.27.2-custom-10.00.Custom_i386.deb。我们可以用下面的命令来将刚刚编译好的内核镜像安装到系统上。

sudo dpkg -i linux-headers-2.6.27.2-custom_2.6.27.2-custom-10.00.Custom_i386.deb
sudo dpkg -i linux-image-2.6.27.2-custom_2.6.27.2-custom-10.00.Custom_i386.deb

检查一下/boot/grub/menu.lst,可以看到在启动时可我们能够选择用我们刚刚编译完成的新内核来启动系统了。

sudo shutdown -r now

系统启动之后,检查一下正在运行的内核版本:

uname -r

可以看到类似于下面的信息:

2.6.27.2-custom

现在我们已经完成了Linux内核编译和部署的过程。接下来就可以开始学习文件系统的部分了。

小心有蛇

By , November 17, 2008 10:15 pm

今天下午去清华大学深圳研究生院做关于无线传感器网络的讲座。讲座结束之后我们的校园大使王名俅带着我在深圳大学城里面逛了一小圈。深圳大学城包括清华、北大和哈工大三个研究生院,呈三足鼎立状。在哈工大那边的一个小山坡上,拍到了树荫下的这个小牌子。

深圳大学城总的来说风光秀丽,就是缺点人气。在这里的师生都开玩笑地说,假如你在非高峰时间在校园里看到活人,那么他一定是位清洁工。 三个学校的教学区遥遥相望,生活区更是被安排在各自地盘的边角上。三个学校虽然挨在一起,但是彼此之间缺乏交流。一言而弊之,就是缺乏设计,缺乏规划,缺乏人文关怀。

最近各地都在郊区建设大学城。在我去过的多个新校区里,四川大学的新校区是给我印象最为深刻的,一看就是精心做过设计的。尤其是那条小河,还有那几个小湖,不由得让人想起琼瑶奶奶笔下的故事。其他地方的大学城,基本上就是房子的堆砌,缺乏可圈可点之处。清华在深圳的研究生院甚至弄了个假日晷放在草坪那里,又装模作样地造了个面朝北京的大门。这手法若是放在唐朝还有点意思,放在如今却不免要让人贻笑大方。

利用Sun SPOT驱动一个简单的直流马达

By , November 12, 2008 4:36 pm

这是一个最简单的直流马达,从废旧电脑上拆下来的,原来是处理器上的散热风扇。 只有两条引线,红的是电源正极,黑的是电源负极,正常工作电压为12伏。在这个简单的示范程序中,我们将使用Sun SPOT上面的5 伏电源为它供电。这虽然有点勉强,但是还可以工作。

接线说明:

(1)将Sun SPOT上面的5 伏引脚连接到Sun SPOT上面的VH引脚
(2)将Sun SPOT上面的地线引脚与马达的电源负极相连接
(3)将Sun SPOT上面的H0引脚与马达的电源正极相连接

程序片段:

IOutputPin[] pin = EDemoBoard.getInstance().getOutputPins();
ITriColorLED [] leds = EDemoBoard.getInstance().getLEDs();
leds[0].setRGB(100,0,0);                // set color to moderate red

boolean running = true;
while (running) {
    leds[0].setOn();                    // Blink LED
    pin[EDemoBoard.H0].setLow();
    Utils.sleep(5000);                   // wait 5 seconds
    leds[0].setOff();
    pin[EDemoBoard.H0].setHigh();
    Utils.sleep(5000);                  // wait 5 seconds
}

如上程序片断控制LED 0和直流马达交替运转5 秒钟。由于电压比较低的原因,马达的运转有点慢,有些时候需要晃动一下才能够转起来,不过程序是可以正确运行的。由此可见,利用Sun SPOT去控制一个简单的直流马达是多么的简单。

如果要解决马达工作不畅的问题,可以考虑采用一个工作电压为5 伏左右的直流马达,接线和程序都不需要做任何改动。也可以考虑用一个12伏的外部直流电源, 程序不需要做任何改动,但是接线需要修改如下:

(1)将直流电源的正极与Sun SPOT上面的VH引脚相连接
(2)将直流电源的负极与马达的电源负极相连接
(3)将Sun SPOT上面的H0引脚与马达的电源正极相连接

过几天再写一个稍微复杂一点的马达的驱动。

Panorama Theme by Themocracy