2009年4月20日 星期一

how to mount jffs2 fs?

modprobe mtdblock
modprobe mtdram total_size=65536 erase_size=256
modprobe jffs2
dd if=YourImageFile of=/dev/mtdblock/0
mount /dev/mtdblock/0 /mnt/disk -t jffs2

2009年4月2日 星期四

linux useful commands

l+Z 挂起程序
Ctrl+W 删除单词
Ctrl+U 删除行
Ctrl+V 输入控制转义字符
Ctrl+D 发送EOF信号
系统命令
kill -KILL %1 发送KILL信号终止程序,任何正在运行的程序都不能忽略该信号
date 显示日期和时间
script 记录Linux会话信息
chmod 改变访问权限,u-user g-group o-others a-all
u+s setuid g+s setgid
ln 文件链接,直接加链接是硬链接,-s加链接为软链接,推荐使用软链接
归档指令
tar 打包解包文件。-cvf 打包 -tvf 浏览包内文件 -xvf 解包 加z选项是调用gzip和gunzip压缩和解压.tar.gz文件,加j选项是调用bzip2和bunzip2压缩和解压.tar.bz2文件
文件操作
unix2dos/dos2unix 转换文件格式
cat 显示文件内容
grep 查找字符串
head 显示文件头部
tail 显示文件尾部
sort 按顺序显示文件内容
uniq 忽略文件中的重复行
diff 比较两个文件
file 测试文件内容
定位命令
which 显示工具或命令的完整目录
whereis 在标准路径下搜索与工具相关的文件
apropos 搜索关键字,当需要完成某个特定任务但不知道命令名称
whatis 同apropos,但进搜索与关键字完全匹配的信息
slocate 在本地系统搜索文件
下午 05:33 | 新增回應 | 永久連結

VMVare下动态增加硬盘大小

vmware增加虚拟硬盘大小是在扩大虚拟硬盘的物理柱数,需要在linux中使用resize2fs修改分区实际大小。

1.使用vmware自带的工具vmware-vdiskmanager.exe修改虚拟硬盘的大小:

vmware-vdiskmanager.exe -x 20Gb "Other Linux 2.6.x kernel.vmdk",

注意:1.新的容量大小后面要加上b; 2.如果虚拟硬盘的名称带空格,要用双引号引起来

2.用root登陆Linux

3.umount需要修改大小的分区

4.使用fdisk修改分区表:删除已有的分区,新建大容量分区(这里不用担心内容丢失,我们会在后面恢复分区内容)

5.使用e2fsck恢复原分区内容

e2fsck -f /dev/sda4
6.使用resize2fs扩充分区大小
resize2fs -p /dev/sda4
7.重新mount该分区

2009年3月23日 星期一

那乾脆把G1當成無線基地台, 分享3G網路給我桌機+Notebook+路人使用

簡介:

有時候只用G1上網是不夠的(....像是要轉帳啦), 既然G1可以有wifi, 我又辦了台灣大哥大3G上網699吃到飽;

那乾脆把G1當成無線基地台, 分享3G網路給我桌機+Notebook+路人使用

必備:

G1有ROOT權限
不排斥Linux指令
參考資料來源:

iptables (tether without proxy)

安裝方法:

下載必備程式: http://www.eientei.com/g1adhoc.zip
把檔案放到sdcard下面
接下來telnet到你G1, 執行以下指令
# cd /sdcard
# unzip g1adhoc.zip
# mkdir /data/local/
# mkdir /data/local/bin
# cp iptables /data/local/bin/
# cp dnsmasq /data/local/bin/
# chmod 755 /data/local/bin/iptables
# chmod 755 /data/local/bin/dnsmasq
# cp dnsmasq.conf /data/local/
# cp tiwlan.ini /data/local/
# mount -oremount,rw /dev/block/mtdblock3 /system
# cp adhoc.sh /system/bin/tether
# chmod 755 /system/bin/tether
如何開啟/關閉:

# su (切換成root身分)

# tether start (把網路打開囉)

# tether stop (把網路關閉囉)

2009年3月18日 星期三

剖析RedHat Linux中三个重要内核文件

