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!