内核与驱动
文章平均质量分 74
gudujianjsk
这个作者很懒,什么都没留下…
展开
-
TACLS、TWRPH0和TWRPH1的确定
tq2440 开发板,跟mini2440开发板 nandflash 几无多少区别。操作nandflash 最重要的感觉就是转载 2014-08-20 00:22:33 · 1016 阅读 · 0 评论 -
Determine who is monopolizing the CPU
$ ps -eo pcpu,size:8,user,start_time,pid,args | sort -nk 1 -r |egrep -v "COMMAND|egrep -v|start_time"| head -10 The ps command displays every process (-e) with user-defined format (e.g.,-o pcpu).转载 2012-11-16 16:14:30 · 706 阅读 · 0 评论 -
书写 2.6 内核后门程序 -1 (软中断int 0x80)
Unix世界中一切皆文件的思想将socket通信变的简单的多, 通常我们直接可以用read,write等api函数作为socket通信的方法,这些api函数最终都会调用kernel提供的sys_XXX系列函数。平时用到的read等函数早以在c库中封装好了。其实我们可以自己直接向系统发送软中断int 0x80来执行sys_read函数,如: int my_read(int fd, ch转载 2012-10-30 12:03:43 · 1132 阅读 · 0 评论 -
linux memory hotplug 测试
linux内核已经实现了内存热插的支持,当一个linux系统不管运行在 物理环境 或者虚拟环境 时只要宿主能提供内存热插拔机制,linux内核就能相应的增加或者减少内存。目前已知的VMware已经可以做到内存热插。 改变内存容量有两种方式:40 1.1 purpose of memory hotplug41 ------------42 Memory Hotplug a原创 2012-09-28 10:20:10 · 4301 阅读 · 1 评论 -
书写 2.6 内核后门程序 -2 (调用内核程序)
在内核态通过int 0x80调用系统内核函数,虽然方便但是效率比较低。可以尝试直接调用内核函数,在wzt的原文中直接调用 sys_bind,sys_socket 等函数的实现,比如 sys_bind 函数SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen){ s转载 2012-10-30 18:27:27 · 747 阅读 · 0 评论 -
linux中生成内核模块时部分函数undefined的应对方法
在生成内核模块时出现下面这种警告: WARNING: "symbol_name" [xxxx/xxx.ko] undefined!其中" "里是函数名称,[]里是所生成的模块位置。出现这种警告是由于 欲在模块A中调用模块B里的函数,这个函数必须要用 EXPORT_SYMBOL(函数名)的形式给导出,不然就会发出这样的警告。EXPORT_SYMBOL(函数转载 2012-10-29 16:10:49 · 1642 阅读 · 0 评论 -
VFIO driver
VFIO 是个设备驱动,它提供了安全的 非特权级别的 用户空间的驱动。当配置成最快速的IO性能的时候,虚拟机经常使用直接设备访问(设备配置),从设备和宿主机的角度看,此时VM就变成一个用户空间驱动。VFIO IOMMU 后台主要用户intel VT-d硬件或者 AMD Vi 目前 VFIO 驱动已经被merge 到linux 内核 3.6中:http://www原创 2012-09-26 14:20:58 · 34576 阅读 · 0 评论 -
linux balloon测试
安装一个ubuntu11.10 i386 -server版并用如下命令启动:内核版本./../qemu-kvm/i386-softmmu/qemu-system-i386 -enable-kvm -m 512 -kernel vmlinuz-3.0.0-12-generic-pae -L ./../bios -append "root=/dev/sda" -dimm id=dimm0原创 2012-09-28 17:17:02 · 1603 阅读 · 0 评论 -
task_struct 进程描述符为何要这样分配?
进程描述符: struct_task,定义于,进程的task_struct存放在进程内核栈的尾端. 把task_struct结构与内核栈放在一起的好处:内核中大部分处理进程的代码都是通过进程描述符进行的。 因而current宏查找到当前进程的描述符的速度就尤为重要。对于寄存器不富裕的体系结构来说,通过预先分配和重复使用task_struct可以避免动态分配和释放所带来的资源消耗,UN转载 2012-11-25 20:28:13 · 1094 阅读 · 0 评论 -
bzImage与vmlinux
在kernel编译中,我们得到了bzImage和vmlinux两个kernel Image文件。在O'Reilly的《Building Embeded Linux System》一书中,对这两个的区别说得很含糊。只是说bzImage是压缩的kenel Image,vmlinux是未压缩的kernel Image。但是vmlinux经过压缩可作为vmlinuz。在桌面linux的/boot目录下面我转载 2012-04-27 21:05:13 · 1552 阅读 · 0 评论 -
某公司的linux内核驱动笔试题目
(趁原作者没有迫于压力删帖前赶紧转了。。。)(一)主要题型:选择题(每题3分,约20题吧,具体什么题都有,包括网络、C以及其他硬件方面的基础知识);简答题(总分约40分,主要包括读C程序给出结果同时给出适当的解释及其他一些硬件方面的问题);(二)主要内容:1、题目概述(1)C方面:这一部分比较简单,主要是类似指针空间分配、strcpy(主要是转载 2012-04-27 21:01:18 · 856 阅读 · 0 评论 -
tcp头部数据结构tcphdr
所在文件: include/linux/tcp.htcp头部数据结构struct tcphdr { __be16 source; //16位源端口号 __be16 dest; //16位目的端口号 //每个tcp段都包源和目的端口号,用于寻找发送端和接受端的应用进程。 //这两个端口号加上i转载 2012-12-19 20:15:12 · 2392 阅读 · 0 评论 -
拷贝机器码的一种inline hook方式
将需要inline hook的函数机器码先拷贝到一块内存中, 然后动态修正这块内存的call,jmp对应的offset(相对值), 然后给原始函数做个inline hook, 跳到新函数去执行, 新函数做一些过滤判断后, 调用新分配的内存保存的机器码, 想当于调用原始函数。这种技术在实战中没什么用, 拓展下思路还是不错的。#include #include #include #inc转载 2012-10-30 21:08:14 · 1170 阅读 · 0 评论 -
linux hook 初探
下面是一段代码可以实现系统调用的替换 linux 内部的系统调用 sys_mkdir :(code.c) 系统调用作为一个数组放在一个系统调用表sys_call_table之中, 由于sys_call_table在不同主机上的地址是不一样的。我们的直接赋值的办法是行不通的。那么我们就需要通过其他方式获取了。 具体的获取思路如下:每一个系统调用都是通过int 0x80中断进入核原创 2012-06-21 20:24:12 · 806 阅读 · 0 评论 -
修改内核页表问题
以前一直以为内核代码段的保护属性是 可执行|只读的最近才发现内核代码段竟然是可写的现在我想把内核代码段设置成为不可写的,做了个实验,修改了3G+1M ~ 3G+4M这段地址对应的页表项但是这个模块一加载就死机,/var/log/messages也没有任何出错信息这是哪里的问题呢?内核是i386,没有PAE。#include #include #define转载 2012-09-04 10:56:42 · 1348 阅读 · 0 评论 -
get_user_pages — 获取用户区进程使用内存的某个页
int get_user_pages ( struct task_struct * tsk, ///// the task_struct to use for page fault accounting, or NULL if faults are not to be recorded. 一般选择current struct mm_struct * m翻译 2012-07-31 21:18:36 · 3246 阅读 · 0 评论 -
EPT in kvm
1. Overview of EPTCPU will use both guest page table and extended page table. The address of EPT is set by the function vmx_set_cr3.1753 static void vmx_set_cr3(struct kvm_vcpu *vcpu, unsigned原创 2012-07-11 18:59:39 · 2591 阅读 · 0 评论 -
vmalloc设计的思考
0. vmalloc代码倒是不难,但是就不是不太明白它的设计思想。悲剧,到底是读代码 与 设计并写代码 差距就是很大,很难体会到设计者当初思维过程。我们只能从给出的文档以及源代码来逆向推断设计思路,感觉本末倒置了。有些细节及美妙灵感即使是读代码好几遍,也不如亲身去写一次考虑周全。 1.就从vmalloc来说,难得在ULK中找到点ideal:We already转载 2012-07-10 16:51:58 · 534 阅读 · 0 评论 -
阻塞进程(使用等待队列)
如果有人让你做你一时做不到的事情你会怎么办呢?如果你是个人被另一个人打扰,你唯一可以做的就是对他说:“现在不行,我很忙,走开!”但是如果你是内核模块,被进程打扰,你就有另一种选择。你可以让这个进程去挂起直到你可以为之提供服务。毕竟,进程是在不停的被内核挂起或唤醒(这就是多个进程看上去同时在一个处理器上运行的方法)。 这个内核模块就是一个这样的例子。这个文件(称作/proc/s转载 2012-06-21 14:33:00 · 1380 阅读 · 0 评论 -
使用/proc测试
下面所示清单为一个简单的 /proc 使用范例,这段代码在模块加载函数中创建 /proc 文件节点,在模块卸载函数中撤销 /proc 节点,文件中保存了一个32位无符号整形值。#include #include #include static struct proc_dir_entry *proc_entry;static unsigned long val = 0x12原创 2012-06-19 19:16:39 · 746 阅读 · 0 评论 -
替换 printk 函数
在实际应用中我们希望把消息送到任何一个 tty。这在内核模块被释放时确认错误是很重要的,因为它将会在所有内核模块中使用。这样做的方法是使用一个指向当前运行任务的指针,来得到当前任务的 tty 结构。然后,我们到 tty 结构里寻找一个指向写串函数的指针,我们用这个函数把一个串写进 tty。/* printstr.c - send textual output to the tty you'原创 2012-06-22 14:12:20 · 475 阅读 · 0 评论 -
内核模块参数示例
我们可以用“module_param(参数名,参数类型,参数读/写权限)”为模块定义一个参数,例如下列代码定义了一个整型参数和一个字符指针参数:static char *book_name = "Linux Driver";static int num = 4000;module_param(num, int, S_IRUGO);module_param(book_na转载 2012-06-20 10:18:24 · 694 阅读 · 0 评论 -
MOD_INC_USE_COUNT和MOD_DEC_USE_COUNT
2.4内核中,模块自身通过 MOD_INC_USE_COUNT, MOD_DEC_USE_COUNT宏来管理自己被使用的计数。 2.6内核提供了更健壮、灵活的模块计数管理接口 try_module_get(&module), module_put(&module)取代2.4中的模块使用计数管理宏;模块的使用计数不必由自身管理,而且在管理模块使用计数时考虑到 SMP与PREEMPT机制的影响转载 2012-06-19 21:12:12 · 1865 阅读 · 0 评论 -
测试ioctl函数
在linux设备驱动开发详解中源码:http://blog.csdn.net/gudujianjsk/article/details/7656042makefile 脚本:KVERS = $(shell uname -r)obj-m += globalmem.oEXTRA_CFLAGS=-g -O0build:kernel_moduleskernel_modules原创 2012-06-19 21:04:22 · 1029 阅读 · 0 评论 -
kernel hacker修炼之道之内核虚拟化 KVM/QEMU——Guest OS, Qemu
这里主要介绍基于x86平台的Guest Os, Qemu, Kvm工作流程,如图,通过KVM APIs可以将qemu的command传递到kvm:1.创建VMsystem_fd = open("/dev/kvm", xxx);vm_fd = ioctl(system_fd, KVM_CREATE_VM, xxx);2.创建VCPUvcpu_fd = kvm_vm_ioctl(v转载 2012-08-06 20:40:46 · 2002 阅读 · 0 评论 -
Linux Memory Management – Virtual Memory and Demand Paging
Memory management is one of the most complex activity done by Linux kernel. It has various concepts/issues associated with it. This article is part of our on-going UNIX kernel overview series.转载 2012-07-23 11:16:29 · 990 阅读 · 0 评论 -
How QEMU fakes GPA to guest OS
As the article http://shangavin.7ta.cn/Article/1617946/229307 indicates,QEMU has to supply fake physical address to the upper guest OS. The page cooresponding to the faked physical address is called转载 2012-07-20 18:18:29 · 919 阅读 · 0 评论 -
抒写Linux 2.6.x下内核级后门程序
再转一篇 wzt 大牛的 linux 内核的文章: 创建时间:2008-08-31文章属性:原创文章提交:wzt (wzt_at_xsec.org)抒写Linux 2.6.x下内核级后门程序Author: wztEMail: wzt@xsec.orgSite: http://www.xsec.org & hhtp://hi.baidu.com/wzt85转载 2012-09-04 21:30:10 · 898 阅读 · 0 评论 -
qemu-kvm下memory hotplug 分析
在 http://www.seabios.org/pipermail/seabios/2012-March/003496.html中有这么一段> > Qemu-kvm sets the upper bound of hotpluggable memory with "maxmem = [totalmemory in> > MB]" on the command line. Maxmem原创 2012-08-22 19:07:29 · 2011 阅读 · 0 评论 -
CONFIG_HOTPLUG_PCI: Support for PCI Hotplug
General informationsThe Linux kernel configuration item CONFIG_HOTPLUG_PCI has multiple definitions:Support for PCI Hotplug (EXPERIMENTAL) found in drivers/pci/hotplug/KconfigThe configuration i转载 2012-08-22 19:56:59 · 1711 阅读 · 0 评论 -
kvm: hardware assisted paging
CPU vendors began adding hardware virtual memory management unit (vMMU) support circa 2009, with Intel's VT-x (vmx flag) addition. Historically, the guest's physical (gpa) to host physical (hpa) addr转载 2012-07-30 11:24:17 · 885 阅读 · 0 评论 -
Intel内存虚拟化技术分析
VPID 类似ASID, ASID用以区分不同进程的地址空间,切换时不用刷新TLB。VPID用来区分不同的虚拟处理器地址空间,虚拟机切换时不用刷新TLB。VMM为每个VMCS分配一个唯一的VPID,在VMCS中将Enable VPID置1就可以启用该功能。Extended page table(EPT) 页表遍历方式 硬件支持的情况下,当VMENTRY转载 2012-07-31 21:02:08 · 1328 阅读 · 0 评论 -
kvm: virtual x86 mmu setup
One of the initialization steps that KVM does when a virtual machine (VM) is started, is setting upthe vCPU's memory management unit (MMU) to translate virtual (lineal) addresses into physical ones转载 2012-07-30 10:55:43 · 1239 阅读 · 0 评论 -
Kernel panic 信息分析方法
Kernel panic 信息分析方法 Oops: 0000 [#1] PREEMPT SMP Modules linked in: capidrv kernelcapi isdn sl转载 2012-07-25 17:46:57 · 755 阅读 · 0 评论 -
Intel EPT硬件辅助性能评价
Introduction For the majority of common workloads(工作负载), performance in a virtualized environment is close to that in a native environment. Virtualization does create some overheads, howeve转载 2012-07-23 19:52:26 · 1876 阅读 · 0 评论