升级2.6.18内核后停止启动的问题

自从升级2.6.18内核后,几乎每次启动时都停在这个画面:
cs: IO port probe 0xc00-0xcff: clean
cs: IO port probe 0x820-0x8ff: clean
cs: IO port probe 0x800-0x80f: _

然后就没反应了。

根据LQ论坛的说法,在lilo.conf文件里加上一项:append=”pci=nomsi”。重启,似乎没有效果。google之,发现编译内核时MSI(Message Signaled Interrupts)是PCI support下面的一个选项,“信号中断处理”,《Linux 2.6.19.x 内核编译配置选项简介》的解释是:充许设备通过PCI总线写入内存堆栈产生一个中断而不是使用默认的IRQ中断,建议不选。

感觉就是和这个有关,但是尝试多次,依然失败。继续google之,SLAX用户提供两种方法
1.启动时加载linux copy2ram nopcmcia noacpi nohotplug等选项
2.修改/etc/pcmcia/config.opts,找到相应端口(0x800-0x80f),删除。

方法1里noacpi选项似乎可以解决启动时卡死的问题,但不加载这个电源管理模块的直接后果就是无法查看笔记本的电池信息、手动按电源关机。根据方法2,删除端口,重启,good! 简直一针见血!

php4、php5版本while语句处理字符串’0’时的差异

php版本while语句处理字符串’0’时的差异

最新碰到一个诡异问题,某些主机上的php4会把字符串’xkai200’处理成’xkai20’,但是在我的php5上显示正常。怀疑是php4和5两个版本在substr或strlen函数处理上的差异,但是仔细翻阅手册并没有发现两个版本的差别。于是怀疑while语句:

< ?php $str = 'xkai200'; //$str = 'xkai20a'; convert($str); function convert($str) { while($str) { $i++; $str = substr($str, 1, strlen($str)); echo "<li>$str \t $i</li>\n"; } } echo PHP_VERSION; ?>

将’xkai20a’代替’xkai200’,发现原来while条件中如果是字符串’0’,会被当成false对待!

php4.4.2, php4.4.7上发现此问题,php5.5.2则正常。

解决方法:使用while($str != ”) 代替 while($str)。

笔记本电脑上常用的几个内核模块

标题:笔记本电脑上常用的几个内核模块
作者:windrose
来源:http://www.linuxsir.org/bbs/showthread.php?t=194374

笔记本电脑由于节省电力的需要,在设计上对于电源管理非常重视。以前常用的apm是通过bios进行电源管理,而新式的acpi作为apm的后继者,把电源管理的任务交给了操作系统。

以往大家常常会认为笔记本电脑的节能功能在linux中不如在windows中的,但我最近在dell inspiron 700m上安装linux之后,发现其实linux对于acpi的支持已经非常完善了,对于intel处理器的speedstep模式的支持也很好,能做到动态调整cpu的频率。这里介绍一下在2.6.10内核中,我用到的与电源管理和显示系统状态有关的几个内核模块:

  1. AC
    用法: /sbin/modprobe ac
    用途:这个模块很简单,就是显示外接交流电源连接的状态。加载这个模块后,在 /proc/acpi/中会新建 ac_adapter/ADPx/目录,其中的state文件内容即是电源连接状态。
  2. BATTERY
    用法: /sbin/modprobe battery
    用途:监视电池充放电状态、当前容量等。加载模块后,在/proc/acpi/中建立 battery/BATx/目录,其中的文件内容记录了电池的信息(info文件)、状态(state文件)等。
  3. THERMAL
    用法: /sbin/modprobe thermal
    用途: 监视CPU和主板等的温度。加载后,/proc/acpi/目录中建立thermal_zone/THRx/目录,其中的temperature文件中记录了温度值,还有其他的文件定义了在某个温度值系统应该采取的行动等信息。
  4. BUTTON
    用法: /sbin/modprobe button
    用途:定义不同按钮对应的系统行为,例如,可以设置按电源键系统关机、合上屏幕系统休眠等。可以指定在这些键的状态发生变化时执行相应的系统命令,具体内容可以参照 /etc/acpi/目录中的脚本,这里就不展开讲了。
  5. PROCESSOR
    用法: /sbin/modprobe processor
    用途:显示CPU的信息、状态,并能设置对CPU限速(throttling)。在/proc/acpi/processor/CPUx/目录中的文件有cpu 的信息,也定义了在不同电源供应情况下对应的cpu状态以及对cpu限速的规则。假如cpu支持频率调节,则可以通过一些软件利用有关文件实现这一功能。
  6. cpufreq
    用法: 在 /lib/modules/`uname -r`/kernel/arch/i386/kernel/cpu/cpufreq/目录中有许多针对不同移动CPU进行频率调节的模块,需要根据你的 CPU进行选择,有针对intel的speedstep的,也有针对amd的powernow的,还有针对transmeta的longrun的。我的是迅驰dothan 1.6G,所以我加载 speedstep-centrino 模块: /sbin/modprobe speedstep-centrino,加载之后 /sys/devices/system/cpu/cpu0/cpufreq/里面的文件就是与频率调节有关的。

