皮皮网
皮皮网
python字典源码

【python源码如何阅读】【idea找源码】【c 源码阅读】linux 0.11 内核源码下载_linux内核源码在线阅读

时间:2024-11-13 11:24:39 分类:百科 编辑:裂变源码交易
1.lbochs运行Win11
2.Linux0.11main函数启动初始化(二)
3.linux0.11源码分析-fork进程
4.如何从官网获取各个版本Linux内核的内内核源码

linux 0.11 内核源码下载_linux内核源码在线阅读

lbochs运行Win11

       ã€ä¸‹è½½Linux0.系统包,本链接的下载包已包含Bochs软件。

       ç‚¹å‡»æ‰“开链接http://oldlinux.org/Linux.old/bochs/linux-0.-devel-.zip

       2、解压linux-0.-devel-.zip,目录结构如下图所示:

       è¿™é‡ŒçœŸæ­£ä½¿ç”¨åˆ°çš„文件为:Bochs-2.1.1.exe 、bochsrc-hd.bxrc、bootimage-0.、bootimage-0.-hd、hdc-0..img

       3、点击Bochs-2.1.1.exe进行安装。

       4、安装完毕后,将所有linux-0.-devel-下的文件,拷贝到刚才安装bochs下的根目录。原目录如下:

       æ‹·è´è¿‡åŽç›®å½•ä¸ºï¼š

       5、拷贝完成后,运行bochsrc-hd.bxrc,若安装成功,打开即能见到如下界面:

       è¿™å·²ç»æ˜¯xPC模拟器上,搭建完成的Linux操作系统。建立linux操作平台命令,就能操作Linux。由于学习操作系统需要,我们需要在Linux下,编译操作系统以及完成简单的源码修改,从而达到理解Linux内核的能力。接下来,主要演示Linux内核源码的修改,以及内核的编译过程。由于该Linux版本的原因,我们还需要对代码做出调整,方能成功编译。

       å†…核编译过程:

       1、进入/usr/src/linux 目录下,键入命令 cd ../src/linux ,如下图所示:

       2、进行编译,键入命令 make clean 和 make后。

       è‹¥å‡ºçŽ°å¦‚下所示错误:gcc-cc1: Invalid option "string-insns"。这是需将Linux目录下的Makefile文件中的-mstring-insns参数去掉。除此之外,每个子目录fs,lib,kernel以及kernel目录下的三个驱动程序子目录(math, blk_drv, chr_drv)的Makefike当中的-mstring-insns参数去除掉。此处只演示根目录下的Makefile文件修改。

       3、依次修改:/linux/Makefile、/linux/fs/Makefile、/linux/lib/Makefile、

       /linux/kernel/Makefile、/linux/kernel/math/Makefile、/linux/kernel/blk_drv/Makefile、/linux/kernel/chr_drv/Makefile文件。linux目录下,键入:vi Makefile。如下图所示:

       æ‰¾åˆ°æ–‡ä»¶ä¸­çš„-mstring-insns 参数,并删去保存。

       4、到/usr/local/bin中找到文件ar,并把ar 改名为gar,键入命令:mv ar gar。如下图所示:

       5、回到linux 目录下,重新键入make clean以及 make,完成内核的编译链接。

       å‡ºçŽ°ä¸Šå›¾æç¤ºï¼Œå³è¡¨é¢ç¨‹åºç¼–译成功。完成编译后,便可以开始修改内核源码,从而达到扩展操作系统功能以及学习操作系统的目的。这里,我们简单修改下,linux操作系统开机启动项bootsect.s源码,让开机后输出个性化的字符串。

       6、进入/usr/src/linux/boot目录,修改bootsect.s源码,保存并退出。

       ! Print some inane message

       mov ah,#0x ! read cursor pos

       xor bh,bh

       int 0x

       mov cx,#

       mov bx,#0x ! page 0, attribute 7 (normal)

       mov bp,#msg1

       mov ax,#0x ! write string, move cursor

       int 0x

       msg1:

       .byte ,

       .ascii "Loading system ...this is create by demon"

       .byte ,,,

       .org

       7、修改完成后,在linux目录下,重新键入make命令,完成编译。

       8、make成功后生成引导启动映象文件Image。若需要输出这个Image文件, 可以首先备份bootimage-0.-hd文件, 然后使用下面命令就会把bootimage-0.-hd替换成新的引导启动文件,键入命令:dd bs= if=Image of=/dev/fd0。如下图所示:

       9点击reset重启Linux操作系统。如下图所示:

