可可熊的窝

Category Archives: Linux

Linux下以模块方式安装卸载文件系统

IN:Linux   Tags: ,    Comments:2

以Fedora8下面安装minix文件系统为例:

为了保证与系统内核相匹配,首先得获得相应版本的minix源代码,首先通过uname -r查询本机的内核版本:

[cocobear@cocobear ~]$ uname -r
2.6.24.4-64.fc8

在Kernel.org主页上可以获得2.6.24.4-64内核的源代码,其实我们只需要其中linux-2.6.24.4/fs/minix/目录中的代码。因为我们不需要对整个内核进行重新编译,因此我们只需要在linux-2.6.24.4/fs/minix/目录下写一个Makefile,生成相应的minix.ko就可以了。

在开始写Makefile之前要确认系统已经安装了以下的包:
[cocobear@cocobear ~]$ rpm -qa | grep kernel
kernel-devel-2.6.24.4-64.fc8
kernel-headers-2.6.24.4-64.fc8
kernel-2.6.24.4-64.fc8

在模块编译的过程中需要用到。
在源代码中已经有一个Makefile:
#
# Makefile for the Linux minix filesystem routines.
#

obj-$(CONFIG_MINIX_FS) += minix.o

minix-objs := bitmap.o itree_v1.o itree_v2.o namei.o inode.o file.o dir.o

修改该文件为:

#
# Makefile for the Linux minix filesystem routines.
# make minix fs as kernel module

obj-m += minix.o

minix-objs := bitmap.o itree_v1.o itree_v2.o namei.o inode.o file.o dir.o

KERNELDIR:=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)

default:

make -C $(KERNELDIR) M=$(PWD) modules

clean:
rm -rf *.o *.mod.c *.ko *.symvers

这里简单的解释一下,obj-m表示该文件将以模块的方式编译;因为本模块由多个文件组成,采用模块名加 –objs(minix-objs)后缀的形式来定义模块的组成文件。KERNELDIR定义了代码树的位置,PWD定义了当前文件夹位置;而make命令中-C选项指定了代码树的位置(由KERNELDIR给出),M=$(PWD)指定了在当前目前进行构建工作。

最后一行清理编译过程产生的文件。

完成了Makefile后我们就可以开始编译这个文件系统模块了,直接输入make就开始编译了:
[cocobear@cocobear minix]$ make
make -C /lib/modules/2.6.24.4-64.fc8/build M=/home/cocobear/minix modules
make[1]: Entering directory `/usr/src/kernels/2.6.24.4-64.fc8-i686′
CC [M] /home/cocobear/minix/bitmap.o
CC [M] /home/cocobear/minix/itree_v1.o
CC [M] /home/cocobear/minix/itree_v2.o
CC [M] /home/cocobear/minix/namei.o
CC [M] /home/cocobear/minix/inode.o
CC [M] /home/cocobear/minix/file.o
CC [M] /home/cocobear/minix/dir.o
LD [M] /home/cocobear/minix/minix.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/cocobear/minix/minix.mod.o
LD [M] /home/cocobear/minix/minix.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.24.4-64.fc8-i686′

编译结束后会面当前目前下生成minix.ko文件,这就是我们需要的东西,使用insmod命令就可以安装这个minix文件系统模块了。当然这里需要有root权限。我们来演示一下minix模块的加载:

[cocobear@cocobear minix]$ cat /proc/modules | grep minix
[cocobear@cocobear minix]$

这里可以看到minix并没有被加载,我们使用insmod minix.ko命令:
[cocobear@cocobear minix]$ sudo insmod minix.ko
[cocobear@cocobear minix]$ cat /proc/modules | grep minix
minix 28676 0 – Live 0xd0e7d000

insmod后我们从上面的信息可以看到minix模块已经被加载,如果不需要使用这个模块我们同样可以很方便的把它卸载:

[cocobear@cocobear minix]$ sudo rmmod minix.ko
[cocobear@cocobear minix]$ cat /proc/modules | grep minix
[cocobear@cocobear minix]$

到此我们顺利的完成了文件系统的编译、安装以及卸载。

BTW:中间遇到了点问题写了Makefile后输入make提示:”make: Nothing to be done for `default’.“,在网上找到了原因,在make命令前要使用tab,而不是空格,而我的刚好的空格,郁闷,以前就似乎遇到过的。

