- 博客(41)
- 收藏
- 关注
原创 x86架构下Linux中断处理之数据结构定义irq_desc等
<include/linux/irqdesc.h>/** * struct irq_desc - interrupt descriptor * @irq_common_data: per irq and chip data passed down to chip functions * @kstat_irqs: irq stats per cpu * @handle_ir...
2019-10-12 11:32:46
594
原创 在线看Linux源码的网站
1、可快速搜寻函数和全局变量定义及调用https://elixir.bootlin.com/linux/latest/source2、结合Linux源码进行讲解https://www.cntofu.com/book/114/Booting/linux-bootstrap-1.md
2019-10-08 16:58:31
3314
原创 x86架构下Linux中断处理之early_irq_init
本章主要分析early_irq_init()。1、代码流:start_kernel()–>early_irq_init();2、early_irq_init()详解<kernel/irq/irqdesc.c># define IRQ_BITMAP_BITS (NR_IRQS + 8196)static DECLARE_BITMAP(allocated_irqs, IRQ...
2019-09-29 15:04:45
625
原创 x86架构下Linux中断处理之do_IRQ
参考文档:(1)http://blog.chinaunix.net/uid-23769728-id-3079164.html(2)https://blog.csdn.net/yiyeguzhou100/article/details/49887975第四部分:中断的处理过程-C语言部分中断处理的整体框图按照x86处理器在外部中断发生时的硬件逻辑,在do_IRQ被调用时,处理器已经屏...
2019-09-25 17:32:42
2132
原创 Linux PER_CPU变量的理解
x86架构,64位长模式下。// <arch/x86/include/asm/percpu.h >#define __percpu_seg gs#define PER_CPU_VAR(var) %__percpu_seg:var1、定义静态per-cpu变量通过DEFINE_PER_CPU和DECLARE_PER_CPU宏在内核源码中定义和声明,详见如下。// ...
2019-09-19 20:06:25
1675
原创 x86 SWAPGS
在中断或异常处理的entry代码处, 会执行SWAPGS切换到kernel GS, GS.base 是存储了中断stack 的地址。1、关于swapgs指令,手册描述如下:When FS and GS segment overrides are used in 64-bit mode, their respective base addresses are used in the linear...
2019-09-19 16:25:33
3395
原创 x86实模式下访问32位寄存器/指令
1、在16位实模式下,默认访问数据的大小是8位或者16位的;控制转移和内存访问时,偏移量也是16位的;2、处理器在16位实模式下运行时,可以使用32位的寄存器,执行32位运算;当处理器运行16位实模式下,既然把所有指令都看成16位的,那么怎么使用32位的寄存器,执行32位的运算呢?答案是利用指令前缀0x66和0x67。指令前缀0x66用来选择非默认值的操作数大小,0x67用来选择非默认值的地...
2019-09-18 15:19:36
965
1
原创 x86权限比较规则(CPL/DPL/RPL)
1、定义x86架构下定义了4个特权级,分别是0~3。其中,0特权级最高,3特权级最低。CPL:Current Privilege Level,当前特权级,由当前运行代码段段选择子CS.RPL位域决定;DPL:Descriptor Privilege Level,描述符特权级,由待访问的数据段或代码段描述符的DPL位域决定;RPL:Request Privilege Level,请求特权级,...
2019-09-12 15:09:27
1985
原创 x86架构下Linux中断IDT建立及中断处理过程之1
// arch/x86/kernel/irqinit.cvoid __init init_IRQ(void){ int i; /* * On cpu 0, Assign ISA_IRQ_VECTOR(irq) to IRQ 0..15. * If these IRQ's are handled by legacy interrupt-controllers like PIC,...
2019-09-05 19:03:36
1259
原创 x86架构下Linux初始化流程中GDT、IDT建立和切换
x86架构下Linux初始化流程中GDT建立和切换1、代码流:_start()–>start_of_setup()–>main()–>go_to_protected_mode()–>protected_mode_jump();函数所属文件:arch/x86/boot/head.S: _start()/start_of_setup(); //注:16位引导协议入口点...
2019-09-03 19:32:59
1973
原创 x86传参ABI
32位模式下通过栈传参;64位模式下前6个参数通过寄存器传参,6个以上的参数通过栈传参;寄存器使用的顺序为:%rdi:第1个参数;%rsi:第2个参数;%rdx:第3个参数;%rcx:第4个参数;%r8:第5个参数;%r9:第6个参数;特殊用法fastcallfastcall调用约定和stdcall类似,它意味着:函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx...
2019-09-02 15:17:51
1106
转载 KVM和Qemu的关系
转载于 https://zhidao.baidu.com/question/1707847266583910140.html不同的基于KVM的虚拟化平台,可能会采用不同的虚拟化组件,目前主流的采用QEMU-KVM组件,但在不同的产品里版本有所不同,功能也有差异,下面就几个概念进行梳理下KVM:Kernel-Based Virtual Machine 基于内核的虚拟机,是Linux内核的一个...
2019-08-28 10:45:05
11878
原创 x86 mov和movabs区别
1、mov和movabs指令格式 MOV S, D。表示把S传送入D。MOV类指令,movb,movw,movl以及movq。分别表示传送不同长度的操作数。x86-64加了一条限制,2个操作数都位内存的引用。所以当内存位置复制到另外一个内存位置时,只能先把内存位置引用的值先传送给一个寄存器,然后在从该寄存器传送至另外一个内存位置。特别之处,movq和movabsq的区别:1、如果操作数是...
2019-08-23 15:14:33
9642
3
原创 gcc编译选项fpic/fPIC, fpie/fPIE的说明
-shared; Create a shared library /* 创建共享库时需要添加的编译选项 */因为共享库的代码都是位置无关的,所以通常还需要添加编译选项-fPIC。-fPIC; Generate position-independent code if possible (large mode)-fpic; Generate pos...
2019-08-20 15:11:07
13239
转载 InitRamdisk & InitRamfs,gzip & cpio
转载于 https://blog.csdn.net/ooonebook/article/details/52624481一、rootfsrootfs,Root FileSystem,是指根文件系统,对应/目录节点。rootfs又分为虚拟rootfs和真实rootfs。虚拟rootfs由内核自己创建和加载,仅仅存在于内存之中(后续的InitRamfs也是在这种基础上实现),其文件系统是t...
2019-07-08 11:13:34
1128
原创 Qemu桥接配置
#!/bin/bash#配置虚拟网桥的操作ifconfig eth0 down # 先关闭eth0接口brctl addbr br0 # 增加一个虚拟网桥br0brctl addif br0 eth0 # 在br0中添加一个接口eth0brctl stp br0 off ...
2019-07-04 20:40:44
1361
原创 Ubuntu屏幕分辨率调整
CRT.sh#!/bin/bashcvt 1440 900xrandr --newmode “1440x900” 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsyncxrandr --addmode VGA-1 1440x900xrandr --output VGA-1 --mode 1440x900exit
2019-07-04 20:40:15
461
原创 Linux内核之printk打印级别调整
printk打印级别的相关代码如下:/* include/linux/printk.h *//* printk's without a loglevel use this.. */#define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT/* We show everything that is MORE import...
2019-07-02 17:03:45
4446
1
转载 Linux内核调测之Qemu+Gdb
转载于 https://blog.csdn.net/jasonLee_lijiaqi/article/details/809679121、编译源码make menuconfig执行make menuconfig时报错缺少库文件,需要安装依赖库sudo apt-get install aptitude sudo aptitude install libncurses5-devs...
2019-06-27 14:55:52
1643
转载 Linux内核构建过程总结
转载于 https://book.2cto.com/201309/33428.html前面我们简要讨论了内核映像的构建,内核映像的构建过程大体上可以概括为“三次编译链接,一次组合”。(1)第一次编译链接kbuild分别编译各个子目录下的目标文件,如built-in.o、lib.a(如果有)等,然后将他们链接为ELF格式的vmlinux,并存放在顶层目录中。这一步相当于构建有效载荷。(2...
2019-06-25 15:10:47
436
转载 Linux内核构建之bzimage
转载于 https://book.2cto.com/201309/33428.html组合的规则定义在平台的“顶层”Makefile中:/arch/x86/Makefile:boot := arch/x86/boot...KBUILD_IMAGE := $(boot)/bzImage...bzImage: vmlinux... $(Q)$(MAKE) $(build)=...
2019-06-25 12:01:52
4538
转载 Linux内核构建之vmlinux.bin
转载于 https://book.2cto.com/201309/33426.html构建vmlinux.bin的规则在arch/x86/boot目录下的Makefile中:/arch/x86/boot/Makefile:OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S$(obj)/vmlinux.bin: $(...
2019-06-25 11:51:50
2221
转载 Linux内核构建之setup.bin
转载于 https://book.2cto.com/201309/33427.html构建setup.bin的规则也在/arch/x86/boot目录下的Makefile中:/arch/x86/boot/Makefile:setup-y += a20.o bioscall.o cmdline.o copy.o cpu.o cpuflags.o cpucheck.osetup-y +...
2019-06-25 11:22:22
927
原创 Ubuntu下安装KVM虚拟机
(1)KVM安装sudo apt-get install qemu kvm qemu-kvm qemu-system virtinst python-libvirt virt-viewer virt-managerP.S. 因为我的环境原先就安装好了qemu工具,因而直接安装的虚拟化工具virt,后续启动的时候碰上了一些莫名其妙的错误。如果碰上一些莫名其妙的错误,百度不到的错误,有可能将qe...
2019-05-14 19:55:27
2271
原创 Linux下常用操作记录
一/ 清理内存echo 1 > /proc/sys/vm/drop_cachesipcrm -M 0xabababab -M 0x55555555 -M 0x77777777二/ 查看进程运行在哪个核上:方法1:ps -eF,其中PSR就是(processor that process is currently assigned to.)方法2:ps -eF|grep hellWo...
2019-04-28 11:09:28
738
原创 git操作整理
一、基本操作流程(1)git pull 对齐到最新版本;(2)修改合入代码;(3)git status 查看上述修改对应的文件是否正确;(git diff可以查看具体文件差异)(4)git add <文件名>添加要修改的文件;(git add . 表示添加所有修改)(5)git commit -m"修改合入说明" 提交修改的文件到本地;(6)git push 将上述comm...
2019-04-28 11:07:36
157
原创 常用软件工具整理
一、代码编辑1、SourceInsight;2、Eclipse;3、VSCode;4、Sublime Text;二、文本编辑1、NotePad++;2、UltraEdit;三、比较工具1、Beyond Compare;2、MELD;四、FTP工具1、FileZilla;2、HomeFtpServer;五、串口工具1、MobaXterm;2、SecureCRT;六、...
2019-04-28 11:07:12
476
转载 grub源码分析之grub-mkimage
转载于”https://blog.csdn.net/conansonic/article/details/78760614“”https://blog.csdn.net/conansonic/article/details/78937331“本章开始分析grub-mkimage的源码,首先来看grub-mkimage文件的生成过程,从Makefile开始看。grub-mkimage目标定...
2019-04-18 19:17:55
3176
原创 Grub编译安装至MBR过程
Ubuntu环境下修改grub源码后重新编译安装过程如下:1、grub官网下载源码,并解压;2、进入主目录后执行 ./configure 【相应配置选项】;3、make; 【编译源码】4、sudo make install; 【安装grub工具到系统】至此grub已经安装完毕,但是生成的boot.img、core.img还未安装至硬盘相应位置。需要继续执行如下指令,进入上述编译目录...
2019-04-16 20:02:59
735
转载 链接器预定义变量_etext,_edata,_end
转载于 ”https://m.zol.com.cn/article/1271513.html“在链接过程中,链接器ld和ld86会使用变量记录下执行程序中每个段的逻辑地址。因此在程序中可以通过访问这几个外部变量来获得程序中段的位置。链接器预定义的外部变量通常至少有etext、_etext、edata、_edata、end和_end。变量名_etext和etext的地址是程序正文段结束后的第...
2019-04-12 10:13:52
3951
转载 grub源码分析之startup.S
转载于 “https://www.cnblogs.com/silmerusse/p/3536456.html”kernel.img由startup.S以及一堆c文件编译而成。这是一个ELF格式的文件。(其实前面的boot.img、 diskboot.img、lzma_decompress.img本来也都是ELF格式文件,但是经过了精简。)kernel.img链接时,目标装载地址是0x900...
2019-04-09 19:32:16
592
转载 grub源码分析之kernel.img-Makefile
转载于 “https://blog.csdn.net/conansonic/article/details/78735401”《grub源码分析之boot.img-Makefile》https://blog.csdn.net/baidu_31504167/article/details/89136605kernel.img生成过程总结如下:【config配置如下】../configur...
2019-04-09 16:47:59
1121
原创 grub源码分析之lzma_decompress.img
同上篇boot.img生成过程类似,不再一一分析,仅记录编译过程log。第一步:根据startup_raw.S.S生成lzma_decompress_image-startup_raw.o文件。【编译过程log如下】gcc -DHAVE_CONFIG_H -I. -I…/…/grub-core -I… -Wall -W -DGRUB_MACHINE_PCBIOS=1 -DGRUB_MAC...
2019-04-09 10:41:14
638
原创 grub源码分析之diskboot.img
同上篇boot.img生成过程类似,不再一一分析,仅记录编译过程log。第一步:根据diskboot.S生成diskboot_image-diskboot.o文件。【编译过程log如下】gcc -DHAVE_CONFIG_H -I. -I…/…/grub-core -I… -Wall -W -DGRUB_MACHINE_PCBIOS=1 -DGRUB_MACHINE=I386_PC -m...
2019-04-09 10:28:16
462
转载 grub源码分析之boot.img-Makefile
转载于 “https://blog.csdn.net/conansonic/article/details/78667939”本章记录grub2中的boot.img是如何生成的,总结如下:第一步:根据boot.S生成boot_image-boot.o文件。首先在对应目录下创建.dirstamp文件,然后将boot.S汇编文件编译成boot_image-boot.o,在编译过程中,将依赖关...
2019-04-09 10:21:18
1093
1
转载 grub源码分析之startup_raw.S
转载于 “https://blog.csdn.net/conansonic/article/details/78534950”继续上一章的分析,0x8200地址处的代码定义在startup_raw.S文件中。grub-core/boot/i386/pc/startup_raw.S_start:LOCAL (base):ljmp $0, $ABS(LOCAL (codestart)).....
2019-04-08 15:53:36
392
转载 grub源码分析之diskboo.S
转载于“https://blog.csdn.net/conansonic/article/details/78482766”。第二个扇区的代码在grub源码的diskboot.S中,下面来看。grub-core/boot/i386/pc/diskboot.Sdiskboot start第一部分_start:pushw %dxpushw %siMSG(notification_...
2019-04-08 14:33:53
539
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人