解决 ALSA 声卡驱动的噪音问题

我买了一个 USB 声卡,使用中发现通过 ALSA 驱动播放时输出的声音伴随着噪音,而 OSS 没有。下面给出一个解决办法。

修改 /etc/asound.conf 为下面的数据

# /etc/asound.conf
 
pcm.card0 
{
    type hw
    card 0
}
 
pcm.!default
{
	type plug
	slave.pcm "asymer"
}
 
pcm.asymer
{
	type asym
	playback.pcm	"dmixer"
	capture.pcm	"dsnooper"
}
 
pcm.dmixer
{
	type dmix
	ipc_key	1025
	ipc_key_add_uid	yes
 
	slave
	{
		pcm		"hw:0,0"
		period_time	0
		period_size	2048
		buffer_size 	262144
		rate		48000
	}
}
 
pcm.dsnooper
{
	type dsnoop
	ipc_key	1125
	ipc_key_add_uid	yes
 
	slave
	{
		pcm		"hw:0,0"
		period_time	0
		period_size	2048
		buffer_size	262144
		rate		48000
	}
}

如题问题仍然存在,需要再加大 buffer_size 的值,建议为 2 的 n 次方。

Over!

Linux 系统中使用 SSH 代理

SSH 是一款功能强大的软件,这个不用我再多说了,这次我们使用它的通道功能实现一个 socks 5 代理。

你需要一个可用的 ssh 账号,网络上很多的哦,不知道可以联系我。

我们以 Debian 系统为例,讲解一下如何连接SSH服务器并创建代理服务和在 Firefox 中使用它。

创建代理服务

ssh -N -D 6000 username@server_address

设置 Firefox 使用代理
1. 在地址栏里输入 about:config
2. 设置 network.proxy.socks_remote_dns = True
3. 选择菜单中 [编辑]->[选项]
4. 转到 [高级]
5. 转到 [网络],点击 [设置]
6. 选择 [手动设置代理]
7. 在 SOCKS 主机里输入 localhost 端口输入 6000
8. 选择 SOCKS v5
9. 确定保存

下面就浏览你的自由世界吧!

Over!

逸珑笔记本使用 Silicon Motion for XServer 驱动

在 Debian 6(Squeeze) 系统中直接安装 xserver-xorg-video-siliconmotion 上不能正常使用的。需要给 xorg-server 打上 mips 的补丁,并重新编译安装才可以。也可以直接下载我编译好的 deb 安装。

补丁程序: http://www.heiher.info/service/projects/xserver/01_mips-sarea.diff
xorg.conf: http://www.heiher.info/service/projects/xserver/xorg.conf
编译好的 deb 包: http://www.heiher.info/service/projects/xserver/deb/

使用补丁和重新编译 xorg-server 的流程

mkdir xorg-server
cd xorg-server
apt-get source xorg-server
dpkg-source -x xorg-server*.dsc
cd xorg-server*/debian/patches/
wget http://www.heiher.info/service/projects/xserver/01_mips-sarea.diff
echo "01_mips-sarea.diff" >> series
cd ../../
dpkg-buildpackage -rfakeroot -uc -b
cd ../
rm xserver-xorg-core-dbg*
sudo dpkg -i *.deb
wget http://www.heiher.info/service/projects/xserver/xorg.conf
sudo cp xorg.conf /etc/X11/

Over!

龙芯机器的 Debian 依赖出问题了

上次更新软件列表后,totem-plugins gnome-power-manager 等包的依赖就出现了问题,导致 gnome-desktop-environment 等包被删除了。

由于一直通过 XDMCP 方式在使用 Ubuntu 系统,也就一直没有管它,当今天再次更新一下软件列表后,发现只有 totem-plugins 的依赖存在问题了。

我把 totem-plugins 下载下来,解开后把依赖修改了一下,从本地安装上后,成功安装了 gnome-desktop-environment,等待以后的修复就可以升级了。

Over!

Linux 源代码阅读工具

阅读 Linux 是一件很麻烦的事情,都不知道从哪里开始。即使阅读其中很小的一部分,都可能涉及到很多个源文件,分布在不同的目录中,如何去定位函数和变量在哪里申明的成为了阅读过程的一大障碍。

LXR(Linux Cross Reference) 改变了这一切,它对 Linux 源代码(各个版本)中所有的符号都建立了索引,并提供简单、快速的查询接口。在阅读源代码的过程中可以轻松的查找到相关符号的声明处。

LXR 网站地址:http://lxr.linux.no

Over!