04-25
2008

Linux系统下E680使用USB网模式

IN:Linux   Tags: ,    Comments:4

草儿同学写了一篇关于在Win下面E680的USB网模式使用,俺就说一说Linux下的使用吧。
对于目前主流的发型版来说驱动问题应该不会有的,2.6.12以后的内核应该都可以直接识别E680的,首先在手机上把连接电脑的模式设计为USB网,然后连接数据线,系统会识别到有新的网卡,在我的网络配置中可以看到:
Motorola PCS EZX GSM Phone(USBLAN),设备名一般是usb0,我们先激活它,

[cocobear@cocobear ~]$ sudo ifconfig usb0 192.168.1.1
然后ping一下手机:

[cocobear@cocobear ~]$ ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=3.59 ms

接下来我们就可以对E680进行操作了,可以使用telnet登录,用户名root,密码为空:

[cocobear@cocobear ~]$ telnet 192.168.1.2
Trying 192.168.1.2…
Connected to 192.168.1.2.
Escape character is ‘^]’.

MontaVista Linux Consumer Electronics Edition 3.0
Linux/armv5tel 2.4.20_mvlcee30-mainstone

(none) login: root
Linux 192.168.1.11 2.4.20_mvlcee30-mainstone #7 Fri Feb 13 15:39:51 CST 2004 armv5tel unknown

MontaVista Linux Consumer Electronics Edition 3.0

为了文件传输方便我们还是使用smb服务把E680挂载到电脑上:

[cocobear@cocobear webpage]$ sudo mount.cifs //192.168.1.2/system /mnt/o/ username=root

这里我们需要使用mount.cifs,而不是平常使用的mount,这时我们就把E680当作普通的一个文件夹来进行操作了。

如果你的系统使用的是utf8(使用locale查看),那么会出现乱码的现象,这里有一个解决办法,我没有去试,应该可以的,但是很不方便,根据文中提到的原理我们完全可以这样搞定:

[cocobear@cocobear soft]$ export LC_ALL=zh_CN.GB18030

这里你需要把Terminal关掉,重新打开一次,如果你使用的是gnome-terminal,可以在菜单中把当前显示的编码改为GB18030,这样访问E680中的文件就不会是乱码了:
[cocobear@cocobear ~]$ cd /mnt/o/mmc/mmca1/soft/
[cocobear@cocobear soft]$ ls
quicksms.jar 快捷方式更改.mtf 删自带主题1_0.mpkg
YYwb_V0.1.3_For_E680i 快速短信(20080303)
[cocobear@cocobear soft]$

