不盲从,独立思考; 多阅读,遍地学问。
READ MORE »英文版Skype Full Offline Installer下载
国内访问Skype网站,会自动跳转到Tom Skype,而无法下载到英文原版Skype。若希望下载纯英文版本Skype,可到下面链接地址下载最新版。 下载链接:http://download.skype.com/SkypeSetup.msi http://download.skype.com/SkypeSetupFull.exe
READ MORE »Linux动态Lib库文件路径的环境变量设置
在运行程序时,我们希望程序到指定路径搜索动态库。方法是设置LD_LIBRARY_PATH环境变量即可。 环境变量LD_LIBRARY_PATH所指明的路径。 缺省的路径:/lib和/usr/lib /etc/ld.so.conf中指明的路径。 实例:#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/chen/Downloads/diskdiag-1.0.0/x86_64/lib64/
READ MORE »Grub中如何启动ISO文件
介绍 在Linux或PXE环境中,我们希望直接启动ISO文件,而无须刻录光盘或制作复杂的U盘。 本文介绍基于memdisk来实现Grub或Syslinux启动环境中直接引导ISO文件。ISO文件如Windows Xp安装ISO文件、Ubuntu 11.04 ISO文件等。
READ MORE »FlashCache调试及内核栈信息
[328048.563382] Pid: 0, comm: swapper Tainted: G N 2.6.32.12-0.7-xen #1 [328048.563384] Call Trace: [328048.563401] [<ffffffff80009af5>] dump_trace+0x65/0x180 [328048.563412] [<ffffffff8034f056>] dump_stack+0x69/0x73 [328048.563420] [<ffffffff8019730b>] blk_update_request+0xbb/0x3d0 [328048.563426] [<ffffffff8019763f>] blk_update_bidi_request+0x1f/0x70 [328048.563432] [<ffffffff80198447>] blk_end_bidi_request+0x27/0x80 [328048.563461] [<ffffffffa00251fa>] scsi_end_request+0x3a/0xc0 [scsi_mod] [328048.563490] [<ffffffffa00255e9>] scsi_io_completion+0x109/0x4e0 [scsi_mod] [328048.563505] [<ffffffff8019daf5>] blk_done_softirq+0x85/0xa0 [328048.563512] [<ffffffff80044bbe>] __do_softirq+0xde/0x1a0 [328048.563518] [<ffffffff8000800c>] call_softirq+0x1c/0x30 [328048.563524] [<ffffffff80009635>] do_softirq+0xa5/0xe0 [328048.563530] [<ffffffff80258912>] evtchn_do_upcall+0x212/0x2a0 [328048.563536] [<ffffffff80007a6e>] do_hypervisor_callback+0x1e/0x30 [328048.563543] […]
READ MORE »Linux内核源码特殊用法
Linux内核源码主要以C语言为主,有一小部分涉及汇编语言,编译器使用的是Gcc。初次看内核源码,会遇到一些难以理解、晦涩的代码;而恰恰是这些晦涩的代码,在内核源码中经常出现。把一些晦涩、常见的代码看懂后,大家会发现看内核代码越来越顺利。 本文以x86_64架构中的Linux 2.6.32-71.el6(RHEL 6,点击下载)源码为例,选择一些经常出现且晦涩的源码进行解释,选择的源码虽以2.6.32-71.el6为例,但很多内容同样使用其他版本的源码。主要内容包括Gcc中C语言的扩展用法、及其他一些杂项。 点击阅读完整内容
READ MORE »[转]Linux Power Management Architecture
介绍Linux内核电源管理框架,非常不错的材料。 来源:http://home.dei.polimi.it/bellasi/doku.php?id=teaching:2010:embeddedsystems1 点击下载:Linux Power Management Architecture A review on Linux PM frameworks
READ MORE »[转]Building a RootFS using the BBFS toolkit
来源:http://home.dei.polimi.it/bellasi/doku.php?id=blog#blogmainpage Sometimes you need a very simple root filesystem (rootfs) to bootup fast a new board. Among the different possible tools available out on the net, the bbfs [1] by Alessandro Rubini is perhaps the simplest and effective way I’ve found to get straight to the goal. The tools presents as a tar.gz [2] archive […]
READ MORE »Linux内核初始化时如何切换到64位模式
Linux内核初始化时,最初工作在CPU实地址模式下,然后进入保护模式。那么内核代码在哪里进入初始化CPU,让进入64位(x86_64)模式? Intel 64 CPU中,支持IA-32和IA-32e两种模式,如下图。IA-32e模式就是支持64位程序运行,也支持传统的32位程序运行。在Linux内核初始化时,要进入64位模式,就是进入Intel CPU的IA-32e模式。 本文以内核源码2.6.32-71.el6为例,切换到64位CPU模式源码在arch/x86/boot/compressed/head_64.S中。对于下面的设置步骤理解,可参考《Intel 64 and IA-32 Architectures Software Developer’s ManualVolume 3 (3A & 3B) System Programming Guide March 2011》. 这里补充一下IA32_EFER寄存器的含义。IA32_EFER寄存器是Intel CPU中的其中一个MSR(Model-Specific Registers)。在读写这个MSR寄存器之前,必须要先通过CPUID指令来确认这个寄存器是否存在。 00100: / * 00101: * Prepare for entering 64 bit mode 00102: */ 00103: 00104: / * Load new GDT with the 64bit segments using 32bit descriptor */ 00105: leal […]
READ MORE »x86/x86_64 CPU内存管理寄存器
x86/x86_64处理器提供了4个内存管理寄存器(Memory Management Registers):GDTR、LDTR、IDTR和TR。如下图所示。 Global Descriptor Table Register(GDTR) GDTR寄存器保存GDT的基址和表限(table limit)。基址是GDT的第一个字节的地址,表限(table limit)给出表的大小。 指令LGDT和SGDT是分别用来设置和保存GDTR寄存器的值。上电或重启处理器后,基址默认的值为0,表限(table limit)的值为0FFFFH。在保护模式运行前,作为处理器初始化的一部分,必须在GDTR寄存器中设置新的基址。 在Linux地址映射过程中,会用到GDTR寄存器。在此稍微详细介绍一下指令SGDT,即获取GDTR寄存器的值。SGDT指令的操作如下: Operation IF instruction is SGDT IF OperandSize = 16 THEN DEST[0:15] ← GDTR(Limit); DEST[16:39] ← GDTR(Base); (* 24 bits of base address stored *) DEST[40:47] ← 0; ELSE IF (32-bit Operand Size) DEST[0:15] ← GDTR(Limit); DEST[16:47] ← GDTR(Base); (* Full 32-bit […]
READ MORE »