加载了上述模块之后要通过一些软件才能更方便地监视系统状态和使用模块提供的功能,gkrellm有很多有关的插件,windowmaker也有很多dockapps实现同样的功能。我就是用的dockapps。

.bash_profile及.bashrc

不像其他发行版本,本来slackware下面的bash配置文件很简单:shell启动时只认.bash_profile文件。可是我的slackware,不管是.bash_profile还是.bashrc都不生效。

怀疑是此前修改~/权限时的后遗症,ls -l ~/\.bash*查看没有x权限,于是chmod u+x ~/\.bash*、退出后满怀欣喜地查看,依然不奏效。

无奈,只好霸王硬上弓,在/etc/profile里source了一遍:

#Get the aliases and function
   if [ -f ~/.bash_profile ];then
    . ~/.bash_profile
  fi
#User specific environment and startup programs

以防万一,把.bashrc的也加上去了。btw, 感觉linux实在是个好东东,特意添加了黄嘴企鹅分类。

备忘:mount windows分区

换了台电脑,换了个操作系统,连fstab文件都得重新写一遍。

sudo cp /etc/fstab /etc/fstab.bak
sudo vim /etc/fstab

# /etc/fstab: static file system information.
#
#

proc /proc proc defaults 0 0
/dev/sda9 / ext3 defaults,errors=remount-ro 0 1
/dev/sda12 /home ext3 defaults 0 2
/dev/sda10 /usr ext3 defaults 0 2
/dev/sda11 none swap sw 0 0
/dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/sda1 /mnt/win_c ntfs ro,uid=1000,iocharset=utf8 0 0
/dev/sda5 /mnt/win_d ntfs ro,uid=1000,iocharset=utf8 0 0
/dev/sda6 /mnt/win_e ntfs ro,uid=1000,iocharset=utf8 0 0
/dev/sda7 /mnt/win_f ntfs ro,uid=1000,iocharset=utf8 0 0
/dev/sda8 /mnt/win_g vfat ro,uid=1000,iocharset=utf8 0 0保存,退出。

sudo mount -a

删除\tcolor开头的行

color.css文件如下:

\tcolor: #ccc;
\tcolor: #ffffff;
\tcolor: red;
\tbackground-color: #000;
\tborder-color: #fff;

为了集中管理颜色,欲将所有color开头的行删除。这似乎不是awk/sed的特长,于是在vim里使用正则匹配替换:
%s/\scolor.*$//g

但是留下空白的行,很不是完美。

干脆使用grep:
grep -v '\tcolor:.*$' color_background.css > color.new.css
不知为何,没有任何匹配。

最后,还是输入tab的控制符解决的问题
grep -v ' color:.*$' color_background.css > color.new.css

注意:终端下按Ctrl V后,方可输入相应的控制符。

update:
vim中%g/\tcolor.*$/d也可以解决。

mplayer playlist

拜读了一个老外的文章,我才恍然大悟,原来困扰依旧的linux下的听歌问题可以解决了:

目录下的所有mp3文件:
find /mnt/win_h/Music/ -type f|grep mp3 > ~/music/all.txt

使用mplayer播放:
mplayer -playlist ~/music/all.txt

当然,如果想随机播放的话只需要再添加一个参数-shuffle。