一个简单的循环多道程序内核代码 实现

张韩 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

首先。解读一下程序的核心代码

void __init my_start_kernel(void)

{

int i = 0;

while(1)

{

i++;

if(i%100000 == 0)

printk(KERN_NOTICE "my_start_kernel here  %d \n",i);

}

}

这是内核代码的启动函数。C语言编写。循环部分是每运行100000次。输出一条语句。

void my_timer_handler(void)

{

printk(KERN_NOTICE "\n>>>>>>>>>>>>>>>>>my_timer_handler here<<<<<<<<<<<<<<<<<<\n\n");

}

这段代码是被时间中断时调用。每次被调用的时候输出一条语句。

然后对编写的代码进行整合,然后整合到Linux Kernel-3.9.4中。

或者直接下载mykernel_for_linux3.9.4sc.patch

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0NzQ1Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

然后下载linux kernel-3.9.4

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0NzQ1Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

下载完毕后解压。

进入解压后的目录:

  • cd linux-3.9.4

把自己的代码编译到linux-3.9.4中

  • patch -p1 < ../mykernel_for_linux3.9.4sc.patch
  • make allnoconfig
  • make

最后安装QEMU,执行kernel。



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0NzQ1Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

最后。执行内核

执行结果。终端的显示事实上在不断变化。截当中一段如图:(假设闪烁太快,能够把函数中的数值调大来减慢变化速度)

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-12-17 12:49:11

一个简单的循环多道程序内核代码 实现的相关文章

对一个简单的时间片轮转多道程序内核代码的浅析

这周在网易云课堂上学习了<Linux内核分析>——操作系统是如何工作的.本周学习内容有利用 mykernel 实验模拟计算机平台和利用 mykernel 实验模拟计算机硬件平台两部分内容. 这是实验楼中 mykernel 平台运行的结果: 下面是一段一个简单的时间片轮转多道程序内核代码: 1 /* 2 * linux/mykernel/myinterrupt.c 3 * 4 * Kernel internal my_timer_handler 5 * 6 * Copyright (C) 201

Linux内核分析—完成一个简单的时间片轮转多道程序内核代码

---恢复内容开始--- 20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 实验要求: mykernel实验指导(操作系统是如何工作的) 运行并分析一个精简的操作系统内核,理解操作系统是如何工作的 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 然后cd

完成一个简单的时间片轮转多道程序内核代码(二)

完成一个简单的时间片轮转多道程序内核代码 重要汇编代码分析 asm volatile( "movl %1,%%esp\n\t" "pushl %1\n\t" "pushl %0\n\t" "ret\n\t" "popl %%ebp\n\t" : : "c" (task[pid].thread.ip),"d" (task[pid].thread.sp) ); 保存恢复进

Linux内核分析:完成一个简单的时间片轮转多道程序内核代码

PS.贺邦   原创作品转载请注明出处  <Linux内核分析>MOOC课程    http://mooc.study.163.com/course/USTC-1000029000 1.mykernel实验指导(操作系统是如何工作的) 使用实验楼虚拟机打开shell输入下列代码 1 cd LinuxKernel/linux-3.9.4 2 qemu -kernel arch/x86/boot/bzImage 可以看到初始的内核运行情况如下: 内核不停的执行my_start_kernel(),每

基于mykernel的一个简单的时间片轮转多道程序内核代码分析

学号023作品 本实验资源来源: https://github.com/mengning/linuxkernel/ 一.观察简易操作系统 此处使用实验楼的虚拟机打开终端 cd LinuxKernel/linux-3.9.4 rm -rf mykernel patch -p1 < ../mykernel_for_linux3.9.4sc.patch make allnoconfig make #编译内核请耐心等待 qemu -kernel arch/x86/boot/bzImage 在QEMU窗口

第二周:一个简单的时间片轮转多道程序内核代码及分析

吕松鸿+ 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1. 计算机工作的三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能: enter pushl %ebp movl %esp,%ebp lea

完成一个简单的时间片轮转多道程序内核代码

王康 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 分别是1 存储程序计算机工作模型,cpu执行程序的基础流程: 2 函数调用堆栈:各种寄存器和存储主要是为了指令的传取值,通过eip,esp,eax,ebp和程序内存的分区,搭配push pop call return leave等一系列指令完成函数调用操作. 3 中断:多道批程序! 在复习一下上一讲的几个重要指令

一个简单的时间片轮转多道程序内核代码分析 (学号后三位418)

一.基于mykernel的基本Linux内核分析 1.我们按照老师在github上给出的步骤在实验楼上启动最高小内核,可以看到如下现象 在窗口中我们可以看到一个内核以及运行起来了,比较简单的内核,只时不停的输出一些字符串,>>>>>>my_time_handler here<<<<<<<和my_start_kernel here和一些计数.这时因为我们并没有加入其他的代码,再次基础上我们可以加入我们主机要实现的功能. 在myin

一个简单的时间片轮转多道程序内核代码 的实现

张韩 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 首先,解读一下程序的核心代码 void __init my_start_kernel(void) { int i = 0; while(1) { i++; if(i%100000 == 0) printk(KERN_NOTICE "my_start_kernel here  %d \n",i); } } 这