摘要: 会用^[[A替代。 参考:http://stackoverflow.com/a/8641302/941650 阅读全文
posted @ 2014-02-26 17:52 Daniel King 阅读(1258) 评论(0) 推荐(0) 编辑
摘要: 1. Bochs中的调试命令ldsym没有触发的情况。 参考:http://www.ibm.com/developerworks/cn/linux/sdk/lex/ Lex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler 参考:http://www.cnblogs.com/cuishengli/p/3346148.html B... 阅读全文
posted @ 2014-02-26 13:39 Daniel King 阅读(688) 评论(0) 推荐(0) 编辑
摘要: 1: sudo gcc -P -I. -I../instrument/stubs -I../instrument/stubs -I../ -E ctrl_xfer32.cc -o preprocessed.cc 阅读全文
posted @ 2014-02-24 13:37 Daniel King 阅读(863) 评论(0) 推荐(0) 编辑
摘要: 1. 编译内核 编辑.config文件,相关项目改成如下形式: 1: CONFIG_KGDB=y 2: CONFIG_KGDB_SERIAL_CONSOLE=y 3: CONFIG_MAGIC_SYSRQ=y 4: CONFIG_DEBUG_INFO=y 5: #CONFIG_DEBUG_RODATA然后,执行make会再次提示相关项目的设置,再次确认一下。 阅读全文
posted @ 2014-02-24 10:48 Daniel King 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 1. 安装相应的库sudo apt-get install libc6-dev-i386gcc-multilibg++-multilib2. 在Makefile中添加CFLAGS += -m32LDFLAGS += -m32CPPFLAGS += -m32 阅读全文
posted @ 2014-02-23 15:57 Daniel King 阅读(737) 评论(0) 推荐(0) 编辑
摘要: 参考:http://blog.chinaunix.net/uid-26207112-id-3332621.html1. 正确地创建一个包含启动分区的磁盘映像1.1 创建磁盘映像文件首先需要对磁盘的结构有一个直观的了解,参考:http://en.wikipedia.org/wiki/Cylinder-... 阅读全文
posted @ 2014-02-21 17:06 Daniel King 阅读(1236) 评论(0) 推荐(0) 编辑
摘要: 上文:http://www.cnblogs.com/long123king/p/3549701.html 1: static int __init kernel_init(void * unused) 2: { 3: ...... 4: 5: if (!ramdisk_execute_command) 6: ramdisk_execute... 阅读全文
posted @ 2014-02-20 17:26 Daniel King 阅读(1103) 评论(0) 推荐(0) 编辑
摘要: 在Linux下使用Bochs参考:http://wangcong.org/articles/bochs.htmlhttp://kinglaw05.blog.163.com/blog/static/59683314200911205510345/首先,安装libgtk2.0-dev,build-essential库 1: sudo apt-get install libgtk2.0-dev build-essential然后下载最新的bochs源码,解压 1: sudo wget http://bochs.sourceforge.net/svn-snapshot/bochs-201402... 阅读全文
posted @ 2014-02-14 15:46 Daniel King 阅读(2450) 评论(0) 推荐(0) 编辑
摘要: 书承上文:http://www.cnblogs.com/long123king/p/3549267.html 我们找一份Lilo的源码来看一下 http://freecode.com/projects/lilo ftp://metalab.unc.edu/pub/Linux/system/boot/lilo/lilo-22.8.src.tar.gz first.S就是写到MBR中的,我们刚刚分析... 阅读全文
posted @ 2014-02-14 15:26 Daniel King 阅读(601) 评论(0) 推荐(0) 编辑
摘要: 1. Bochs调试参考:http://www.cnblogs.com/long123king/p/3414884.htmlhttp://bochs.sourceforge.net/cgi-bin/topper.pl?name=New+Bochs+Documentation&url=http://bochs.sourceforge.net/doc/docbook类似的文章:http://www.cnblogs.com/wanghj-dz/archive/2011/05/12/2044862.html关于IO端口的列表:http://bochs.sourceforge.net/techs 阅读全文
posted @ 2014-02-14 11:12 Daniel King 阅读(1574) 评论(0) 推荐(0) 编辑
摘要: 上文参考:http://www.cnblogs.com/long123king/p/3545991.html 先分析一下linker script的语法。 #ifdef CONFIG_X86_32#define LOAD_OFFSET __PAGE_OFFSET#else#define LOAD_OFFSET __START_KERNEL_map#endif /* Text and re... 阅读全文
posted @ 2014-02-14 09:46 Daniel King 阅读(1186) 评论(0) 推荐(0) 编辑
摘要: 参考上文: http://www.cnblogs.com/long123king/p/3543872.html http://www.cnblogs.com/long123king/p/3545688.html 补充:linker script documentation http://www.nacad.ufrj.br/online/sgi/860-0247-001/sgi_html/ldLi... 阅读全文
posted @ 2014-02-12 15:10 Daniel King 阅读(3265) 评论(0) 推荐(0) 编辑
摘要: 1. main函数 参见上方http://www.cnblogs.com/long123king/p/3543872.html,代码跳转到main函数。 arch/x86/boot/main.c 1: void main(void) 2: { 3: /* First, copy the boot header into the "zeropage" */ 4: ... 阅读全文
posted @ 2014-02-12 11:46 Daniel King 阅读(865) 评论(0) 推荐(0) 编辑
摘要: 1: /* 2: * We use the same basic approach as the old NTFS driver, i.e. we parse the 3: * index root entries and then the index allocation entries that are marked 4: * as in use in the ind... 阅读全文
posted @ 2014-02-11 13:36 Daniel King 阅读(643) 评论(0) 推荐(0) 编辑
摘要: 1. 内核文件布局 首先看一下arch/x86/boot/Setup.ld文件,它定义了链接后的内核文件布局。 1: /* 2: * setup.ld 3: * 4: * Linker script for the i386 setup code 5: */ 6: OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-... 阅读全文
posted @ 2014-02-11 10:00 Daniel King 阅读(2510) 评论(0) 推荐(0) 编辑
摘要: 1. 思考 多个进程可以加载相同的共享链接库,比如C语言的运行库,加载运行库采用内存映射文件的方式,可以延迟对于文件内容的读入操作。 共享链接库文件,是一个elf格式的库文件,里面会包含多个不同的section,比如text/data/bss section。 不同的section的访问方式和权限都有差别,比如text section可能一般要求“只读、可以执行”的权限,而data/bss sec... 阅读全文
posted @ 2014-02-10 10:25 Daniel King 阅读(866) 评论(0) 推荐(0) 编辑
摘要: 1. 背景http://stackoverflow.com/q/20418694/941650这里面临的一个核心问题是,如果MFT Reference相等,能够表明这些记录代表的是同一个文件吗?对于这个问题,我们可以采取实验的方式来验证。2. 实验环境在实验设备Windows 7操作系统下,D盘是N... 阅读全文
posted @ 2014-02-08 18:11 Daniel King 阅读(980) 评论(0) 推荐(0) 编辑
摘要: 1. Xen Live CD xen也有Live CD的形式,当然是少不了Dom 0的,有Apline Linux和Debian两种。 参见http://wiki.xen.org/wiki/LiveCD 2. Xen简介 参考http://wiki.xenproject.org/wiki/Xen_Overview#Introduction_to_Xen_Architecture 这张图概括了xe... 阅读全文
posted @ 2014-02-07 16:53 Daniel King 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 1. 场景假设一个系统System在某一时刻的状态可以用State A来表示【State里面包含着一些元素的集合】: 1: State A = [element_0, element_1,……,element_n]系统System经过了一段时间的运行,在另一时刻,它的状态变成State B: ... 阅读全文
posted @ 2014-02-07 10:47 Daniel King 阅读(499) 评论(0) 推荐(0) 编辑
摘要: 1. 安装debian 使用unetbootin(http://unetbootin.sourceforge.net/)来创建启动盘,并且下载debian的基本包。 将磁盘进行压缩操作,并且保留出一个主分区的位置。 然后,重新启动系统按F12,选择U盘启动,进行安装。 有几个需要注意的地方: 1). 事先在Windows系统中,通过“计算机->管理->磁盘管理”的工具,将空闲空... 阅读全文
posted @ 2014-02-06 18:36 Daniel King 阅读(1318) 评论(0) 推荐(0) 编辑
摘要: 1. inode缓存 1: struct inode { 2: /* RCU path lookup touches following: */ 3: umode_t i_mode; 4: uid_t i_uid; 5: gid_t ... 阅读全文
posted @ 2014-01-30 10:45 Daniel King 阅读(3586) 评论(0) 推荐(1) 编辑
摘要: 1. BIOS的虚拟化 xen的启动过程,与x86系统一样,首先要进入保护模式,然后安装中断处理程序。 xen的中断处理程序可以分为几种,有的是直接分发给正在运行的操作系统,有的是分发给安装了硬件驱动的Dom0。以时钟中断为例,既要分发给xen本身,用来调度各个Guest系统的运行,又要分发到运行的Guest中,支持Guest内部的程序调度。 BIOS的支持 x86系统在启动过程中需要读取BIO... 阅读全文
posted @ 2014-01-29 14:54 Daniel King 阅读(600) 评论(0) 推荐(0) 编辑
摘要: 1: void lookupInode() 2: { 3: struct dentry* root_dentry; 4: struct vfsmount* root_mnt; 5: const char* filename; 6: struct nameidata data; 7: int err = 0; 8: 9... 阅读全文
posted @ 2014-01-28 14:51 Daniel King 阅读(698) 评论(0) 推荐(0) 编辑
摘要: 1. 为什么提供命名空间 命名空间是一种轻量级的虚拟化手段。 传统的虚拟化软件,是虚拟化多个不同的操作系统,对共享资源的限制很大。 通过提供命名空间,可以让进程与进程之间,用户与用户之间彼此看不到对方。 命名空间,相当于容器。 命名空间,本质上建立了系统的不同视图。 chroot是一种简单的命名空间,仅限于将进程限制在文件系统的某一部分。 2. 创建命名空间的方式 1). fork/clone创... 阅读全文
posted @ 2014-01-28 10:40 Daniel King 阅读(4527) 评论(0) 推荐(0) 编辑
摘要: 1. seq_file 参考: http://blog.chinaunix.net/uid-26084833-id-1754437.html seq_file的结构体定义: 1: struct seq_file { 2: char *buf; 3: size_t size; 4: size_t from; 5: size_t count; ... 阅读全文
posted @ 2014-01-27 16:21 Daniel King 阅读(796) 评论(0) 推荐(0) 编辑
摘要: 在模块中,通过查询super_blocks列表,来遍历系统中的所有super_block,但是出现与下面类似的错误: http://stackoverflow.com/q/5051111/941650 也可以参考他的解决方法,到System.map中去查找真实地址,不过这样不是解决问题的最好方法。 先贴出当前的代码 1: #include 2: #include 3: ... 阅读全文
posted @ 2014-01-27 10:46 Daniel King 阅读(348) 评论(0) 推荐(0) 编辑
摘要: XML解析,通常可以有几种选择: 1: Tinyxml 2: boost::property_tree根据tag, text, attribute的不同,可以将XML简单分成以下几种情况:场景1 Rainy Rainy Sunny Cloudy 在这种场景下,所有节点都... 阅读全文
posted @ 2014-01-26 16:43 Daniel King 阅读(220) 评论(0) 推荐(0) 编辑
摘要: netif_rx函数是在网上收到数据包后,通过中断机制通知CPU而间接调用的中断处理例程。 首先,会将Packet传给netpoll框架,该框架用于在网络协议栈不可用的情况下,也能够提供给内核一个收发Packet的接口,用于一些特殊场合的调试等用途。 netpoll只是一种框架和一些接口,只有依赖这个框架和接口实现的netpoll实例,netpoll才能发挥它的功能。类似于kernel中的vfs... 阅读全文
posted @ 2014-01-22 16:49 Daniel King 阅读(4440) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #include #include #include MODULE_LICENSE("GPL");void analyzeIPHeader(struct iphdr* ip_hdr){ printk("***********IP Header***********\n"); printk("%30s:\t0x%02x\n", "Ve... 阅读全文
posted @ 2014-01-21 17:34 Daniel King 阅读(1283) 评论(0) 推荐(0) 编辑
摘要: http://www.ibm.com/developerworks/cn/java/j-cb07186.html 1. 构造符号 :比如:1:2:3:[]而常用的[1,2,3]是一种语法糖(http://en.wikipedia.org/wiki/Syntactic_sugar)2. 一切都是函数函数定义语法:函数名 :: 参数类型中可能用到的基本类型 基本类型名 => 参数1 -> 参数2 ->... 阅读全文
posted @ 2014-01-21 14:41 Daniel King 阅读(1018) 评论(0) 推荐(0) 编辑
摘要: 1: unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, 2: unsigned long len, unsigned long prot, 3: unsi... 阅读全文
posted @ 2014-01-20 17:51 Daniel King 阅读(1228) 评论(0) 推荐(0) 编辑
摘要: 1 在单处理器上的实现 单核系统上,不存在严格的并发,因此对资源的共享主要是多个任务分时运行造成的。 只要在某一时段,停止任务切换,并且关中断(对于用户态应用程序,不大可能与中断处理程序抢临界区资源),或者对临界区资源的访问可以用一条原子指令完成,就能够保证只有一个任务在运行。 这就是spinlock的实现机制。 1: #define __LOCK(lock) \ 2: do { ... 阅读全文
posted @ 2014-01-17 14:15 Daniel King 阅读(738) 评论(0) 推荐(1) 编辑
摘要: 1: void cpuidTest() 2: { 3: u32 val_eax, val_ebx, val_ecx, val_edx; 4: asm("cpuid" 5: : "=a" (val_eax), 6: "=b" (val_ebx), 7: "=d" (val... 阅读全文
posted @ 2014-01-16 16:12 Daniel King 阅读(1237) 评论(0) 推荐(0) 编辑
摘要: 1. 模板形参表 模板形参表,里面可以是typename T/ class T这种形式的,代表里面被泛化的是一种类型; 也可以使用Type value这种形式的,代表里面被泛化的是一个某种类型的值。 这点很重要,因为后面介绍的部分特化(Partial Specialization),就是应用的值的泛化,即一个模板(仅限类模板)有多个类型泛化的形参的时候,可以将其中的部分类型特化成值,以代表其中的... 阅读全文
posted @ 2014-01-16 11:51 Daniel King 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 1. 什么是facet, locale facet ['fæsɪt]的原意,是宝石切割出来的一个平面。 locale[ləʊˈkæl],表示本地化, locale the container that holds all the required information about a specific culture, such as number formatting patterns, d... 阅读全文
posted @ 2014-01-15 10:21 Daniel King 阅读(1119) 评论(0) 推荐(0) 编辑
摘要: 1 出现的背景 因为CPU与Memory之间的速度差异逐渐拉大,因此CPU无法容忍总是等待Memory,所以在CPU与Memory之间出现了Cache。 可以预知,CPU访问Cache的速度肯定要大大地快于访问Memory的速度。 一般来说,CPU会在内部嵌入一个Cache,称作On-Chip Cache,即L1 Cache。 CPU访问L1 Cache的速度基本上与访问Register的速度相... 阅读全文
posted @ 2014-01-14 11:08 Daniel King 阅读(1381) 评论(0) 推荐(0) 编辑
摘要: 1 在调用mmap系统调用时,可以指定的标志(flag)参数: 1: #define MAP_SHARED 0x01 /* Share changes */ 2: #define MAP_PRIVATE 0x02 /* Changes are private */ 3: #define MAP_TYPE 0x0f /* M... 阅读全文
posted @ 2014-01-09 18:01 Daniel King 阅读(1970) 评论(0) 推荐(0) 编辑
摘要: 在内存系统初始化过程中,有如下代码: 1: static void __init pagetable_init(void) 2: { 3: pgd_t *pgd_base = swapper_pg_dir; 4: 5: permanent_kmaps_init(pgd_base); 6: }这里,我们看到了神秘的swapper_pg_dir,全局搜索一... 阅读全文
posted @ 2014-01-08 11:17 Daniel King 阅读(2767) 评论(0) 推荐(0) 编辑
摘要: 根据当前CR3寄存器内容,读取对应物理内存中的页目录页,并进行解析 1: void dumpPageDirectoryEntry(u32 entry) 2: { 3: u8 present; 4: u8 read_write; 5: u8 user_supervisor; 6: u8 accessed; 7: u8 dirt... 阅读全文
posted @ 2014-01-06 11:33 Daniel King 阅读(761) 评论(0) 推荐(0) 编辑
摘要: 参见:http://www.cnblogs.com/hujian/archive/2012/02/13/2348621.html 1: int a = 0; 2: int* b = &(a++); 3: 4: 上面的代码,编译不通过:error C2102: '&' requires l-value提示说a++不是左值对象(l-value),即右值对象(r-value)。 ... 阅读全文
posted @ 2014-01-03 16:03 Daniel King 阅读(361) 评论(0) 推荐(0) 编辑