设为首页 收藏本站
查看: 1422|回复: 0

[经验分享] 草稿本(1)总结

[复制链接]

尚未签到

发表于 2017-6-25 15:27:46 | 显示全部楼层 |阅读模式
linux之所以提供模块机制,是因为它本身为单内核,即优点为效率高,因为所有的内容都集成到了一起,但缺点是可扩展性和可维护性差,模块即填补这一缺陷,模块是一个为内核或其他内核模块提供使用功能的代码块,如实时文件系统,驱动程序等

用户态进入内核态的唯一入口:使用系统调用。int $0x80指令把用户态的执行模式转变为内核态,并将控制权交给系统调用过程的起点system_call()

kvm中与体系结构无关的代码位于virt/kvm下,与体系结构相关的分布于各个体系结构的kvm目录下,其他相关文件分布在include/asm或include/linux目录下,相关c文件分布在kernel目录下

kvm_x86_ops结构体包含了以下操作:vcpu创建与管理,中断管理,寄存器管理,时钟管理。在kvm_init初始过程中,通过调用kvm_arch_init给kvm_x86_ops赋值

客户机物理地址:为了让客户机os使用一个隔离的,从0开始连续的内存空间而引入的新的地址空间
客户机虚拟地址(GVA)到客户机物理地址(GPA):由客户机os完成
客户机物理地址(GPA)到宿主机物理地址(HPA):由VMM完成。为实现该步骤,VMM维护GPA到HPA的映射表。VMM截获后进行映射,每个客户机均有由VMM维护的这样一张表,使得VMM将客户机对应的HPA相互隔离开

VMPTRLD:将指定VMCS与物理CPU绑定
VMCLEAR:将物理CPU与VMCS解绑
VMREAD:读VMCS中索引指定的域
VMWRITE:写VMCS中索引指定的域

TDP(Two-dimentional Paging):两级页表结构,两级指虚拟机内部维护自己的GVA到GPA的页表结构,VMM负责维护EPT/NPT进行GPA到HPA的映射。与传统SPT(shadow page table)影子页表不同,SPT进行一级映射,即直接从GVA到HPA,虚拟机对页面的初次访问进行完整的地址翻译(GVA->GPA->HVA->HPA)并建立GVA到HPA的映射

pfn:host上物理页大小;gfn:guest上物理页大小。两者均为一个页帧
kvm中每一个页表页都对应一个数据结构kvm_mmu_page,通过kvm_mmu_get_page得到或新建一个页表页

MSR寄存器存放一些内核栈地址,执行入口地址等,在vmlaunch时可装载

vcpu创建流程:vmx_create_vcpu创建vcpu->分配vcpu标识->初始化虚拟寄存器组->初始化vcpu状态信息->初始化额外部件->初始化其他信息。在vcpu创建vmx_create_vcpu中进行mmu的初始化。

全局段描述符GDT存放在gdtr寄存器,局部段描述符LDT存放在ldtr寄存器

反向映射,由hva计算可得到gfn,具体见计算公式。通过gfn反向映射得到spte,将对应项设置为空,映射这个页的所有页表项,由gfn(客户机页框号)找到映射此页的spte

gcc内嵌汇编:
_asm_violate("movl %1,%0" : "=r"(result) : "m"(input))
_asm为asm别名
_violate_表示编译器不优化代码
movl %1,%0为汇编语句模板
顺序:result对应%0,input对应%1
=r :=表示为输出,r表示result与寄存器关联
m:表示与内存相联,汇编中目的与源不能同时为内存m
_asm_(汇编语句模板:输出:输入:破坏描述部分),最后一项即为会被修改的寄存器

解压命令:
tar -xvf file.tar 解压tar包
tar -xzvf file.tar.gz 解压tar.gz包
tar -xjvf file.tar.bz2 解压tar.bz2包
tar -xzvf file.tar.z 解压tar.z包

页框:把内存划分为长度为4KB或8KB的块,这种块就叫页框
VMCALL .byte 0x0f,0x01,0xc1 表示VMCALL指定的机器码

linux服务器版安装图形界面命令
apt-get install x-windows-sytem-core
apt-get install gdm
apt-get install ubuntu-desktop
apt-get install gnome-core

栈帧:ebp栈帧底部,帧指针(高地址),esp栈帧顶部,栈指针(低地址,函数返回地址)
举例:执行函数fun
初:pushl %ebp 将原来ebp压栈
movl %esp,%ebp 将esp给ebp,作为新的fun的ebp
末:movl %ebp,%esp,ebp给esp
popl %ebp  fun执行完后,出栈压入的ebp,此时esp与ebp恢复为初始

ubuntu找不到/var/log/messages方法:
由于其默认被注释,在/etc/rsylogd.d/50-default.conf中将 *.=info一直到 -/var/log/messages注释去掉
再重启服务sudo service rsyslog restore

