首页 > 其他 > 详细

基于mykernel 2.0编写一个操作系统内核

时间:2020-05-12 21:50:20      阅读:63      评论:0      收藏:0      [点我收藏+]

一.配置实验环境

首先,参考GitHub上的文档,搭建实验环境,这里用的是虚拟机上的Ubuntu18.04,搭建环境时用到的命令如下:

wget https://raw.github.com/mengning/mykernel/master/mykernel-2.0_for_linux-5.4.34.patch
sudo apt install axel
axel -n 20 https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.34.tar.xz
xz -d linux-5.4.34.tar.xz
tar -xvf linux-5.4.34.tar
cd linux-5.4.34
patch -p1 < ../mykernel-2.0_for_linux-5.4.34.patch
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev
make defconfig # Default configuration is based on ‘x86_64_defconfig‘
make -j$(nproc) 
sudo apt install qemu # install QEMU
qemu-system-x86_64 -kernel arch/x86/boot/bzImage

  

虽然文档上是这么写的,但我个人遇到了些问题,比如wget不成功,总是显示failed connect,不得已,只能采用git clone。用axel下载的时候也比较慢,需要有耐心。执行qemu-system-x86_64 -kernel arch/x86/boot/bzImage启动程序,截图如下:

技术分享图片

 

 

二.基于mykernel 2.0编写一个操作系统内核并进行分析 

1.创建mypcb.h文件:vim mypcb.h

mypcb.h用来定义进程控制块。其中ip为指令指针,sp为栈顶指针,pid为进程id。state为进程当前状态,-1代表阻塞态,0代表可运行态,>0代表暂停状态

技术分享图片

 

 2.修改mymain.c中的my_start_kernel函数,并且在mymain.c中添加my_process函数。My_process用来模拟进程,进行调度,完成进程之间的切换。

技术分享图片

 

 技术分享图片

 

 3.修改myinterrupt.c,其中的my_timer_handler用来记录时间片,当时间片消耗完时完成调度。并实现my_schedule(void)函数。

技术分享图片

 

 技术分享图片

 

 4.重新编译,结果如下

make clean
make

技术分享图片

 

 技术分享图片

 

基于mykernel 2.0编写一个操作系统内核

原文:https://www.cnblogs.com/nwpuustc/p/12878380.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!