如果你想在图形界面中使用的话可以在窗口管理器的菜单中找到:打开位置这个选项,在这里输入:
smb://192.168.1.2/system
你就可以很方便的进行操作了,但这时乱码还会出现:-(

很不幸,俺发现没有权限对挂载的文件系统进行操作,郁闷,暂时还没有找到解决的办法:-(

Update 08.04.01:
今天又试了试发现在图形界面(nautilus)中各种复制、删除都正常,但命令行下就出错了:

[cocobear@cocobear soft]$ cat >d
bash: d: 权限不够

很奇怪的错误,乱码问题在nautilus中依然存在。

03-31
2008

西安网通drcom分析

IN:Linux   Tags: ,    Comments:10

好多天没有在Linux下上网了,网通在学校使用了drcom作为pppoe拨号的一个补充,目的是防止用户使用代理、监视用户使用情况,而且这个drcom是经过修改的,在Linux下没有对应的版本。所以这段时间一直不能上网,花了几天的时间抓包分析、测试,仍然没能解决Linux下上网的问题,现在只能通过wine模拟运行网通给的drcom客户端来上网,详细的使用可以参考草儿同学的一篇文章

记一下这几天分析的结果:

先首说一下整个通信过程,pppoe拨号连接上去后打开drcom客户端,通过wireshark抓包可以看到,drcom首先给1.1.1.1与202.1.1.1这两个ip同时(Windows上抓包的时间戳是相同的)发送一次UDP包,数据长度为8字节,接着服务器(221.11.20.10)会返回两次UDP包,内容是相同的,数据长度为16字节。接下来drcom会发送96字节的UDP包到服务器,服务器返回16字节UDP包。然后重复这一过程一次,不过这一次通信中第一次发送的UDP包的目的变为221.11.20.10并且只发一次,服务器也只给一次响应。首次通信结束后每隔18秒会重复上面通信过程一次。如下图:

first.png

下面对每次发送的UDP包中的数据进行分析:
客户端—->服务器:
07 01 08 00 01 00 00 30 00 00

上面8个字节是客户端给服务器的请求,固定不变,代表这是客户端第一次请求(这里指的第一次是指服务器与客户端4次UDP通信中的第一次)。

服务器—->客户端:
07 01 10 00 02 00 00 00 30 6a 0a 00 c0 a8 10 86

最前面的8个字前是数据类型,代表了这个UDP包是服务器给客户端的第一次响应,这个是一直不变的。蓝色部分应该是一个类似签名(暂时先这样叫吧)的东西,每次通信这4个字节中的前两个字节一直在变化,后两个字节隔一段时间(约1 小时左右)会加一;红色部分是客户端每次pppoe拨号上去后分配到的IP地址;

客户端—->服务器:
07 00 60 00 03 00 00 00 00 00 00 00
c0 a8 10 86 00 03 00 02
30 6a 0a 00 ca 3c 96 b000 00 00 00 02 74 e2 4d 49 75
00 03 c0 51 08 f6 ff ff ff ff 00 a6 15 00 00 00
00 8b c0 51 40 34 ff ff ff ff 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00

红色前边的12个字节是固定不变的,代表了这是客户端第二次的请求;红色部分4个字节是从上次服务器的返回中得到的,也是本机IP;绿色的4个字节含义不清楚,这4个字节有时候会变为00 02 00 02,变化规律目前不太清楚,不过在一次正常上网的情况下(这里指每隔18秒服务器会收到客户端发出的这些UDP包)这个是一直不变的;

蓝色的4个字节就是上次得到一个签名;接下来紫色的4个字节是目前最棘手的,这4个字节每次通信都在变(也就是每隔18秒变一次),而且我抓了2个小时的包把这4个字节提取出来,并且排序也没有发现有任何规律;再下来4个0是一直不变的;

粉色显示的这6个字节应该是和系统相关的信息,经过我的测试在同一机器上这个值是一直不变的,直到今天我用wine运行drcom才发现这6个字节在Linux下是全零,我猜想这个应该是系统信息吧;

下来浅蓝色的这一行16个字节在同一个机子上是不变的,但在不同的机子上还是有些差异的,有的机子上08 f6变为了00 7b,也有的变为了0c b8;甚至有的机子这一行只剩下00 a6 15 00 00 00这6个字节;

下来这一行中的内容也基本固定,只有40 34这两个字节会在你断线重拨后变化,也就是说在一次正常的上网情况下这两个字节是不变的,但这两个字节是如何得到的我就不清楚了,感觉这两个字节很重要,我曾经试着穷举这两个字节,不过没有任何收获,很可能这两个字节和前面某些字节有联系;

剩余的26个字节大部机子会全填零的,不过也有机子不是这样,有可能有更多的零,比如上面提到浅蓝色的那一行有可能只剩下00 a6 15 00 00 00这6个字节,这种情况会多6个字节的零;也有的机子会以16字节为单位重复类似“00 03 c0 51 08 f6 ff ff ff ff 00 a6 15 00 00 00”这样的数据;

服务器—->客户端:
07 00 10 00 04 00 00 00 2c 10 63 96 00 00 00 00

这是最后一次服务器发给客户端的UDP数据,前几个字节是数据类型,代表服务器发给客户端的第二次响应,后几个字节没有去研究,现在还卡在上面96个字节呢!

目前我只能根据我自己的机子把一些与机器、系统相关的字节确定下来,然后重点去分析那96字节中蓝色、深蓝色、紫色那几位的字节,不过已经好几天了,还是没有什么进展:-(

写出来供大家参考,一块研究,有什么不对的地方敬请指正;在Linux使用wine运行这个drcom感觉不爽的很!!

12-19
2007

重新把代理打开了

IN:Linux   Tags: , ,    Comments:4

还是原来的地址

http://cocobear.info/gfw

以前大概是因为被太多人用了,所以导致DH把这个给我封了,但后来用其它代理一点也不习惯,只好重新开始用自己的代理。不过这次加入了验证功能,一般人访问不了,如果谁想用这个代理可以发邮件给我,我告诉你用户名,密码。

说下配置方法:
首先在gfw这个需要被保护的文件夹下面建一个文件.htaccess,添加以下内容:

AuthUserFile /home/cocobear/cocobear.cn/gfw/.htpasswd
AuthName “Please contract cocobear”
AuthGroupFile /home/cocobear/cocobear.cn/gfw/
AuthType Basic
require valid-user

挺好理解的,就不多解释了,require选项是指定允许访问的用户,valid-user指所有有效的用户,也可以指定某些用户。

接下来是生成.htpasswd文件,需要用htpasswd这个工具来向.htpasswd添加新用户名:

htpasswd -m .htpasswd username

输入命令后会要求为该用户输入密码。这样是生成单个用户,其它批量生成用户可以查看htpasswd的手册,密码是经过md5加密的。

好了,这才算是专用代理。

12-07
2007

硬盘安装了Fedora8

IN:Linux   Tags: ,    Comments:8

今天从硬盘安装了Fedora8(不刻DVD了,又费钱安装还慢),主要的原因是为了能使用SDL的全屏模式,结果安装完后和Fedora7一样,还是全屏后X马上重启,看来是白升级了,不过听说Fedora8对笔记本改进了不少,希望不会让我失望。

安装过程很简单,把下载的镜像文件中的isolinux这个文件夹提取出来和镜像文件放在一个空闲的分区(不可以安装在此分区上),重起后在grub的命令行下输入:

root (hd0,0)
kernel (hd0,0)/home/cocobear/isolinux/vmlinuz
initrd (hd0,0)/home/cocobear/initrd.img

这里(hd0,0)改为对应你自己的镜像文件所在分区。安装时速度快多了我从DVD安装得3个小时,硬盘安装1个小时就差不多了。

发现了一个超好的yum插件:yum-fastestmirror,也不知道是Fedora8中的yum更好了还是使用了这个插件的缘故,我yum安装mplayer等东西的时候速度超快,可以达到几百K的速度,爽啊!

根据这篇文章停掉了没用的服务,不过有一个服务有点奇怪“auditd”,看说明用处不是很大我就停掉了,没想到打开一个程序变得奇慢,只好重新开启,一切才正常。

12-03
2007

换Amarok听歌了

IN:Linux   Tags: ,    Comments:8

首先是安装:

rpm -ivh http://rpm.livna.org/livna-release-7.rpm
yum install amarok amarok-extras-nonfree

这个是F7的安装方式,其它发型版的安装方法可以参考官方的安装指导。
我装的时候出现了点小问题,它需要的一个库文件比我已经有的版本要低,俺只好把那个库给删掉:

rpm -e –nodeps -ffad

指定–nodeps选项可以不检查依赖关系,这样即使有其它软件需要这个库也可以直接把它删除(因为我们一会儿还会装一个的)。

装好后就可以用了,不过显示的标签是乱码,只好找个工具把所有歌的标签改为GBK:

find . -iname “*.mp3″ -execdir mid3iconv -e GBK {} \;

mid3iconv这个程序是一个python写的工具,可以在这里下载.

不过貌似有点大了,我机子太老。还支持从网络搜索歌词,中文歌曲好像不行,有点郁闷。

10-16
2007
Page 4 of 10« First...2345610...Last »
loading...