Linux0.main函数启动初始化(二)

       在Linux0.的初始化过程中,main函数起到关键的核源启动作用。首先,码下sti指令被调用,源码这表示中断功能的线阅开启,模块初始化工作至此完成。内内核python源码如何阅读

       接着,核源move_to_user_mode()函数被执行,码下这标志着程序从内核模式切换至用户模式,源码即执行任务0,线阅并通过iret指令实现切换。内内核iret指令前,核源数据被压入堆栈,码下idea找源码执行后,源码数据根据标志位被弹入相应的线阅寄存器。这里需要理解GDT、LDT、GDTR、LDTR和保护模式寻址方式,具体可以参考相关教程。

       在切换到用户模式后,所有的进程ss0寄存器被初始化为0x,esp0则设置为PAGE_SIZE+(long)p。理解这一操作对后续学习至关重要。而cs选择子则分别为0x和0x0f,c 源码阅读分别对应ss和cs寄存器的初始化。cs选择子从ldt的第1项开始,即进程0的代码段。

       进程0主要由ldt段表示,包括代码段的展开与详细内容分析。该段基址为地址0,段限长为kb,DPL为3,说明优先级为用户。

       接下来,进程0回到main函数。fork函数执行后,2048源码 mfc进程0回到main函数中。

       init函数在main()中已经进行系统初始化,包括内存管理和硬件设备驱动程序等。init()函数运行在任务0第一次创建的子进程中,对bin/sh程序的环境进行初始化。

       setup系统调用在目录kernel/blk_drv/hd.c中实现,对应函数为sys_setup()。此函数主要设置硬盘分区结构、RAMDISK,并挂载安装文件系统。

       在执行/bin/sh后,shell程序启动,apk ui源码至此,Linux0.的初始化过程完成。用户可通过控制台输入命令与内核交互。printf函数产生格式化信息并输出至标准输出设备stdout,即屏幕显示。接下来,将详细分析进程管理。

linux0.源码分析-fork进程

       在操作系统中,Linux0.源码中的fork函数执行流程分为启动和系统调用两个阶段。启动阶段首先在init/main.c中执行init用于启动shell,让用户执行命令。

       在include/unistd.h中定义了宏,表示将__NR_fork的值复制给eax寄存器,并将_res与eax绑定。使用int 0x中断后,系统调用函数system_call被调用,从sys_call_table中找到对应的函数执行。fork函数执行时,操作系统会在内核栈里保存相关寄存器,准备中断返回。

       接着,操作系统通过int调用system_call,在kernel/system_call.s中执行call _sys_call_table(,%eax,4)指令。内核栈中,因为是段内跳转,所以cs不需要入栈。ip指向call指令的下一句代码。执行call指令进入系统调用表。

       在includ/linux/sys.h中,系统调用表是一个数组,根据eax即系统函数编号找到对应的函数执行。对于fork,__NR_fork值2被放入eax寄存器,%eax * 4找到sys_fork。执行sys_fork后,调用find_empty_process函数找到可用的进程号,并放入eax寄存器返回。

       接着,系统调用执行copy_process函数建立新进程结构体并复制数据。新进程的ip出栈,执行完copy_process后,系统调用返回,内核栈状态改变。此阶段最后通过iret指令弹出寄存器,恢复中断前状态。

       总结,fork函数通过复制当前进程结构体、处理信号并初始化新进程,实现父进程与子进程的创建与共享。子进程返回值为0,父进程返回新子进程的pid。通过fork函数的执行,操作系统能够高效地创建进程,实现多任务处理。

如何从官网获取各个版本Linux内核的源码

       访问网址 https://www.kernel.org

       在页面上找到HTTP协议旁的"Location"链接,点击它或直接访问 https://www.kernel.org/pub

       浏览器将展示pub/目录下的所有文件。在此页面上,找到"linux"并点击,接着点击"kernel"即可浏览到各个版本的Linux内核源码。

       特别地,pub/linux/kernel目录下还包含一个名为"Historic"的子目录,这里收藏了如linux-0.和linux-0.等早期版本的源码。

本文地址:http://04.net.cn/news/47a67799275.html

copyright © 2016 powered by 皮皮网   sitemap