剖析RedHat Linux中三个重要内核文件
作者:mynix 来源:www.linux.org (2007-02-08 13:46:41)

  在网络中,不少服务器采用的是Linux系统。为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核。编译Linux内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的文件。比如对于RedHat Linux,在/boot目录下有一些与Linux内核有关的文件,进入/boot执行:ls –l。编译过RedHat Linux内核的人对其中的System.map 、vmlinuz、initrd-2.4.7-10.img印象可能比较深刻,因为编译内核过程中涉及到这些文件的建立等操作。那么这几个文件是怎么产生的?又有什么作用呢?本文对此做些介绍。

  一、vmlinuz

  vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。

  vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。二是内核编译时通过命令make bzImage创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”。 bzImage中的b是“big”意思。

  zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。

  内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。

  vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。

  二、initrd-x.x.x.img

  initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。initrd-2.4.7- 10.img主要是用于加载ext3等文件系统及scsi设备的驱动。比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题。initrd-2.4.7-10.img是用gzip压缩的文件。

  linuxrc这个脚本initrd 实现加载一些模块和安装文件系统等。 initrd映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它 Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd。

  三、 System.map

  System.map是一个特定内核的内核符号表。它是你当前运行的内核的System.map的链接。

  内核符号表是怎么创建的呢? System.map是由“nm vmlinux”产生并且不相关的符号被滤出。对于本文中的例子,编译内核时,System.map创建在/usr/src/linux-2.4/System.map。像下面这样:

  nm /boot/vmlinux-2.4.7-10 > System.map

  下面几行来自/usr/src/linux-2.4/Makefile:

  nm vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|

  \( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map

  然后复制到/boot:

  cp /usr/src/linux/System.map /boot/System.map-2.4.7-10

  在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号。

  Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名。比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。

  对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器/连接器允许我们编码时使用符号名,当内核运行时使用地址。

  然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号。这由符号表来完成,符号表是所有符号连同它们的地址的列表。变量名checkCPUtype在内核地址c01000a5。

  Linux 符号表使用到2个文件:

  /proc/ksyms

  System.map

  /proc/ksyms是一个 “proc file”,在内核引导时创建。实际上,它并不真正的是一个文件,它只不过是内核数据的表示,却给人们是一个磁盘文件的假象,这从它的文件大小是0可以看出来。然而,System.map是存在于你的文件系统上的实际文件。当你编译一个新内核时,各个符号名的地址要发生变化,你的老的System.map 具有的是错误的符号信息。每次内核编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。

  虽然内核本身并不真正使用 System.map,但其它程序比如klogd, lsof和ps等软件需要一个正确的System.map。如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程序故障会带来困难。没有System.map,你可能会面临一些令人烦恼的提示信息。

  另外少数驱动需要System.map来解析符号,没有为你当前运行的特定内核创建的System.map它们就不能正常工作。

  Linux的内核日志守护进程 klogd为了执行名称-地址解析,klogd需要使用System.map。System.map应当放在使用它的软件能够找到它的地方。执行:man klogd可知,如果没有将System.map作为一个变量的位置给klogd,那么它将按照下面的顺序,在三个地方查找System.map:

  /boot/System.map

  /System.map

  /usr/src/linux/System.map

  System.map也有版本信息,klogd能够智能地查找正确的映象(map)文件。

(http://www.fanqiang.com)

mount sdcard on android emulator

首先必須產生SDCard的image file
mksdcard
ex:mksdcard 1024M sdcard.iso

讓SDCard連到Android Emulator
./emulator -sdcard ~/.android/SDK-1.0/sdcard.iso

透過adb傳收檔案到emulator
adb push
adb pull
ex:
adb push ~/mp3/audio.mp3 /sdcard/audio.mp3

進入emulator的shell
adb shell

2009年3月12日 星期四

cross compile GSOAP

#on PC
./configure --host=arm-3d-linux-gnueabi --prefix=/opt/gsoap-arm --with-gnu-ld
make (generating soapcpp2, but with errors)
#on target
cd wsdl
../soapcpp2 -SC -pwsdl -I../import ./wsdl.h
#on PC
make
comment out in ($top_dir)config.h//
#define malloc rpl_malloc


for details
see http://packi.ch/news/view_article.php?id=83