gdb命令:
gdb x  查看内存地址中的值
gdb x/<n/f/u> <addr>
n为正整数,表示需要显示的内存单元个数
f为显示格式:x为十六进制,d为十进制,t为二进制
u为当前地址往后请求的字节数,默认为4 bytes,b为单字节,h为双字节,w为四字节,g为八字节

gdb:
c:继续调试,直到下一个断点或程序结束
s:执行一行代码,如果有函数调用,则进入该函数
n:执行一行代码,函数调用一并执行
si:类似s命令,但针对于汇编指令
ni:类似n命令,但针对于汇编指令
p:输出
i  b:查看断点
i  r:查看寄存器信息。最左为寄存器,中间为内存地址,最右为内存对应值
bt:查看堆栈信息

在一次函数调用中,栈依次压入:参数,返回地址,ebp,函数的局部变量

开机不能进入图形界面,修改/home下隐藏文件 .Xauthority,原为root权限,修改为本地用户即可
sudo chown cjx:cjx .Xauthority
find -name .Xauthor*
rm -rf .Xauthor*

通过qemu命令行创建虚拟机
1、创建img:dd if =/dev/zero of=xxx.img bs=1M count=8192 在当前目录下创建8G的img
2、安装iso:qemu-system-i386 -enable-kvm -m 1024 -smp 1 -boot order=dc -had /.../xxx.img -cdrom /.../xxx.iso

gdb开启虚拟机命令
gdb qemu-system-i386
set args --enable-kvm -m 1024 -boot menu=on xxx.img -vnc :13
r
vncviewer :13
autoreconf:not found解决方法
sudo apt-get install autoconf automake libtool

查看.o文件的反汇编代码
objdump -DS xxx.o > xxx.txt

图形界面以root登录:先设置root密码,sudo passwd root
修改/etc/lightdm/lightdm.conf
添加:user-session=ubuntu
greeter-show-manual-login=true
allow-guest=false

打开core dump
ulimit -a 可查看当前状态
ulimit -c :输出为0则表示关闭,输出为unlimited则打开
ulimit -c 1024设置大小为core ,1024KB

关闭DEP(堆栈不可执行),Stack Protector(栈保护)
gcc -fno -stack-protector -z execstack -o xxx xxx.c
关闭内存地址随机化
sudo -s
echo 0>/proc/sys/kernel/randomize_va_space
exit
打开内存地址随机化
echo 2>/proc/sys/kernel/randomize_va_space

vnc连接上没有桌面的解决方法
1、以root方式开启vnc
2、在/etc/.vnc/xstartup下修改unset

查找需要安装的包
apt-cache search zlib

pc_init_pci调用了pc_init1
pc_init1中pc_cpus_init和pc_memory_init分别为cpu和内存的初始化,函数位于pc_piix.c

查看libvirt是否启动
ps -le | grep libvirt *
重启libvirt
libvirtd -d

kvm中,kvm_arch_vcpu_setup后面的create_vcpu_fd为proc创建控制fd,让qemu使用
kvm创建qemu内存映射入口在kernel中kvm_vm_ioctl的case KVM_SET_USER_MEMORY_REGION。调用kvm_vm_ioctl_set_memory_region,kvm中用Kvm_memory_slot来维护用户空间地址映射

编译内核
make bzimage j4  用4个cpu编译,默认只用一个cpu

top显示进程运行状态,netstat显示网络连接

ioctl执行流保护
用户空间ioctl->SYSCALL_DEFINE3(ioctl,unsigned...)->do_vfs_ioctl->vfs_ioctl->陷入到VMM中的kvm_vcpu_ioctl。其在kvm的file_operations有定义.ioctl = kvm_vcpu_ioctl

make menuconfig时报错:'make menuconfig' requires the ncurses libraries
安装光标库相关包即可

1 [iyunv@localhost ]# yum list | grep ncurses
ncurses.x86_64                         5.7-3.20090208.el6               @anaconda-CentOS-201106060106.x86_64/6.0
ncurses-base.x86_64                    5.7-3.20090208.el6               @anaconda-CentOS-201106060106.x86_64/6.0
ncurses-libs.x86_64                    5.7-3.20090208.el6               @anaconda-CentOS-201106060106.x86_64/6.0
ncurses-devel.i686                     5.7-3.20090208.el6               base
ncurses-devel.x86_64                   5.7-3.20090208.el6               base
ncurses-libs.i686                      5.7-3.20090208.el6               base
ncurses-static.x86_64                  5.7-3.20090208.el6               base
ncurses-term.x86_64                    5.7-3.20090208.el6               base

2 查看已经安装的包

[iyunv@localhost ]#  rpm -qa | grep ncurses
ncurses-5.7-3.20090208.el6.x86_64
ncurses-base-5.7-3.20090208.el6.x86_64
ncurses-libs-5.7-3.20090208.el6.x86_64

3 只需再安装一个ncurses-devel.x86_64即可

[iyunv@localhost ]# yum install ncurses-devel.x86_64  -y

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-388034-1-1.html 上篇帖子: How to delete a VM with snapshots 下篇帖子: 5. 磁盘扩容
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表