Linux 系统中使用 TL-WN422G+无线网卡

在 Linux 操作系统中使用这款无线上网卡需要如下程序:

  • ZD1211RW 驱动
  • ZD1211 Firmware

ZD1211RW 驱动
重新编译内核增加这个驱动,可以编译为模块或直接编译进内核。

ZD1211 Firmware
没有这个固件不能正常驱动设备,第一次我就是这样的问题。
如果你有包管理系统,那么安装一下 zd1211-firmware,或去 http://sourceforge.net/projects/zd1211/ 下载。解压后保存成 /lib/firmware/zd1211/ 目录中。

Over!

制作 X86 平台的龙芯内核交叉编译环境

先下载 Binutils 2.20 和 GCC Core 4.4.2。
Binutils 2.20: http://ftp.gnu.org/gnu/binutils/binutils-2.20.tar.bz2
Binutils 2.20 Loongson2f 补丁: http://heiher.info/sftp/files/binutils-2.20-loongson2f.patch
GCC Core: http://ftp.gnu.org/gnu/gcc/gcc-4.4.2/gcc-core-4.4.2.tar.bz2

设置环境变量和新建目录

$ mkdir -p /opt/loongson-cross-tools/usr/{bin, lib, share}
$ echo "PATH=$PATH:/opt/loongson-cross-tools/usr/bin" >> ~/.bashrc

编译 Binutils:

$ tar xjf binutils-2.20.tar.bz2
$ cd binutils-2.20
$ patch -Np1 -i ../binutils-2.20-loongson2f.patch
$ cd .. && mkdir binutils-build && cd binutils-build
$ ../binutils-2.20/configure --prefix=/opt/loongson-cross-tools/usr --target=mipsel-pc-linux-gnu --with-sysroot=/opt/loongson-cross-tools --enable-64-bit-bfd --disable-nls --enable-shared
$ make configure-host
$ make
$ make install

编译 GCC:

$ tar xjf gcc-core-4.4.2.tar.bz2
$ mkdir gcc-build && cd gcc-build
$ ../gcc-4.4.2/configure --prefix=/opt/loongson-cross-tools/usr --target=mipsel-pc-linux-gnu --with-sysroot=/opt/loongson-cross-tools --disable-multilib --with-newlib --disable-nls --disable-shared --disable-threads --enable-languages=c --with-abi=64
$ make all-gcc
$ make all-target-libgcc
$ make install-gcc
$ make install-target-libgcc

Over!

交换硬盘分区的设备文件命名

这个可以通过 udev 来解决问题,默认 udev 是根据分区表中的序列来分配的,那也就可以通过修改分区表中的序列来实现了。这里就记录一下修改的过程。
1. 使用如下命令打印出分区表信息。
$ sudo fdisk -l /dev/hda

Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000
 
   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1          14      112423+  83  Linux
/dev/hda2              15        2447    19543072+  83  Linux
/dev/hda3            2448       19180   134407822+  83  Linux
/dev/hda4           19181       19457     2225002+  82  Linux swap / Solaris

2. 删除将要交换的两个分区,例如 /dev/hda1 和 /dev/hda2。
$sudo fdisk /dev/hda
d
1
d
2
3. 创建新的分区,达到交换目的。
n
p
1
15
2447
n
p
2
1
14
w

这样就完成的交换操作。

Over!

在 Linux 系统中清除 Windows 用户密码

不论你由于什么原因丢失了正确的 Windows NT/2000/XP/Vista 的用户密码,导致不能正常登录用户。你都可以使用下面的方法清除了硬盘中 Windows 系统的用户密码。

此方法是使用一位德国高手的程序 chntpw,这个程序是完全开放源代码的,如果你有兴趣去研究 Windows SAM 文件的格式,这个程序是一个很好的参考。

1. 制作 Linux Live CD
如果你已经有一张可以直接引导且包含NTFS-3G模块的 Live CD,那么就可以略过一个步骤。否则建议你下载一个 Ubuntu Live CD并刻录成盘。

2. 下载 chntpw
下载 chntpw 最新版本的源代码(其中包含已经静态编译好的 i386 版本的二进制程序)到 U盘中。
下载地址:chntpw-source-080526.zip

3. 清除密码
使用 Live CD 启动计算机,插入保存了 chntpw 程序的U盘。挂载安装了 Windows 系统和U盘的分区。解压缩 chntpw 源代码包。运行 chntpw 程序清除密码。(chntpw 的详细使用方法在源代码中的 README.txt 文件中有详细的解释)

Over!